Make PlayerState stable

This commit is contained in:
vfsfitvnm 2022-06-25 18:35:31 +02:00
parent db42617afc
commit ac26e61856
2 changed files with 20 additions and 21 deletions

View file

@ -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
}
}

View file

@ -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,