Skip to content

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

Description

@Tony-ooo

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions