@@ -21,7 +21,7 @@ import {
21
21
type SelectedDevice ,
22
22
type MediaDevice ,
23
23
} from "../state/MediaDevices" ;
24
- import { useMediaDevices } from "../MediaDevicesContext" ;
24
+ import { useIsEarpiece , useMediaDevices } from "../MediaDevicesContext" ;
25
25
import { useReactiveState } from "../useReactiveState" ;
26
26
import { ElementWidgetActions , widget } from "../widget" ;
27
27
import { Config } from "../config/Config" ;
@@ -58,6 +58,7 @@ export interface MuteStates {
58
58
function useMuteState (
59
59
device : MediaDevice < DeviceLabel , SelectedDevice > ,
60
60
enabledByDefault : ( ) => boolean ,
61
+ forceUnavailable : boolean = false ,
61
62
) : MuteState {
62
63
const available = useObservableEagerState ( device . available$ ) ;
63
64
const [ enabled , setEnabled ] = useReactiveState < boolean | undefined > (
@@ -67,13 +68,13 @@ function useMuteState(
67
68
) ;
68
69
return useMemo (
69
70
( ) =>
70
- available . size === 0
71
+ available . size === 0 || forceUnavailable
71
72
? deviceUnavailable
72
73
: {
73
74
enabled : enabled ?? false ,
74
75
setEnabled : setEnabled as Dispatch < SetStateAction < boolean > > ,
75
76
} ,
76
- [ available . size , enabled , setEnabled ] ,
77
+ [ available . size , enabled , forceUnavailable , setEnabled ] ,
77
78
) ;
78
79
}
79
80
@@ -85,9 +86,11 @@ export function useMuteStates(isJoined: boolean): MuteStates {
85
86
const audio = useMuteState ( devices . audioInput , ( ) => {
86
87
return Config . get ( ) . media_devices . enable_audio && ! skipLobby && ! isJoined ;
87
88
} ) ;
89
+ const isEarpiece = useIsEarpiece ( ) ;
88
90
const video = useMuteState (
89
91
devices . videoInput ,
90
92
( ) => Config . get ( ) . media_devices . enable_video && ! skipLobby && ! isJoined ,
93
+ isEarpiece , // Force video to be unavailable if using earpiece
91
94
) ;
92
95
93
96
useEffect ( ( ) => {
0 commit comments