Updated
This commit is contained in:
79
REACTION_DIALOG_FIX.md
Normal file
79
REACTION_DIALOG_FIX.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Исправление закрытия диалога выбора реакции
|
||||
|
||||
## Проблема
|
||||
После добавления реакции на сообщение диалог выбора эмодзи не закрывался, что создавало плохой пользовательский опыт.
|
||||
|
||||
## Решение
|
||||
Были внесены следующие изменения:
|
||||
|
||||
### 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. Проверить, что реакция отображается на сообщении
|
||||
Reference in New Issue
Block a user