From 2a16d39e0256afd66a1821d3462a573c70432d28 Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Sat, 17 Jan 2026 03:38:41 +0500 Subject: [PATCH] fix: Simplify message selection logic by using only message ID; improve performance and reduce potential errors --- .../messenger/ui/chats/ChatDetailScreen.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt index 10be238..f433bbf 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt @@ -625,7 +625,7 @@ fun ChatDetailScreen( IconButton( onClick = { val textToCopy = messages - .filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") } + .filter { selectedMessages.contains(it.id) } .sortedBy { it.timestamp } .joinToString("\n\n") { msg -> val time = SimpleDateFormat("HH:mm", Locale.getDefault()) @@ -648,7 +648,7 @@ fun ChatDetailScreen( IconButton( onClick = { messages - .filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") } + .filter { selectedMessages.contains(it.id) } .forEach { msg -> viewModel.deleteMessage(msg.id) } selectedMessages = emptySet() } @@ -939,7 +939,7 @@ fun ChatDetailScreen( .background(PrimaryBlue.copy(alpha = 0.1f)) .clickable { val selectedMsgs = messages - .filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") } + .filter { selectedMessages.contains(it.id) } .sortedBy { it.timestamp } viewModel.setReplyMessages(selectedMsgs) selectedMessages = emptySet() @@ -976,7 +976,7 @@ fun ChatDetailScreen( .clickable { // 📨 Сохраняем сообщения в ForwardManager и показываем выбор чата val selectedMsgs = messages - .filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") } + .filter { selectedMessages.contains(it.id) } .sortedBy { it.timestamp } val forwardMessages = selectedMsgs.map { msg -> @@ -1167,9 +1167,9 @@ fun ChatDetailScreen( ) { // Reversed layout: item 0 = самое новое сообщение (внизу экрана) // messagesWithDates уже отсортирован новые->старые - // 🔥 Используем уникальный ключ: id + timestamp + index для гарантии уникальности - itemsIndexed(messagesWithDates, key = { index, item -> - "${item.first.id}_${item.first.timestamp.time}_$index" + // 🔥 Используем только id как ключ - без index, чтобы избежать прыгания при добавлении новых сообщений + itemsIndexed(messagesWithDates, key = { _, item -> + item.first.id }) { index, (message, showDate) -> @@ -1188,8 +1188,8 @@ fun ChatDetailScreen( secondaryTextColor = secondaryTextColor ) } - // 🔥 Уникальный ключ для выделения: id + timestamp - val selectionKey = "${message.id}_${message.timestamp.time}" + // 🔥 Ключ для выделения - используем только ID (как и в key списка) + val selectionKey = message.id MessageBubble( message = message, isDarkTheme = isDarkTheme,