Make PlayerBottomSheet composable smart recompose
This commit is contained in:
@@ -10,6 +10,11 @@ val Timeline.mediaItems: List<MediaItem>
|
||||
getWindow(index, Timeline.Window()).mediaItem
|
||||
}
|
||||
|
||||
val Timeline.windows: List<Timeline.Window>
|
||||
get() = (0 until windowCount).map { index ->
|
||||
getWindow(index, Timeline.Window())
|
||||
}
|
||||
|
||||
val Player.shouldBePlaying: Boolean
|
||||
get() = !(playbackState == Player.STATE_ENDED || !playWhenReady)
|
||||
|
||||
|
||||
@@ -154,6 +154,44 @@ fun rememberMediaItemIndex(player: Player): State<Int> {
|
||||
return mediaItemIndexState
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun rememberWindows(player: Player): State<List<Timeline.Window>> {
|
||||
val windowsState = remember(player) {
|
||||
mutableStateOf(player.currentTimeline.windows)
|
||||
}
|
||||
|
||||
DisposableEffect(player) {
|
||||
player.listener(object : Player.Listener {
|
||||
override fun onTimelineChanged(timeline: Timeline, reason: Int) {
|
||||
windowsState.value = timeline.windows
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return windowsState
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun rememberShouldBePlaying(player: Player): State<Boolean> {
|
||||
val state = remember(player) {
|
||||
mutableStateOf(!(player.playbackState == Player.STATE_ENDED || !player.playWhenReady))
|
||||
}
|
||||
|
||||
DisposableEffect(player) {
|
||||
player.listener(object : Player.Listener {
|
||||
override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) {
|
||||
state.value = !(player.playbackState == Player.STATE_ENDED || !playWhenReady)
|
||||
}
|
||||
|
||||
override fun onPlaybackStateChanged(playbackState: Int) {
|
||||
state.value = !(playbackState == Player.STATE_ENDED || !player.playWhenReady)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return state
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun rememberVolume(player: Player): State<Float> {
|
||||
val volumeState = remember(player) {
|
||||
|
||||
Reference in New Issue
Block a user