diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt index e74fdf7..1714a77 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt @@ -1180,7 +1180,7 @@ fun MessageInputBar( } fun startVoiceRecording() { - if (isVoiceRecording) return + if (isVoiceRecording || isVoiceRecordTransitioning || voiceRecorder != null) return inputJumpLog( "startVoiceRecording begin mode=$recordMode state=$recordUiState kb=$isKeyboardVisible emojiBox=${coordinator.isEmojiBoxVisible} " + "emojiPicker=$showEmojiPicker panelH=$inputPanelHeightPx normalH=$normalInputRowHeightPx" @@ -1227,20 +1227,25 @@ fun MessageInputBar( ) scope.launch { - repeat(12) { - if (!isKeyboardVisible && !coordinator.isEmojiBoxVisible) return@repeat - delay(16) + try { + repeat(12) { + if (!isKeyboardVisible && !coordinator.isEmojiBoxVisible) return@repeat + delay(16) + } + isVoiceRecording = true + isVoiceRecordTransitioning = false + if (recordUiState == RecordUiState.PRESSING || recordUiState == RecordUiState.IDLE) { + setRecordUiState(RecordUiState.RECORDING, "voice-recorder-started") + } + inputJumpLog( + "startVoiceRecording ui-enter mode=$recordMode state=$recordUiState voice=$isVoiceRecording kb=$isKeyboardVisible " + + "emojiBox=${coordinator.isEmojiBoxVisible} transitioning=$isVoiceRecordTransitioning " + + "panelH=$inputPanelHeightPx recH=$recordingInputRowHeightPx" + ) + } catch (e: Exception) { + isVoiceRecordTransitioning = false + inputJumpLog("startVoiceRecording launch failed: ${e.message}") } - isVoiceRecording = true - isVoiceRecordTransitioning = false - if (recordUiState == RecordUiState.PRESSING || recordUiState == RecordUiState.IDLE) { - setRecordUiState(RecordUiState.RECORDING, "voice-recorder-started") - } - inputJumpLog( - "startVoiceRecording ui-enter mode=$recordMode state=$recordUiState voice=$isVoiceRecording kb=$isKeyboardVisible " + - "emojiBox=${coordinator.isEmojiBoxVisible} transitioning=$isVoiceRecordTransitioning " + - "panelH=$inputPanelHeightPx recH=$recordingInputRowHeightPx" - ) } } catch (_: Exception) { isVoiceRecordTransitioning = false @@ -1420,8 +1425,9 @@ fun MessageInputBar( DisposableEffect(Unit) { onDispose { pendingRecordAfterPermission = false + isVoiceRecordTransitioning = false resetGestureState() - if (isVoiceRecording) { + if (isVoiceRecording || voiceRecorder != null) { stopVoiceRecording(send = false) } else { setRecordUiState(RecordUiState.IDLE, "dispose")