3.4 KiB
3.4 KiB
Исправление закрытия диалога выбора реакции
Проблема
После добавления реакции на сообщение диалог выбора эмодзи не закрывался, что создавало плохой пользовательский опыт.
Решение
Были внесены следующие изменения:
1. Исправление в MessageAdapter.kt
- Добавлен вызов
dialog.dismiss()в обработчик клика по эмодзи - Добавлен новый callback
onReactionAddedдля принудительного обновления сообщений
2. Исправление в ChatViewModel.kt
- Добавлена проверка реакций в методе
hasMessagesChanged() - Добавлено принудительное обновление сообщений после добавления/удаления реакции
3. Исправление в ChatActivity.kt
- Добавлен callback
onReactionAddedдля принудительного обновления сообщений - Реализована логика принудительного обновления сообщений после добавления реакции
Технические детали
MessageAdapter.kt
// В обработчике клика по эмодзи добавлено:
setOnItemClickListener {
onAddReaction?.invoke(message, emoji)
// Dismiss the dialog
dialog.dismiss()
}
ChatViewModel.kt
// В методе hasMessagesChanged() добавлена проверка реакций:
// Compare reactions (this affects message display)
val currentReactions = current.reactions ?: emptyList()
val newReactions = new.reactions ?: emptyList()
if (currentReactions.size != newReactions.size) {
return true
}
// Compare reaction content (emoji and who reacted)
val currentReactionsSorted = currentReactions.sortedBy { it.id }
val newReactionsSorted = newReactions.sortedBy { it.id }
for (k in currentReactionsSorted.indices) {
val currentReaction = currentReactionsSorted[k]
val newReaction = newReactionsSorted.getOrNull(k) ?: return true
if (currentReaction.id != newReaction.id ||
currentReaction.reaction != newReaction.reaction ||
currentReaction.chatUserId != newReaction.chatUserId) {
return true
}
}
ChatActivity.kt
// Добавлен callback для принудительного обновления:
onReactionAdded = {
// Force refresh messages after reaction is added
shouldScrollAfterRefresh = true
viewModel.refreshMessages()
}
Результат
- Диалог выбора эмодзи теперь закрывается сразу после выбора
- Сообщения обновляются в реальном времени после добавления реакции
- Улучшен пользовательский опыт при работе с реакциями
Тестирование
- Открыть чат
- Долгое нажатие на сообщение → "Добавить реакцию"
- Выбрать эмодзи
- Убедиться, что диалог закрывается
- Проверить, что реакция отображается на сообщении