From f8b253d553a94915be7fc0558a86989eee00511a Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Fri, 22 Jul 2022 16:19:46 +0200 Subject: [PATCH] Fix mini player not being updated (regression of #3b9b5a) --- .../vfsfitvnm/vimusic/ui/views/PlayerView.kt | 21 +++++++------------ .../it/vfsfitvnm/vimusic/utils/PlayerState.kt | 17 +++++++++++++++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt index bff9c2f..b8780bc 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt @@ -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.media3.common.C +import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata import androidx.media3.common.Player import androidx.media3.datasource.cache.Cache @@ -79,13 +80,9 @@ fun PlayerView( binder?.player ?: return - val mediaItemIndex by rememberMediaItemIndex(binder.player) + val nullableMediaItem by rememberMediaItem(binder.player) - if (mediaItemIndex == -1) return - - val mediaItem = remember(mediaItemIndex) { - binder.player.getMediaItemAt(mediaItemIndex) - } + val mediaItem = nullableMediaItem ?: return val shouldBePlaying by rememberShouldBePlaying(binder.player) val positionAndDuration by rememberPositionAndDuration(binder.player) @@ -216,7 +213,7 @@ fun PlayerView( } Controls( - mediaItemIndex = mediaItemIndex, + mediaItem = mediaItem, shouldBePlaying = shouldBePlaying, position = positionAndDuration.first, duration = positionAndDuration.second, @@ -251,7 +248,7 @@ fun PlayerView( } Controls( - mediaItemIndex = mediaItemIndex, + mediaItem = mediaItem, shouldBePlaying = shouldBePlaying, position = positionAndDuration.first, duration = positionAndDuration.second, @@ -844,7 +841,7 @@ private fun StatsForNerds( @Composable private fun Controls( - mediaItemIndex: Int, + mediaItem: MediaItem, shouldBePlaying: Boolean, position: Long, duration: Long, @@ -857,11 +854,7 @@ private fun Controls( val repeatMode by rememberRepeatMode(binder.player) - val mediaItem = remember(mediaItemIndex) { - binder.player.getMediaItemAt(mediaItemIndex) - } - - var scrubbingPosition by remember(mediaItemIndex) { + var scrubbingPosition by remember(mediaItem.mediaId) { mutableStateOf(null) } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt index 715d4db..e09b9a5 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt @@ -39,6 +39,23 @@ fun rememberMediaItemIndex(player: Player): State { return mediaItemIndexState } +@Composable +fun rememberMediaItem(player: Player): State { + 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 fun rememberWindows(player: Player): State> { val windowsState = remember(player) {