From 869b935bf6d7a5257ee58349ae1b1b1f51860d14 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sun, 3 Apr 2016 16:10:50 +0200 Subject: [PATCH] Added option to disable audio ducking. --- .../gramophone/service/MusicService.java | 33 ++++++++++++++----- .../gramophone/util/PreferenceUtil.java | 5 +++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/pref_audio.xml | 6 ++++ 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index ad38f53f..07725368 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -55,6 +55,8 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; +import hugo.weaving.DebugLog; + /** * @author Karim Abou Zeid (kabouzeid), Andrew Neal */ @@ -115,6 +117,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP private int nextPosition = -1; private int shuffleMode; private int repeatMode; + private boolean audioDucking; private boolean pausedByTransientLossOfFocus; private boolean receiversAndRemoteControlClientRegistered; private PlayingNotificationHelper playingNotificationHelper; @@ -162,6 +165,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName()); wakeLock.setReferenceCounted(false); + audioDucking = PreferenceUtil.getInstance(this).audioDucking(); + musicPlayerHandlerThread = new HandlerThread("PlaybackHandler"); musicPlayerHandlerThread.start(); playerHandler = new PlaybackHandler(this, musicPlayerHandlerThread.getLooper()); @@ -987,6 +992,9 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { switch (key) { + case PreferenceUtil.AUDIO_DUCKING: + audioDucking = sharedPreferences.getBoolean(key, true); + break; case PreferenceUtil.GAPLESS_PLAYBACK: if (sharedPreferences.getBoolean(key, false)) { prepareNext(); @@ -1025,6 +1033,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP mService = new WeakReference<>(service); } + @DebugLog @Override public void handleMessage(@NonNull final Message msg) { final MusicService service = mService.get(); @@ -1034,21 +1043,29 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP switch (msg.what) { case DUCK: - currentDuckVolume -= .05f; - if (currentDuckVolume > .2f) { - sendEmptyMessageDelayed(DUCK, 10); + if (service.audioDucking) { + currentDuckVolume -= .05f; + if (currentDuckVolume > .2f) { + sendEmptyMessageDelayed(DUCK, 10); + } else { + currentDuckVolume = .2f; + } } else { - currentDuckVolume = .2f; + currentDuckVolume = 1f; } service.playback.setVolume(currentDuckVolume); break; case UNDUCK: - currentDuckVolume += .03f; - if (currentDuckVolume < 1.0f) { - sendEmptyMessageDelayed(UNDUCK, 10); + if (service.audioDucking) { + currentDuckVolume += .03f; + if (currentDuckVolume < 1f) { + sendEmptyMessageDelayed(UNDUCK, 10); + } else { + currentDuckVolume = 1f; + } } else { - currentDuckVolume = 1.0f; + currentDuckVolume = 1f; } service.playback.setVolume(currentDuckVolume); break; diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java index 28742b40..51ef9a91 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -43,6 +43,7 @@ public final class PreferenceUtil { public static final String COLORED_NOTIFICATION = "colored_notification"; + public static final String AUDIO_DUCKING = "audio_ducking"; public static final String GAPLESS_PLAYBACK = "gapless_playback"; public static final String LAST_ADDED_CUTOFF_TIMESTAMP = "last_added_cutoff_timestamp"; @@ -134,6 +135,10 @@ public final class PreferenceUtil { return mPreferences.getBoolean(GAPLESS_PLAYBACK, false); } + public final boolean audioDucking() { + return mPreferences.getBoolean(AUDIO_DUCKING, true); + } + public final boolean albumArtOnLockscreen() { return mPreferences.getBoolean(ALBUM_ART_ON_LOCKSCREEN, true); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d5b8962f..9239b489 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -129,6 +129,7 @@ Alternative progress slider Show card below playback controls Colored playback controls + Reduce volume on focus loss No equalizer found. "Play a song first, then try again." Delete @@ -166,6 +167,7 @@ Can increase the album cover quality but causes slower image loading times. Only enable this if you have problems with low resolution artworks. Colors play/pause, shuffle and repeat as well as the progress slider in the album cover\u2019s vibrant color. Colors the navigation bar in the primary color. + Notifications, navigation etc. "Couldn\u2019t download a matching album cover." Search your library… Rescanning media… diff --git a/app/src/main/res/xml/pref_audio.xml b/app/src/main/res/xml/pref_audio.xml index a3dca416..3887155e 100644 --- a/app/src/main/res/xml/pref_audio.xml +++ b/app/src/main/res/xml/pref_audio.xml @@ -3,6 +3,12 @@ + +