diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt index bd19460..b9d9857 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt @@ -2107,7 +2107,7 @@ private fun MessageInputBar( // � Защита от слишком частого переключения клавиатуры (300ms cooldown) var lastToggleTime by remember { mutableLongStateOf(0L) } - val toggleCooldownMs = 300L + val toggleCooldownMs = 500L // 🚫 Флаг "клавиатура анимируется" - блокирует переключение пока высота не стабилизируется var isKeyboardAnimating by remember { mutableStateOf(false) } @@ -2190,7 +2190,7 @@ private fun MessageInputBar( // 🔥 Функция переключения emoji picker с Telegram-style transitions fun toggleEmojiPicker() { - // 🚫 Защита от слишком частого переключения + // 🚫 Защита от слишком частого переключения (только cooldown, убираем строгие блокировки) val currentTime = System.currentTimeMillis() val timeSinceLastToggle = currentTime - lastToggleTime @@ -2199,18 +2199,6 @@ private fun MessageInputBar( return } - // 🚫 БЛОКИРОВКА: Если идет анимация - запрещаем переключение - if (coordinator.currentState != KeyboardTransitionCoordinator.TransitionState.IDLE) { - android.util.Log.d("EmojiPicker", "⏸️ Toggle blocked: animation in progress (state=${coordinator.currentState})") - return - } - - // 🚫 БЛОКИРОВКА: Если клавиатура еще анимируется (не стабилизировалась) - if (isKeyboardAnimating) { - android.util.Log.d("EmojiPicker", "⏸️ Toggle blocked: keyboard still animating") - return - } - lastToggleTime = currentTime val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index cfdba91..5100f7d 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -848,6 +848,10 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { ) } else null + // Сохраняем reply для отправки ПЕРЕД очисткой + val replyMsgsToSend = replyMsgs.toList() + val isForwardToSend = isForward + // 1. 🚀 Optimistic UI - мгновенно показываем сообщение с reply bubble val optimisticMessage = ChatMessage( id = messageId, @@ -860,11 +864,7 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { _messages.value = _messages.value + optimisticMessage _inputText.value = "" - // Сохраняем reply для отправки - val replyMsgsToSend = replyMsgs.toList() - val isForwardToSend = isForward - - // Очищаем reply после отправки + // Очищаем reply ПОСЛЕ добавления сообщения в список clearReplyMessages() // Кэшируем текст