fix(playback): manage playback state on activity lifecycle events

This commit is contained in:
2026-06-03 16:59:29 +02:00
parent 717bf3c8e1
commit 9aec271aa4
2 changed files with 16 additions and 6 deletions

View File

@@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.WindowManager
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.runtime.LaunchedEffect
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
@@ -17,6 +18,8 @@ import hu.bbara.purefin.ui.theme.AppTheme
@AndroidEntryPoint
class PlayerActivity : ComponentActivity() {
private val viewModel: PlayerViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -43,6 +46,16 @@ class PlayerActivity : ComponentActivity() {
}
}
override fun onPause() {
super.onPause()
viewModel.pausePlayback()
}
override fun onResume() {
super.onResume()
enterImmersiveMode()
}
private fun enterImmersiveMode() {
WindowCompat.setDecorFitsSystemWindows(window, false)
WindowInsetsControllerCompat(window, window.decorView).apply {

View File

@@ -36,8 +36,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleEventEffect
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.media3.common.util.UnstableApi
import androidx.media3.ui.AspectRatioFrameLayout
@@ -84,10 +82,6 @@ fun PlayerScreen(
var horizontalSeekPreviewPositionMs by remember { mutableStateOf<Long?>(null) }
val overlayController = rememberPersistentOverlayController()
LifecycleEventEffect(Lifecycle.Event.ON_STOP) {
viewModel.pausePlayback()
}
LaunchedEffect(uiState.isPlaying) {
if (uiState.isPlaying) {
showQueuePanel = false
@@ -116,6 +110,9 @@ fun PlayerScreen(
subtitleView?.setBottomPaddingFraction(subtitleBottomPaddingFraction)
}
},
onRelease = { playerView ->
playerView.player = null
},
modifier = Modifier
.fillMaxHeight()
.align(Alignment.Center)