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:
Jyotiraditya Panda 2023-06-03 23:38:59 +05:30 committed by CakesTwix
parent dbb6cddf41
commit 667bfe89fb
Signed by: CakesTwix
GPG key ID: 7B11051D5CE19825

View file

@ -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);
} }