From e8d74d91944f0445e1ed4ad61ab8a5265b1efd1b Mon Sep 17 00:00:00 2001 From: VenusIsJaded Date: Sat, 16 May 2026 01:12:06 -0500 Subject: [PATCH] Fix ExoPlayer unpausing when returning to foreground The lifecycle observer was holding onto a stale playWhenReady value, so every time you came back to the app it would resume playback even if you had explicitly paused the video. Now it uses rememberUpdatedState to check the live value instead. --- .../com/nuvio/app/features/player/PlayerEngine.android.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt index ebdcfd92..20362f06 100644 --- a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt +++ b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt @@ -81,7 +81,9 @@ actual fun PlatformPlayerSurface( val lifecycleOwner = LocalLifecycleOwner.current val latestOnSnapshot = rememberUpdatedState(onSnapshot) val latestOnError = rememberUpdatedState(onError) + val latestPlayWhenReady = rememberUpdatedState(playWhenReady) val coroutineScope = rememberCoroutineScope() + val latestPlayWhenReady = rememberUpdatedState(playWhenReady) val playerSettings = remember { PlayerSettingsRepository.ensureLoaded() @@ -251,7 +253,7 @@ actual fun PlatformPlayerSurface( val activity = context.findActivity() val observer = LifecycleEventObserver { _, event -> when (event) { - Lifecycle.Event.ON_START -> exoPlayer.playWhenReady = playWhenReady + Lifecycle.Event.ON_START -> exoPlayer.playWhenReady = latestPlayWhenReady.value Lifecycle.Event.ON_STOP -> { val isInPictureInPicture = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity?.isInPictureInPictureMode == true @@ -271,7 +273,7 @@ actual fun PlatformPlayerSurface( } LaunchedEffect(exoPlayer, playWhenReady) { - exoPlayer.playWhenReady = playWhenReady + exoPlayer.playWhenReady = latestPlayWhenReady.value syncPlayerViewKeepScreenOn() latestOnSnapshot.value(exoPlayer.snapshot()) }