From 2f5a6984d958d8833feb2dab09ffe46c3c9f6a60 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sat, 13 Mar 2021 10:32:47 -0700 Subject: [PATCH] Possibly fix AudioFocus bug (Maybe) fix an issue where AudioFocus might cause the playback to start again after being paused by the user, possibly caused by a audiofocus loss being labeled transient even if it wasnt. --- .../auxio/playback/system/AudioReactor.kt | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt index 6b77cbe32..7565c7373 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt @@ -32,7 +32,7 @@ class AudioReactor( .setOnAudioFocusChangeListener(this) .build() - private var pauseWasFromAudioFocus = false + private var pauseWasTransient = false /** * Request the android system for audio focus @@ -49,36 +49,40 @@ class AudioReactor( } override fun onAudioFocusChange(focusChange: Int) { + if (!settingsManager.doAudioFocus) { + // Dont do audio focus if its not enabled + return + } + when (focusChange) { AudioManager.AUDIOFOCUS_GAIN -> onGain() + AudioManager.AUDIOFOCUS_LOSS -> onLossPermanent() + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> onLossTransient() AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> onDuck() - AudioManager.AUDIOFOCUS_LOSS, AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> onLoss() } } private fun onGain() { - if (settingsManager.doAudioFocus) { - if (player.volume == VOLUME_DUCK && playbackManager.isPlaying) { - unduck() - } else if (pauseWasFromAudioFocus) { - playbackManager.setPlaying(true) - } - - pauseWasFromAudioFocus = false + if (player.volume == VOLUME_DUCK && playbackManager.isPlaying) { + unduck() + } else if (pauseWasTransient) { + // Play again if the pause was only temporary [AudioManager.AUDIOFOCUS_LOSS_TRANSIENT] + playbackManager.setPlaying(true) + pauseWasTransient = false } } - private fun onLoss() { - if (settingsManager.doAudioFocus && playbackManager.isPlaying) { - pauseWasFromAudioFocus = true - playbackManager.setPlaying(false) - } + private fun onLossTransient() { + pauseWasTransient = true + playbackManager.setPlaying(false) + } + + private fun onLossPermanent() { + playbackManager.setPlaying(false) } private fun onDuck() { - if (settingsManager.doAudioFocus) { - player.volume = VOLUME_DUCK - } + player.volume = VOLUME_DUCK } private fun unduck() {