четверг, 23 мая 2013 г.

CarDock на Tasker


Как совместить отображение на экране смартфона инфы от необходимого в поездке приложения (Карты, Музыка, Подкаст и пр.) и кнопочек из обычного Car Dock (а также расширить их функционал)?
Берем отвертку, паяльник и зубило с молотком. Прячем сие в долгий ящик и начинаем возить пальцами по экрану.



Общая идея

Задача в том, чтобы с минимумом телодвижений достигать целей. В поездке по городу хочется постоянно видеть карту с данными о трафике и управлять второстепенными приложениями в один клик. Обычные приложения предлагают кучу свистелок поверх плюшек и страдают эгоцентризмом. Мы пойдем другим путем - сделаем доступ к необходимым функциям в один-два клика без создания помех взаимодействию с используемыми в дороге приложениями.
В качестве примера такого интерфейса очень подойдет интерфейс Мобильных Яндекс Карт. Все кнопки имеют полупрозрачный фон и обозначенные границы и расположены по краям. Все второстепенные функции убраны в скрывающееся меню. При этом остается поле для работы с картой и ... для моих кнопок :) Замечу лишь, что обычно я пользуюсь МЯК только в режиме карты и поэтому все плюшки от прокладки маршрута с её кнопками мне не мешают.

Рисуем

Рисовать мы будем, конечно же, в Tasker. Потому что я больше ни в чем не умею, а Tasker умеет все, что мне нужно ... и не нужно. :)

 Кнопки

Кнопки должны быть достаточно крупными, чтобы в них попадать, иметь полупрозрачный фон и распознаваемую пиктограмму. Размер 70x70 вполне сгодится для экрана 800x400. На скриншоте - увеличенный размер в редакторе сцен. Фон заливаем градиентом с прозрачного до полупрозрачного белого. И пытаемся сделать рамку серого цвета, чтоб было похоже. Красный квадрат - это скрытый значок замка - кнопки делались так, чтобы их можно было перемещать по экрану во время эксплуатации. Со временем, оптимальная позиция для кнопок нашлась и эта фича отвалилась за ненужностью. 
Кнопок у меня три:
1. Показать/Скрыть Меню. На короткий тап вешаем скрытие меню, на свайп в сторону - отображение. На длинный вешаем скрытие кнопок и вывод уведомления с двумя кнопками - "Скрыть/Показать кнопки" на случай если надо их временно убрать в ручном режиме.
2. Камера. На коротком тапе - снять задней камерой и сказать "Ок. Снято". На длинном - снять передней камерой и сказать "Ок. Снято. Смешной получился". На свайп - остановка текущей аудиозаписи и старт новой, если свайп был вниз.
3. Голосовые команды. Вызов голосовых команд в режиме вождения авто. Подробности см. в предыдущих постах.

Меню

Фон меню не только прозрачный, но и минимально выступающий за пределы кнопок, чтобы не мешать работать с тем, что под ним. Прозрачность пиктограмм кнопок подбирается в индивидуальном порядке.
Размещаемые кнопки и их функционал определяются личными потребностями. Описание моих, для примера:
1. Музыка. Короткий тап переключает Воспроизведение/Пауза. Длинный - скрывает Меню и открывает само приложение.
2. Дублер кнопки камера. В дополнение: по свайпу с кнопки остановка текущей аудиозаписи и старт новой, если свайп был вниз.
3. BeyondPod. Короткий тап - Пауза, длинный - Воспроизведение, Свайп влево - перемотать назад, вправо - перемотать вперед, вниз - скрыть Меню и открыть приложение.
4. Яркость экрана. Короткий тап - устанавливает яркость экрана равной 70. Длинный - переключает Автоматическую регулировку яркости. Свайп с кнопки влево устанавливает яркость экрана равной 30, вправо - 160, вниз - 255.  Текст под пиктограммой -  текущее значение яркости в ручном режиме.
5. Карта. Длинным тапом открывает приложение Карты в точке местоположения. Коротким - переключает состояние мобильного интернета. Если привязать фон кнопки к переменной и менять ее при включении/выключении мобильного интернета на полупрозрачный красный (#22FF0000) и совсем прозрачный (#00000000), то можно видеть состояние подключения. Актуально для тех, у кого есть ограничения на трафик и у кого индикатор сети отображается текстом в децибелах, а не значком.
6. Телефон. Короткий тап открывает приложение Телефон. Длинный - инициирует звонок в службу спасения 112. Свайп инициирует звонок на избранный контакт или можно повесить ещё несколько контактов.
UPD: добавил слайдер для изменения прозрачности фона меню и кнопку "Справка".
Такое меню достаточно компактно, чтобы не мешать работать с картой, но и вмещает основной набор свистелок, которые могут пригодиться на ходу.

Ключ на старт 

Работу с кнопками я возложил на JavaScript, т. к. он быстрее проделает серию операций и умещается в одном действии в очереди Tasker.
Итак, методу toggle объекта Buttons передается список имен кнопок (сцен) и имя действия, которое нужно выполнить с ними. Объект описан в библиотечном файле, который, для возможного ускорения и постоянной доступности, я поместил в область памяти самого приложения Tasker. Root Вам в помощь для этого финта ушами.
Сцену меню, при активации режима вождения, желательно создать, но не показывать (или сразу отобразите, как Вам хочется), чтобы потом ее отображение происходило быстрее.
Собственно какие действия включить в процедуру этой самой активации - всецело на Ваше усмотрение. У меня триггером для ее запуска является переключение профиля CyanogenMod в "Авто".

Содержимое библиотечного файла:
function Buttons(){
return{
        'btn tracker'  : {x:-70, y:90},
        'btn photo' : {x:-95, y:90},
        'btn voice'    : {x:-95, y:47},
        show : function(b){showScene(b, 'OverBlocking', this[b].x, this[b].y, false, false)},
        hide : function(b){hideScene(b)},
        destroy : function(b){destroyScene(b)},
        toggle : function(btn,act){for (i in btn){this[act](btn[i])} }
}
}

Приехали

На самом деле, как только я пересел на велосипед, я не только добреть стал, но и так редко ездить на авто, что многие навороченные в этом самопальном Car Dock функции уже подзабываются и вспоминаются только при редактировании. Поэтому пришлось прикрутить Справку :) Тем не менее, штука удобная. Может и Вам понравится.