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