@@ -10,8 +10,7 @@ class FocusManager(
1010 private val onGranted : () -> Unit ,
1111 private val onLoss : (isTransient: Boolean ) -> Unit ,
1212) {
13- private val context: AudioContextAndroid
14- get() = player.context
13+ private var context: AudioContextAndroid = player.context
1514
1615 // Listen also for focus changes, e.g. if interrupt playing with a phone call and resume afterward.
1716 private var audioFocusRequest: AudioFocusRequest ? = null
@@ -20,7 +19,19 @@ class FocusManager(
2019 private var audioFocusChangeListener: AudioManager .OnAudioFocusChangeListener ? = null
2120
2221 init {
23- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
22+ updateAudioFocusRequest()
23+ }
24+
25+ private fun hasAudioFocusRequest (): Boolean {
26+ return audioFocusRequest != null || audioFocusChangeListener != null
27+ }
28+
29+ private fun updateAudioFocusRequest () {
30+ if (context.audioFocus == AudioManager .AUDIOFOCUS_NONE ) {
31+ // Mix sound with others
32+ audioFocusRequest = null
33+ audioFocusChangeListener = null
34+ } else if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
2435 audioFocusRequest = AudioFocusRequest .Builder (context.audioFocus)
2536 .setAudioAttributes(context.buildAttributes())
2637 .setOnAudioFocusChangeListener { handleFocusResult(it) }
@@ -34,7 +45,11 @@ class FocusManager(
3445 get() = player.audioManager
3546
3647 fun maybeRequestAudioFocus () {
37- if (context.audioFocus == AudioManager .AUDIOFOCUS_NONE ) {
48+ if (context != player.context) {
49+ context = player.context
50+ updateAudioFocusRequest()
51+ }
52+ if (! hasAudioFocusRequest()) {
3853 onGranted()
3954 } else if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
4055 val result = audioManager.requestAudioFocus(audioFocusRequest!! )
@@ -51,7 +66,7 @@ class FocusManager(
5166 }
5267
5368 fun handleStop () {
54- if (context.audioFocus != AudioManager . AUDIOFOCUS_NONE ) {
69+ if (hasAudioFocusRequest() ) {
5570 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
5671 audioFocusRequest?.let { audioManager.abandonAudioFocusRequest(it) }
5772 } else {
0 commit comments