From 667bfe89fbe3e5f5d4bc15ee1015bd98fa8a2e54 Mon Sep 17 00:00:00 2001 From: Jyotiraditya Panda Date: Sat, 3 Jun 2023 23:38:59 +0530 Subject: [PATCH] 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 Signed-off-by: Adithya R --- .../device/speaker/ClearSpeakerFragment.java | 62 ++++++++----------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/DeviceSettings/src/org/lineageos/settings/device/speaker/ClearSpeakerFragment.java b/DeviceSettings/src/org/lineageos/settings/device/speaker/ClearSpeakerFragment.java index a218bc0f..c295adf1 100644 --- a/DeviceSettings/src/org/lineageos/settings/device/speaker/ClearSpeakerFragment.java +++ b/DeviceSettings/src/org/lineageos/settings/device/speaker/ClearSpeakerFragment.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Paranoid Android + * Copyright (C) 2023 Paranoid Android * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,13 @@ package org.lineageos.settings.device.speaker; -import android.content.Context; import android.content.res.AssetFileDescriptor; -import android.media.AudioManager; import android.media.AudioAttributes; +import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.os.Message; import android.util.Log; import androidx.preference.Preference; @@ -38,12 +36,11 @@ import java.io.IOException; public class ClearSpeakerFragment extends PreferenceFragment implements 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 int PLAY_DURATION_MS = 30000; - private AudioManager mAudioManager; - private Handler mHandler; + private Handler mHandler = new Handler(Looper.getMainLooper()); private MediaPlayer mMediaPlayer; private SwitchPreference mClearSpeakerPref; @@ -51,25 +48,18 @@ public class ClearSpeakerFragment extends PreferenceFragment implements public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.clear_speaker_settings); - mClearSpeakerPref = (SwitchPreference) findPreference(PREF_CLEAR_SPEAKER); + mClearSpeakerPref = findPreference(PREF_CLEAR_SPEAKER); mClearSpeakerPref.setOnPreferenceChangeListener(this); - - mHandler = new Handler(); - mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mClearSpeakerPref) { boolean value = (Boolean) newValue; - if (value) { - if (startPlaying()) { - mHandler.removeCallbacksAndMessages(null); - mHandler.postDelayed(() -> { - stopPlaying(); - }, 30000); - return true; - } + if (value && startPlaying()) { + mHandler.removeCallbacksAndMessages(null); + mHandler.postDelayed(this::stopPlaying, PLAY_DURATION_MS); + return true; } } return false; @@ -82,39 +72,39 @@ public class ClearSpeakerFragment extends PreferenceFragment implements } public boolean startPlaying() { - mAudioManager.setParameters("status_earpiece_clean=on"); - mMediaPlayer = new MediaPlayer(); 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); - try { - AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.clear_speaker_sound); - try { - mMediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength()); - } finally { - file.close(); - } - mClearSpeakerPref.setEnabled(false); + try (AssetFileDescriptor afd = getResources().openRawResourceFd( + R.raw.clear_speaker_sound)) { + mMediaPlayer.setDataSource(afd); mMediaPlayer.setVolume(1.0f, 1.0f); mMediaPlayer.prepare(); mMediaPlayer.start(); - } catch (IOException ioe) { - Log.e(TAG, "Failed to play speaker clean sound!", ioe); + mClearSpeakerPref.setEnabled(false); + } catch (IOException | IllegalArgumentException e) { + Log.e(TAG, "Failed to play speaker clean sound!", e); return false; } return true; } public void stopPlaying() { - if (mMediaPlayer != null) { - if (mMediaPlayer.isPlaying()) { + if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { + try { mMediaPlayer.stop(); + } catch (IllegalStateException e) { + Log.e(TAG, "Failed to stop media player!", e); + } finally { mMediaPlayer.reset(); mMediaPlayer.release(); mMediaPlayer=null; } } - mAudioManager.setParameters("status_earpiece_clean=off"); mClearSpeakerPref.setEnabled(true); mClearSpeakerPref.setChecked(false); }