From a7960f9484de677d9d6f40f1971bfab3fc4d3e4b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Apr 2026 21:54:57 +0000 Subject: [PATCH] fix(marmot): don't mark own messages unread + pad empty group list - `MarmotGroupList.addMessage` now routes self-authored messages through `restoreMessageSync` (the no-unread-bump path) so the relay round-trip of a message the user just sent doesn't show up as an unread bold entry in the group list and doesn't bump the unread badge counter. - `MarmotGroupListScreen` empty state now has 32dp horizontal padding and centered text alignment so the "No invitations" / "No groups yet" copy doesn't run into the screen edges. --- .../chats/marmotGroup/MarmotGroupListScreen.kt | 7 ++++++- .../commons/model/marmotGroups/MarmotGroupList.kt | 13 +++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/marmotGroup/MarmotGroupListScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/marmotGroup/MarmotGroupListScreen.kt index 1f137c9d4..1f4b1f838 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/marmotGroup/MarmotGroupListScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/marmotGroup/MarmotGroupListScreen.kt @@ -148,13 +148,17 @@ fun MarmotGroupListScreen( if (visibleGroups.isEmpty()) { Box( - modifier = Modifier.fillMaxSize(), + modifier = + Modifier + .fillMaxSize() + .padding(horizontal = 32.dp), contentAlignment = Alignment.Center, ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Text( text = if (selectedTab == 0) "No groups yet" else "No invitations", style = MaterialTheme.typography.titleMedium, + textAlign = TextAlign.Center, ) Text( text = @@ -165,6 +169,7 @@ fun MarmotGroupListScreen( }, style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant, + textAlign = TextAlign.Center, modifier = Modifier.padding(top = 4.dp), ) } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/marmotGroups/MarmotGroupList.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/marmotGroups/MarmotGroupList.kt index 6ea5bd58d..30d693085 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/marmotGroups/MarmotGroupList.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/marmotGroups/MarmotGroupList.kt @@ -46,8 +46,17 @@ class MarmotGroupList( msg: Note, ) { val chatroom = getOrCreateGroup(nostrGroupId) - if (chatroom.addMessageSync(msg)) { - if (msg.author?.pubkeyHex == ownerPubKey) { + val isSelfAuthored = msg.author?.pubkeyHex == ownerPubKey + // Use the quiet path for our own messages so the relay round-trip + // doesn't mark the user's own outgoing message as unread. + val added = + if (isSelfAuthored) { + chatroom.restoreMessageSync(msg) + } else { + chatroom.addMessageSync(msg) + } + if (added) { + if (isSelfAuthored) { chatroom.ownerSentMessage = true } _groupListChanges.tryEmit(nostrGroupId)