feat: Implement instant keyboard hiding functionality in SearchScreen and ChatDetailScreen
This commit is contained in:
@@ -299,9 +299,12 @@ fun ChatDetailScreen(
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 Закрытие экрана
|
||||
// 🔥 Закрытие экрана - мгновенно прячем клавиатуру через InputMethodManager
|
||||
val hideKeyboardAndBack: () -> Unit = {
|
||||
keyboardController?.hide()
|
||||
// Используем нативный InputMethodManager для МГНОВЕННОГО закрытия
|
||||
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
imm.hideSoftInputFromWindow(view.windowToken, 0)
|
||||
focusManager.clearFocus()
|
||||
onBack()
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,11 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import android.content.Context
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -45,6 +50,18 @@ fun SearchScreen(
|
||||
onBackClick: () -> Unit,
|
||||
onUserSelect: (SearchUser) -> Unit
|
||||
) {
|
||||
// Context и View для мгновенного закрытия клавиатуры
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
val focusManager = LocalFocusManager.current
|
||||
|
||||
// 🔥 Функция мгновенного закрытия клавиатуры
|
||||
val hideKeyboardInstantly: () -> Unit = {
|
||||
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
imm.hideSoftInputFromWindow(view.windowToken, 0)
|
||||
focusManager.clearFocus()
|
||||
}
|
||||
|
||||
// Цвета ТОЧНО как в ChatsListScreen
|
||||
val backgroundColor = if (isDarkTheme) Color(0xFF1A1A1A) else Color(0xFFFFFFFF)
|
||||
val textColor = if (isDarkTheme) Color.White else Color(0xFF1a1a1a)
|
||||
@@ -101,8 +118,11 @@ fun SearchScreen(
|
||||
.padding(horizontal = 4.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
// Кнопка назад
|
||||
IconButton(onClick = onBackClick) {
|
||||
// Кнопка назад - с мгновенным закрытием клавиатуры
|
||||
IconButton(onClick = {
|
||||
hideKeyboardInstantly()
|
||||
onBackClick()
|
||||
}) {
|
||||
Icon(
|
||||
Icons.Default.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
@@ -221,6 +241,7 @@ fun SearchScreen(
|
||||
textColor = textColor,
|
||||
secondaryTextColor = secondaryTextColor,
|
||||
onClick = {
|
||||
hideKeyboardInstantly()
|
||||
RecentSearchesManager.addUser(user)
|
||||
onUserSelect(user)
|
||||
},
|
||||
@@ -239,6 +260,8 @@ fun SearchScreen(
|
||||
isDarkTheme = isDarkTheme,
|
||||
preloadedComposition = searchLottieComposition,
|
||||
onUserClick = { user ->
|
||||
// Мгновенно закрываем клавиатуру
|
||||
hideKeyboardInstantly()
|
||||
// Сохраняем пользователя в историю
|
||||
RecentSearchesManager.addUser(user)
|
||||
onUserSelect(user)
|
||||
|
||||
Reference in New Issue
Block a user