diff --git a/mobile/app/h/[hostId]/session/[worktreeId].tsx b/mobile/app/h/[hostId]/session/[worktreeId].tsx index 5b749a41bd8..9deac34cd36 100644 --- a/mobile/app/h/[hostId]/session/[worktreeId].tsx +++ b/mobile/app/h/[hostId]/session/[worktreeId].tsx @@ -244,6 +244,7 @@ import { getActiveTabIdForHandle, isFileExistsErrorMessage, isGestureMouseTrackingMode, + isTerminalPhoneDisplayMode, MOBILE_SESSION_STATUS_LABELS, TERMINAL_GESTURE_INPUT_BUCKET_CAPACITY, TERMINAL_GESTURE_INPUT_FLUSH_DELAY_MS, @@ -4167,14 +4168,6 @@ export default function SessionScreen() { }) const closeWithBulkActions = createCloseWithBulkActions(handleCloseSessionTab, bulkCloseActions) - const isPhoneMode = (handle: string | null): boolean => { - if (!handle) { - return false - } - const mode = terminalModes.get(handle) - return mode === 'auto' || mode === 'phone' || mode === undefined - } - const visibleTabs: MobileSessionTab[] = sessionTabs const activeMarkdownTab = activeSessionTab?.type === 'markdown' ? activeSessionTab : null const activeFileTab = activeSessionTab?.type === 'file' ? activeSessionTab : null @@ -4832,12 +4825,12 @@ export default function SessionScreen() { } }} accessibilityLabel={ - isPhoneMode(activeHandle) + isTerminalPhoneDisplayMode(activeHandle, terminalModes) ? 'Switch to desktop mode' : 'Switch to phone mode' } > - {isPhoneMode(activeHandle) ? ( + {isTerminalPhoneDisplayMode(activeHandle, terminalModes) ? ( setActionTarget(null), onToggleChat: toggleTabChatView, - isPhoneMode, + isPhoneMode: (handle) => isTerminalPhoneDisplayMode(handle, terminalModes), onToggleDisplayMode: (handle) => void toggleDisplayMode(handle), onRename: setRenameTarget, onClear: (target) => void handleClearTerminal(target), diff --git a/mobile/src/session/mobile-session-route-helpers.test.ts b/mobile/src/session/mobile-session-route-helpers.test.ts new file mode 100644 index 00000000000..6ae7a930844 --- /dev/null +++ b/mobile/src/session/mobile-session-route-helpers.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest' +import { isTerminalPhoneDisplayMode } from './mobile-session-route-helpers' + +describe('isTerminalPhoneDisplayMode', () => { + it('uses phone mode for automatic, phone, and unreported terminals', () => { + const modes = new Map([ + ['auto', 'auto'], + ['phone', 'phone'] + ] as const) + + expect(isTerminalPhoneDisplayMode('auto', modes)).toBe(true) + expect(isTerminalPhoneDisplayMode('phone', modes)).toBe(true) + expect(isTerminalPhoneDisplayMode('missing', modes)).toBe(true) + }) + + it('rejects absent handles and desktop terminals', () => { + const modes = new Map([['desktop', 'desktop']] as const) + + expect(isTerminalPhoneDisplayMode(null, modes)).toBe(false) + expect(isTerminalPhoneDisplayMode('desktop', modes)).toBe(false) + }) +}) diff --git a/mobile/src/session/mobile-session-route-helpers.ts b/mobile/src/session/mobile-session-route-helpers.ts index 52b277bd6b8..413e1316beb 100644 --- a/mobile/src/session/mobile-session-route-helpers.ts +++ b/mobile/src/session/mobile-session-route-helpers.ts @@ -34,6 +34,17 @@ export function isGestureMouseTrackingMode( return mode === 'x10' || mode === 'vt200' || mode === 'drag' || mode === 'any' } +export function isTerminalPhoneDisplayMode( + handle: string | null, + terminalModes: ReadonlyMap +): boolean { + if (!handle) { + return false + } + const mode = terminalModes.get(handle) + return mode === undefined || mode === 'auto' || mode === 'phone' +} + export function getActiveTabIdForHandle( tabs: ReadonlyArray<{ id: string; type: string; terminal?: string | null }>, terminalHandle: string | null