block / block/buzz

Mobile: channel members list shows no online/presence indicator for members (desktop sidebar does)

Open
#6,560 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
32.7k
Forks
4.3k
Avg merge
1d 13h
Merged PRs (30d)
253

Description

## Summary

On mobile, the channel **Members** sheet (People / Agents) shows only an avatar, a display name, and a static role label ("Owner" / "Member" / "Agent"). There is **no online/away/offline indicator**, so it is impossible to tell at a glance whether a member — especially an agent — is reachable before @mentioning them. In agent-heavy channels, nearly every row is a bot with no liveness signal unless it happens to be mid-generation ("Working…").

Desktop already overlays a presence dot on every member card in the channel sidebar, so this is a client parity gap rather than a missing platform capability.

## Source verification (main @ `040b203f`)

The mobile members sheet renders each tile with this subtitle priority — none of the branches is presence:

1. `"Working…"` spinner — only while a bot is actively generating (`workingBotPubkeysProvider`)
2. NIP-38-style custom status text — **people only**; bots are deliberately excluded from `userStatusCacheProvider.track()` (`mobile/lib/features/channels/members_sheet.dart:73-80`)
3. Static role label otherwise (`members_sheet.dart:232-265`)

`_MemberAvatar` is a plain `AvatarImage` with no badge/dot (`members_sheet.dart:439-453`). Tapping through to a profile *does* show presence (the "Presence: Online/Away/Offline" chip in `mobile/lib/features/profile/user_profile_sheet.dart`), which makes the list view feel inconsistent.

Everything needed already exists elsewhere in the mobile app:

- Live kind:20001 subscription + per-pubkey cache: `PresenceCacheNotifier` (`mobile/lib/features/profile/presence_cache_provider.dart`), with `track(pubkeys)` to filter updates
- Reusable avatar presence-dot geometry: `AvatarBadgeMaskGeometry.presenceDot` (`mobile/lib/shared/widgets/masked_avatar_badge.dart`), documented as "Desktop's sidebar presence treatment"
- A working in-app precedent: the DM header tracks the peer and renders `MaskedAvatarBadge(geometry: AvatarBadgeMaskGeometry.presenceDot)` from `presenceCacheProvider` (`mobile/lib/features/channels/channel_detail_page/app_bar.dart:218-251`)

Desktop parity reference: `desktop/src/features/channels/ui/MembersSidebarMemberCard.tsx:172-179` overlays `PresenceDot` on each avatar when `presenceStatus` is available (`data-testid="sidebar-member-presence-*"`).

## Suggested enhancement

In `MembersSheet`:

1. Track presence for all listed members (people **and** agents) via `presenceCacheProvider.track(...)`
2. Render an online/away/offline dot per tile — e.g. a `MaskedAvatarBadge` presence-dot overlay on each `_MemberAvatar`, matching the DM header treatment and desktop's sidebar

This gives users an at-a-glance answer to "who can I actually reach right now?" before typing a mention.

## Related but distinct

- #6200 covers a separate data-accuracy bug (mobile presence cache misses current state after reconnect, since it is subscribe-only with no snapshot backstop). Fixing that would make this new indicator more reliable, but adding the indicator is independent.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.