[QA] §A Calls: ringtone selection, incoming-call ringtone, in-call second-call banner, focus camera, call-tile decorations, EC load watchdog #170

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

Migrated from LOTUS_TESTING.md §A 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

  • A1. Ringtone selection — preview in Settings
  • A3. Incoming call uses the selected ringtone — 👥 2 people
  • A4. In-call banner for a second incoming call — 👥👥 (the trickiest one)
  • A5. Camera focus during screenshare (#1) — 👥 2 people
  • A6. Avatar decorations on call tiles (#3) — 👥 2 people
  • A7. EC iframe load watchdog + recovery UI (#EC, N96)

A1. Ringtone selection — preview in Settings

Steps

  1. Open Settings → General, scroll to the Calls section.
  2. Find the new Ringtone dropdown (just above Ringtone Volume).
  3. Select each option in turn: Classic, Chime, Soft, Retro, Silent.

Expected

  • Selecting Classic plays the existing call.ogg clip (cut off after a few seconds).
  • Chime / Soft / Retro each play a short, distinct synthesized preview.
  • Silent plays nothing.
  • Changing Ringtone Volume then re-selecting a ringtone previews at the new volume.
  • No console errors.

⚠️ Known browser limitation: the synthesized tones use WebAudio. If a preview is ever silent, click anywhere on the page once (a "user gesture") and retry — browsers suspend audio until the page has been interacted with. The Settings preview is after a click so it should always sound; this note matters more for A3.

A3. Incoming call uses the selected ringtone — 👥 2 people

Setup: Account A (you) and Account B in a DM or a private (invite-only) group room.

  1. As A, pick a non-silent ringtone (e.g. Chime).
  2. From B, start a call in that DM/room. Do not answer on A.

Expected on A

  • The full-screen Incoming Call dialog appears (caller name, room avatar, Answer / Reject).
  • The selected ringtone loops until you answer/reject/ignore (at the set volume).
  • Answer → joins the call. Reject (DM) / Ignore (group) → dialog dismisses and ring stops.
  • Set ringtone to Silent and repeat → dialog still appears, no sound.

A4. In-call banner for a second incoming call — 👥👥 (the trickiest one)

Setup: You (A) already in a call in Room 1. Account B can call you in a different Room 2 (a DM or private group you share). Ideally a third account C, or B leaves Room 1's call first.

  1. While A is actively in Room 1's call, trigger an incoming call to A from Room 2.

Expected on A

  • No full-screen takeover. Instead a compact banner appears in the top-right corner with the caller's avatar, room name, "Incoming voice/video call", and Answer / Reject (or Ignore) buttons.
  • It plays a single soft ping, not a looping ring (so it doesn't talk over your active call).
  • The banner does not cover your active call's controls/PiP in a way that blocks them.
  • Answer → switches you into Room 2's call. Reject/Ignore → banner disappears.
  • The banner auto-dismisses if the caller hangs up / the call times out.

Also verify the no-op case: while in Room 1's call, if a notification for Room 1 itself arrives, nothing should pop up (no banner, no dialog).

A5. Camera focus during screenshare (#1) — 👥 2 people

Setup: You (A) and B in a call; B (or another participant) sharing their screen, and at least one person with camera on.

  1. As A, open the participant glance (the stacked avatars / member list for the call) and click a participant who has their camera on.
  2. In the menu, click "Focus camera".

Expected

  • The view switches to spotlight and pins that person's camera tile, overriding the auto-spotlighted screenshare.
  • It stays on that camera (doesn't immediately snap back to the screenshare).
  • If you pick someone with their camera off, it should at worst just toggle spotlight (graceful fallback), not error.

A6. Avatar decorations on call tiles (#3) — 👥 2 people

Setup: A participant in the call has an avatar decoration set (Settings → Profile decoration).

  1. Join a call with that participant.
  2. Look at our participant roster / prescreen tiles (not the avatars rendered inside the Element Call video grid — those are EC's and out of scope).

Expected: the decoration ring/overlay renders around that participant's avatar on the call tile, the same way it does in member lists.

A7. EC iframe load watchdog + recovery UI (#EC, N96)

This guards against a permanently-stuck "Loading…" call. Also covers the N96 button-label fix (the old "Retry" and "Leave" buttons were identical — now there is a single "Back" button).

  1. Normal case: join a call → it should connect within a few seconds as usual (the watchdog stays invisible).
  2. Failure case (best-effort to reproduce): throttle your network hard (devtools → Network → Offline) right as you click join, or block the Element Call origin, so the iframe can't finish loading.

Expected

  • On a genuine failure/timeout (~25s), instead of an endless spinner you get a visible error overlay with a single "Back" button (the old "Retry" + "Leave" pair is gone — they did the same thing and "Retry" was misleading).
  • Clicking Back returns you to the call prescreen, where you can manually click Join to try again.
  • Normal joins must not trigger the error overlay (no false positives) — this is the important part to confirm.
  • Self-heal: if the error overlay appears on a slow network but EC then finishes loading anyway, the overlay should dismiss itself and drop you into the live call. Worth confirming on a deliberately throttled-but-not-blocked connection.

_Migrated from `LOTUS_TESTING.md` §A 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** - [ ] A1. Ringtone selection — preview in Settings - [ ] A3. Incoming call uses the selected ringtone — 👥 2 people - [ ] A4. In-call banner for a second incoming call — 👥👥 (the trickiest one) - [ ] A5. Camera focus during screenshare (#1) — 👥 2 people - [ ] A6. Avatar decorations on call tiles (#3) — 👥 2 people - [ ] A7. EC iframe load watchdog + recovery UI (#EC, N96) --- ### A1. Ringtone selection — preview in Settings **Steps** 1. Open **Settings → General**, scroll to the **Calls** section. 2. Find the new **Ringtone** dropdown (just above **Ringtone Volume**). 3. Select each option in turn: **Classic, Chime, Soft, Retro, Silent**. **Expected** - Selecting **Classic** plays the existing `call.ogg` clip (cut off after a few seconds). - **Chime / Soft / Retro** each play a short, distinct synthesized preview. - **Silent** plays nothing. - Changing **Ringtone Volume** then re-selecting a ringtone previews at the new volume. - No console errors. > ⚠️ **Known browser limitation:** the synthesized tones use WebAudio. If a preview is ever silent, click anywhere on the page once (a "user gesture") and retry — browsers suspend audio until the page has been interacted with. The Settings preview is _after_ a click so it should always sound; this note matters more for A3. ### A3. Incoming call uses the selected ringtone — 👥 2 people **Setup:** Account A (you) and Account B in a **DM** or a **private (invite-only) group** room. 1. As A, pick a non-silent ringtone (e.g. **Chime**). 2. From B, **start a call** in that DM/room. Do **not** answer on A. **Expected on A** - The full-screen **Incoming Call** dialog appears (caller name, room avatar, Answer / Reject). - The **selected ringtone loops** until you answer/reject/ignore (at the set volume). - Answer → joins the call. Reject (DM) / Ignore (group) → dialog dismisses and ring stops. - Set ringtone to **Silent** and repeat → dialog still appears, **no sound**. ### A4. In-call banner for a second incoming call — 👥👥 (the trickiest one) **Setup:** You (A) already **in a call** in Room 1. Account B can call you in a **different** Room 2 (a DM or private group you share). Ideally a third account C, or B leaves Room 1's call first. 1. While A is **actively in Room 1's call**, trigger an incoming call to A from **Room 2**. **Expected on A** - **No** full-screen takeover. Instead a **compact banner appears in the top-right corner** with the caller's avatar, room name, "Incoming voice/video call", and **Answer / Reject (or Ignore)** buttons. - It plays a **single soft ping**, _not_ a looping ring (so it doesn't talk over your active call). - The banner does **not** cover your active call's controls/PiP in a way that blocks them. - **Answer** → switches you into Room 2's call. **Reject/Ignore** → banner disappears. - The banner auto-dismisses if the caller hangs up / the call times out. **Also verify the no-op case:** while in Room 1's call, if a notification for **Room 1 itself** arrives, **nothing** should pop up (no banner, no dialog). ### A5. Camera focus during screenshare (#1) — 👥 2 people **Setup:** You (A) and B in a call; B (or another participant) **sharing their screen**, and at least one person with **camera on**. 1. As A, open the **participant glance** (the stacked avatars / member list for the call) and click a participant who has their **camera on**. 2. In the menu, click **"Focus camera"**. **Expected** - The view switches to **spotlight** and **pins that person's camera tile**, overriding the auto-spotlighted screenshare. - It **stays** on that camera (doesn't immediately snap back to the screenshare). - If you pick someone with their camera **off**, it should at worst just toggle spotlight (graceful fallback), not error. ### A6. Avatar decorations on call tiles (#3) — 👥 2 people **Setup:** A participant in the call has an **avatar decoration** set (Settings → Profile decoration). 1. Join a call with that participant. 2. Look at **our** participant roster / prescreen tiles (not the avatars rendered inside the Element Call video grid — those are EC's and out of scope). **Expected:** the decoration ring/overlay renders around that participant's avatar on the call tile, the same way it does in member lists. ### A7. EC iframe load watchdog + recovery UI (#EC, N96) This guards against a permanently-stuck "Loading…" call. Also covers the N96 button-label fix (the old "Retry" and "Leave" buttons were identical — now there is a single **"Back"** button). 1. Normal case: **join a call** → it should connect within a few seconds as usual (the watchdog stays invisible). 2. Failure case (best-effort to reproduce): throttle your network hard (devtools → Network → Offline) **right as** you click join, or block the Element Call origin, so the iframe can't finish loading. **Expected** - On a genuine failure/timeout (~25s), instead of an endless spinner you get a **visible error overlay with a single "Back" button** (the old "Retry" + "Leave" pair is gone — they did the same thing and "Retry" was misleading). - Clicking **Back** returns you to the call prescreen, where you can manually click Join to try again. - Normal joins must **not** trigger the error overlay (no false positives) — this is the important part to confirm. - **Self-heal:** if the error overlay appears on a slow network but EC then finishes loading anyway, the overlay should **dismiss itself** and drop you into the live call. Worth confirming on a deliberately throttled-but-not-blocked connection. ---
jared added this to the Manual QA backlog milestone 2026-09-17 23:24:05 -04:00
jared added the area: callsarea: notificationsqa labels 2026-09-17 23:24:05 -04:00
Author
Owner

Verified headless on the local calls stack (Chromium; OscillatorNode.start and HTMLMediaElement.play instrumented for the sound checks, so "sounds" here means "the right synth/clip was started", not by-ear — that part lives in #225).

  • A1 Ringtone preview in Settings: Chime → 4 oscillator notes, Soft → 2, Retro → 4, Silent → nothing, Classic → call.ogg plays. No console errors.
  • A3 Incoming DM call: full-screen dialog (caller name, room avatar, Answer / Reject) appears on the callee, ring oscillators start; Reject dismisses it and the caller gets the "Declined your call" toast; the ring also stops on the callee's other devices (#161, verified earlier). dialog
  • A4 Second call while already in a call: alice in Voice Lounge, bob calls her DM → alice gets the in-call banner (role=alert "Incoming voice call from bob", Answer / Reject) instead of the full dialog, stays "1 in call"; Reject clears it and bob sees "Declined your call". banner
  • A5 Camera focus during screenshare — see #174 (screenshot there).
  • A6 Avatar decorations on call tiles — see #174 (joystick on bob's tile).
  • A7 EC load watchdog: EC document blocked → "The call failed to load. Check your connection and try again." + Back after 25 s; Back returns to the prescreen and a retry joins (a burst of SecurityErrors on that path was fixed in 70620d4b).

Closing.

Verified headless on the local calls stack (Chromium; `OscillatorNode.start` and `HTMLMediaElement.play` instrumented for the sound checks, so "sounds" here means "the right synth/clip was started", not by-ear — that part lives in #225). - [x] **A1** Ringtone preview in Settings: Chime → 4 oscillator notes, Soft → 2, Retro → 4, Silent → nothing, Classic → `call.ogg` plays. No console errors. - [x] **A3** Incoming DM call: full-screen dialog (caller name, room avatar, Answer / Reject) appears on the callee, ring oscillators start; **Reject** dismisses it and the caller gets the "Declined your call" toast; the ring also stops on the callee's *other* devices (#161, verified earlier). ![dialog](https://code.lotusguild.org/attachments/d2c54ab0-25bf-4258-a55e-3792e20de97e) - [x] **A4** Second call while already in a call: alice in Voice Lounge, bob calls her DM → alice gets the **in-call banner** (`role=alert` "Incoming voice call from bob", Answer / Reject) instead of the full dialog, stays "1 in call"; Reject clears it and bob sees "Declined your call". ![banner](https://code.lotusguild.org/attachments/9632cdda-dab7-4f85-8962-f5422da029eb) - [x] **A5** Camera focus during screenshare — see #174 (screenshot there). - [x] **A6** Avatar decorations on call tiles — see #174 (joystick on bob's tile). - [x] **A7** EC load watchdog: EC document blocked → "The call failed to load. Check your connection and try again." + Back after 25 s; Back returns to the prescreen and a retry joins (a burst of SecurityErrors on that path was fixed in `70620d4b`). Closing.
jared closed this issue 2026-09-19 00:50:12 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#170