From 28e295a6eeda2046a937837ef6123f87bb13ba6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Moska=C5=82a?= <91079590+moskalakamil@users.noreply.github.com> Date: Tue, 20 Jan 2026 19:44:48 +0100 Subject: [PATCH] fix: access `AudioFocusChangeListener` on main thread (#4821) --- .../com/twg/video/core/AudioFocusManager.kt | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/packages/react-native-video/android/src/main/java/com/twg/video/core/AudioFocusManager.kt b/packages/react-native-video/android/src/main/java/com/twg/video/core/AudioFocusManager.kt index cb51eac0..770d656f 100644 --- a/packages/react-native-video/android/src/main/java/com/twg/video/core/AudioFocusManager.kt +++ b/packages/react-native-video/android/src/main/java/com/twg/video/core/AudioFocusManager.kt @@ -29,28 +29,30 @@ class AudioFocusManager() { } private val audioFocusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange -> - when (focusChange) { - AudioManager.AUDIOFOCUS_GAIN -> { - unDuckActivePlayers() - } - AudioManager.AUDIOFOCUS_LOSS -> { - pauseActivePlayers() - currentMixAudioMode = null - audioFocusRequest = null - } - AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { - val mixAudioMode = determineRequiredMixMode() - if (mixAudioMode != MixAudioMode.MIXWITHOTHERS) { + Threading.runOnMainThread { + when (focusChange) { + AudioManager.AUDIOFOCUS_GAIN -> { + unDuckActivePlayers() + } + AudioManager.AUDIOFOCUS_LOSS -> { pauseActivePlayers() currentMixAudioMode = null audioFocusRequest = null } - } - AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> { - val mixAudioMode = determineRequiredMixMode() - when (mixAudioMode) { - MixAudioMode.DONOTMIX -> pauseActivePlayers() - else -> duckActivePlayers() + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { + val mixAudioMode = determineRequiredMixMode() + if (mixAudioMode != MixAudioMode.MIXWITHOTHERS) { + pauseActivePlayers() + currentMixAudioMode = null + audioFocusRequest = null + } + } + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> { + val mixAudioMode = determineRequiredMixMode() + when (mixAudioMode) { + MixAudioMode.DONOTMIX -> pauseActivePlayers() + else -> duckActivePlayers() + } } } }