feat: Refine emoji picker toggle logic to implement cooldown without strict blocking

This commit is contained in:
k1ngsterr1
2026-01-15 16:31:42 +05:00
parent 3203cbf9f9
commit 327b12a462
2 changed files with 7 additions and 19 deletions

View File

@@ -2107,7 +2107,7 @@ private fun MessageInputBar(
// <20> Защита от слишком частого переключения клавиатуры (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

View File

@@ -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()
// Кэшируем текст