diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 70b95aefab..60015b0fa3 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -704,10 +704,6 @@ class RoomDetailFragment @Inject constructor( } } - override fun onVoiceRecordingPlaybackModeOn() { - roomDetailViewModel.handle(RoomDetailAction.PauseRecordingVoiceMessage) - } - override fun onVoicePlaybackButtonClicked() { roomDetailViewModel.handle(RoomDetailAction.PlayOrPauseRecordingPlayback) } @@ -724,21 +720,23 @@ class RoomDetailFragment @Inject constructor( updateRecordingUiState(state) } - override fun sendVoiceMessage() { + override fun onSendVoiceMessage() { updateRecordingUiState(RecordingUiState.None) } - override fun deleteVoiceMessage() { + override fun onDeleteVoiceMessage() { roomDetailViewModel.handle(RoomDetailAction.EndRecordingVoiceMessage(isCancelled = true)) updateRecordingUiState(RecordingUiState.None) } override fun onRecordingLimitReached() { updateRecordingUiState(RecordingUiState.Playback) + roomDetailViewModel.handle(RoomDetailAction.PauseRecordingVoiceMessage) } - override fun recordingWaveformClicked() { + override fun onRecordingWaveformClicked() { updateRecordingUiState(RecordingUiState.Playback) + roomDetailViewModel.handle(RoomDetailAction.PauseRecordingVoiceMessage) } private fun updateRecordingUiState(state: RecordingUiState) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageRecorderView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageRecorderView.kt index 7f6f9505f0..818a22107f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageRecorderView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageRecorderView.kt @@ -41,14 +41,13 @@ class VoiceMessageRecorderView @JvmOverloads constructor( interface Callback { fun onVoiceRecordingStarted() - fun onVoiceRecordingPlaybackModeOn() + fun onVoiceRecordingEnded(lastKnownState: RecordingUiState?) fun onVoicePlaybackButtonClicked() fun onUiStateChanged(state: RecordingUiState) - fun sendVoiceMessage() - fun deleteVoiceMessage() + fun onSendVoiceMessage() + fun onDeleteVoiceMessage() fun onRecordingLimitReached() - fun recordingWaveformClicked() - fun onVoiceRecordingEnded(lastKnownState: RecordingUiState?) + fun onRecordingWaveformClicked() } // We need to define views as lateinit var to be able to check if initialized for the bug fix on api 21 and 22. @@ -70,25 +69,15 @@ class VoiceMessageRecorderView @JvmOverloads constructor( initListeners() } - override fun onVisibilityChanged(changedView: View, visibility: Int) { - super.onVisibilityChanged(changedView, visibility) - // onVisibilityChanged is called by constructor on api 21 and 22. - if (!this::voiceMessageViews.isInitialized) return - val parentChanged = changedView == this - voiceMessageViews.renderVisibilityChanged(parentChanged, visibility) - } - private fun initListeners() { voiceMessageViews.start(object : VoiceMessageViews.Actions { - override fun onRequestRecording() { - callback.onVoiceRecordingStarted() - } - - override fun onMicButtonReleased() { - callback.onVoiceRecordingEnded(lastKnownState) - } - - override fun updateState(updater: (RecordingUiState) -> RecordingUiState) { + override fun onRequestRecording() = callback.onVoiceRecordingStarted() + override fun onMicButtonReleased() = callback.onVoiceRecordingEnded(lastKnownState) + override fun onSendVoiceMessage() = callback.onSendVoiceMessage() + override fun onDeleteVoiceMessage() = callback.onDeleteVoiceMessage() + override fun onWaveformClicked() = callback.onRecordingWaveformClicked() + override fun onVoicePlaybackButtonClicked() = callback.onVoicePlaybackButtonClicked() + override fun onMicButtonDrag(updater: (RecordingUiState) -> RecordingUiState) { when (val currentState = lastKnownState) { null, RecordingUiState.None -> { // ignore drag events when the view is idle @@ -104,25 +93,17 @@ class VoiceMessageRecorderView @JvmOverloads constructor( } } } - - override fun sendMessage() { - callback.sendVoiceMessage() - } - - override fun delete() { - callback.deleteVoiceMessage() - } - - override fun waveformClicked() { - callback.recordingWaveformClicked() - } - - override fun onVoicePlaybackButtonClicked() { - callback.onVoicePlaybackButtonClicked() - } }) } + override fun onVisibilityChanged(changedView: View, visibility: Int) { + super.onVisibilityChanged(changedView, visibility) + // onVisibilityChanged is called by constructor on api 21 and 22. + if (!this::voiceMessageViews.isInitialized) return + val parentChanged = changedView == this + voiceMessageViews.renderVisibilityChanged(parentChanged, visibility) + } + fun display(recordingState: RecordingUiState) { if (lastKnownState == recordingState) return val previousState = lastKnownState @@ -139,7 +120,7 @@ class VoiceMessageRecorderView @JvmOverloads constructor( } RecordingUiState.Cancelled -> { stopRecordingTicker() - voiceMessageViews.hideRecordingViews(recordingState) { callback.deleteVoiceMessage() } + voiceMessageViews.hideRecordingViews(recordingState) { callback.onDeleteVoiceMessage() } vibrate(context) } RecordingUiState.Locked -> { @@ -151,7 +132,6 @@ class VoiceMessageRecorderView @JvmOverloads constructor( RecordingUiState.Playback -> { stopRecordingTicker() voiceMessageViews.showPlaybackViews() - callback.onVoiceRecordingPlaybackModeOn() } is DraggingState -> when (recordingState) { is DraggingState.Cancelling -> voiceMessageViews.renderCancelling(recordingState.distanceX) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageViews.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageViews.kt index 12a32405b2..16a12aae35 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageViews.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/voice/VoiceMessageViews.kt @@ -48,16 +48,16 @@ class VoiceMessageViews( fun start(actions: Actions) { views.voiceMessageSendButton.setOnClickListener { views.voiceMessageSendButton.isVisible = false - actions.sendMessage() + actions.onSendVoiceMessage() } views.voiceMessageDeletePlayback.setOnClickListener { views.voiceMessageSendButton.isVisible = false - actions.delete() + actions.onDeleteVoiceMessage() } views.voicePlaybackWaveform.setOnClickListener { - actions.waveformClicked() + actions.onWaveformClicked() } views.voicePlaybackControlButton.setOnClickListener { @@ -81,7 +81,7 @@ class VoiceMessageViews( true } MotionEvent.ACTION_MOVE -> { - actions.updateState { currentState -> positions.process(event, currentState) } + actions.onMicButtonDrag { currentState -> positions.process(event, currentState) } true } else -> false @@ -341,10 +341,10 @@ class VoiceMessageViews( interface Actions { fun onRequestRecording() fun onMicButtonReleased() - fun updateState(updater: (RecordingUiState) -> RecordingUiState) - fun sendMessage() - fun delete() - fun waveformClicked() + fun onMicButtonDrag(updater: (RecordingUiState) -> RecordingUiState) + fun onSendVoiceMessage() + fun onDeleteVoiceMessage() + fun onWaveformClicked() fun onVoicePlaybackButtonClicked() } }