Files
MCAdroidApp/REACTION_DIALOG_FIX.md
Viktoria Polyakova 9f8b968452 Updated
2026-01-30 16:58:30 +03:00

3.4 KiB
Raw Blame History

Исправление закрытия диалога выбора реакции

Проблема

После добавления реакции на сообщение диалог выбора эмодзи не закрывался, что создавало плохой пользовательский опыт.

Решение

Были внесены следующие изменения:

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()
}

Результат

  • Диалог выбора эмодзи теперь закрывается сразу после выбора
  • Сообщения обновляются в реальном времени после добавления реакции
  • Улучшен пользовательский опыт при работе с реакциями

Тестирование

  1. Открыть чат
  2. Долгое нажатие на сообщение → "Добавить реакцию"
  3. Выбрать эмодзи
  4. Убедиться, что диалог закрывается
  5. Проверить, что реакция отображается на сообщении