[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 · 2 comments
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.
Author
Owner

L2: verified without a device, and one visual bug fixed.

  • Production manifest: both purpose: maskable icons (maskable-192x192.png, maskable-512x512.png) load with 200 image/png, so the path convention is fine.
  • Safe zone: the logo's furthest pixel is 29 % of the width from the centre (Android's adaptive-icon safe zone is 40 %), and the corners are opaque full-bleed. So no launcher mask (circle, squircle, rounded square) clips it.
  • Bug fixed (fix(pwa) commit): the logo sat on a pure-black #000 square inside the #0A0A0A background, so the home-screen icon showed a faint box around the logo. That's the "floating in an odd box" this item warns about. The backing square now matches the background.

Before (safe-zone circle in red, then circle and squircle crops), note the square behind the logo:
before

After:
after

Leaving it to you to tick after a glance on a real Android home screen. The geometry is verified, and the new icons deploy with the next build.

**L2: verified without a device, and one visual bug fixed.** - Production manifest: both `purpose: maskable` icons (`maskable-192x192.png`, `maskable-512x512.png`) load with **200 image/png**, so the path convention is fine. - Safe zone: the logo's furthest pixel is **29 %** of the width from the centre (Android's adaptive-icon safe zone is 40 %), and the corners are opaque full-bleed. So no launcher mask (circle, squircle, rounded square) clips it. - **Bug fixed (`fix(pwa)` commit):** the logo sat on a pure-black `#000` square inside the `#0A0A0A` background, so the home-screen icon showed a faint box around the logo. That's the "floating in an odd box" this item warns about. The backing square now matches the background. Before (safe-zone circle in red, then circle and squircle crops), note the square behind the logo: ![before](https://code.lotusguild.org/attachments/8bad7f7f-28cb-46a5-82c3-d7f86c08c4ab) After: ![after](https://code.lotusguild.org/attachments/e14974ae-6e9d-4171-8b79-cfcf8df7e72c) Leaving it to you to tick after a glance on a real Android home screen. The geometry is verified, and the new icons deploy with the next build.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#181