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

3.4 KiB
Raw Permalink 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. Проверить, что реакция отображается на сообщении