Improve recording state rendering if app has been relaunched

This commit is contained in:
Florian Renaud 2022-10-24 16:49:59 +02:00
parent a7c24b23a0
commit 2c144614ca

View File

@ -24,6 +24,7 @@ import im.vector.app.R
import im.vector.app.core.epoxy.onClick import im.vector.app.core.epoxy.onClick
import im.vector.app.features.home.room.detail.RoomDetailAction.VoiceBroadcastAction import im.vector.app.features.home.room.detail.RoomDetailAction.VoiceBroadcastAction
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
import im.vector.app.features.voicebroadcast.views.VoiceBroadcastMetadataView import im.vector.app.features.voicebroadcast.views.VoiceBroadcastMetadataView
@EpoxyModelClass @EpoxyModelClass
@ -32,7 +33,7 @@ abstract class MessageVoiceBroadcastRecordingItem : AbsMessageVoiceBroadcastItem
@EpoxyAttribute @EpoxyAttribute
var voiceBroadcastRecorder: VoiceBroadcastRecorder? = null var voiceBroadcastRecorder: VoiceBroadcastRecorder? = null
private lateinit var recorderListener: VoiceBroadcastRecorder.Listener private var recorderListener: VoiceBroadcastRecorder.Listener? = null
override fun bind(holder: Holder) { override fun bind(holder: Holder) {
super.bind(holder) super.bind(holder)
@ -40,12 +41,15 @@ abstract class MessageVoiceBroadcastRecordingItem : AbsMessageVoiceBroadcastItem
} }
private fun bindVoiceBroadcastItem(holder: Holder) { private fun bindVoiceBroadcastItem(holder: Holder) {
if (voiceBroadcastRecorder != null && voiceBroadcastRecorder?.state != VoiceBroadcastRecorder.State.Idle) {
recorderListener = object : VoiceBroadcastRecorder.Listener { recorderListener = object : VoiceBroadcastRecorder.Listener {
override fun onStateUpdated(state: VoiceBroadcastRecorder.State) { override fun onStateUpdated(state: VoiceBroadcastRecorder.State) {
renderRecordingState(holder, state) renderRecordingState(holder, state)
} }
}.also { voiceBroadcastRecorder?.addListener(it) }
} else {
renderVoiceBroadcastState(holder)
} }
voiceBroadcastRecorder?.addListener(recorderListener)
} }
override fun renderMetadata(holder: Holder) { override fun renderMetadata(holder: Holder) {
@ -56,9 +60,24 @@ abstract class MessageVoiceBroadcastRecordingItem : AbsMessageVoiceBroadcastItem
} }
private fun renderRecordingState(holder: Holder, state: VoiceBroadcastRecorder.State) { private fun renderRecordingState(holder: Holder, state: VoiceBroadcastRecorder.State) {
with(holder) {
when (state) { when (state) {
VoiceBroadcastRecorder.State.Recording -> { VoiceBroadcastRecorder.State.Recording -> renderPlayingState(holder)
VoiceBroadcastRecorder.State.Paused -> renderPausedState(holder)
VoiceBroadcastRecorder.State.Idle -> renderStoppedState(holder)
}
}
private fun renderVoiceBroadcastState(holder: Holder) {
when (voiceBroadcastState) {
VoiceBroadcastState.STARTED,
VoiceBroadcastState.RESUMED -> renderPlayingState(holder)
VoiceBroadcastState.PAUSED -> renderPausedState(holder)
VoiceBroadcastState.STOPPED,
null -> renderStoppedState(holder)
}
}
private fun renderPlayingState(holder: Holder) = with(holder) {
stopRecordButton.isEnabled = true stopRecordButton.isEnabled = true
recordButton.isEnabled = true recordButton.isEnabled = true
@ -69,7 +88,8 @@ abstract class MessageVoiceBroadcastRecordingItem : AbsMessageVoiceBroadcastItem
recordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Pause) } recordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Pause) }
stopRecordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Stop) } stopRecordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Stop) }
} }
VoiceBroadcastRecorder.State.Paused -> {
private fun renderPausedState(holder: Holder) = with(holder) {
stopRecordButton.isEnabled = true stopRecordButton.isEnabled = true
recordButton.isEnabled = true recordButton.isEnabled = true
@ -78,17 +98,16 @@ abstract class MessageVoiceBroadcastRecordingItem : AbsMessageVoiceBroadcastItem
recordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Resume) } recordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Resume) }
stopRecordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Stop) } stopRecordButton.onClick { attributes.callback?.onTimelineItemAction(VoiceBroadcastAction.Recording.Stop) }
} }
VoiceBroadcastRecorder.State.Idle -> {
private fun renderStoppedState(holder: Holder) = with(holder) {
recordButton.isEnabled = false recordButton.isEnabled = false
stopRecordButton.isEnabled = false stopRecordButton.isEnabled = false
} }
}
}
}
override fun unbind(holder: Holder) { override fun unbind(holder: Holder) {
super.unbind(holder) super.unbind(holder)
voiceBroadcastRecorder?.removeListener(recorderListener) recorderListener?.let { voiceBroadcastRecorder?.removeListener(it) }
recorderListener = null
} }
override fun getViewStubId() = STUB_ID override fun getViewStubId() = STUB_ID