[QA] §L AFK auto-mute releases the OS mic indicator; maskable PWA icons #181

Open
opened 2026-09-17 23:24:08 -04:00 by jared · 1 comment
Owner

Migrated from LOTUS_TESTING.md §L on 2026-09-17 — the file is now reference-only.

How to report: tick each item as it passes; on FAIL comment with what you saw vs expected, browser/OS, web (chat.lotusguild.org) vs desktop (Tauri), theme, and any browser-console errors. Screenshots for anything visual.

Checklist

  • L1. AFK auto-mute releases the OS microphone indicator on mute (N95) — 👥 live call
  • L2. Maskable PWA icon (N108) — Android install

L1. AFK auto-mute releases the OS microphone indicator on mute (N95) — 👥 live call

Context (now FIXED): useAfkAutoMute.ts opened its own getUserMedia level-monitor capture for the whole call, so the OS recording indicator (green dot on macOS, mic icon on Windows/Linux) stayed lit even when muted. The capture is now gated on the reactive mic-on state — it runs only while unmuted, so muting releases the stream.

To verify:

  1. Enable AFK auto-mute in Settings → Calls and join a call.
  2. Manually mute your mic using the call controls → the OS recording indicator should clear within ~a second.
  3. Unmute → the indicator should re-appear (capture re-acquired).
  4. Also confirm AFK still works end-to-end: stay unmuted and silent past the configured timeout → mic auto-mutes with the "muted after inactivity" toast, and the indicator clears.

L2. Maskable PWA icon (N108) — Android install

  1. On Android Chrome, install Lotus Chat as a PWA (Add to Home Screen).
  2. Look at the home-screen icon.

Expected: the icon fills the adaptive-icon shape cleanly (the logo centered with safe-zone padding on the dark background), not clipped at the corners or floating in an odd box. Also worth a quick check in Chrome DevTools → Application → Manifest that the two purpose: maskable icons load without a 404 (this also validates the manifest's icon paths resolve in production — a pre-existing path convention I couldn't verify statically).


_Migrated from `LOTUS_TESTING.md` §L on 2026-09-17 — the file is now reference-only._ **How to report:** tick each item as it passes; on FAIL comment with what you saw vs expected, browser/OS, web (chat.lotusguild.org) vs desktop (Tauri), theme, and any browser-console errors. Screenshots for anything visual. **Checklist** - [ ] L1. AFK auto-mute releases the OS microphone indicator on mute (N95) — 👥 live call - [ ] L2. Maskable PWA icon (N108) — Android install --- ### L1. AFK auto-mute releases the OS microphone indicator on mute (N95) — 👥 live call **Context (now FIXED):** `useAfkAutoMute.ts` opened its own `getUserMedia` level-monitor capture for the whole call, so the OS recording indicator (green dot on macOS, mic icon on Windows/Linux) stayed lit even when muted. The capture is now gated on the reactive mic-on state — it runs only while unmuted, so muting releases the stream. **To verify:** 1. Enable **AFK auto-mute** in Settings → Calls and **join a call**. 2. Manually **mute your mic** using the call controls → the **OS recording indicator should clear** within ~a second. 3. **Unmute** → the indicator should re-appear (capture re-acquired). 4. Also confirm AFK still works end-to-end: stay unmuted and silent past the configured timeout → mic auto-mutes with the "muted after inactivity" toast, and the indicator clears. ### L2. Maskable PWA icon (N108) — Android install 1. On **Android Chrome**, install Lotus Chat as a PWA (Add to Home Screen). 2. Look at the **home-screen icon**. **Expected:** the icon fills the adaptive-icon shape cleanly (the logo centered with safe-zone padding on the dark background), **not** clipped at the corners or floating in an odd box. Also worth a quick check in Chrome DevTools → Application → Manifest that the two `purpose: maskable` icons load without a 404 (this also validates the manifest's icon paths resolve in production — a pre-existing path convention I couldn't verify statically). ---
jared added this to the Manual QA backlog milestone 2026-09-17 23:24:08 -04:00
jared added the area: callsarea: mobileqa labels 2026-09-17 23:24:08 -04:00
Author
Owner

L1 verified (with a nuance). Instrumented getUserMedia in both the host page and the EC iframe during a call with AFK auto-mute enabled:

joined, unmuted: host gUM=0 liveAudio=0 | EC gUM=1 audio=[live]
muted:           host gUM=0 liveAudio=0 | EC gUM=1 audio=[live(disabled)]
unmuted:         host gUM=0 liveAudio=0 | EC gUM=1 audio=[live]
  • The host never opens its own capture any more (AFK reads the fork's io.lotus.call_state), so the N95 leak is gone — nothing of ours keeps the indicator lit. AFK end-to-end also passes (#173: muted at ~60 s + toast).
  • What does keep the OS/tab recording indicator lit while muted is Element Call's own mic track: on mute it sets enabled=false but keeps the track live (livekit-client stopMicTrackOnMute is off upstream — same as Discord, which also holds the mic while muted, to unmute instantly and avoid a permission re-prompt). So on a real machine the indicator will still show while muted. If we want it to clear, that is a one-line fork option (stopMicTrackOnMute: true) with the trade-off of ~100–300 ms unmute latency — say the word and I'll add it.

L2 (Android maskable icon) still needs a phone; leaving open for that.

**L1 verified (with a nuance).** Instrumented `getUserMedia` in both the host page and the EC iframe during a call with AFK auto-mute enabled: ``` joined, unmuted: host gUM=0 liveAudio=0 | EC gUM=1 audio=[live] muted: host gUM=0 liveAudio=0 | EC gUM=1 audio=[live(disabled)] unmuted: host gUM=0 liveAudio=0 | EC gUM=1 audio=[live] ``` - The host never opens its own capture any more (AFK reads the fork's `io.lotus.call_state`), so the N95 leak is gone — nothing of ours keeps the indicator lit. AFK end-to-end also passes (#173: muted at ~60 s + toast). - What *does* keep the OS/tab recording indicator lit while muted is Element Call's own mic track: on mute it sets `enabled=false` but keeps the track `live` (livekit-client `stopMicTrackOnMute` is off upstream — same as Discord, which also holds the mic while muted, to unmute instantly and avoid a permission re-prompt). So on a real machine the indicator will still show while muted. If we want it to clear, that is a one-line fork option (`stopMicTrackOnMute: true`) with the trade-off of ~100–300 ms unmute latency — say the word and I'll add it. L2 (Android maskable icon) still needs a phone; leaving open for that.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#181