sdm660-common: DeviceSettings: Refactor ClearSpeakerFragment code
- Removed unused imports - Proper resource release by using try-finally block - Added null checks for MediaPlayer methods - Remove audio parameter as its unused Change-Id: I7dc2ba7baf6e0193e13583a7454da296254d7333 Signed-off-by: Jyotiraditya Panda <jyotiraditya@aospa.co> Signed-off-by: Adithya R <gh0strider.2k18.reborn@gmail.com>
This commit is contained in:
parent
dbb6cddf41
commit
667bfe89fb
1 changed files with 26 additions and 36 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020 Paranoid Android
|
* Copyright (C) 2023 Paranoid Android
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,15 +16,13 @@
|
||||||
|
|
||||||
package org.lineageos.settings.device.speaker;
|
package org.lineageos.settings.device.speaker;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.res.AssetFileDescriptor;
|
import android.content.res.AssetFileDescriptor;
|
||||||
import android.media.AudioManager;
|
|
||||||
import android.media.AudioAttributes;
|
import android.media.AudioAttributes;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
@ -38,12 +36,11 @@ import java.io.IOException;
|
||||||
public class ClearSpeakerFragment extends PreferenceFragment implements
|
public class ClearSpeakerFragment extends PreferenceFragment implements
|
||||||
Preference.OnPreferenceChangeListener {
|
Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
private static final String TAG = ClearSpeakerFragment.class.getSimpleName();
|
private static final String TAG = "ClearSpeakerFragment";
|
||||||
|
|
||||||
private static final String PREF_CLEAR_SPEAKER = "clear_speaker_pref";
|
private static final String PREF_CLEAR_SPEAKER = "clear_speaker_pref";
|
||||||
|
private static final int PLAY_DURATION_MS = 30000;
|
||||||
|
|
||||||
private AudioManager mAudioManager;
|
private Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
private Handler mHandler;
|
|
||||||
private MediaPlayer mMediaPlayer;
|
private MediaPlayer mMediaPlayer;
|
||||||
private SwitchPreference mClearSpeakerPref;
|
private SwitchPreference mClearSpeakerPref;
|
||||||
|
|
||||||
|
@ -51,27 +48,20 @@ public class ClearSpeakerFragment extends PreferenceFragment implements
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
addPreferencesFromResource(R.xml.clear_speaker_settings);
|
addPreferencesFromResource(R.xml.clear_speaker_settings);
|
||||||
|
|
||||||
mClearSpeakerPref = (SwitchPreference) findPreference(PREF_CLEAR_SPEAKER);
|
mClearSpeakerPref = findPreference(PREF_CLEAR_SPEAKER);
|
||||||
mClearSpeakerPref.setOnPreferenceChangeListener(this);
|
mClearSpeakerPref.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
mHandler = new Handler();
|
|
||||||
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
if (preference == mClearSpeakerPref) {
|
if (preference == mClearSpeakerPref) {
|
||||||
boolean value = (Boolean) newValue;
|
boolean value = (Boolean) newValue;
|
||||||
if (value) {
|
if (value && startPlaying()) {
|
||||||
if (startPlaying()) {
|
|
||||||
mHandler.removeCallbacksAndMessages(null);
|
mHandler.removeCallbacksAndMessages(null);
|
||||||
mHandler.postDelayed(() -> {
|
mHandler.postDelayed(this::stopPlaying, PLAY_DURATION_MS);
|
||||||
stopPlaying();
|
|
||||||
}, 30000);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,39 +72,39 @@ public class ClearSpeakerFragment extends PreferenceFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean startPlaying() {
|
public boolean startPlaying() {
|
||||||
mAudioManager.setParameters("status_earpiece_clean=on");
|
|
||||||
mMediaPlayer = new MediaPlayer();
|
|
||||||
getActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
getActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
||||||
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
mMediaPlayer = new MediaPlayer();
|
||||||
|
mMediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
|
||||||
|
.setUsage(AudioAttributes.USAGE_MEDIA)
|
||||||
|
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
|
||||||
|
.build());
|
||||||
mMediaPlayer.setLooping(true);
|
mMediaPlayer.setLooping(true);
|
||||||
try {
|
try (AssetFileDescriptor afd = getResources().openRawResourceFd(
|
||||||
AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.clear_speaker_sound);
|
R.raw.clear_speaker_sound)) {
|
||||||
try {
|
mMediaPlayer.setDataSource(afd);
|
||||||
mMediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
|
|
||||||
} finally {
|
|
||||||
file.close();
|
|
||||||
}
|
|
||||||
mClearSpeakerPref.setEnabled(false);
|
|
||||||
mMediaPlayer.setVolume(1.0f, 1.0f);
|
mMediaPlayer.setVolume(1.0f, 1.0f);
|
||||||
mMediaPlayer.prepare();
|
mMediaPlayer.prepare();
|
||||||
mMediaPlayer.start();
|
mMediaPlayer.start();
|
||||||
} catch (IOException ioe) {
|
mClearSpeakerPref.setEnabled(false);
|
||||||
Log.e(TAG, "Failed to play speaker clean sound!", ioe);
|
} catch (IOException | IllegalArgumentException e) {
|
||||||
|
Log.e(TAG, "Failed to play speaker clean sound!", e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopPlaying() {
|
public void stopPlaying() {
|
||||||
if (mMediaPlayer != null) {
|
if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
|
||||||
if (mMediaPlayer.isPlaying()) {
|
try {
|
||||||
mMediaPlayer.stop();
|
mMediaPlayer.stop();
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
Log.e(TAG, "Failed to stop media player!", e);
|
||||||
|
} finally {
|
||||||
mMediaPlayer.reset();
|
mMediaPlayer.reset();
|
||||||
mMediaPlayer.release();
|
mMediaPlayer.release();
|
||||||
mMediaPlayer=null;
|
mMediaPlayer=null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mAudioManager.setParameters("status_earpiece_clean=off");
|
|
||||||
mClearSpeakerPref.setEnabled(true);
|
mClearSpeakerPref.setEnabled(true);
|
||||||
mClearSpeakerPref.setChecked(false);
|
mClearSpeakerPref.setChecked(false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue