diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 960b4a05..c85fb61d 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -24,6 +24,7 @@ import { type MatrixRTCSession, } from "matrix-js-sdk/lib/matrixrtc"; import { useNavigate } from "react-router-dom"; +import { useObservableEagerState } from "observable-hooks"; import type { IWidgetApiRequest } from "matrix-widget-api"; import { @@ -68,6 +69,7 @@ import { useSetting, } from "../settings/settings"; import { useTypedEventEmitter } from "../useEvents"; +import { setOutputEnabled$ } from "../controls.ts"; declare global { interface Window { @@ -104,8 +106,9 @@ export const GroupCallView: FC = ({ const [externalError, setExternalError] = useState( null, ); - - const [muteAllAudio] = useSetting(muteAllAudioSetting); + const muteAllAudioControlled = useObservableEagerState(setOutputEnabled$); + const [muteAllAudioFromSetting] = useSetting(muteAllAudioSetting); + const muteAllAudio = muteAllAudioControlled || muteAllAudioFromSetting; const memberships = useMatrixRTCSessionMemberships(rtcSession); const leaveSoundContext = useLatest( useAudioContext({ diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 9fa15547..edfccbe4 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -104,6 +104,7 @@ import { ReactionsReader } from "../reactions/ReactionsReader"; import { ConnectionLostError } from "../utils/errors.ts"; import { useTypedEventEmitter } from "../useEvents.ts"; import { MatrixAudioRenderer } from "../livekit/MatrixAudioRenderer.tsx"; +import { setOutputEnabled$ } from "../controls.ts"; const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {}); @@ -222,7 +223,9 @@ export const InCallView: FC = ({ room: livekitRoom, }); - const [muteAllAudio] = useSetting(muteAllAudioSetting); + const muteAllAudioControlled = useObservableEagerState(setOutputEnabled$); + const [muteAllAudioFromSetting] = useSetting(muteAllAudioSetting); + const muteAllAudio = muteAllAudioControlled || muteAllAudioFromSetting; // This seems like it might be enough logic to use move it into the call view model? const [didFallbackToRoomKey, setDidFallbackToRoomKey] = useState(false);