From c76fa97ef7a0cec3502ca446afa3c408840ead8a Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Mon, 29 Jun 2026 13:11:03 -0400 Subject: [PATCH] fix: reset IME keyboard mode after sending a message Call InputMethodManager.restartInput() after send to switch the keyboard back from emoji/sticker mode to the standard text input mode. Signed-off-by: Brandon McAnsh --- .gitignore | 2 ++ .../com/flipcash/app/messenger/internal/ChatViewModel.kt | 3 ++- .../app/messenger/internal/screens/MessengerScreen.kt | 5 ++++- .../src/main/kotlin/com/getcode/ui/utils/Keyboard.kt | 8 ++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 9d539889a..14409355f 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,5 @@ serviceAccount.json # Maestro screenshot test artifacts maestro/screenshots/results/ maestro/screenshots/diffs/ + +docs/superpowers/ diff --git a/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/ChatViewModel.kt b/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/ChatViewModel.kt index 855cbf3ef..31c54c880 100644 --- a/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/ChatViewModel.kt +++ b/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/ChatViewModel.kt @@ -2,6 +2,7 @@ package com.flipcash.app.messenger.internal import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.clearText +import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd import androidx.compose.runtime.snapshotFlow import androidx.lifecycle.viewModelScope import androidx.paging.PagingData @@ -465,7 +466,7 @@ internal class ChatViewModel @Inject constructor( val chatId = stateFlow.value.chatId ?: return@onEach if (textToSend.isBlank()) return@onEach - stateFlow.value.chatInputState.clearText() + stateFlow.value.chatInputState.setTextAndPlaceCursorAtEnd("") viewModelScope.launch { chatCoordinator.sendMessage(chatId, textToSend) diff --git a/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/screens/MessengerScreen.kt b/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/screens/MessengerScreen.kt index 1d72d8cda..7b23d4005 100644 --- a/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/screens/MessengerScreen.kt +++ b/apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/screens/MessengerScreen.kt @@ -303,7 +303,10 @@ private fun UserControlBottomBar( focusRequester = focusRequester, hint = "Message", state = state.chatInputState, - onSendMessage = { dispatch(ChatViewModel.Event.SendMessage) }, + onSendMessage = { + dispatch(ChatViewModel.Event.SendMessage) + keyboard.restartInput() + }, ) LaunchedEffect(Unit) { diff --git a/ui/components/src/main/kotlin/com/getcode/ui/utils/Keyboard.kt b/ui/components/src/main/kotlin/com/getcode/ui/utils/Keyboard.kt index f1367ab34..9b35f0a0a 100644 --- a/ui/components/src/main/kotlin/com/getcode/ui/utils/Keyboard.kt +++ b/ui/components/src/main/kotlin/com/getcode/ui/utils/Keyboard.kt @@ -1,8 +1,10 @@ package com.getcode.ui.utils import android.annotation.SuppressLint +import android.content.Context import android.view.View import android.view.ViewTreeObserver +import android.view.inputmethod.InputMethodManager import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.State @@ -55,6 +57,12 @@ class KeyboardController( softwareController?.hide() } + fun restartInput() { + val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) + as InputMethodManager + imm.restartInput(view) + } + fun hideIfVisible(block: () -> Unit = { }) { coroutineScope.launch { if (visible) {