Make PlayerState stable
This commit is contained in:
parent
db42617afc
commit
ac26e61856
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue