From f73bd0fdde78387bc2c062279c89284c1a08d673 Mon Sep 17 00:00:00 2001 From: Xiao Bao Clark Date: Sat, 29 Aug 2015 08:54:34 +1000 Subject: [PATCH] Applied ducking state to prepared media play. Renamed *OnVolume to *OnDucking for consistency. Added is-playing check before initiating ducking. Replaced switch on String to if else for source compatability. --- res/values/translatable.xml | 4 ++-- res/xml/preference_audio.xml | 4 ++-- .../android/vanilla/PlaybackService.java | 24 ++++++++++++------- .../android/vanilla/PrefKeys.java | 2 +- .../android/vanilla/SeekBarPreference.java | 22 ++++++++--------- .../android/vanilla/VanillaMediaPlayer.java | 2 +- 6 files changed, 31 insertions(+), 27 deletions(-) diff --git a/res/values/translatable.xml b/res/values/translatable.xml index ede87f8c..2f647618 100644 --- a/res/values/translatable.xml +++ b/res/values/translatable.xml @@ -150,8 +150,8 @@ THE SOFTWARE. Audio Volume - Volume During Notification - Playback volume: + Volume During Notification + Playback volume: Headset/Bluetooth Controls This is also required for ICS lockscreen controls. Headset Control Beep diff --git a/res/xml/preference_audio.xml b/res/xml/preference_audio.xml index 3a2ec227..4fd14092 100644 --- a/res/xml/preference_audio.xml +++ b/res/xml/preference_audio.xml @@ -32,10 +32,10 @@ THE SOFTWARE. android:title="@string/replaygain" android:summary="@string/replaygain_summary" /> 75 == middle == 0 */ mReplayGainUntaggedDeBump = settings.getInt(PrefKeys.REPLAYGAIN_UNTAGGED_DEBUMP, 150); /* seek bar is 150 -> == 0 */ - mVolumeOnNotification = settings.getInt(PrefKeys.VOLUME_ON_NOTIFICATION, 50); + mVolumeDuringDucking = settings.getInt(PrefKeys.VOLUME_DURING_DUCKING, 50); refreshDuckingValues(); mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false); @@ -636,7 +636,7 @@ public final class PlaybackService extends Service } private void refreshDuckingValues() { - float duckingFactor = ((float)mVolumeOnNotification)/100f; + float duckingFactor = ((float) mVolumeDuringDucking)/100f; mMediaPlayer.setDuckingFactor(duckingFactor); mPreparedMediaPlayer.setDuckingFactor(duckingFactor); } @@ -862,8 +862,8 @@ public final class PlaybackService extends Service } else if (PrefKeys.REPLAYGAIN_UNTAGGED_DEBUMP.equals(key)) { mReplayGainUntaggedDeBump = settings.getInt(PrefKeys.REPLAYGAIN_UNTAGGED_DEBUMP, 150); refreshReplayGainValues(); - } else if (PrefKeys.VOLUME_ON_NOTIFICATION.equals(key)) { - mVolumeOnNotification = settings.getInt(PrefKeys.VOLUME_ON_NOTIFICATION, 50); + } else if (PrefKeys.VOLUME_DURING_DUCKING.equals(key)) { + mVolumeDuringDucking = settings.getInt(PrefKeys.VOLUME_DURING_DUCKING, 50); refreshDuckingValues(); } else if (PrefKeys.ENABLE_READAHEAD.equals(key)) { mReadaheadEnabled = settings.getBoolean(PrefKeys.ENABLE_READAHEAD, false); @@ -1004,7 +1004,9 @@ public final class PlaybackService extends Service mTimeline.setFinishAction(finishAction(state)); if((toggled & FLAG_DUCKING) != 0) { - mMediaPlayer.setIsDucking((state & FLAG_DUCKING) != 0); + boolean isDucking = (state & FLAG_DUCKING) != 0; + mMediaPlayer.setIsDucking(isDucking); + mPreparedMediaPlayer.setIsDucking(isDucking); } } @@ -2037,9 +2039,13 @@ public final class PlaybackService extends Service Log.d("VanillaMusic", "audio focus change: " + type); switch (type) { case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: - mDuckedLoss = true; - setFlag(FLAG_DUCKING); - break; + synchronized (mStateLock) { + mDuckedLoss = (mState & FLAG_PLAYING) != 0; + if(mDuckedLoss) { + setFlag(FLAG_DUCKING); + } + break; + } case AudioManager.AUDIOFOCUS_LOSS: case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: mDuckedLoss = false; diff --git a/src/ch/blinkenlights/android/vanilla/PrefKeys.java b/src/ch/blinkenlights/android/vanilla/PrefKeys.java index 12e366ce..3fd6850a 100644 --- a/src/ch/blinkenlights/android/vanilla/PrefKeys.java +++ b/src/ch/blinkenlights/android/vanilla/PrefKeys.java @@ -66,5 +66,5 @@ public class PrefKeys { public static final String ENABLE_READAHEAD = "enable_readahead"; public static final String USE_DARK_THEME = "use_dark_theme"; public static final String FILESYSTEM_BROWSE_START = "filesystem_browse_start"; - public static final String VOLUME_ON_NOTIFICATION = "volume_on_notification"; + public static final String VOLUME_DURING_DUCKING = "volume_during_ducking"; } diff --git a/src/ch/blinkenlights/android/vanilla/SeekBarPreference.java b/src/ch/blinkenlights/android/vanilla/SeekBarPreference.java index b0ac54e8..e77a54fa 100644 --- a/src/ch/blinkenlights/android/vanilla/SeekBarPreference.java +++ b/src/ch/blinkenlights/android/vanilla/SeekBarPreference.java @@ -88,8 +88,8 @@ public class SeekBarPreference extends DialogPreference implements SeekBar.OnSee } else if(PrefKeys.REPLAYGAIN_UNTAGGED_DEBUMP.equals(getKey())) { String summary = (String)mContext.getResources().getText(R.string.replaygain_untagged_debump_summary); return String.format("%s %.1fdB", summary, (value-150)/10f); - } else if (PrefKeys.VOLUME_ON_NOTIFICATION.equals(getKey())) { - String summary = mContext.getString(R.string.volume_on_notification_summary); + } else if (PrefKeys.VOLUME_DURING_DUCKING.equals(getKey())) { + String summary = mContext.getString(R.string.volume_during_ducking_summary); return summary + " " + value + "%"; } else { return String.format("%d%% (%+.1fdB)", value, 20 * Math.log10(Math.pow(value / 100.0, 3))); @@ -107,15 +107,13 @@ public class SeekBarPreference extends DialogPreference implements SeekBar.OnSee SeekBar seekBar = (SeekBar)view.findViewById(R.id.seek_bar); int maxValue; - switch (getKey()) { - case PrefKeys.SHAKE_THRESHOLD: - maxValue = 300; - break; - case PrefKeys.VOLUME_ON_NOTIFICATION: - maxValue = 100; - break; - default: - maxValue = 150; + String key = getKey(); + if (PrefKeys.SHAKE_THRESHOLD.equals(key)) { + maxValue = 300; + } else if (PrefKeys.VOLUME_DURING_DUCKING.equals(key)) { + maxValue = 100; + } else { + maxValue = 150; } seekBar.setMax(maxValue); @@ -128,7 +126,7 @@ public class SeekBarPreference extends DialogPreference implements SeekBar.OnSee @Override protected void onDialogClosed(boolean positiveResult) { - if(!positiveResult && PrefKeys.VOLUME_ON_NOTIFICATION.equals(getKey())) { + if(!positiveResult && PrefKeys.VOLUME_DURING_DUCKING.equals(getKey())) { setValue(50); } notifyChanged(); diff --git a/src/ch/blinkenlights/android/vanilla/VanillaMediaPlayer.java b/src/ch/blinkenlights/android/vanilla/VanillaMediaPlayer.java index 51d30f17..55a344d4 100644 --- a/src/ch/blinkenlights/android/vanilla/VanillaMediaPlayer.java +++ b/src/ch/blinkenlights/android/vanilla/VanillaMediaPlayer.java @@ -155,5 +155,5 @@ public class VanillaMediaPlayer extends MediaPlayer { setVolume(volume, volume); } - + }