TalkBack в 2ГИС
Уже несколько лет мы поддерживаем VoiceOver на iOS — это был сложный и многоступенчатый путь к доступности приложения. После релиза мы увидели, что это реально работает, и людям с нарушением зрения стало проще пользоваться 2ГИС. В этом году мы решили, что пришло время для Android.
Под капотом — собственный мини-фреймворк
Дальше рассказывает ведущий разработчик Дмитрий Торопчин.
Когда начинаешь делать доступность под Android, кажется, что всё уже предусмотрено. Каждый View знает, как предоставить своё описание для служб доступности, как выполнять действия и какие события отправлять после их выполнения.
2ГИС устроен немного иначе: наш интерфейс написан на Qt Quick и с точки зрения Android это один пустой View. Никаких кнопок, списков и текстовых полей TalkBack «внутри» не видит. Сам Qt предоставляет кроссплатформенный API для работы со службами доступности из Qt Quick, но его платформенная интеграция для Android на данный момент поддерживает весьма ограниченный набор методов, которого категорически не хватает для разработки по-настоящему удобных и доступных приложений.
Поэтому мы решили написать свой мини-фреймворк для работы со службами доступности Android из Qt Quick. Основную архитектуру мы подсмотрели в Qt:
визуальные элементы в Qt Quick размечаются через attached-свойства;
из этой разметки получается дерево accessibility-узлов, управляемое из C++;
это дерево accessibility-узлов предоставляется службам доступности Android через virtual view hierarchy посредством JNI.
При этом мы добавили поддержку многих недостающих API из Android SDK:
научились работать с текстовыми полями ввода;
научились описывать коллекции элементов;
поддержали автоматическую прокрутку списков при перемещении accessibility-фокуса;
поддержали детализацию навигации по тексту: озвучку любого элемента можно прослушать как целиком, так и по словам или по символам.
Пользовательские сценарии
Мы честно признали, что озвучить всё приложение сразу невозможно. Поэтому сделали MVP. Теперь можно:
найти место и узнать актуальную информацию о нём;
прослушать карточку организации и быстро сориентироваться в деталях;
позвонить по контактному номеру прямо из карточки;
построить маршрут и пройти его шаг за шагом;
понять, какой транспорт подходит, где садиться и на какой остановке выходить.
Для этих сценариев мы разметили 555 UI‑элементов.
Мы продолжим собирать обратную связь, будем расширять сценарии и думать, как сделать автоматическую проверку доступности в тестах.




