80 lines
3.4 KiB
Markdown
80 lines
3.4 KiB
Markdown
# Исправление закрытия диалога выбора реакции
|
||
|
||
## Проблема
|
||
После добавления реакции на сообщение диалог выбора эмодзи не закрывался, что создавало плохой пользовательский опыт.
|
||
|
||
## Решение
|
||
Были внесены следующие изменения:
|
||
|
||
### 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. Проверить, что реакция отображается на сообщении
|