feat: Refine emoji picker toggle logic to implement cooldown without strict blocking
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
// Кэшируем текст
|
||||
|
||||
Reference in New Issue
Block a user