Skip to content

Latest commit

 

History

History
57 lines (40 loc) · 13 KB

File metadata and controls

57 lines (40 loc) · 13 KB

Accessibility acceptance criteria

Switchify Remote is designed for VoiceOver, TalkBack, iOS Switch Control, and Android Switch Access.

Custom section layouts

Normal remote use hides section edit buttons and editing-only restriction text. The Layout edit mode toggle sits beside Surface in the sticky toolbar on Mouse, Typing, and Window. It starts off, exposes its selected state and a descriptive hint, and changes from Edit layout to Done editing when enabled. The icon toggle stays beside the selector while selector text wraps vertically; all targets remain at least 48 points. Forwarding and disconnected/recovering screens omit the toggle. Edit mode is temporary, shared across customizable surfaces for the connected PC, and resets after disconnection or changing PCs; it is not persisted. Toggling it does not remount typing inputs, send commands, or save/reset layouts.

While edit mode is enabled, each visible section exposes an Edit section action. Those actions remain disabled during movement repeat, dragging, held modifiers, or live Enter delivery, with the existing restriction explanation. Sections retain their headings, cards, help text, dynamic status, order, and capability/mode visibility. Draft text, live input, recovery actions, and the repeat stop control remain outside editable grids. That control is labelled Stop movement for a pointer repeat and Stop repeating for a key repeat, and while a repeat is active the blocked-editing explanation names the same control. Dragging or held modifiers block editing without a repeat, and that explanation keeps its existing Stop movement wording.

Each section editor offers the shared remote-action catalog, with one copy of each action per section (copies in other sections are allowed). Draft actions can only be placed on Typing. Tap an empty cell to open Choose action; search descriptive names, categories, and keywords. Pointer movement and arrow keys have distinct names. Unsupported actions remain selectable with an explanation and are disabled at runtime. Selecting immediately assigns the action to the draft cell, closes the popup, announces its position, and restores cell focus; it never executes a command. Close, scrim tap, Android Back, and accessibility escape dismiss without assignment. While moving a button, an empty-cell tap completes the move instead. Button drags swap occupied cells or move into empty cells. Row and column handles move complete tracks, including empty cells, with insertion indicators and edge scrolling. Use row and column handles to insert before/after or remove a row/column. Occupied removal asks for confirmation. Limits are 20 rows and four columns, with at least one of each.

The picker hides the underlying editor from touch and accessibility navigation. Its keyboard-aware dialog scrolls all content, including search and Close, for landscape and large text. Android search disables full-screen keyboard extraction so results remain reachable, and the Remote scroll container lets result taps through on the first press. The repeat stop control and repeat status are available on every customizable surface.

All operations have tap-based alternatives: select a button or track, choose Move, and select its destination cell or track. The editor is the only accessibility context while open. Labels identify row and column positions, moves announce their destination once, and closing returns focus to the section’s Edit action. Validate TalkBack, VoiceOver, Switch Access, and Switch Control without dragging. Empty runtime cells preserve spacing without becoming scan stops. Controls remain at least 48 points, labels wrap, and custom columns fit the viewport, with horizontal scrolling only when 48-point targets cannot fit. Rotation, text resizing, backgrounding, and cancelled/outside drops must not commit a drag.

Save persists only the selected section and preserves neighboring sections. An unchanged Save leaves adaptive defaults intact. Cancel asks before discarding edits; Reset restores the section’s original responsive layout only on Save. Failed saves retain the draft and previous saved value for retry. Editing dispatches no PC commands and preserves live typing text.

  • Every interactive target is at least 48 by 48 logical points and has a concise accessible name.
  • First-run setup explains the Remote before asking for Bluetooth. Its two steps expose headings and "Step 1 of 2"/"Step 2 of 2" announcements in logical reading order, remain scrollable at large text sizes, and never move focus to a permission prompt until Allow Bluetooth is selected.
  • Surface selection is one button that announces its current value and opens a modal option list. Options expose selected state, scanning stays inside the modal, and focus returns to the selector after selection or dismissal. Toggles expose selected or disabled state.
  • On Remote screens that expose controls, the Surface selector stays at the top of the scroll area after the title scrolls away. Its backdrop never becomes a scanning stop, and pinning does not move focus or trigger an announcement.
  • Connected Remote control screens add one "Scroll to top" scan stop after the Surface selector pins. The 48-point control stays above the PC switcher, announces "Top of Remote" once after use, and does not animate when Reduce Motion is enabled.
  • Remote keeps a quick PC switcher immediately above the tab bar in every connection state. It announces the active connection, exposes selected state for the current saved PC, and restores focus after its modal closes.
  • Headings, connection changes, failures, repeat state, pairing approval, and pointer-profile recovery transitions are announced once without moving focus unexpectedly.
  • If the PC connection is lost, connected controls disappear immediately and Remote announces the first reconnect attempt once. Idle connections are checked in the background without adding focus or scanning stops.
  • In live typing, Return and the visible Enter control restore the text field and software keyboard after delivery. Failed Enter attempts keep the text available for retry and return focus without sending it again.
  • The pairing code is announced one digit at a time.
  • Text scales with the operating system; controls grow rather than shrinking text below the user's chosen size.
  • Control labels are never truncated. Action groups reduce their columns as available width or text scale requires.
  • Content remains operable in portrait, landscape, and tablet widths, with scrolling available at large text sizes.
  • The palette maintains at least 4.5:1 contrast for normal text. Color is never the only status cue.
  • Light and dark appearance follow the device setting. Both palettes maintain the same contrast and state-cue requirements.
  • The primary tab bar contains PCs, Remote, and Settings. Its height follows text scaling and the platform safe area so every label remains complete. Diagnostics is available from Settings and uses a standard back action. Settings also exposes the Remote privacy policy as one clearly named browser action.
  • Settings exposes a Remote name text field with complete validation and synchronization status. Save and Use device model remain separate 48-point controls at large text sizes.
  • Selected controls combine color with a check icon and selected accessibility state.
  • Repeating pointer movement exposes a dedicated Stop movement button alongside the existing stop-on-control behavior. A repeating key exposes the same control as Stop repeating, and announces "Key is repeating." rather than the pointer wording. Both send the PC an acknowledged stop command before Android switch-capture cleanup.
  • Switch scanning stops on actionable controls and scroll containers, not read-only headings, descriptions, status badges, summaries, or capability values.
  • Unpairing a saved computer opens a native confirmation alert. Cancel and dismissal leave the pairing unchanged, and the destructive action names the computer before removing access.
  • Scroll content clears the bottom tab bar, gesture area, and home indicator at maximum text size.
  • No essential interaction depends on animation, gestures, precise timing, or simultaneous touch.

Manual smoke test

On both platforms, clear the app data before starting. Enable the screen reader and then the platform switch-access feature. Traverse both setup steps and confirm the headings, step positions, explanations, desktop download, Continue, Back, Not now, and Allow Bluetooth are announced in logical order. Confirm no Bluetooth prompt appears before Allow Bluetooth, and that the layout remains usable in both orientations and at 200% text. Then navigate PCs, pairing, every available remote screen, Settings, and Diagnostics in logical order. Confirm every action can be selected, read-only text does not become a switch-scan stop, pointer repeat exposes Stop movement, held modifiers and drag expose state, disabled controls are announced, and backgrounding returns the desktop to a neutral input state. In live typing, send several lines with software Return and the visible Enter control. Confirm each sends one Enter, clears only after success, restores the text field and software keyboard, and accepts the next line without backspaces. Simulate a failed Enter and confirm the text remains, focus returns, and Retry Enter sends no duplicate text. On each connected Remote control screen, scroll past the title and confirm the Surface selector stays visible, gains its backdrop only while pinned, remains one scan stop, and causes no focus move or announcement. Confirm Scroll to top then appears as one 48-point scan stop above the PC switcher, does not cover the final control, returns to the title, announces completion once, and disappears at the top. Interrupt the return gesture and confirm it remains usable without a stale announcement. Repeat with Reduce Motion and confirm the return is immediate. Confirm disconnected, recovering, and unavailable states do not expose Scroll to top. On Android, confirm Forwarding keeps its profile choices available before Start but adds mapped external switches to scanning only while forwarding is active. The mapped switches and overflow notice must disappear after manual or safety stops. In Settings, edit the Remote name and confirm validation and save status are announced without adding read-only scan stops. Confirm Use device model restores the model-based name. Confirm Privacy policy is one scan stop, announces that it opens in a browser, opens the Remote-specific policy, and returns safely if the browser cannot open. During a delayed pointer-profile response, confirm "Restoring controls" is announced once, followed by either restored controls or "Controls unavailable" after all retries. Open the Surface selector while it is pinned and confirm the underlying screen and bottom tabs are not scannable, options scan linearly, Close works, Android back and VoiceOver escape dismiss the modal, and focus returns to the selector after selection or dismissal. Repeat those checks with the Remote PC switcher, confirm it stays above the tabs while content scrolls, and switch between two saved PCs. Press Unpair for a saved computer and confirm the native alert reads the full computer name. Verify Cancel, Android Back, and outside dismissal preserve the pairing, then confirm Unpair removes it. Repeat in light and dark appearance, at 200% text scaling, with reduced motion enabled, and with iOS Reduce Transparency enabled.

Fit-to-width grids and icon editing toggle

The edit toggle is icon-only: a pencil labeled Edit layout, then a checkmark labeled Done editing with selected state. It stays beside Surface on one toolbar row; selector text may wrap vertically. Section edit actions still appear only in edit mode.

Saved grids and editor cells divide the available viewport width across the saved columns. Compact numbered row/column handles retain full accessible position labels and drag/tap hints. Labels scale and wrap into taller rows; icons and selected indicators stack above/below text. All targets remain at least 48 points. Horizontal scrolling is reserved for viewports too small for those targets, with an overflow indicator. No saved geometry changes.

Verify three-column/four-row Movement layouts including Scroll up, Scroll down, and Enter on 320–430-point phone widths at 100%, 150%, and 200% text, portrait/landscape, and iOS maximum Dynamic Type. Check all columns, numbered handles, drag destinations, tap moves, and bottom editor actions; the right column must not clip when minimum targets fit. Test the genuine overflow fallback below that threshold. Cancel any drag on rotation/text/viewport changes.

PC scanning acceptance

On an Android device with the Switchify bridge, select Switchify scanning in Forwarding. Verify the profile, Start/Stop controls, PC-assigned press/hold labels, pressed state and stop messages are announced and remain usable at large text in light/dark phone and tablet layouts. No new layout editing controls appear. After disconnect or safety stop, verify no automatic restart and that Start remains reachable. iOS switch capture remains unavailable, as with existing Forwarding.