From ac26e618561456a180d97b0556a706712262b563 Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Sat, 25 Jun 2022 18:35:31 +0200 Subject: [PATCH] Make PlayerState stable --- .../it/vfsfitvnm/vimusic/utils/PlayerState.kt | 39 +++++++++---------- .../vfsfitvnm/vimusic/utils/YoutubePlayer.kt | 2 +- 2 files changed, 20 insertions(+), 21 deletions(-) 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 bf67ef2..f5b6c50 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt @@ -2,56 +2,55 @@ package it.vfsfitvnm.vimusic.utils import android.os.Handler import android.os.Looper -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.media3.common.* import kotlin.math.absoluteValue -open class PlayerState(val mediaController: Player) : Player.Listener { +@Stable +open class PlayerState(private val player: Player) : Player.Listener { private val handler = Handler(Looper.getMainLooper()) - var currentPosition by mutableStateOf(mediaController.currentPosition) + var currentPosition by mutableStateOf(player.currentPosition) - var duration by mutableStateOf(mediaController.duration) + var duration by mutableStateOf(player.duration) private set val progress: Float get() = currentPosition.toFloat() / duration.absoluteValue - var playbackState by mutableStateOf(mediaController.playbackState) + var playbackState by mutableStateOf(player.playbackState) private set - var mediaItemIndex by mutableStateOf(mediaController.currentMediaItemIndex) + var mediaItemIndex by mutableStateOf(player.currentMediaItemIndex) private set - var mediaItem by mutableStateOf(mediaController.currentMediaItem) + var mediaItem by mutableStateOf(player.currentMediaItem) private set - var mediaMetadata by mutableStateOf(mediaController.mediaMetadata) + var mediaMetadata by mutableStateOf(player.mediaMetadata) private set - var isPlaying by mutableStateOf(mediaController.isPlaying) + var isPlaying by mutableStateOf(player.isPlaying) private set - var playWhenReady by mutableStateOf(mediaController.playWhenReady) + var playWhenReady by mutableStateOf(player.playWhenReady) private set - var repeatMode by mutableStateOf(mediaController.repeatMode) + var repeatMode by mutableStateOf(player.repeatMode) private set - var error by mutableStateOf(mediaController.playerError) + var error by mutableStateOf(player.playerError) - var mediaItems by mutableStateOf(mediaController.currentTimeline.mediaItems) + var mediaItems by mutableStateOf(player.currentTimeline.mediaItems) private set - var volume by mutableStateOf(mediaController.volume) + var volume by mutableStateOf(player.volume) private set init { handler.post(object : Runnable { override fun run() { - currentPosition = mediaController.currentPosition + currentPosition = player.currentPosition handler.postDelayed(this, 500) } }) @@ -62,7 +61,7 @@ open class PlayerState(val mediaController: Player) : Player.Listener { } override fun onPlaybackStateChanged(playbackState: Int) { - duration = mediaController.duration + duration = player.duration this.playbackState = playbackState } @@ -80,7 +79,7 @@ open class PlayerState(val mediaController: Player) : Player.Listener { override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { this.mediaItem = mediaItem - mediaItemIndex = mediaController.currentMediaItemIndex + mediaItemIndex = player.currentMediaItemIndex } override fun onRepeatModeChanged(repeatMode: Int) { @@ -93,6 +92,6 @@ open class PlayerState(val mediaController: Player) : Player.Listener { override fun onTimelineChanged(timeline: Timeline, reason: Int) { mediaItems = timeline.mediaItems - mediaItemIndex = mediaController.currentMediaItemIndex + mediaItemIndex = player.currentMediaItemIndex } } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubePlayer.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubePlayer.kt index b97b271..1890f30 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubePlayer.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubePlayer.kt @@ -8,7 +8,7 @@ import it.vfsfitvnm.youtubemusic.YouTube import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -class YoutubePlayer(mediaController: Player) : PlayerState(mediaController) { +class YoutubePlayer(player: Player) : PlayerState(player) { data class Radio( private val videoId: String? = null, private val playlistId: String? = null,