Audio output quick-switch in the call bar (verify EC in-call menu first) #119

Closed
opened 2026-09-17 15:21:20 -04:00 by jared · 1 comment
Owner

Switch headset ↔ speakers without opening Settings.

First: verify

Element Call v0.25.0 has an in-call settings sheet with device pickers; check whether the fork's embedded footer exposes the output device switch on desktop and mobile, and whether cinny's call bar (CallControls) already surfaces it. If it does, close this.

If not

  • A speaker icon in the cinny call bar opening a small menu of enumerateDevices() audio outputs; selection is forwarded to the fork via a new io.lotus.set_audio_output action (fork side: devices.audioOutput.select), or reuse the existing widget action if one exists.
  • Remember the last choice per device (device-local, same as today's output setting).
  • Hidden on browsers without setSinkId (Firefox/Safari).
Switch headset ↔ speakers without opening Settings. ### First: verify Element Call v0.25.0 has an in-call settings sheet with device pickers; check whether the fork's embedded footer exposes the **output** device switch on desktop and mobile, and whether cinny's call bar (`CallControls`) already surfaces it. If it does, close this. ### If not - A speaker icon in the cinny call bar opening a small menu of `enumerateDevices()` audio outputs; selection is forwarded to the fork via a new `io.lotus.set_audio_output` action (fork side: `devices.audioOutput.select`), or reuse the existing widget action if one exists. - Remember the last choice per device (device-local, same as today's output setting). - Hidden on browsers without `setSinkId` (Firefox/Safari).
jared added this to the Features 2026-Q4 milestone 2026-09-17 15:21:20 -04:00
jared added the enhancementpriority: lowuxarea: calls labels 2026-09-17 15:21:20 -04:00
jared self-assigned this 2026-09-17 15:21:20 -04:00
Author
Owner

Verified first: the embed hides Element Call's footer, so its in-call settings sheet (which has the output picker) is unreachable from Lotus; the only EC control visible is the tile "Options" menu. Cinny's call bar had no output control. So: built.

Done — fork 4a48ec98 (released as 0.25.0-lotus.11), cinny 98c80f36 + pin 81777ddf.

  • Speaker button next to Deafen (desktop call bar; hidden where setSinkId doesn't exist — Firefox, Safari, Android Chrome, where EC's own earpiece/speaker toggle already covers phones) → menu of enumerateDevices() audio outputs with the current one checked.
  • Picking one sends io.lotus.set_audio_output { deviceId }; the fork applies it with mediaDevices.audioOutput.select() (the same path its settings picker uses) and re-sends the choice with the sticky fork state after an EC remount.

Headless with two fake outputs + a stubbed "USB Headset": menu lists all four, default checked; choosing the headset → the EC frame receives { deviceId: 'hs-1' }; reopening shows it checked.

menu

Verified first: the embed hides Element Call's footer, so its in-call settings sheet (which has the output picker) is unreachable from Lotus; the only EC control visible is the tile "Options" menu. Cinny's call bar had no output control. So: built. Done — fork 4a48ec98 (released as 0.25.0-lotus.11), cinny 98c80f36 + pin 81777ddf. - Speaker button next to Deafen (desktop call bar; hidden where `setSinkId` doesn't exist — Firefox, Safari, Android Chrome, where EC's own earpiece/speaker toggle already covers phones) → menu of `enumerateDevices()` audio outputs with the current one checked. - Picking one sends `io.lotus.set_audio_output { deviceId }`; the fork applies it with `mediaDevices.audioOutput.select()` (the same path its settings picker uses) and re-sends the choice with the sticky fork state after an EC remount. Headless with two fake outputs + a stubbed "USB Headset": menu lists all four, default checked; choosing the headset → the EC frame receives `{ deviceId: 'hs-1' }`; reopening shows it checked. ![menu](https://code.lotusguild.org/attachments/49871037-8cd2-46be-8c73-66b3facdb3bf)
jared closed this issue 2026-09-20 15:52:26 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#119