Answering an incoming video call turns the camera on, ignoring the user setting #8

Closed
opened 2026-09-12 01:50:47 -04:00 by jared · 0 comments
Owner

Severity: high · Type: bug · Confidence: high

Location: src/app/components/CallEmbedProvider.tsx:567-574, src/app/state/callPreferences.ts:31-38, src/app/state/hooks/callPreferences.ts:26,61, src/app/features/settings/general/General.tsx:1569-1572

Problem

handleAnswer hard-codes the join preferences: startCall(room, { microphone: true, video, sound: true }) where video = info.intent === 'video'. Every other join path honours the cameraOnJoin setting (default false, described in Settings as "Camera is off by default") and the persisted callPreferences, which deliberately never restores video "for privacy". Pressing Answer on an incoming video call therefore publishes the camera immediately with no prescreen, no preview and no respect for cameraOnJoin. The same line also forces microphone: true and sound: true, silently discarding a persisted muted/deafened preference (PTT is the only thing that overrides it, via forceAudioOff).

How to trigger

Settings → Calls → "Join with Camera On" = off (the default). Have someone place a video call to you in a DM. Press Answer — your camera goes live.

Suggested fix

build the answer preferences from the callPreferences atom + cameraOnJoin (video: cameraOnJoin && info.intent === 'video'), the same way PrescreenControls does, or route "Answer" through the prescreen.


Filed from the September 2026 client audit (branch lotus @ 4bea4895).

**Severity:** high · **Type:** bug · **Confidence:** high **Location:** `src/app/components/CallEmbedProvider.tsx:567-574`, `src/app/state/callPreferences.ts:31-38`, `src/app/state/hooks/callPreferences.ts:26,61`, `src/app/features/settings/general/General.tsx:1569-1572` ### Problem `handleAnswer` hard-codes the join preferences: `startCall(room, { microphone: true, video, sound: true })` where `video = info.intent === 'video'`. Every other join path honours the `cameraOnJoin` setting (default **false**, described in Settings as "Camera is off by default") and the persisted `callPreferences`, which deliberately never restores `video` "for privacy". Pressing **Answer** on an incoming video call therefore publishes the camera immediately with no prescreen, no preview and no respect for `cameraOnJoin`. The same line also forces `microphone: true` and `sound: true`, silently discarding a persisted muted/deafened preference (PTT is the only thing that overrides it, via `forceAudioOff`). ### How to trigger Settings → Calls → "Join with Camera On" = off (the default). Have someone place a video call to you in a DM. Press Answer — your camera goes live. ### Suggested fix build the answer preferences from the `callPreferences` atom + `cameraOnJoin` (`video: cameraOnJoin && info.intent === 'video'`), the same way `PrescreenControls` does, or route "Answer" through the prescreen. --- _Filed from the September 2026 client audit (branch `lotus` @ 4bea4895)._
jared added this to the Audit 2026-09 · High milestone 2026-09-12 01:50:47 -04:00
jared added the bugpriority: higharea: calls labels 2026-09-12 01:50:47 -04:00
jared self-assigned this 2026-09-12 01:50:47 -04:00
jared closed this issue 2026-09-12 02:14:51 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
2026-10-14
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#8