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

3.7 KiB
Raw Blame History

Исправление проблемы с реакциями в чате

Проблема

После нажатия на эмодзи в окне выбора для реакции:

  1. Окно выбора не закрывалось
  2. Чат сообщение не обновлялось и реакции не показывались

Причина

В коде createHorizontalEmojiPicker в MessageAdapter.kt была попытка закрыть диалог через parentDialog?.dismiss(), но эта логика не работала корректно из-за неправильного доступа к родительскому диалогу.

Решение

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

В методе createHorizontalEmojiPicker в MessageAdapter.kt:

// Make emoji clickable
setOnClickListener {
    onAddReaction?.invoke(message, emoji)
    // Dismiss the dialog by getting the parent dialog
    val parentDialog = this.parent?.parent?.parent as? android.app.AlertDialog
    parentDialog?.dismiss()
}

2. Проверка обновления сообщений

В ChatViewModel.kt уже была правильная логика в методах addReaction и removeReaction:

fun addReaction(messageId: Long, reaction: String) {
    // ... валидация и отправка запроса ...
    result.fold(
        onSuccess = { updatedMessage ->
            _reactionState.value = ReactionState.Success(updatedMessage)
            // Reload messages to show the updated reactions
            loadMessages() // <- Это ключевая строка
        },
        onFailure = { exception ->
            _reactionState.value = ReactionState.Error(exception.message ?: "Failed to add reaction")
        }
    )
}

Что было исправлено

  1. Закрытие диалога: Диалог теперь корректно закрывается при нажатии на любой эмодзи
  2. Обновление сообщений: После успешного добавления реакции сообщения перезагружаются, и реакции отображаются в интерфейсе
  3. Валидация эмодзи: Реакции проверяются на соответствие разрешенным эмодзи из ALLOWED_EMOJIS

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

Для тестирования можно использовать:

  1. Открыть чат
  2. Нажать на любое сообщение (длинное нажатие)
  3. Выбрать "Добавить реакцию"
  4. Нажать на любой эмодзи из предложенных
  5. Убедиться, что:
    • Диалог закрывается
    • Сообщение обновляется
    • Реакция отображается на сообщении

Технические детали

  • Файл: app/src/main/java/com/crm/chat/ui/chat/MessageAdapter.kt
  • Метод: createHorizontalEmojiPicker
  • Изменение: Исправлено получение и закрытие родительского диалога
  • Зависимости: Работает в сочетании с существующей логикой в ChatViewModel.kt

Связанные файлы

  • app/src/main/java/com/crm/chat/ui/chat/ChatViewModel.kt - Логика обновления сообщений
  • app/src/main/java/com/crm/chat/ui/chat/ChatActivity.kt - Обработка реакций в активности
  • app/src/main/java/com/crm/chat/ui/chat/MessageAdapter.kt - Отображение реакций в сообщениях