From c0d7afe86c0c286c7fc4f71e9aa98d6e7f250aa9 Mon Sep 17 00:00:00 2001 From: davotoula Date: Mon, 15 Dec 2025 17:24:45 +0100 Subject: [PATCH] fix potential race condition with previous recorder in method stop --- .../ui/actions/uploads/VoiceMessageRecorder.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessageRecorder.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessageRecorder.kt index 5c5115eae..6e5323cc4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessageRecorder.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessageRecorder.kt @@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.ui.actions.uploads import android.content.Context import android.media.MediaRecorder import android.os.Build +import android.util.Log import androidx.media3.common.MimeTypes import com.vitorpamplona.quartz.utils.RandomInstance import com.vitorpamplona.quartz.utils.TimeUtils @@ -53,7 +54,7 @@ class VoiceMessageRecorder { MediaRecorder() } - suspend fun start( + fun start( context: Context, scope: CoroutineScope, ) { @@ -88,8 +89,15 @@ class VoiceMessageRecorder { } } - suspend fun stop(): RecordingResult? { - recorder?.stop() + fun stop(): RecordingResult? { + job?.cancel() + job = null + + try { + recorder?.stop() + } catch (e: RuntimeException) { + Log.w("VoiceMessageRecorder", "Failed to stop recording... Too short?", e) + } recorder?.reset() recorder = null val currentTime = TimeUtils.now()