From 6d379148b010a3c2c081dff7192e9b14e69747a4 Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Mon, 2 Mar 2026 11:35:03 +0500 Subject: [PATCH] feat: improve message delivery status handling and UI indicators in chat screens --- .../messenger/ui/chats/ChatViewModel.kt | 3 +- .../messenger/ui/chats/ChatsListScreen.kt | 54 ++++++++++--------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index de6f3c9..838a4f7 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -396,6 +396,7 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { val currentDialogKey = getDialogKey(account, opponent) if (update.dialogKey == currentDialogKey) { + if (!isDialogActive) return@collect when (update.status) { DeliveryStatus.DELIVERED -> { // Обновляем конкретное сообщение @@ -4097,7 +4098,7 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { content = encryptedContent, timestamp = timestamp, chachaKey = encryptedKey, - read = if (isFromMe) 1 else 0, + read = if (isFromMe && opponent == account) 1 else 0, fromMe = if (isFromMe) 1 else 0, delivered = delivered, messageId = finalMessageId, diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt index c2098ed..d5b783a 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt @@ -3800,30 +3800,14 @@ fun DialogItemContent( // - lastMessageDelivered == 0 → часики // (отправляется) // - lastMessageDelivered == 2 → ошибка - when (dialog.lastMessageDelivered) { - 2 -> { - // ERROR - показываем иконку ошибки - Icon( - imageVector = - TablerIcons - .AlertCircle, - contentDescription = - "Sending failed", - tint = - Color( - 0xFFFF3B30 - ), // iOS красный - modifier = - Modifier.size(16.dp) - ) - Spacer( - modifier = - Modifier.width(4.dp) - ) - } - 3 -> { - // READ (delivered=3) - две синие - // галочки + val isReadByOpponent = + dialog.lastMessageDelivered == 3 || + (dialog.lastMessageDelivered == 1 && + dialog.lastMessageRead == 1) + + when { + isReadByOpponent -> { + // READ - две синие галочки Box( modifier = Modifier.width(20.dp) @@ -3867,7 +3851,27 @@ fun DialogItemContent( Modifier.width(4.dp) ) } - 1 -> { + dialog.lastMessageDelivered == 2 -> { + // ERROR - показываем иконку ошибки + Icon( + imageVector = + TablerIcons + .AlertCircle, + contentDescription = + "Sending failed", + tint = + Color( + 0xFFFF3B30 + ), // iOS красный + modifier = + Modifier.size(16.dp) + ) + Spacer( + modifier = + Modifier.width(4.dp) + ) + } + dialog.lastMessageDelivered == 1 -> { // DELIVERED - одна серая галочка Icon( painter =