This commit is contained in:
Viktoria Polyakova
2026-01-30 16:58:30 +03:00
parent a5ed6b8664
commit 9f8b968452
249 changed files with 32198 additions and 0 deletions

79
REACTION_DIALOG_FIX.md Normal file
View 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. Проверить, что реакция отображается на сообщении