Files
buzz/mobile/test/features/channels
Logan Johnson cf5e83829a fix(mobile): distinguish unknown presence on identity surfaces (#7383)
<!-- Draft PR body for #7383 · fix(mobile): distinguish unknown presence
on identity surfaces · https://github.com/block/buzz/pull/7383 -->

🤖

## Summary

When mobile didn't know someone's presence — right after opening the
app, or when the relay simply had no data — DM headers, DM-list avatars
and profiles showed that person as **Offline**, with the same gray dot
as someone genuinely offline. This PR separates "we don't know" from "we
know they're offline": unknown presence now reads **Unknown** with no
dot or notch, while confirmed Online/Away/Offline look exactly as
before.

- Applies to the DM header, DM-list avatars, and the profile sheet.
Avatar geometry is unchanged — the unconfirmed indicator is hidden, not
reshaped.
- Confirmed Online/Away/Offline presentation is untouched.
- The profile exposes one presence accessibility label, with no
duplicate screen-reader announcements.

### Related issue

- Fixes: N/A. No separate issue; the related work is the stack below.
- Depends on #7382 (declared base), which supplies the presence data —
this PR is the visible half of that change.
- Draft — not requesting merge yet; the security advisory doesn't run on
this stacked base (it reviews main-based ranges).

### Testing

- Widget regressions cover unknown/online/away/offline transitions,
fixed avatar bounds, DM-list colors, and profile semantics.
- At the branch head: `just mobile-check` and the full mobile test suite
pass independently, and every broader CI gate has successful evidence
after isolated recovery runs (no monolithic local `just ci` run) —
receipts in the [exact-head evidence
comment](https://github.com/block/buzz/pull/7383#issuecomment-5573113048).
- Verification is widget-test level; no native device or simulator run
is claimed.

To see it: open a DM whose presence isn't confirmed yet (e.g. right
after a cold open) — the header and profile now read Unknown instead of
Offline.

### Screenshots

Flutter production-widget test renders — not native-device screenshots
or acceptance captures.

| Scenario | Before | After |
|---|---|---|
| Profile sheet for a person whose presence isn't confirmed yet (e.g.
right after a cold open) | ![Before: the profile reads Offline with a
gray dot — indistinguishable from actually
offline](https://github.com/user-attachments/assets/45364547-e198-45a4-ae68-777a58844009)
| ![After: the profile reads Unknown with no
dot](https://github.com/user-attachments/assets/2585d011-30b9-4df1-a0f2-6d59eec14282)
|

Confirmed Online/Away/Offline presentations are unchanged by this PR.

<details>
<summary>Capture provenance</summary>

Rendered by the Flutter widget engine in a `flutter test` run
(production widgets, production theme; no device or simulator). Before:
this PR's declared base `a8e8028bfb9bb67de2db03ed448839e2f3ab2b0d`.
After: its head `dd955a0c2ac80ada39b416a2f8b7481afb8773bf`.

</details>

Signed-off-by: Logan Johnson <loganj@squareup.com>
2026-09-30 21:35:48 -04:00
..