From bf14fa90a2823fb2d2c2f89a3e97360638f9e546 Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoit@matrix.org> Date: Tue, 13 Jul 2021 15:15:07 +0200 Subject: [PATCH] Fix rendering issue of time when playing in the timeline - still buggy And fix timer not cancelled properly when at the end of the playback --- .../room/detail/composer/VoiceMessageHelper.kt | 1 + .../detail/composer/VoiceMessageRecorderView.kt | 1 + .../timeline/helper/VoiceMessagePlaybackTracker.kt | 2 +- .../room/detail/timeline/item/MessageVoiceItem.kt | 14 +++++--------- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageHelper.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageHelper.kt index 461fb245de..51a2fc7150 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageHelper.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageHelper.kt @@ -225,6 +225,7 @@ class VoiceMessageHelper @Inject constructor( } else -> { playbackTracker.stopPlayback(id = id, rememberPlaybackTime = false) + stopPlaybackTimer() } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt index 55ee89aac1..c24e11b413 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt @@ -289,6 +289,7 @@ class VoiceMessageRecorderView @JvmOverloads constructor( private fun renderRecordingWaveform(amplitudeList: List<Int>) { views.voicePlaybackWaveform.apply { post { + // TODO We could avoid recreating the whole view here and just call update() with the new value(s). recreate() amplitudeList.forEach { amplitude -> update(amplitude) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/VoiceMessagePlaybackTracker.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/VoiceMessagePlaybackTracker.kt index 2cd2f9c866..ea6029a075 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/VoiceMessagePlaybackTracker.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/VoiceMessagePlaybackTracker.kt @@ -110,7 +110,7 @@ class VoiceMessagePlaybackTracker @Inject constructor() { } companion object { - var RECORDING_ID = "RECORDING_ID" + const val RECORDING_ID = "RECORDING_ID" } interface Listener { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt index ca35f80469..f3d50137c8 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceItem.kt @@ -88,14 +88,14 @@ abstract class MessageVoiceItem : AbsMessageItem<MessageVoiceItem.Holder>() { voiceMessagePlaybackTracker.track(attributes.informationData.eventId, object : VoiceMessagePlaybackTracker.Listener { override fun onUpdate(state: VoiceMessagePlaybackTracker.Listener.State) { when (state) { - is VoiceMessagePlaybackTracker.Listener.State.Idle -> handleIdleState(holder, state) - is VoiceMessagePlaybackTracker.Listener.State.Playing -> handlePlayingState(holder, state) + is VoiceMessagePlaybackTracker.Listener.State.Idle -> renderIdleState(holder, state) + is VoiceMessagePlaybackTracker.Listener.State.Playing -> renderPlayingState(holder, state) } } }) } - private fun handleIdleState(holder: Holder, state: VoiceMessagePlaybackTracker.Listener.State.Idle) { + private fun renderIdleState(holder: Holder, state: VoiceMessagePlaybackTracker.Listener.State.Idle) { holder.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_play) if (state.playbackTime > 0) { holder.voicePlaybackTime.text = formatPlaybackTime(state.playbackTime) @@ -104,13 +104,9 @@ abstract class MessageVoiceItem : AbsMessageItem<MessageVoiceItem.Holder>() { } } - private fun handlePlayingState(holder: Holder, state: VoiceMessagePlaybackTracker.Listener.State.Playing) { + private fun renderPlayingState(holder: Holder, state: VoiceMessagePlaybackTracker.Listener.State.Playing) { holder.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_pause) - if (state.playbackTime > 0) { - holder.voicePlaybackTime.text = formatPlaybackTime(state.playbackTime) - } else { - holder.voicePlaybackTime.text = formatPlaybackTime(duration) - } + holder.voicePlaybackTime.text = formatPlaybackTime(state.playbackTime) } private fun formatPlaybackTime(time: Int) = DateUtils.formatElapsedTime((time / 1000).toLong())