Fix seek on paused state
This commit is contained in:
parent
b2f35fa135
commit
436e76c756
|
@ -133,7 +133,7 @@ sealed class RoomDetailAction : VectorViewModelAction {
|
||||||
data class PlayOrResume(val voiceBroadcast: VoiceBroadcast) : Listening()
|
data class PlayOrResume(val voiceBroadcast: VoiceBroadcast) : Listening()
|
||||||
object Pause : Listening()
|
object Pause : Listening()
|
||||||
object Stop : Listening()
|
object Stop : Listening()
|
||||||
data class SeekTo(val voiceBroadcast: VoiceBroadcast, val positionMillis: Int) : Listening()
|
data class SeekTo(val voiceBroadcast: VoiceBroadcast, val positionMillis: Int, val duration: Int) : Listening()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -637,7 +637,7 @@ class TimelineViewModel @AssistedInject constructor(
|
||||||
is VoiceBroadcastAction.Listening.PlayOrResume -> voiceBroadcastHelper.playOrResumePlayback(action.voiceBroadcast)
|
is VoiceBroadcastAction.Listening.PlayOrResume -> voiceBroadcastHelper.playOrResumePlayback(action.voiceBroadcast)
|
||||||
VoiceBroadcastAction.Listening.Pause -> voiceBroadcastHelper.pausePlayback()
|
VoiceBroadcastAction.Listening.Pause -> voiceBroadcastHelper.pausePlayback()
|
||||||
VoiceBroadcastAction.Listening.Stop -> voiceBroadcastHelper.stopPlayback()
|
VoiceBroadcastAction.Listening.Stop -> voiceBroadcastHelper.stopPlayback()
|
||||||
is VoiceBroadcastAction.Listening.SeekTo -> voiceBroadcastHelper.seekTo(action.voiceBroadcast, action.positionMillis)
|
is VoiceBroadcastAction.Listening.SeekTo -> voiceBroadcastHelper.seekTo(action.voiceBroadcast, action.positionMillis, action.duration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageVoiceBroadcastItem
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
||||||
callback?.onTimelineItemAction(VoiceBroadcastAction.Listening.SeekTo(voiceBroadcast, seekBar.progress))
|
callback?.onTimelineItemAction(VoiceBroadcastAction.Listening.SeekTo(voiceBroadcast, seekBar.progress, duration))
|
||||||
isUserSeeking = false
|
isUserSeeking = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -48,7 +48,7 @@ class VoiceBroadcastHelper @Inject constructor(
|
||||||
|
|
||||||
fun stopPlayback() = voiceBroadcastPlayer.stop()
|
fun stopPlayback() = voiceBroadcastPlayer.stop()
|
||||||
|
|
||||||
fun seekTo(voiceBroadcast: VoiceBroadcast, positionMillis: Int) {
|
fun seekTo(voiceBroadcast: VoiceBroadcast, positionMillis: Int, duration: Int) {
|
||||||
voiceBroadcastPlayer.seekTo(voiceBroadcast, positionMillis)
|
voiceBroadcastPlayer.seekTo(voiceBroadcast, positionMillis, duration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ interface VoiceBroadcastPlayer {
|
||||||
/**
|
/**
|
||||||
* Seek the given voice broadcast playback to the given position, is milliseconds.
|
* Seek the given voice broadcast playback to the given position, is milliseconds.
|
||||||
*/
|
*/
|
||||||
fun seekTo(voiceBroadcast: VoiceBroadcast, positionMillis: Int)
|
fun seekTo(voiceBroadcast: VoiceBroadcast, positionMillis: Int, duration: Int)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a [Listener] to the given voice broadcast.
|
* Add a [Listener] to the given voice broadcast.
|
||||||
|
|
|
@ -94,8 +94,7 @@ class VoiceBroadcastPlayerImpl @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun pause() {
|
override fun pause() {
|
||||||
currentMediaPlayer?.pause()
|
pausePlayback()
|
||||||
playingState = State.PAUSED
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun stop() {
|
override fun stop() {
|
||||||
|
@ -212,17 +211,40 @@ class VoiceBroadcastPlayerImpl @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resumePlayback() {
|
private fun pausePlayback(positionMillis: Int? = null) {
|
||||||
currentMediaPlayer?.start()
|
if (positionMillis == null) {
|
||||||
playingState = State.PLAYING
|
currentMediaPlayer?.pause()
|
||||||
|
} else {
|
||||||
|
stopPlayer()
|
||||||
|
currentVoiceBroadcast?.voiceBroadcastId?.let { id ->
|
||||||
|
playbackTracker.updatePausedAtPlaybackTime(id, positionMillis, positionMillis.toFloat() / playlist.duration)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playingState = State.PAUSED
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun seekTo(voiceBroadcast: VoiceBroadcast, positionMillis: Int) {
|
private fun resumePlayback() {
|
||||||
if (voiceBroadcast != currentVoiceBroadcast) {
|
if (currentMediaPlayer != null) {
|
||||||
playbackTracker.updatePausedAtPlaybackTime(voiceBroadcast.voiceBroadcastId, positionMillis, 0f)
|
currentMediaPlayer?.start()
|
||||||
|
playingState = State.PLAYING
|
||||||
} else {
|
} else {
|
||||||
|
val position = currentVoiceBroadcast?.voiceBroadcastId?.let { playbackTracker.getPlaybackTime(it) }
|
||||||
|
startPlayback(position)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun seekTo(voiceBroadcast: VoiceBroadcast, positionMillis: Int, duration: Int) {
|
||||||
|
when {
|
||||||
|
voiceBroadcast != currentVoiceBroadcast -> {
|
||||||
|
playbackTracker.updatePausedAtPlaybackTime(voiceBroadcast.voiceBroadcastId, positionMillis, positionMillis.toFloat() / duration)
|
||||||
|
}
|
||||||
|
playingState == State.PLAYING || playingState == State.BUFFERING -> {
|
||||||
startPlayback(positionMillis)
|
startPlayback(positionMillis)
|
||||||
}
|
}
|
||||||
|
playingState == State.IDLE || playingState == State.PAUSED -> {
|
||||||
|
pausePlayback(positionMillis)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareNextMediaPlayer() {
|
private fun prepareNextMediaPlayer() {
|
||||||
|
|
Loading…
Reference in New Issue