3.7 KiB
3.7 KiB
Исправление проблемы с реакциями в чате
Проблема
После нажатия на эмодзи в окне выбора для реакции:
- Окно выбора не закрывалось
- Чат сообщение не обновлялось и реакции не показывались
Причина
В коде 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")
}
)
}
Что было исправлено
- Закрытие диалога: Диалог теперь корректно закрывается при нажатии на любой эмодзи
- Обновление сообщений: После успешного добавления реакции сообщения перезагружаются, и реакции отображаются в интерфейсе
- Валидация эмодзи: Реакции проверяются на соответствие разрешенным эмодзи из
ALLOWED_EMOJIS
Тестирование
Для тестирования можно использовать:
- Открыть чат
- Нажать на любое сообщение (длинное нажатие)
- Выбрать "Добавить реакцию"
- Нажать на любой эмодзи из предложенных
- Убедиться, что:
- Диалог закрывается
- Сообщение обновляется
- Реакция отображается на сообщении
Технические детали
- Файл:
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- Отображение реакций в сообщениях