WearMouse, аэромышь для часов Wear OS +16


Здравствуй, Хабр! Хочу предложить вашему вниманию немного магии для часов на Wear OS.

Некоторое время назад, незадолго до выпуска Android 9.0, был представлен новый публичный API, позволяющий использовать устройства на Android в качестве Bluetooth-устройств ввода (мышь, клавиатура, геймпад, и т.д.), и вот я создал простое приложение, которое демонстрирует один из способов использования этого API. (Спойлер: это работает не только на девятом андроиде.)

Вы уже могли догадаться из названия, что делает это приложение: по сути, это обыкновенная аэромышь, совместимая с любыми устройствами на Windows, OSX, Linux (включая Raspbian), Chrome OS, Android (включая Android TV), при условии наличия приёмника Bluetooth; не требуются ни root-права, ни «серверное» приложение.

Достаточно запустить приложение, провести спаривание по Bluetooth, и можно будет:

  • Использовать часы как интуитивный указатель для презентаций (а также переключать слайды курсорными клавишами);
  • Играть во Fruit Ninja, размахивая руками (например, установив игру на Android TV с флешки, или на Chromebook из Play Store), см. демонстрацию ниже;
  • Управлять HTPC, лёжа на диване;
  • Использовать часы в качестве VR-контроллера в некоторых играх для Cardboard (впрочем, не для Daydream: там есть свой пульт);
  • Хвастаться перед друзьями своими телекинетическими способностями; :)
  • Управлять телефоном, подключенным через Samsung Dex;

Примерно представить себе, как это выглядит, можно по этому видео (демонстрация раннего прототипа конца 2015 года):



Как этим пользоваться


В приложении есть четыре режима: аэромышь, тачпад, курсорные клавиши и ввод текста.

Режим аэромыши достаточно самоочевиден. В нём есть две наэкранных кнопки для левого и правого клика, шторка сверху для переключения режима отслеживания движения в зависимости от того, на какую руку надеты часы (также есть режим, в котором часы можно держать в руке, как лазерную указку), и шторка снизу для дополнительных функций: клик с удержанием (также известный как «режим Fruit Ninja») и клик средней кнопкой. Если у ваших часов есть крутящаяся «корона», её можно использовать для прокрутки. Стрелка курсора мыши должна быть направлена в сторону экрана, которым вы управляете.

Режим тачпада поддерживает все привычные жесты: перемещение указателя, клик, двойной клик, тап с удержканием, тап двумя пальцами для правого клика, прокрутка двумя пальцами. Для выхода из этого режима можно накрыть экран ладонью, либо нажать дополнительную кнопку на часах (если у часов больше одной кнопки).

Режим курсорных клавиш довольно прост: тап по краям экрана вызывает нажатие соответствующих клавиш, двойной тап по центру вызывает нажатие Enter, длинное нажатие в центре используется для выхода, плюс есть свайпы из центра для клавиш Escape, Backspace, пробел и Tab.

Наконец, в режиме ввода текста можно использовать либо экранную клавиатуру, либо голосовой ввод. Надо отметить, что вводимый на подключенном устройстве текст зависит от раскладки клавиатруры. К сожалению, пока поддерживается только английская раскладка (можно было бы добавить больше, но это потребовало бы ручного переключения её как в приложении, так и на подключенном устройстве).

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

Также имеются некоторые настройки. Можно стабилизировать перемещения курсора (это сгладит мелкие движения вроде тряски рук), включить диагональные направления для курсорных клавиш (это полезно в тех самых играх для Cardboard), или снизить частоту передачи данных (что может помочь при использовании приложения с некоторыми старыми приставками Android TV на седьмом андроиде, когда мышиный курсор не успевает за движениями рук).

Немного о совместимости


Как я упомянул выше, API стал публичным в Android 9.0, однако приложение также будет работать на любых часах с Android 8.0. То есть, если при перезагрузке часов, после скачущих цветных точек, появляется большая цветная «W» и надпись «Wear OS by Google» вместо «Android Wear», то всё должно работать. Сам API появился в Android Oreo, и немного отличался (а также был скрыт), но до Android Pie он был включен только на часах. К слову, существует способ включить его на телефонах с восьмёркой, но для этого нужны root-права (на девятке всё и так будет работать).

Возможные проблемы и их решения


Если при подключении курсор мыши двигается дёрганно, примерно раз в секунду, попробуйте влючить и выключить режим самолёта, после чего снова подключиться. Похоже, в стеке Bluetooth есть плавающая ошибка с управлением энергопотреблением…

Для регулировки чувствительности следует зайти в настройки подключенного устройства, а не приложения.

При использовании приложения с устройством, подключенным к телевизору, стоит переключить телевизор в «игровой» режим. Это должно отключить пост-процессинг, вызывающий очень большие задержки на современных телевизорах.

Также имеет смысл выключить управление жестами в настройках часов при использовании режима аэромыши, иначе высока вероятность случайно выполнить жест «назад» или «домой».

Ссылки на скачивание


Play Store (не пытайтесь открыть эту ссылку с телефона, получите сообщение «устройство не совместимо»; либо откройте ссылку на компьютере, либо найдите приложение в Play Store на самих часах).

Исходный код (почти весь, кроме поддержки Oreo).




К сожалению, не доступен сервер mySQL