/** * [Gitea #126] Phone turned sideways in a call: the call takes the whole * screen. A phone in landscape is ~840px wide (the "Tablet" size class), so * the trigger is the shape of the screen, not the size class: landscape, at * most 500px tall, touch input. Tablets and desktops never match. */ export const LANDSCAPE_PHONE_QUERY = '(orientation: landscape) and (max-height: 500px) and (pointer: coarse)'; /** Controls hide again after this long without a touch on them. */ export const CONTROLS_AUTOHIDE_MS = 4000; export type ImmersiveInputs = { landscapePhone: boolean; /** This room's call is the one we are in, and we have joined it. */ joinedHere: boolean; /** The in-call chat is open (it replaces the call on small screens). */ chatOpen: boolean; /** "Exit full screen" was pressed since the phone was last upright. */ dismissed: boolean; }; /** Pure: whether the call should be full screen. */ export const shouldGoImmersive = (i: ImmersiveInputs): boolean => i.landscapePhone && i.joinedHere && !i.chatOpen && !i.dismissed; /** * Pure: use the browser's own full-screen mode too? Only where an address bar * takes room: an Android browser tab (not the installed app / iOS, which have * none or don't support it), when the page isn't already full screen. */ export const wantsBrowserFullscreen = (env: { userAgent: string; standalone: boolean; fullscreenEnabled: boolean; alreadyFullscreen: boolean; }): boolean => /Android/i.test(env.userAgent) && !env.standalone && env.fullscreenEnabled && !env.alreadyFullscreen;