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.
This commit is contained in:
Claude
2026-04-15 21:54:57 +00:00
parent e3ed630430
commit a7960f9484
2 changed files with 17 additions and 3 deletions
@@ -148,13 +148,17 @@ fun MarmotGroupListScreen(
if (visibleGroups.isEmpty()) { if (visibleGroups.isEmpty()) {
Box( Box(
modifier = Modifier.fillMaxSize(), modifier =
Modifier
.fillMaxSize()
.padding(horizontal = 32.dp),
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Column(horizontalAlignment = Alignment.CenterHorizontally) { Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text( Text(
text = if (selectedTab == 0) "No groups yet" else "No invitations", text = if (selectedTab == 0) "No groups yet" else "No invitations",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
textAlign = TextAlign.Center,
) )
Text( Text(
text = text =
@@ -165,6 +169,7 @@ fun MarmotGroupListScreen(
}, },
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
modifier = Modifier.padding(top = 4.dp), modifier = Modifier.padding(top = 4.dp),
) )
} }
@@ -46,8 +46,17 @@ class MarmotGroupList(
msg: Note, msg: Note,
) { ) {
val chatroom = getOrCreateGroup(nostrGroupId) val chatroom = getOrCreateGroup(nostrGroupId)
if (chatroom.addMessageSync(msg)) { val isSelfAuthored = msg.author?.pubkeyHex == ownerPubKey
if (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 chatroom.ownerSentMessage = true
} }
_groupListChanges.tryEmit(nostrGroupId) _groupListChanges.tryEmit(nostrGroupId)