Реалізація підтримки Switch Control в мобільному додатку
Switch Control (iOS) та Switch Access (Android) — технології управління пристроєм через зовнішній переключувач: кнопку, педаль, датчик дихання. Використовується людьми з обмеженою моторикою, які не можуть взаємодіяти з сенсорним екраном.
Механіка: система послідовно підсвічує елементи інтерфейсу (сканування); користувач активує переключувач в потрібний момент. Другий переключувач — або вибір потрібного елемента, або вхід у підменю дій.
Що потрібно для підтримки
iOS — Switch Control
Switch Control використовує той же accessibility tree, що й VoiceOver. Якщо VoiceOver працює коректно — Switch Control в більшості випадків теж. Але є нюанси.
Групування елементів. При сканування система спочатку підсвічує групи (контейнери), потім входить всередину. Якщо карточка товару не згрупована як єдиний елемент — Switch Control послідовно проходить кожен subview: зображення, назву, ціну, кнопку. Забагато кроків для однієї дії.
accessibilityElements на контейнері + accessibilityActivate() override для кастомної дії — зменшують кількість кроків сканування.
Кастомні жести. Свайп по карточці для видалення — стандартний UIKit UISwipeGestureRecognizer Switch Control не викличе. Потрібно добавити UIAccessibilityCustomAction:
let deleteAction = UIAccessibilityCustomAction(
name: "Видалити",
target: self,
selector: #selector(deleteItem)
)
accessibilityCustomActions = [deleteAction]
Custom Actions з'являються в меню Switch Control при активації елемента.
Scanning style. За замовчуванням — автосканування (елементи підсвічуються автоматично). Користувач може включити ручне сканування. Переконатися, що фокус не «застревает» в нескінченному циклі всередину одного контейнера.
Android — Switch Access
Switch Access налаштовується через Settings → Accessibility → Switch Access. Два основних режими: Linear Scanning (послідовний обхід) та Row-Column Scanning (спочатку рядки, потім стовпці).
android:focusable="true" та коректні android:nextFocusDown/Up/Left/Right — визначають порядок навігації. Без явних nextFocus атрибутів система будує порядок по позиції на екрані — може бути нелогичним для складних layout.
У Compose: Modifier.focusRequester() та Modifier.focusOrder { down = nextFocusRequester } — програмний контроль порядку фокуса для Switch Access.
Кастомні дії аналогічно iOS: ViewCompat.setAccessibilityDelegate з переопределенням onInitializeAccessibilityNodeInfo — добавляємо AccessibilityActionCompat для нестандартних операцій.
Тестування без реального користувача
На iOS: Settings → Accessibility → Switch Control → Add New Switch → Screen → Full Screen. Тепер тап по екрану = активація переключувача. Можна перевірити потік сканування самостійно.
На Android: Settings → Accessibility → Switch Access → Use Volume Keys as Switches. Volume Up = переключитися до наступного елемента, Volume Down = обрати.
Повне тестування вимагає реального пристрою — емулятор не підтримує Switch Control/Access в повному обсязі.
Скільки це займає
Якщо VoiceOver/TalkBack вже реалізовані — Switch Control в більшості випадків працює автоматично. Основна робота — додати UIAccessibilityCustomAction/AccessibilityActionCompat для жестових дій та перевірити порядок сканування. 2-3 дні. Якщо accessibility tree не розроблена — потрібно почати з аудиту VoiceOver/TalkBack.







