From 6dbac1eb4f5101095bba752d8508a4535ff30e83 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Tue, 15 Jul 2025 18:32:22 +0200 Subject: [PATCH] keyboard works --- .../main/java/com/bitchat/android/ui/ChatScreen.kt | 8 ++++++++ .../java/com/bitchat/android/ui/ChatViewModel.kt | 14 ++++++++++++++ .../java/com/bitchat/android/ui/MainAppScreen.kt | 8 +++++++- 3 files changed, 29 insertions(+), 1 deletion(-) 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)