feat: Add account initialization in ProtocolManager and enhance keyboard handling on screen exit
This commit is contained in:
@@ -218,7 +218,7 @@ fun ChatDetailScreen(
|
||||
onUserProfileClick: () -> Unit = {},
|
||||
viewModel: ChatViewModel = viewModel()
|
||||
) {
|
||||
// 🔥 Автоматическое скрытие клавиатуры при выходе с экрана
|
||||
// 🔥 Backup: скрывает клавиатуру при dispose (если не скрыли раньше)
|
||||
HideKeyboardOnDispose()
|
||||
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
@@ -288,14 +288,16 @@ fun ChatDetailScreen(
|
||||
var selectedMessages by remember { mutableStateOf<Set<String>>(emptySet()) }
|
||||
val isSelectionMode = selectedMessages.isNotEmpty()
|
||||
|
||||
// 🔥 Быстрое закрытие - мгновенный выход без дополнительной анимации
|
||||
// 🔥 Быстрое закрытие - СНАЧАЛА скрываем клавиатуру, ПОТОМ выходим
|
||||
val hideKeyboardAndBack: () -> Unit = {
|
||||
// Мгновенно убираем фокус и клавиатуру
|
||||
// 1. Убираем фокус (это важно сделать первым!)
|
||||
focusManager.clearFocus(force = true)
|
||||
keyboardController?.hide()
|
||||
// Сразу выходим - анимация в MainActivity
|
||||
|
||||
// 2. Мгновенное синхронное скрытие клавиатуры через InputMethodManager
|
||||
keyboard.hideNow()
|
||||
|
||||
// 3. Теперь выходим - клавиатура уже скрыта
|
||||
onBack()
|
||||
Unit
|
||||
}
|
||||
|
||||
// Определяем это Saved Messages или обычный чат
|
||||
@@ -378,8 +380,9 @@ fun ChatDetailScreen(
|
||||
// 🔥 Cleanup при выходе из экрана
|
||||
DisposableEffect(Unit) {
|
||||
onDispose {
|
||||
focusManager.clearFocus()
|
||||
keyboardController?.hide()
|
||||
// Скрываем клавиатуру синхронно (backup если не скрыли раньше)
|
||||
focusManager.clearFocus(force = true)
|
||||
keyboard.hideNow()
|
||||
// 🔥 Закрываем диалог - сообщения больше не будут читаться автоматически
|
||||
viewModel.closeDialog()
|
||||
}
|
||||
@@ -527,11 +530,15 @@ fun ChatDetailScreen(
|
||||
) {
|
||||
// 🔔 Кнопка назад с badge непрочитанных сообщений
|
||||
Box {
|
||||
IconButton(onClick = hideKeyboardAndBack) {
|
||||
IconButton(
|
||||
onClick = hideKeyboardAndBack,
|
||||
modifier = Modifier.size(40.dp)
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.ArrowBack,
|
||||
Icons.Default.KeyboardArrowLeft,
|
||||
contentDescription = "Back",
|
||||
tint = headerIconColor
|
||||
tint = headerIconColor,
|
||||
modifier = Modifier.size(32.dp)
|
||||
)
|
||||
}
|
||||
// Badge с количеством непрочитанных из других чатов
|
||||
@@ -542,7 +549,7 @@ fun ChatDetailScreen(
|
||||
.offset(x = (-4).dp, y = 6.dp)
|
||||
.size(if (totalUnreadFromOthers > 9) 20.dp else 18.dp)
|
||||
.clip(CircleShape)
|
||||
.background(PrimaryBlue),
|
||||
.background(Color(0xFFFF3B30)), // Красный цвет как в iOS
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Text(
|
||||
@@ -558,6 +565,8 @@ fun ChatDetailScreen(
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
|
||||
// Аватар
|
||||
Box(
|
||||
modifier =
|
||||
|
||||
@@ -189,6 +189,8 @@ fun ChatsListScreen(
|
||||
chatsViewModel.setAccount(accountPublicKey, accountPrivateKey)
|
||||
// Устанавливаем аккаунт для RecentSearchesManager
|
||||
RecentSearchesManager.setAccount(accountPublicKey)
|
||||
// 🔥 КРИТИЧНО: Инициализируем MessageRepository для обработки входящих сообщений
|
||||
ProtocolManager.initializeAccount(accountPublicKey, accountPrivateKey)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user