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 8c174b21..e81b0a9b 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 @@ -185,47 +185,49 @@ fun InputBar( } } else { /* Idle: PTT + send */ - IconButton( - onClick = { - if (!hasMicPerm) { permLauncher.launch(Manifest.permission.RECORD_AUDIO); return@IconButton } - }, - enabled = true, - modifier = Modifier.pointerInput(Unit) { - awaitPointerEventScope { - /* wait for the first down */ - var event = awaitPointerEvent() - var change = event.changes.firstOrNull() ?: return@awaitPointerEventScope - if (!change.pressed) return@awaitPointerEventScope - change.consume() - - if (!hasMicPerm) return@awaitPointerEventScope - onPttPressed() - var locked = false - var totalDragY = 0f - var lastY = change.position.y - - while (true) { - event = awaitPointerEvent() - change = event.changes.firstOrNull() ?: break - if (change.pressed) { - val dy = change.position.y - lastY - lastY = change.position.y - totalDragY += dy - if (totalDragY < -lockThresholdPx && !locked) { - locked = true; onPttLock() + Box( + modifier = Modifier + .size(48.dp) + .pointerInput(hasMicPerm) { + awaitPointerEventScope { + val down = awaitPointerEvent() + val ch = down.changes.firstOrNull() ?: return@awaitPointerEventScope + if (!ch.pressed) return@awaitPointerEventScope + ch.consume() + + if (!hasMicPerm) { + permLauncher.launch(Manifest.permission.RECORD_AUDIO) + return@awaitPointerEventScope + } + + onPttPressed() + var locked = false + var totalDragY = 0f + var lastY = ch.position.y + + while (true) { + val event = awaitPointerEvent() + val change = event.changes.firstOrNull() ?: break + if (change.pressed) { + val dy = change.position.y - lastY + lastY = change.position.y + totalDragY += dy + if (totalDragY < -lockThresholdPx && !locked) { locked = true; onPttLock() } + change.consume() + } else { + change.consume(); break } - change.consume() - } else { - change.consume(); break } + onPttReleased() } - onPttReleased() - } - } + }, + contentAlignment = Alignment.Center ) { Text("\uD83C\uDFA4", fontSize = 20.sp) } + Spacer(Modifier.width(4.dp)) + Button(onClick = onSend, enabled = enabled && text.isNotBlank()) { Text("Send") }