Remember the listener

This commit is contained in:
Benoit Marty 2024-12-12 17:14:13 +01:00 committed by Benoit Marty
parent 5b2b281efb
commit ad0cc678d8
2 changed files with 48 additions and 44 deletions

View file

@ -131,30 +131,32 @@ private fun ExoPlayerMediaAudioView(
localMediaViewState.playableState = playableState localMediaViewState.playableState = playableState
val playerListener = object : Player.Listener { val playerListener = remember {
override fun onRenderedFirstFrame() { object : Player.Listener {
localMediaViewState.isReady = true override fun onRenderedFirstFrame() {
} localMediaViewState.isReady = true
override fun onIsPlayingChanged(isPlaying: Boolean) {
mediaPlayerControllerState = mediaPlayerControllerState.copy(
isPlaying = isPlaying,
)
}
override fun onTimelineChanged(timeline: Timeline, reason: Int) {
if (reason == Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE) {
exoPlayer.duration.takeIf { it >= 0 }
?.let {
mediaPlayerControllerState = mediaPlayerControllerState.copy(
durationInMillis = it,
)
}
} }
}
override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) { override fun onIsPlayingChanged(isPlaying: Boolean) {
metadata = mediaMetadata mediaPlayerControllerState = mediaPlayerControllerState.copy(
isPlaying = isPlaying,
)
}
override fun onTimelineChanged(timeline: Timeline, reason: Int) {
if (reason == Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE) {
exoPlayer.duration.takeIf { it >= 0 }
?.let {
mediaPlayerControllerState = mediaPlayerControllerState.copy(
durationInMillis = it,
)
}
}
}
override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) {
metadata = mediaMetadata
}
} }
} }

View file

@ -102,31 +102,33 @@ private fun ExoPlayerMediaVideoView(
localMediaViewState.playableState = playableState localMediaViewState.playableState = playableState
val playerListener = object : Player.Listener { val playerListener = remember {
override fun onRenderedFirstFrame() { object : Player.Listener {
localMediaViewState.isReady = true override fun onRenderedFirstFrame() {
} localMediaViewState.isReady = true
}
override fun onIsPlayingChanged(isPlaying: Boolean) { override fun onIsPlayingChanged(isPlaying: Boolean) {
mediaPlayerControllerState = mediaPlayerControllerState.copy( mediaPlayerControllerState = mediaPlayerControllerState.copy(
isPlaying = isPlaying, isPlaying = isPlaying,
) )
} }
override fun onVolumeChanged(volume: Float) { override fun onVolumeChanged(volume: Float) {
mediaPlayerControllerState = mediaPlayerControllerState.copy( mediaPlayerControllerState = mediaPlayerControllerState.copy(
isMuted = volume == 0f, isMuted = volume == 0f,
) )
} }
override fun onTimelineChanged(timeline: Timeline, reason: Int) { override fun onTimelineChanged(timeline: Timeline, reason: Int) {
if (reason == Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE) { if (reason == Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE) {
exoPlayer.duration.takeIf { it >= 0 } exoPlayer.duration.takeIf { it >= 0 }
?.let { ?.let {
mediaPlayerControllerState = mediaPlayerControllerState.copy( mediaPlayerControllerState = mediaPlayerControllerState.copy(
durationInMillis = it, durationInMillis = it,
) )
} }
}
} }
} }
} }