Мир новых технологий (обзоры, новинки)
Содержание
Когда мне в очередной раз достался смартфон с хардварными клавишами навигации, вообще без возможности их настройки или активации экранных клавиш в стиле Nexus, я решил, что с этим надо что-то делать. Покопавшись пару часов во внутренностях Android, я отключил надоедливую подсветку, поменял клавиши «Назад» и «Обзор» местами, а потом включил экранные кнопки и обрел покой.
Сразу оговорюсь: я большой поклонник идеи экранных клавиш навигации. Всех этих домиков, стрелочек и квадратиков, нарисованных прямо в нижней части экрана. Да, они отнимают какое-то там пространство (которое, впрочем, в большинстве случаев не особо и нужно), да, возможно они портят внешний вид приложений, но, черт возьми, они динамические.
Экранные кнопки навигации поворачиваются вместе с экраном, исчезают, когда они не нужны, меняют цвет и органично встраиваются в интерфейс домашнего экрана. Если отбросить саму идею бесполезности существования сразу трех кнопок (в конце концов, яблочники обходятся одной и не чувствуют себя обездоленными) и довольно-таки удобные системы навигации вроде PIE или «пузыря навигации MIUI», то экранные кнопки — это лучшее, что было придумано до сих пор.
Удобное круговое меню навигации в MIUI
Так вот. Почему-то мою замечательную, прекраснейшую идею о том, что лучше наэкранных кнопок нет ничего, не разделяют ну очень многие производители смартфонов. И даже не просто не разделяют, а не разделяют совершенно чудовищным способом, заставляя пользоваться смартфоном с сенсорными кнопками (ААА!), снабженными динамической подсветкой (ААА-2!) и кнопкой «Назад» с правой стороны экрана (ААА-3: решающий удар).
Ситуация неприемлемая до крайности, а учитывая, что добрый разработчик прошивки не предусмотрел никаких настроек для активации экранных клавиш и настроек для управления сенсорными кнопками, пришлось обойтись своими силами. Было два варианта дальнейших действий:
Сторонние инструменты я не люблю, поэтому решение сделать все своими руками пришло само собой.
Для начала попробуем отключить подсветку кнопок. Для этого нам нужен root, эмулятор терминала и каталог /sys в корне файловой системы. Именно такая комбинация. Мы имеем дело с ядром Linux, а в системах на его основе вся важная информация о железе, а также «тумблеры», им управляющие, обычно находятся в файловой системе sysfs, подключенной к каталогу /sys.
Собственно, sysfs — это даже не файловая система, точнее, она файловая, но оперирует так называемыми синтетическими файлами. А они не хранятся на диске, это своего рода интерфейс общения с драйверами: прочитал файл — получил данные о железке, записал — изменил какую-то настройку. А для записи как раз таки нужны права root.
Итак, получаем root, запускаем эмулятор терминала (а лучше ADB). И пишем следующее:
# su
# cd /sys
Теперь мы в каталоге /sys, далее нужно найти каталог, в котором находятся файлы драйвера подсветки кнопок:
# find -name \*button\*
./leds/button-backlight
Бинго! Это каталог /sys/class/leds/button-backlight. Переходим в него и смотрим, что внутри:
# cd /sys/class/leds/button-backlight
# ls
brightness
device
max_brightness
power
subsystem
trigger
uevent
Ставлю свой Nokia 3310 на то, что файл brightness — это текущая яркость кнопок, а max_brightness — максимальная. Проверим догадку, записав в первый файл значение 100 (ну типа 100%, хотя какая там шкала — неизвестно):
# echo 100 > brightness
Отлично, кнопки горят и даже не собираются тухнуть.
Момент истины — пишем в файл max_brightness значение 0:
# echo 0 > max_brightness
Кнопки погасли, навсегда, как и лампочка в моем подъезде вчера ночью.
Но так же, как лампочка, они снова могут загореться, если перезагрузиться. То есть команда действует только в текущем сеансе работы. К счастью, это не беда, мы поместим нашу команду в скрипт на карте памяти:
# mkdir /sdcard/boot
# echo 'echo 0 > /sys/class/leds/button-backlight/max_brightness' > /sdcard/boot
А его, в свою очередь, поставим в автозагрузку с помощью init.d scripts support. Запускаем приложение, выбираем первые три галочки, c помощью опции Select folder выбираем каталог boot на карте памяти.
Ходим по sysfs
init.d scripts support
Ползадачи выполнено, осталось поменять местами кнопки «Назад» и «Обзор». Для этого необходимо изменить раскладку кнопок. В Android она лежит в нескольких файлах каталога /system/usr/keylayout/. Их довольно много, но если отбросить файлы типа Vendor_2378_Product_100a.kl и qwerty.kl (они хранят раскладки полноценных Qwerty-клавиатур, которые Android поддерживает из коробки), то останется от силы пять штук.
Один из них как раз нам и нужен. Часто смартфоны используют файл ft5x06_ts.kl, специфичный для контроллера тачскрина FT5x06 (кнопки же сенсорные, правильно?), но в моем случае им оказался файл Vendor_2378_Product_100a.kl.
Если открыть этот файл, можно увидеть три искомые строки:
key 158 BACK VIRTUAL
key 139 MENU VIRTUAL
key 102 HOME VIRTUAL
Остается только поменять числа 158 и 139 местами (для этого подходит любой файловый менеджер с поддержкой прав root). После перезагрузки новая раскладка начнет действовать.
Здесь все еще проще. В Android существует специальная отладочная переменная qemu.hw.mainkeys, которая позволяет контролировать видимость наэкранных клавиш навигации. Если она имеет значение 0, клавиши будут показаны на экране, 1 — обратный эффект.
Записываем переменную с нужным значением в файл /system/build.prop, и на этом все:
# su
# mount -o remount,rw /system
# cp /system/build.prop /system/build.prop.bak
# echo qemu.hw.mainkeys=0 > /system/build.prop
Далее можно «отключить» хардварные кнопки, выключив их подсветку, как мы это сделали в первом способе. Возможно, конечно, существует вариант выключить их полностью, но найти его не удалось.
Вот на такие преступные шаги иногда приходится идти, чтобы сделать смартфон чуточку удобнее. Что касается меня, то я остановился на третьем варианте: «выключил» кнопки плюс установил LMT Launcher. Как мне кажется, это наиболее удобный способ управления.