summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Li <dvdli@google.com>2021-11-10 01:52:02 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-11-10 01:52:02 +0000
commit700dae6e4c2dbb9962b9d982aecef191596a6ca8 (patch)
treed6af84d85d4ec653172157609806a3ac03240774
parent7716970bc28069c60df928924b40b86790aeadd0 (diff)
parentabbcde1a80825b4eccba44ab344153a72efee6d4 (diff)
downloadMusicFX-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.java69
-rw-r--r--src/com/android/musicfx/ControlPanelEffect.java206
-rw-r--r--src/com/android/musicfx/ControlPanelReceiver.java12
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);