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.
This commit is contained in:
OxygenCobalt 2021-03-13 10:32:47 -07:00
parent 31672fca40
commit 2f5a6984d9
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47

View file

@ -32,7 +32,7 @@ class AudioReactor(
.setOnAudioFocusChangeListener(this) .setOnAudioFocusChangeListener(this)
.build() .build()
private var pauseWasFromAudioFocus = false private var pauseWasTransient = false
/** /**
* Request the android system for audio focus * Request the android system for audio focus
@ -49,37 +49,41 @@ class AudioReactor(
} }
override fun onAudioFocusChange(focusChange: Int) { override fun onAudioFocusChange(focusChange: Int) {
if (!settingsManager.doAudioFocus) {
// Dont do audio focus if its not enabled
return
}
when (focusChange) { when (focusChange) {
AudioManager.AUDIOFOCUS_GAIN -> onGain() AudioManager.AUDIOFOCUS_GAIN -> onGain()
AudioManager.AUDIOFOCUS_LOSS -> onLossPermanent()
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> onLossTransient()
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> onDuck() AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> onDuck()
AudioManager.AUDIOFOCUS_LOSS, AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> onLoss()
} }
} }
private fun onGain() { private fun onGain() {
if (settingsManager.doAudioFocus) {
if (player.volume == VOLUME_DUCK && playbackManager.isPlaying) { if (player.volume == VOLUME_DUCK && playbackManager.isPlaying) {
unduck() unduck()
} else if (pauseWasFromAudioFocus) { } else if (pauseWasTransient) {
// Play again if the pause was only temporary [AudioManager.AUDIOFOCUS_LOSS_TRANSIENT]
playbackManager.setPlaying(true) playbackManager.setPlaying(true)
} pauseWasTransient = false
pauseWasFromAudioFocus = false
} }
} }
private fun onLoss() { private fun onLossTransient() {
if (settingsManager.doAudioFocus && playbackManager.isPlaying) { pauseWasTransient = true
pauseWasFromAudioFocus = true
playbackManager.setPlaying(false) playbackManager.setPlaying(false)
} }
private fun onLossPermanent() {
playbackManager.setPlaying(false)
} }
private fun onDuck() { private fun onDuck() {
if (settingsManager.doAudioFocus) {
player.volume = VOLUME_DUCK player.volume = VOLUME_DUCK
} }
}
private fun unduck() { private fun unduck() {
player.volume = VOLUME_DUCK player.volume = VOLUME_DUCK