diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt index 2534ef29..abcab169 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt @@ -88,6 +88,7 @@ private fun VoiceBubble(message: Message, textColor: Color, val durMs = message.voiceDurationMs var playing by remember { mutableStateOf(false) } var paused by remember { mutableStateOf(false) } + var seekVersion by remember { mutableStateOf(0) } var elapsedMs by remember { mutableStateOf(0) } var progress by remember { mutableStateOf(0f) } @@ -95,7 +96,7 @@ private fun VoiceBubble(message: Message, textColor: Color, val onPaused = remember { { paused = true; playing = false } } /* elapsed timer while playing */ - LaunchedEffect(playing) { + LaunchedEffect(playing, seekVersion) { if (playing && !paused) { val start = System.currentTimeMillis() - elapsedMs while (playing && !paused) { @@ -116,6 +117,7 @@ private fun VoiceBubble(message: Message, textColor: Color, if (playing && !paused) { onPlay(message.filePath, onDone, onPaused) } else { + seekVersion++ playing = true; paused = false onPlay(message.filePath, onDone, onPaused) } @@ -136,6 +138,7 @@ private fun VoiceBubble(message: Message, textColor: Color, if (message.filePath.isEmpty()) return@detectTapGestures val seekFrac = (offset.x / size.width).coerceIn(0f, 1f) val seekMs = (seekFrac * durMs).toInt() + seekVersion++ playing = true; paused = false; elapsedMs = seekMs; progress = seekFrac onSeek(message.filePath, seekMs, onDone) }