Закрытие клавиатуры на звонке

This commit is contained in:
2026-03-28 13:01:19 +05:00
parent 3eac17d9a8
commit 20c6696fdf

View File

@@ -20,7 +20,12 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.platform.LocalView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.firebase.FirebaseApp import com.google.firebase.FirebaseApp
@@ -586,6 +591,9 @@ fun MainScreen(
// Load username AND name from AccountManager (persisted in DataStore) // Load username AND name from AccountManager (persisted in DataStore)
val context = LocalContext.current val context = LocalContext.current
val keyboardController = LocalSoftwareKeyboardController.current
val focusManager = LocalFocusManager.current
val rootView = LocalView.current
val callScope = rememberCoroutineScope() val callScope = rememberCoroutineScope()
val callUiState by CallManager.state.collectAsState() val callUiState by CallManager.state.collectAsState()
var pendingOutgoingCall by remember { mutableStateOf<SearchUser?>(null) } var pendingOutgoingCall by remember { mutableStateOf<SearchUser?>(null) }
@@ -757,6 +765,20 @@ fun MainScreen(
CallManager.bindAccount(accountPublicKey) CallManager.bindAccount(accountPublicKey)
} }
LaunchedEffect(callUiState.isVisible) {
if (callUiState.isVisible) {
keyboardController?.hide()
focusManager.clearFocus(force = true)
// Fallback for cases where IME survives focus reset due to window transitions.
val activity = rootView.context as? android.app.Activity
activity?.window?.let { window ->
WindowCompat.getInsetsController(window, rootView)
?.hide(WindowInsetsCompat.Type.ime())
}
}
}
LaunchedEffect(accountPublicKey, reloadTrigger) { LaunchedEffect(accountPublicKey, reloadTrigger) {
if (accountPublicKey.isNotBlank()) { if (accountPublicKey.isNotBlank()) {
val accountManager = AccountManager(context) val accountManager = AccountManager(context)