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

80 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Исправление закрытия диалога выбора реакции
## Проблема
После добавления реакции на сообщение диалог выбора эмодзи не закрывался, что создавало плохой пользовательский опыт.
## Решение
Были внесены следующие изменения:
### 1. Исправление в MessageAdapter.kt
- Добавлен вызов `dialog.dismiss()` в обработчик клика по эмодзи
- Добавлен новый callback `onReactionAdded` для принудительного обновления сообщений
### 2. Исправление в ChatViewModel.kt
- Добавлена проверка реакций в методе `hasMessagesChanged()`
- Добавлено принудительное обновление сообщений после добавления/удаления реакции
### 3. Исправление в ChatActivity.kt
- Добавлен callback `onReactionAdded` для принудительного обновления сообщений
- Реализована логика принудительного обновления сообщений после добавления реакции
## Технические детали
### MessageAdapter.kt
```kotlin
// В обработчике клика по эмодзи добавлено:
setOnItemClickListener {
onAddReaction?.invoke(message, emoji)
// Dismiss the dialog
dialog.dismiss()
}
```
### ChatViewModel.kt
```kotlin
// В методе 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
```kotlin
// Добавлен callback для принудительного обновления:
onReactionAdded = {
// Force refresh messages after reaction is added
shouldScrollAfterRefresh = true
viewModel.refreshMessages()
}
```
## Результат
- Диалог выбора эмодзи теперь закрывается сразу после выбора
- Сообщения обновляются в реальном времени после добавления реакции
- Улучшен пользовательский опыт при работе с реакциями
## Тестирование
1. Открыть чат
2. Долгое нажатие на сообщение → "Добавить реакцию"
3. Выбрать эмодзи
4. Убедиться, что диалог закрывается
5. Проверить, что реакция отображается на сообщении