Fix mini player not being updated (regression of #3b9b5a)

This commit is contained in:
vfsfitvnm
2022-07-22 16:19:46 +02:00
parent dd200e1374
commit f8b253d553
2 changed files with 24 additions and 14 deletions

View File

@@ -38,6 +38,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.media3.common.C import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.media3.common.MediaMetadata import androidx.media3.common.MediaMetadata
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.datasource.cache.Cache import androidx.media3.datasource.cache.Cache
@@ -79,13 +80,9 @@ fun PlayerView(
binder?.player ?: return binder?.player ?: return
val mediaItemIndex by rememberMediaItemIndex(binder.player) val nullableMediaItem by rememberMediaItem(binder.player)
if (mediaItemIndex == -1) return val mediaItem = nullableMediaItem ?: return
val mediaItem = remember(mediaItemIndex) {
binder.player.getMediaItemAt(mediaItemIndex)
}
val shouldBePlaying by rememberShouldBePlaying(binder.player) val shouldBePlaying by rememberShouldBePlaying(binder.player)
val positionAndDuration by rememberPositionAndDuration(binder.player) val positionAndDuration by rememberPositionAndDuration(binder.player)
@@ -216,7 +213,7 @@ fun PlayerView(
} }
Controls( Controls(
mediaItemIndex = mediaItemIndex, mediaItem = mediaItem,
shouldBePlaying = shouldBePlaying, shouldBePlaying = shouldBePlaying,
position = positionAndDuration.first, position = positionAndDuration.first,
duration = positionAndDuration.second, duration = positionAndDuration.second,
@@ -251,7 +248,7 @@ fun PlayerView(
} }
Controls( Controls(
mediaItemIndex = mediaItemIndex, mediaItem = mediaItem,
shouldBePlaying = shouldBePlaying, shouldBePlaying = shouldBePlaying,
position = positionAndDuration.first, position = positionAndDuration.first,
duration = positionAndDuration.second, duration = positionAndDuration.second,
@@ -844,7 +841,7 @@ private fun StatsForNerds(
@Composable @Composable
private fun Controls( private fun Controls(
mediaItemIndex: Int, mediaItem: MediaItem,
shouldBePlaying: Boolean, shouldBePlaying: Boolean,
position: Long, position: Long,
duration: Long, duration: Long,
@@ -857,11 +854,7 @@ private fun Controls(
val repeatMode by rememberRepeatMode(binder.player) val repeatMode by rememberRepeatMode(binder.player)
val mediaItem = remember(mediaItemIndex) { var scrubbingPosition by remember(mediaItem.mediaId) {
binder.player.getMediaItemAt(mediaItemIndex)
}
var scrubbingPosition by remember(mediaItemIndex) {
mutableStateOf<Long?>(null) mutableStateOf<Long?>(null)
} }

View File

@@ -39,6 +39,23 @@ fun rememberMediaItemIndex(player: Player): State<Int> {
return mediaItemIndexState return mediaItemIndexState
} }
@Composable
fun rememberMediaItem(player: Player): State<MediaItem?> {
val state = remember(player) {
mutableStateOf(player.currentMediaItem)
}
DisposableEffect(player) {
player.listener(object : Player.Listener {
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
state.value = mediaItem
}
})
}
return state
}
@Composable @Composable
fun rememberWindows(player: Player): State<List<Timeline.Window>> { fun rememberWindows(player: Player): State<List<Timeline.Window>> {
val windowsState = remember(player) { val windowsState = remember(player) {