diff options
author | David Li <dvdli@google.com> | 2021-11-10 01:52:02 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-11-10 01:52:02 +0000 |
commit | 700dae6e4c2dbb9962b9d982aecef191596a6ca8 (patch) | |
tree | d6af84d85d4ec653172157609806a3ac03240774 | |
parent | 7716970bc28069c60df928924b40b86790aeadd0 (diff) | |
parent | abbcde1a80825b4eccba44ab344153a72efee6d4 (diff) | |
download | MusicFX-700dae6e4c2dbb9962b9d982aecef191596a6ca8.tar.gz |
Merge "Remove audioSession and use the stored one in ControlPanelEffect" into sc-v2-dev
-rw-r--r-- | src/com/android/musicfx/ActivityMusic.java | 69 | ||||
-rw-r--r-- | src/com/android/musicfx/ControlPanelEffect.java | 206 | ||||
-rw-r--r-- | src/com/android/musicfx/ControlPanelReceiver.java | 12 |
3 files changed, 136 insertions, 151 deletions
diff --git a/src/com/android/musicfx/ActivityMusic.java b/src/com/android/musicfx/ActivityMusic.java index 5222b48..3e787c0 100644 --- a/src/com/android/musicfx/ActivityMusic.java +++ b/src/com/android/musicfx/ActivityMusic.java @@ -201,11 +201,6 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { */ private String mCallingPackageName = "empty"; - /** - * Audio session field - */ - private int mAudioSession = AudioEffect.ERROR_BAD_VALUE; - // Audio Playback monitoring Callback to determine if a headset is used for music playback private final AudioPlaybackCallback mMyAudioPlaybackCallback = new AudioPlaybackCallback() { @Override @@ -273,9 +268,9 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { // Receive intent // get calling intent final Intent intent = getIntent(); - mAudioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, - AudioEffect.ERROR_BAD_VALUE); - Log.v(TAG, "audio session: " + mAudioSession); + final int audioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, + ControlPanelEffect.AUDIO_SESSION_ID_UNSPECIFIED); + Log.v(TAG, "audio session: " + audioSession); mCallingPackageName = getCallingPackage(); @@ -288,9 +283,9 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { } setResult(RESULT_OK); - Log.v(TAG, mCallingPackageName + " (" + mAudioSession + ")"); + Log.v(TAG, mCallingPackageName + " (" + audioSession + ")"); - ControlPanelEffect.initEffectsPreferences(mContext, mCallingPackageName, mAudioSession); + ControlPanelEffect.initEffectsPreferences(mContext, mCallingPackageName, audioSession); // query available effects final Descriptor[] effects = AudioEffect.queryEffects(); @@ -322,11 +317,11 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { // Fill array with presets from AudioEffects call. // allocate a space for 2 extra strings (CI Extreme & User) final int numPresets = ControlPanelEffect.getParameterInt(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.eq_num_presets); + ControlPanelEffect.Key.eq_num_presets); mEQPresetNames = new String[numPresets + 2]; for (short i = 0; i < numPresets; i++) { mEQPresetNames[i] = ControlPanelEffect.getParameterString(mContext, - mCallingPackageName, mAudioSession, ControlPanelEffect.Key.eq_preset_name, i); + mCallingPackageName, ControlPanelEffect.Key.eq_preset_name, i); Integer localizedNameId = LOCALIZED_EQUALIZER_PRESET_NAMES.get(mEQPresetNames[i]); if (localizedNameId != null) { mEQPresetNames[i] = getString(localizedNameId); @@ -350,7 +345,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { // set parameter and state ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.global_enabled, isChecked); + ControlPanelEffect.Key.global_enabled, isChecked); // Enable Linear layout (in scroll layout) view with all // effect contents depending on checked state setEnabledAllChildren(viewGroup, isChecked); @@ -387,7 +382,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { final boolean fromUser) { // set parameter and state ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.virt_strength, progress); + ControlPanelEffect.Key.virt_strength, progress); } // If slider pos was 0 when starting re-enable effect @@ -395,7 +390,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { public void onStartTrackingTouch(final SeekBar seekBar) { if (seekBar.getProgress() == 0) { ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.virt_enabled, true); + ControlPanelEffect.Key.virt_enabled, true); } } @@ -405,7 +400,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { if (seekBar.getProgress() == 0) { // disable ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.virt_enabled, false); + ControlPanelEffect.Key.virt_enabled, false); } } }); @@ -416,7 +411,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) { ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.virt_enabled, isChecked); + ControlPanelEffect.Key.virt_enabled, isChecked); } }); } @@ -449,7 +444,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { final boolean fromUser) { // set parameter and state ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.bb_strength, progress); + ControlPanelEffect.Key.bb_strength, progress); } // If slider pos was 0 when starting re-enable effect @@ -457,7 +452,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { public void onStartTrackingTouch(final SeekBar seekBar) { if (seekBar.getProgress() == 0) { ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.bb_enabled, true); + ControlPanelEffect.Key.bb_enabled, true); } } @@ -467,7 +462,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { if (seekBar.getProgress() == 0) { // disable ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.bb_enabled, false); + ControlPanelEffect.Key.bb_enabled, false); } } @@ -477,7 +472,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { // Initialize the Equalizer elements. if (mEqualizerSupported) { mEQPreset = ControlPanelEffect.getParameterInt(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.eq_current_preset); + ControlPanelEffect.Key.eq_current_preset); if (mEQPreset >= mEQPresetNames.length) { mEQPreset = 0; } @@ -490,7 +485,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { // Set Spinner listeners. if (mPresetReverbSupported) { mPRPreset = ControlPanelEffect.getParameterInt(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.pr_current_preset); + ControlPanelEffect.Key.pr_current_preset); mPRPresetPrevious = mPRPreset; reverbSpinnerInit((Spinner)findViewById(R.id.prSpinner)); } @@ -618,7 +613,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { */ private void updateUI() { final boolean isEnabled = ControlPanelEffect.getParameterBoolean(mContext, - mCallingPackageName, mAudioSession, ControlPanelEffect.Key.global_enabled); + mCallingPackageName, ControlPanelEffect.Key.global_enabled); mToggleSwitch.setChecked(isEnabled); setEnabledAllChildren((ViewGroup) findViewById(R.id.contentSoundEffects), isEnabled); updateUIHeadset(); @@ -627,12 +622,11 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { SeekBar bar = (SeekBar) findViewById(R.id.vIStrengthSeekBar); Switch sw = (Switch) findViewById(R.id.vIStrengthToggle); int strength = ControlPanelEffect - .getParameterInt(mContext, mCallingPackageName, mAudioSession, + .getParameterInt(mContext, mCallingPackageName, ControlPanelEffect.Key.virt_strength); bar.setProgress(strength); boolean hasStrength = ControlPanelEffect.getParameterBoolean(mContext, - mCallingPackageName, mAudioSession, - ControlPanelEffect.Key.virt_strength_supported); + mCallingPackageName, ControlPanelEffect.Key.virt_strength_supported); if (hasStrength) { sw.setVisibility(View.GONE); } else { @@ -642,7 +636,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { } if (mBassBoostSupported) { ((SeekBar) findViewById(R.id.bBStrengthSeekBar)).setProgress(ControlPanelEffect - .getParameterInt(mContext, mCallingPackageName, mAudioSession, + .getParameterInt(mContext, mCallingPackageName, ControlPanelEffect.Key.bb_strength)); } if (mEqualizerSupported) { @@ -650,7 +644,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { } if (mPresetReverbSupported) { int reverb = ControlPanelEffect.getParameterInt( - mContext, mCallingPackageName, mAudioSession, + mContext, mCallingPackageName, ControlPanelEffect.Key.pr_current_preset); ((Spinner)findViewById(R.id.prSpinner)).setSelection(reverb); } @@ -680,14 +674,13 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { private void equalizerBandsInit(View eqcontainer) { // Initialize the N-Band Equalizer elements. mNumberEqualizerBands = ControlPanelEffect.getParameterInt(mContext, mCallingPackageName, - mAudioSession, ControlPanelEffect.Key.eq_num_bands); + ControlPanelEffect.Key.eq_num_bands); mEQPresetUserBandLevelsPrev = ControlPanelEffect.getParameterIntArray(mContext, - mCallingPackageName, mAudioSession, - ControlPanelEffect.Key.eq_preset_user_band_level); + mCallingPackageName, ControlPanelEffect.Key.eq_preset_user_band_level); final int[] centerFreqs = ControlPanelEffect.getParameterIntArray(mContext, - mCallingPackageName, mAudioSession, ControlPanelEffect.Key.eq_center_freq); + mCallingPackageName, ControlPanelEffect.Key.eq_center_freq); final int[] bandLevelRange = ControlPanelEffect.getParameterIntArray(mContext, - mCallingPackageName, mAudioSession, ControlPanelEffect.Key.eq_level_range); + mCallingPackageName, ControlPanelEffect.Key.eq_level_range); mEqualizerMinBandLevel = (int) Math.max(EQUALIZER_MIN_LEVEL, bandLevelRange[0]); final int mEqualizerMaxBandLevel = (int) Math.min(EQUALIZER_MAX_LEVEL, bandLevelRange[1]); @@ -768,7 +761,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { public void onStartTrackingTouch(final SeekBar seekbar) { // get current levels final int[] bandLevels = ControlPanelEffect.getParameterIntArray(mContext, - mCallingPackageName, mAudioSession, ControlPanelEffect.Key.eq_band_level); + mCallingPackageName, ControlPanelEffect.Key.eq_band_level); // copy current levels to user preset for (short band = 0; band < mNumberEqualizerBands; band++) { equalizerBandUpdate(band, bandLevels[band]); @@ -797,7 +790,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { private void equalizerUpdateDisplay() { // Update and show the active N-Band Equalizer bands. final int[] bandLevels = ControlPanelEffect.getParameterIntArray(mContext, - mCallingPackageName, mAudioSession, ControlPanelEffect.Key.eq_band_level); + mCallingPackageName, ControlPanelEffect.Key.eq_band_level); for (short band = 0; band < mNumberEqualizerBands; band++) { final int level = bandLevels[band]; final int progress = level - mEqualizerMinBandLevel; @@ -814,7 +807,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { * EQ band level */ private void equalizerBandUpdate(final int band, final int level) { - ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, mAudioSession, + ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, ControlPanelEffect.Key.eq_band_level, level, band); } @@ -825,7 +818,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { * EQ preset id. */ private void equalizerSetPreset(final int preset) { - ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, mAudioSession, + ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, ControlPanelEffect.Key.eq_current_preset, preset); equalizerUpdateDisplay(); } @@ -837,7 +830,7 @@ public class ActivityMusic extends Activity implements OnSeekBarChangeListener { * PR preset id. */ private void presetReverbSetPreset(final int preset) { - ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, mAudioSession, + ControlPanelEffect.setParameterInt(mContext, mCallingPackageName, ControlPanelEffect.Key.pr_current_preset, preset); } diff --git a/src/com/android/musicfx/ControlPanelEffect.java b/src/com/android/musicfx/ControlPanelEffect.java index 9d325e4..fdead1b 100644 --- a/src/com/android/musicfx/ControlPanelEffect.java +++ b/src/com/android/musicfx/ControlPanelEffect.java @@ -18,6 +18,7 @@ package com.android.musicfx; import android.content.Context; import android.content.SharedPreferences; +import android.media.AudioManager; import android.media.MediaPlayer; import android.media.audiofx.AudioEffect; import android.media.audiofx.BassBoost; @@ -42,6 +43,12 @@ public class ControlPanelEffect { private static final int PRIORITY = 0; /** + * Use AudioManager.AUDIO_SESSION_ID_GENERATE for the use case of unspecified audio sessions or + * audio sessions which can't be found. + */ + public static final int AUDIO_SESSION_ID_UNSPECIFIED = AudioManager.AUDIO_SESSION_ID_GENERATE; + + /** * The control mode specifies if control panel updates effects and preferences or only * preferences. */ @@ -155,10 +162,22 @@ public class ControlPanelEffect { * System wide unique audio session identifier. */ public static void initEffectsPreferences(final Context context, final String packageName, - final int audioSession) { + int audioSession) { final SharedPreferences prefs = context.getSharedPreferences(packageName, Context.MODE_PRIVATE); final SharedPreferences.Editor editor = prefs.edit(); + + if (audioSession == AUDIO_SESSION_ID_UNSPECIFIED) { + Log.i(TAG, "Audio session is not specified."); + if (mPackageSessions.containsKey(packageName)) { + audioSession = mPackageSessions.get(packageName); + Log.i(TAG, "Using the stored session " + audioSession); + } else { + Log.i(TAG, "Can't find the stored session by " + packageName + + ", updates the preferences only."); + } + } + final ControlMode controlMode = getControlMode(audioSession); // init preferences @@ -337,7 +356,7 @@ public class ControlPanelEffect { * @return effect control mode */ public static ControlMode getControlMode(final int audioSession) { - if (audioSession == AudioEffect.ERROR_BAD_VALUE) { + if (audioSession == AUDIO_SESSION_ID_UNSPECIFIED) { return ControlMode.CONTROL_PREFERENCES; } return ControlMode.CONTROL_EFFECTS; @@ -348,17 +367,17 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @param value */ public static void setParameterBoolean(final Context context, final String packageName, - final int audioSession, final Key key, final boolean value) { + final Key key, final boolean value) { try { final SharedPreferences prefs = context.getSharedPreferences(packageName, Context.MODE_PRIVATE); - final ControlMode controlMode = getControlMode(audioSession); + final int storedAudioSession = mPackageSessions.getOrDefault(packageName, + AUDIO_SESSION_ID_UNSPECIFIED); + final ControlMode controlMode = getControlMode(storedAudioSession); boolean enabled = value; // Global on/off @@ -367,42 +386,41 @@ public class ControlPanelEffect { if (value == true) { // enable all with respect to preferences if (controlMode == ControlMode.CONTROL_EFFECTS) { - final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); + final Virtualizer virtualizerEffect = + getVirtualizerEffect(storedAudioSession); if (virtualizerEffect != null) { virtualizerEffect.setEnabled(prefs.getBoolean( Key.virt_enabled.toString(), VIRTUALIZER_ENABLED_DEFAULT)); int defaultstrength = virtualizerEffect.getRoundedStrength(); final int vIStrength = prefs.getInt(Key.virt_strength.toString(), defaultstrength); - setParameterInt(context, packageName, - audioSession, Key.virt_strength, vIStrength); + setParameterInt(context, packageName, Key.virt_strength, vIStrength); } - final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); + final BassBoost bassBoostEffect = getBassBoostEffect(storedAudioSession); if (bassBoostEffect != null) { bassBoostEffect.setEnabled(prefs.getBoolean(Key.bb_enabled.toString(), BASS_BOOST_ENABLED_DEFAULT)); final int bBStrength = prefs.getInt(Key.bb_strength.toString(), BASS_BOOST_STRENGTH_DEFAULT); - setParameterInt(context, packageName, - audioSession, Key.bb_strength, bBStrength); + setParameterInt(context, packageName, Key.bb_strength, bBStrength); } - final Equalizer equalizerEffect = getEqualizerEffect(audioSession); + final Equalizer equalizerEffect = getEqualizerEffect(storedAudioSession); if (equalizerEffect != null) { equalizerEffect.setEnabled(prefs.getBoolean(Key.eq_enabled.toString(), EQUALIZER_ENABLED_DEFAULT)); - final int[] bandLevels = getParameterIntArray(context, - packageName, audioSession, Key.eq_band_level); + final int[] bandLevels = getParameterIntArray(context, packageName, + Key.eq_band_level); final int len = bandLevels.length; for (short band = 0; band < len; band++) { final int level = bandLevels[band]; - setParameterInt(context, packageName, - audioSession, Key.eq_band_level, level, band); + setParameterInt(context, packageName, Key.eq_band_level, level, + band); } } // XXX: Preset Reverb not used for the moment, so commented out the effect // creation to not use MIPS // final PresetReverb presetReverbEffect = - // getPresetReverbEffect(audioSession); + // getPresetReverbEffect(storedAudioSession); // if (presetReverbEffect != null) { // presetReverbEffect.setEnabled(prefs.getBoolean( // Key.pr_enabled.toString(), PRESET_REVERB_ENABLED_DEFAULT)); @@ -415,28 +433,31 @@ public class ControlPanelEffect { } else { // disable all if (controlMode == ControlMode.CONTROL_EFFECTS) { - final Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession); + final Virtualizer virtualizerEffect = + getVirtualizerEffectNoCreate(storedAudioSession); if (virtualizerEffect != null) { - mVirtualizerInstances.remove(audioSession, virtualizerEffect); + mVirtualizerInstances.remove(storedAudioSession, virtualizerEffect); virtualizerEffect.setEnabled(false); virtualizerEffect.release(); } - final BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession); + final BassBoost bassBoostEffect = + getBassBoostEffectNoCreate(storedAudioSession); if (bassBoostEffect != null) { - mBassBoostInstances.remove(audioSession, bassBoostEffect); + mBassBoostInstances.remove(storedAudioSession, bassBoostEffect); bassBoostEffect.setEnabled(false); bassBoostEffect.release(); } - final Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession); + final Equalizer equalizerEffect = + getEqualizerEffectNoCreate(storedAudioSession); if (equalizerEffect != null) { - mEQInstances.remove(audioSession, equalizerEffect); + mEQInstances.remove(storedAudioSession, equalizerEffect); equalizerEffect.setEnabled(false); equalizerEffect.release(); } // XXX: Preset Reverb not used for the moment, so commented out the effect // creation to not use MIPS // final PresetReverb presetReverbEffect = - // getPresetReverbEffect(audioSession); + // getPresetReverbEffect(storedAudioSession); // if (presetReverbEffect != null) { // presetReverbEffect.setEnabled(false); // } @@ -459,7 +480,8 @@ public class ControlPanelEffect { // Virtualizer case virt_enabled: - final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); + final Virtualizer virtualizerEffect = + getVirtualizerEffect(storedAudioSession); if (virtualizerEffect != null) { virtualizerEffect.setEnabled(value); enabled = virtualizerEffect.getEnabled(); @@ -468,7 +490,7 @@ public class ControlPanelEffect { // BassBoost case bb_enabled: - final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); + final BassBoost bassBoostEffect = getBassBoostEffect(storedAudioSession); if (bassBoostEffect != null) { bassBoostEffect.setEnabled(value); enabled = bassBoostEffect.getEnabled(); @@ -477,7 +499,7 @@ public class ControlPanelEffect { // Equalizer case eq_enabled: - final Equalizer equalizerEffect = getEqualizerEffect(audioSession); + final Equalizer equalizerEffect = getEqualizerEffect(storedAudioSession); if (equalizerEffect != null) { equalizerEffect.setEnabled(value); enabled = equalizerEffect.getEnabled(); @@ -489,7 +511,7 @@ public class ControlPanelEffect { // XXX: Preset Reverb not used for the moment, so commented out the effect // creation to not use MIPS // final PresetReverb presetReverbEffect = - // getPresetReverbEffect(audioSession); + // getPresetReverbEffect(storedAudioSession); // if (presetReverbEffect != null) { // presetReverbEffect.setEnabled(value); // enabled = presetReverbEffect.getEnabled(); @@ -519,13 +541,11 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @return parameter value */ public static Boolean getParameterBoolean(final Context context, final String packageName, - final int audioSession, final Key key) { + final Key key) { final SharedPreferences prefs = context.getSharedPreferences(packageName, Context.MODE_PRIVATE); boolean value = false; @@ -545,14 +565,12 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @param arg0 * @param arg1 */ public static void setParameterInt(final Context context, final String packageName, - final int audioSession, final Key key, final int arg0, final int arg1) { + final Key key, final int arg0, final int arg1) { String strKey = key.toString(); int value = arg0; @@ -560,7 +578,9 @@ public class ControlPanelEffect { final SharedPreferences prefs = context.getSharedPreferences(packageName, Context.MODE_PRIVATE); final SharedPreferences.Editor editor = prefs.edit(); - final ControlMode controlMode = getControlMode(audioSession); + final int storedAudioSession = mPackageSessions.getOrDefault(packageName, + AUDIO_SESSION_ID_UNSPECIFIED); + final ControlMode controlMode = getControlMode(storedAudioSession); // Set effect parameters if (controlMode == ControlMode.CONTROL_EFFECTS) { @@ -569,7 +589,7 @@ public class ControlPanelEffect { // Virtualizer case virt_strength: { - final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession); + final Virtualizer virtualizerEffect = getVirtualizerEffect(storedAudioSession); if (virtualizerEffect != null) { virtualizerEffect.setStrength((short) value); value = virtualizerEffect.getRoundedStrength(); @@ -578,7 +598,7 @@ public class ControlPanelEffect { } // BassBoost case bb_strength: { - final BassBoost bassBoostEffect = getBassBoostEffect(audioSession); + final BassBoost bassBoostEffect = getBassBoostEffect(storedAudioSession); if (bassBoostEffect != null) { bassBoostEffect.setStrength((short) value); value = bassBoostEffect.getRoundedStrength(); @@ -592,7 +612,7 @@ public class ControlPanelEffect { } final short band = (short) arg1; strKey = strKey + band; - final Equalizer equalizerEffect = getEqualizerEffect(audioSession); + final Equalizer equalizerEffect = getEqualizerEffect(storedAudioSession); if (equalizerEffect != null) { equalizerEffect.setBandLevel(band, (short) value); value = equalizerEffect.getBandLevel(band); @@ -602,7 +622,7 @@ public class ControlPanelEffect { break; } case eq_current_preset: { - final Equalizer equalizerEffect = getEqualizerEffect(audioSession); + final Equalizer equalizerEffect = getEqualizerEffect(storedAudioSession); if (equalizerEffect != null) { final short preset = (short) value; final int numBands = prefs.getInt(Key.eq_num_bands.toString(), @@ -660,7 +680,8 @@ public class ControlPanelEffect { case pr_current_preset: // XXX: Preset Reverb not used for the moment, so commented out the effect // creation to not use MIPS - // final PresetReverb presetReverbEffect = getPresetReverbEffect(audioSession); + // final PresetReverb presetReverbEffect = + // getPresetReverbEffect(storedAudioSession); // if (presetReverbEffect != null) { // presetReverbEffect.setPreset((short) value); // value = presetReverbEffect.getPreset(); @@ -767,14 +788,12 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @param arg */ public static void setParameterInt(final Context context, final String packageName, - final int audioSession, final Key key, final int arg) { - setParameterInt(context, packageName, audioSession, key, arg, UNUSED_ARGUMENT); + final Key key, final int arg) { + setParameterInt(context, packageName, key, arg, UNUSED_ARGUMENT); } /** @@ -782,13 +801,11 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @return parameter value */ public static int getParameterInt(final Context context, final String packageName, - final int audioSession, final String key) { + final String key) { int value = 0; try { @@ -807,14 +824,12 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @return parameter value */ public static int getParameterInt(final Context context, final String packageName, - final int audioSession, final Key key) { - return getParameterInt(context, packageName, audioSession, key.toString()); + final Key key) { + return getParameterInt(context, packageName, key.toString()); } /** @@ -822,16 +837,13 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. - * @param audioSession * @param key * @param arg * @return parameter value */ public static int getParameterInt(final Context context, final String packageName, - final int audioSession, final Key key, final int arg) { - return getParameterInt(context, packageName, audioSession, key.toString() + arg); + final Key key, final int arg) { + return getParameterInt(context, packageName, key.toString() + arg); } /** @@ -839,17 +851,14 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. - * @param audioSession * @param key * @param arg0 * @param arg1 * @return parameter value */ public static int getParameterInt(final Context context, final String packageName, - final int audioSession, final Key key, final int arg0, final int arg1) { - return getParameterInt(context, packageName, audioSession, key.toString() + arg0 + "_" + final Key key, final int arg0, final int arg1) { + return getParameterInt(context, packageName, key.toString() + arg0 + "_" + arg1); } @@ -858,13 +867,11 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @return parameter value array */ public static int[] getParameterIntArray(final Context context, final String packageName, - final int audioSession, final Key key) { + final Key key) { final SharedPreferences prefs = context.getSharedPreferences(packageName, Context.MODE_PRIVATE); @@ -910,13 +917,11 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @return parameter value */ public static String getParameterString(final Context context, final String packageName, - final int audioSession, final String key) { + final String key) { String value = ""; try { final SharedPreferences prefs = context.getSharedPreferences(packageName, @@ -937,14 +942,12 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param key * @return parameter value */ public static String getParameterString(final Context context, final String packageName, - final int audioSession, final Key key) { - return getParameterString(context, packageName, audioSession, key.toString()); + final Key key) { + return getParameterString(context, packageName, key.toString()); } /** @@ -952,14 +955,12 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. * @param args * @return parameter value */ public static String getParameterString(final Context context, final String packageName, - final int audioSession, final Key key, final int arg) { - return getParameterString(context, packageName, audioSession, key.toString() + arg); + final Key key, final int arg) { + return getParameterString(context, packageName, key.toString() + arg); } /** @@ -992,28 +993,19 @@ public class ControlPanelEffect { // Manage audioSession information // Retrieve AudioSession Id from map - boolean isExistingAudioSession = false; + final int storedAudioSession = mPackageSessions.getOrDefault(packageName, + AUDIO_SESSION_ID_UNSPECIFIED); + boolean isExistingAudioSession = storedAudioSession == audioSession; - try { - final Integer currentAudioSession = mPackageSessions.putIfAbsent(packageName, - audioSession); - if (currentAudioSession != null) { - // Compare with passed argument - if (currentAudioSession == audioSession) { - // FIXME: Normally, we should exit the function here - // BUT: we have to take care of the virtualizer because of - // a bug in the Android Effects Framework - // editor.commit(); - // return; - isExistingAudioSession = true; - } else { - closeSession(context, packageName, currentAudioSession); - } - } - } catch (final NullPointerException e) { - Log.e(TAG, methodTag + e); - editor.commit(); - return; + if (isExistingAudioSession) { + // FIXME: Normally, we should exit the function here + // BUT: we have to take care of the virtualizer because of + // a bug in the Android Effects Framework + // editor.commit(); + // return; + } else { + closeSession(context, packageName); + mPackageSessions.put(packageName, audioSession); } // Because the audioSession is new, get effects & settings from shared preferences @@ -1263,30 +1255,30 @@ public class ControlPanelEffect { * * @param context * @param packageName - * @param audioSession - * System wide unique audio session identifier. */ - public static void closeSession(final Context context, final String packageName, - final int audioSession) { - Log.v(TAG, "closeSession(" + context + ", " + packageName + ", " + audioSession + ")"); + public static void closeSession(final Context context, final String packageName) { + final int storedAudioSession = mPackageSessions.getOrDefault(packageName, + AUDIO_SESSION_ID_UNSPECIFIED); + Log.v(TAG, "closeSession(" + context + ", " + packageName + ", " + storedAudioSession + + ")"); // PresetReverb - final PresetReverb presetReverb = mPresetReverbInstances.remove(audioSession); + final PresetReverb presetReverb = mPresetReverbInstances.remove(storedAudioSession); if (presetReverb != null) { presetReverb.release(); } // Equalizer - final Equalizer equalizer = mEQInstances.remove(audioSession); + final Equalizer equalizer = mEQInstances.remove(storedAudioSession); if (equalizer != null) { equalizer.release(); } // BassBoost - final BassBoost bassBoost = mBassBoostInstances.remove(audioSession); + final BassBoost bassBoost = mBassBoostInstances.remove(storedAudioSession); if (bassBoost != null) { bassBoost.release(); } // Virtualizer - final Virtualizer virtualizer = mVirtualizerInstances.remove(audioSession); + final Virtualizer virtualizer = mVirtualizerInstances.remove(storedAudioSession); if (virtualizer != null) { virtualizer.release(); } @@ -1308,7 +1300,7 @@ public class ControlPanelEffect { public static void setEnabledAll(final Context context, final String packageName, final int audioSession, final boolean enabled) { initEffectsPreferences(context, packageName, audioSession); - setParameterBoolean(context, packageName, audioSession, Key.global_enabled, enabled); + setParameterBoolean(context, packageName, Key.global_enabled, enabled); } /** diff --git a/src/com/android/musicfx/ControlPanelReceiver.java b/src/com/android/musicfx/ControlPanelReceiver.java index 563e3ef..3217baf 100644 --- a/src/com/android/musicfx/ControlPanelReceiver.java +++ b/src/com/android/musicfx/ControlPanelReceiver.java @@ -42,7 +42,7 @@ public class ControlPanelReceiver extends BroadcastReceiver { final String action = intent.getAction(); final String packageName = intent.getStringExtra(AudioEffect.EXTRA_PACKAGE_NAME); final int audioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, - AudioEffect.ERROR_BAD_VALUE); + ControlPanelEffect.AUDIO_SESSION_ID_UNSPECIFIED); Log.v(TAG, "Action: " + action); Log.v(TAG, "Package name: " + packageName); @@ -55,8 +55,8 @@ public class ControlPanelReceiver extends BroadcastReceiver { } // check audio session - if ((audioSession == AudioEffect.ERROR_BAD_VALUE) || (audioSession < 0)) { - Log.w(TAG, "Invalid or missing audio session " + audioSession); + if (audioSession == ControlPanelEffect.AUDIO_SESSION_ID_UNSPECIFIED) { + Log.w(TAG, "Missing audio session"); return; } @@ -75,7 +75,7 @@ public class ControlPanelReceiver extends BroadcastReceiver { // close audio session if (action.equals(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION)) { - ControlPanelEffect.closeSession(context, packageName, audioSession); + ControlPanelEffect.closeSession(context, packageName); } // set params @@ -84,7 +84,7 @@ public class ControlPanelReceiver extends BroadcastReceiver { if (param.equals("GLOBAL_ENABLED")) { final Boolean value = intent.getBooleanExtra("AudioEffect.EXTRA_VALUE", false); - ControlPanelEffect.setParameterBoolean(context, packageName, audioSession, + ControlPanelEffect.setParameterBoolean(context, packageName, ControlPanelEffect.Key.global_enabled, value); } } @@ -95,7 +95,7 @@ public class ControlPanelReceiver extends BroadcastReceiver { if (param.equals("GLOBAL_ENABLED")) { final Boolean value = ControlPanelEffect.getParameterBoolean(context, packageName, - audioSession, ControlPanelEffect.Key.global_enabled); + ControlPanelEffect.Key.global_enabled); final Bundle extras = new Bundle(); extras.putBoolean("GLOBAL_ENABLED", value); setResultExtras(extras); |