diff --git a/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt b/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt index 75576da6..42d910c9 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt @@ -58,6 +58,9 @@ fun ChatScreen( onWalletClick: () -> Unit = {}, onWalletClickWithToken: ((com.bitchat.android.parsing.ParsedCashuToken) -> Unit)? = null ) { + // Get focus manager for keyboard control + val focusManager = LocalFocusManager.current + // Initialize payment manager when wallet ViewModel is available LaunchedEffect(walletViewModel) { walletViewModel?.let { wallet -> @@ -65,6 +68,11 @@ fun ChatScreen( } } + // Initialize focus manager for keyboard control + LaunchedEffect(focusManager) { + viewModel.setFocusManager(focusManager) + } + val colorScheme = MaterialTheme.colorScheme val messages by viewModel.messages.observeAsState(emptyList()) val connectedPeers by viewModel.connectedPeers.observeAsState(emptyList()) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt index b5b509fb..32e87499 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt @@ -3,6 +3,7 @@ package com.bitchat.android.ui import android.app.Application import android.content.Context import android.util.Log +import androidx.compose.ui.focus.FocusManager import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.viewModelScope @@ -33,6 +34,9 @@ class ChatViewModel( private val context: Context = application.applicationContext + // Focus manager for keyboard control + private var focusManager: FocusManager? = null + // State management private val state = ChatState() @@ -52,6 +56,16 @@ class ChatViewModel( paymentManager = PaymentManager(viewModelScope, walletViewModel) } + // Initialize focus manager for keyboard control + fun setFocusManager(focusManager: FocusManager) { + this.focusManager = focusManager + } + + // Hide keyboard + fun hideKeyboard() { + focusManager?.clearFocus() + } + // Delegate handler for mesh callbacks private val meshDelegateHandler = MeshDelegateHandler( state = state, diff --git a/app/src/main/java/com/bitchat/android/ui/MainAppScreen.kt b/app/src/main/java/com/bitchat/android/ui/MainAppScreen.kt index cb255654..944b62b3 100644 --- a/app/src/main/java/com/bitchat/android/ui/MainAppScreen.kt +++ b/app/src/main/java/com/bitchat/android/ui/MainAppScreen.kt @@ -59,8 +59,14 @@ fun MainAppScreen( ChatScreen( viewModel = chatViewModel, walletViewModel = walletViewModel, - onWalletClick = { showWallet = true }, + onWalletClick = { + // Close the keyboard if it's open + chatViewModel.hideKeyboard() + showWallet = true + }, onWalletClickWithToken = { parsedToken -> + // Close the keyboard if it's open + chatViewModel.hideKeyboard() // Open wallet and show receive dialog with the parsed token immediately showWallet = true walletViewModel.openReceiveDialogWithParsedToken(parsedToken)