CI / Build & Quality Checks (push) Skipped
CI / Secret scan (gitleaks) (push) Skipped
CI / Playwright smoke (e2e) (push) Skipped
CI / Build & Quality Checks (pull_request) Successful in 3m31s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 11s
CI / Playwright smoke (e2e) (pull_request) Successful in 18m48s
Landscape, at most 500px tall, touch input (a sideways phone is ~840px wide, the Tablet size class, so the trigger is the screen shape), in this room's joined call, chat closed: the call takes the whole screen. No room header, sidebar or call-status bar; safe-area insets respected. - Taps inside the call frame never reach the app, so while the controls are hidden a transparent layer covers the call: the first tap shows the call bar plus Chat / Exit full screen, which hide again after 4 s without a touch; with them up the call underneath stays usable. - In an Android browser tab the first tap also enters the browser's own full screen (hides the address bar); left again on rotate back, hang up or exit. No effect on iPhone or the installed app. - Exit full screen lasts until the phone is upright again. - The frame is transparent (room wallpaper), so in full screen it gets an opaque base colour under the wallpaper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { shouldGoImmersive, wantsBrowserFullscreen } from './landscapeCall';
|
|
|
|
const base = { landscapePhone: true, joinedHere: true, chatOpen: false, dismissed: false };
|
|
|
|
test('[#126] full screen only for a joined call on a sideways phone', () => {
|
|
assert.equal(shouldGoImmersive(base), true);
|
|
assert.equal(shouldGoImmersive({ ...base, landscapePhone: false }), false, 'upright / tablet');
|
|
assert.equal(shouldGoImmersive({ ...base, joinedHere: false }), false, 'prescreen / other room');
|
|
assert.equal(shouldGoImmersive({ ...base, chatOpen: true }), false, 'chat open');
|
|
assert.equal(shouldGoImmersive({ ...base, dismissed: true }), false, 'user exited');
|
|
});
|
|
|
|
test('[#126] browser full screen only in an Android browser tab', () => {
|
|
const env = {
|
|
userAgent: 'Mozilla/5.0 (Linux; Android 14; Pixel 8) Chrome/140 Mobile',
|
|
standalone: false,
|
|
fullscreenEnabled: true,
|
|
alreadyFullscreen: false,
|
|
};
|
|
assert.equal(wantsBrowserFullscreen(env), true);
|
|
assert.equal(wantsBrowserFullscreen({ ...env, standalone: true }), false, 'installed app');
|
|
assert.equal(
|
|
wantsBrowserFullscreen({
|
|
...env,
|
|
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_0) Safari',
|
|
}),
|
|
false,
|
|
'iPhone',
|
|
);
|
|
assert.equal(wantsBrowserFullscreen({ ...env, alreadyFullscreen: true }), false);
|
|
assert.equal(wantsBrowserFullscreen({ ...env, fullscreenEnabled: false }), false);
|
|
});
|