Вышла очередная программа экранного доступа для Android-смартфонов

Backtalk — это форк TalkBack от Google — программы экранного доступа для незрячих и слабовидящих пользователей Android. Программа основана на исходном коде TalkBack от Google, но с добавлением исправлений и нового функционала. Проект не связан с данной компанией.

Цели

  • Сделать Backtalk быстрее и отзывчивее для тех, кто предпочитает использовать смартфон сбольшей скоростью, чем с TalkBack.
  • Вернуть полезные функции из прежних версий TalkBack и других программ экранного доступа.
  • Поддерживать сборку проекта в Windows, Linux и macOS.
  • Постепенно перевести код на Kotlin. Новый код пишется на Kotlin. Java-файлы Google конвертируются только тогда, когда в них требуется внести крупные изменения. Это делает возможным легко комбинировать код проекта с кодом TalkBack от Google.
  • Не отставать от выпусков TB от Google и быстрее выпускать версии BackTalk.

Отличия BackTalk от TalkBack

Скорость работы

  • Настройка интервала между нажатиями во время двойного касания одним пальцем. Чтобы задать интервал задержки перед вторым касанием, перейдите в настройки Backtalk, откройте Расширенные настройки > Настройка времени задержки > Интервал между касаниями. По умолчанию он установлен на 0,25 секунды. Данное значение можно уменьшить до 0,1 секунды. Чем короче интервал, тем быстрее срабатывают все жесты, требующие нескольких касаний. Но если двойное касание выполнено медленно, то оно может быть распознано как 2 отдельных.
  • Более быстрая прокрутка
  • После каждого события прокрутки TalkBack ищет в списке новый элемент, на который нужно установить фокус. Подобное поведение блокирует изучение касанием и может приводить к тому, что жесты не будут срабатывать. В свою очередь в Backtalk поиск выполняется один раз — после остановки прокрутки.
  • Перемещение по спискам за счёт смахиваний происходит быстрее. Чтобы найти следующий элемент списка, TalkBack трижды строит порядок чтения всего экрана: первый раз — чтобы проверить, не находится ли пользователь в конце списка, второй — чтобы найти элемент, третий — чтобы проверить, нужно ли выполнить прокрутку для того, чтобы элемент попал в фокус программы. Backtalk строит порядок чтения один раз и использует его повторно.
  • Уменьшенный отклик при выполнении свайпов на экранах со статичным контентом.
  • При каждом смахивании TalkBack запрашивает у того или иного приложения сведения о всех элементах на экране и ждёт ответа по каждому из них. Backtalk сохраняет порядок чтения между свайпами и выстраивает его заново, только если контент на экране изменился либо Backtalk выполнила прокрутку или нажатие. В тесте на смартфоне Realme в 3 из 4 выполненных смахиваний программа экранного доступа обращалась к сохранённому порядку расположения контента, а самая долгая пауза при свайпах сократилась примерно с 450 миллисекунд до 150 миллисекунд.

Экран и яркость

  • Элемент управления чтением «Яркость». Чтобы изменить яркость с шагом в 10%, проведите вверх или вниз по экрану. Функция работает и тогда, когда экран затемнён, поэтому яркость можно настроить до того, как, скажем, передать телефон в руки другому человеку. При первом использовании функции Backtalk запросит разрешение об изменение системных настроек.
  • Короткое сообщение при затемнении экрана. Если в диалоговом окне «Скрыть экран?» снять флажок «Всегда показывать руководство по отключению затемнения экрана», Backtalk будет произносить только «Подсветка экрана отключена» и не проговаривать инструкции о том, как снова её включить.
  • Исправление в работе функции яркости при отключении подцветки экрана. По прошествии трёх минут после отключения подцветки TalkBack устанавливал максимальную яркость. В Backtalk заданные вами настройки яркости не изменяются.
  • Датчик приближения отключён по умолчанию. При использовании Backtalk проговаривание не останавливается, когда он чем-то закрыт. Чтобы включить эту функцию, в настройках программы перейдите в Расширенные настройки > Останавливать озвучивание, когда датчик приближения закрыт.

Жесты

  • Новые жесты по умолчанию.
    • Один раз коснуться четырьмя пальцами — вернуться назад.
    • Два раза коснуться четырьмя пальцами — перейти на домашний экран.
    • Три раза коснуться четырьмя пальцами — открыть недавние приложения.
    • Двойное касание четырьмя пальцами с удержанием — открыть панель уведомлений.
    • Два раза с удержанием коснуться двумя пальцами — переключиться на клавиатуру Брайля.
    • Коснуться тремя пальцами с удержанием —использование сходного системного жеста.
    • Три раза коснуться тремя пальцами: скопировать последнюю произнесенную фразу в буфер обмена.
    • Три раза коснуться тремя пальцами с удержанием —выполнить вставку.
    • Для режима выделения жест не назначен.
  • Чтобы BackTalk озвучил строку состояния, необходимо 3 раза коснуться двумя пальцами. Программа экранного доступа озвучит элементы, которые отображаются в строке состояния: время, заряд батареи, Wi-Fi и силу сигнала мобильной сети, а также режим звонка, «Не беспокоить» и режим полета, если эти переключатели активированы. Чтобы получить информацию о названии сети Wi-Fi, разрешите доступ к местоположению, когда Backtalk запросит это разрешение. Чтобы выбрать, в каком порядке будут озвучиваться элементы, откройте «Озвучивание статуса» в настройках Backtalk. Каждый из этих пунктов можно перемещать вверх или вниз, зависимости от того, в каком порядке программа будет проговаривать элементы строки состояния. Данный пункт также есть в списке жестов под названием «Озвучить статус». Чтобы начать чтение с текущего элемента, воспользуйтесь пунктом «Читать со следующего элемента», который находится в меню программы.

Меню Backtalk

  • По умолчанию в меню отсутствуют следующие пункты: «Действия», «Поиск по экрану», «Добавить или изменить ярлыки», «Описать форматирование текста», «Копировать последнюю произнесённую фразу», «Язык озвучивания», «Голосовые команды», «Быстрые клавиши» и «Настройки дисплея Брайля». Действия по-прежнему доступны через элемент управления чтением «Действия». Пункт «Синтез речи» в меню присутствует, чтобы вы могли открыть соответствующие настройки, если в работе синтезатора речи произойдет сбой. Чтобы вернуть в меню пункты, указанные выше, откройте раздел «Изменить меню» в настройках Backtalk.
  • Круговое меню.
  • Меню Backtalk может отображаться в виде круга в центре экрана, как в TalkBack 8.1 и более ранних версиях. Каждый пункт занимает сектор экрана вокруг центра. Для перемещения по нему проведите пальцем к нужному пункту, а для выбора — отпустите палец. Чтобы закрыть меню, отпустите палец в центре круга. Пункты, содержащие подменю, отображаются в виде нового круга. Чтобы включить эту функцию, в настройках BackTalkоткройте «Изменить меню» и активируйте параметр «Круговое меню».

Речь

  • Настройка озвучивания уведомлений. Чтобы Backtalk не произносил новые уведомления, когда они поступают на смартфон, откройте раздел Детализация в настройках Backtalk и отключите параметр «Озвучивать уведомления». Входящие вызовы по-прежнему озвучиваются, а уведомления можно прочитать на панели уведомлений.
  • Backtalk не произносит «свернуто», когда фокус попадает на уведомление на экране блокировки и на панели уведомлений. При открытии уведомления он по-прежнему произносит «развёрнуто», но в других приложениях произносит «свёрнуто».

Прямое касание

Если играть в аудиоигры на смартфоне, то необходимо, чтобы касания экрана сразу передавались в приложение. Функция «Изучение касанием» перехватывает нажатия и свайпы до того, как они будут обработаны игровым приложением. Благодаря прямому касанию Backtalk передает их напрямую выбранным играм, и отключать программу экранного доступа не нужно.

Прямое касание — функционал NVGT Bridge (службы специальных возможностей, встроенная в Backtalk, которая обеспечивает работу прямого касания в аудиоиграх). В играх такая комбинация работает лучше, чем если бы вы запускали NVGT Bridge, параллельно с Backtalk, потому что Backtalk — программа экранного доступа, обладающая информацией о том, что находится на экране.

  • Одна служба вместо двух. Не нужно ничего дополнительно устанавливать, загружать в обход магазина приложений или включать в разделе «Специальные возможности», и нет другой службы, которая может конфликтовать с настройкой обработки касаний Backtalk. Прямое касание использует эту настройку совместно со сходным Системным жестом и клавиатурой Брайля, поэтому они не конфликтуют.
  • Больше не нужен поиск по экрану. NVGT Bridge ищет диалоговые окна и текстовые поля в дереве представлений каждого окна и проверяет только пять уровней. Backtalk уже сам по себе отслеживает окна, клавиатуру и состояние экрана, поэтому он обрабатывает касания быстрее и без ограничения по количеству уровней обработки.
  • Backtalk оповещает о том, что прямое касание включено/выключено, даже если в игре воспроизводится аудио. Кроме того, можно настроить, чтобы при включении/отключении прямого касания ваш смартфон вибрировал.

Как пользоваться:

  • В случае с TalkBack, выберите игры, где нужно прямое касание. Откройте раздел «Прямое касание» в настройках программы и выберите нужную игру в списке приложений. Когда игра запускается, Backtalkпроизносит «Прямое касание включено», а когда приложение обрабатывает это касание, то программа экранного доступа произносит: «Прямое касание выключено». Озвучивание этого действия можно отключить, а вместо этого (или вместе с ним) включить короткий виброотклик.
  • Если во время игры появляется диалоговое окно, поверх игры запускается другое приложение, вы открываете панель уведомлений или быстрые настройки, фокус переходит к текстовому полю или экран выключается, то режим прямого касания выключается автоматически. Когда вы снова возвращаетесь в приложение игры, режим прямого касания вновь активируется. Более того, если в игре используется экранная клавиатура, то вы можете работать с ней в обычном режиме, а остальная часть экрана будет активна в режиме прямого касания.
  • Прямой ввод текста. По умолчанию область клавиатуры работает с Backtalk. Если в игре есть собственная клавиатура, откройте меню действий для этой игры в списке игр и выберите «Включить прямой ввод текста».
  • Пункт в быстрых настройках. Активацию прямого касания можно добавить в быстрые настройки. Так можно будет включать и выключать данный режим, не выходя из игры.
  • Резервное копирование и восстановление. Резервную копию настроек можно создать открыв пункт «Создать резервную копию настроек». Это сохранит выбранные параметры в файл. Чтобы восстановить настройки, нажмите на одноимённый пункт и выберите файл с данными.
  • Для разработчиков игр. Добавьте тег <meta-data> в элемент <application> или в основной элемент <activity>, и при первом её запуске Backtalk запустит необходимый режим. Игроки, в свою очередь, смогут отключить режим прямого касания

<meta-data
android:name=»dev.nvgt.capability.DIRECT_TOUCH»
android:value=»true» />

  • Ограничения. Диалоговые окна и текстовые поля, которые игра отрисовывает внутри своего приложения, не видны Backtalk. В таких случаях можно приостановить прямое касание с помощью быстрых настроек.

Клавиатура Брайля

  • Перемещение верхних и нижних точек. В настройках клавиатуры Брайля есть параметр «Поменять местами верхние и нижние точки» меняет местами точку 1 с точкой 3 и точку 4 с точкой 6. Также есть настройка «Поменять местами левые и правые точки». Активировать можно оба параметра.
  • Пропуск руководства пользователя. На первой странице руководства по использованию клавиатуры Брайля есть кнопка «Пропустить руководство», нажав на которую пользователь сразу попадает на клавиатуру.
  • Улучшенная тактильная отдача. В клавиатуре Брайля используются те же виброэффекты, что и в Backtalk в целом. Вибрация при отправке текста ощущается так же, как при закрытии или переключении клавиатуры. При удалении, когда в текстовом поле не остаётся никаких символов, срабатывает мягкая затухающая вибрация — так вы поймёте, что удалять больше нечего.
  • Навигация только в приделах текстового поля. Если в момент открытия клавиатуры Брайля вы переходили смахиванием к другому элементу управления, то при перемещении по символам, словам или строкам программа озвучивала этот элемент, а не содержимое текстового поля. Теперь перед выполнением каждой команды клавиатура Брайля перемещает фокус Backtalk в текстовое поле.

Сборка

Потребуются JDK 17 или новее, Android SDK с платформой 37 и NDK 27.3.13750724. Gradle Wrapper сам загружает нужную версию Gradle, поэтому устанавливать его не нужно.

Linux или macOS

Укажите в переменной ANDROID_SDK путь к вашему SDK, затем выполните ./build.sh. В результате будет создан APK-файл.

Windows

Укажите в переменной ANDROID_HOME путь к вашему SDK, затем выполните команду:

.\gradlew.bat assemblePhoneDebug

Зависимости

Версии библиотек и плагинов указаны в файле gradle/libs.versions.toml. Renovate еженедельно открывает пул-реквесты для их обновления, а GitHub Actions собирает каждый пул-реквест.

Описание изображений с помощью Gemini

В исходном коде, который публикует Google, нет настроек для работы Gemini, поэтому с помощью функции «Описать изображение» можно только прочитать текст на изображениях, а функция «Описать экран» не будет работать, если только вы не добавите собственный API-ключ Gemini. В Backtalk есть собственная поддержка описания экрана, включая уточняющие вопросы к сгенерированному описанию. Чтобы добавить ключ:

  1. Получите API-ключ через Google AI Studio.
  2. Добавьте следующую строку в файл local.properties в папке проекта: api.key=YOUR_KEY
  3. Чтобы использовать другую модель Gemini, добавьте model=MODEL_NAME. По умолчанию используется gemini-flash-latest.
  4. Заново выполните сборку и установку Backtalk.

GitHub игнорирует файл local.properties, поэтому ваш ключ не попадет в коммит. Ключ встраивается в APK-файл, поэтому не делитесь им с другими

Изображения и снимки экрана, которые вы отправляете для описания, передаются в Google. Если вы используете бесплатный тариф, компания может использовать эти данные для улучшения своих продуктов.

Как установить программу

Установить APK на Android-устройство с помощью режима отладки.

В Windows скрипт .\deploy.ps1 собирает APK и устанавливает его через adb. Для работы скрипта нужен PowerShell 7. Чтобы установить последнюю сборку без необходимости собирать её заново, используйте параметр -SkipBuild.

Backtalk устанавливается с именем пакета com.android.talkback, поэтому не заменяет TalkBack от Google. У каждого из двух приложений свои настройки.

Обновления

Каждое изменение Backtalk собирается на GitHub в виде сборки Development build и публикуется на странице latest release. Backtalk проверяет наличие новой версии при запуске, а также примерно раз в день. Если обновление есть, появляется уведомление со списком изменений. Чтобы скачать и установить новую сборку, нажмите на него. В первый раз при установке обновлений Android попросит разрешить Backtalk устанавливать приложения.

Чтобы проверить наличие обновлений, в настройках Backtalk откройте пункт «Проверить наличие обновлений». Чтобы отключить ежедневную проверку на наличие обновлений, отключите пункт «Автоматически проверять обновления».

Android устанавливает обновление, только если оно подписано тем же ключом, что и установленное приложение. Если вы собираете Backtalk самостоятельно, ваша сборка подписана вашим собственным отладочным ключом, поэтому ее нельзя обновить сборками с GitHub. Чтобы пользоваться данными сборками, сначала удалите свою версию.

Запуск

После установки Backtalk откройте «Настройки» > «Специальные возможности». Программа будет отображаться в списке сервисов специальных возможностей. По умолчанию она отключена. Сначала отключите TalkBack от Google, затем включите Backtalk.

Инструменты отладки

Отладочные сборки содержат инструменты для поиска лагов:

  • Тег logcat BacktalkStall записывает в журнал каждый случай, когда основной поток был заблокирован более чем на 100 миллисекунд, а также код, который выполнялся в тот момент.

Примечание переводчика: не все предложенные переводы настроек могут соответствовать фактическому в программе Backtalk

Источник: Страница Backtalk на Github