10 KiB
Функции (колбеки) жизненного цикла
on_resume()- вызывается при каждом возврате на рабочий стол;on_alarm()- вызывается при возврате на рабочий стол при условии, что с прошлого вызова прошло больше 30 минут;on_tick()- вызывается каждую секунду пока лаунчер находится на экране.
Для большинства сетевых скриптов (загрузка и показ значений) следует использовать on_alarm. Использование других функций может привести к блокировке вашего IP.
Функции показа данных
ui:show_text(string)- выводит в виджет обычный текст; повторный вызов стирает предыдущий текст;ui:show_lines(table, [table])- выводит список строк с отправителем (на манер почтового виджета), второй аргумент (необязательный) - соответствующие им отправители (форматирование в стиле почтового виджета);ui:show_buttons(table, [table])- выводит список кнопок, первый аргумент - таблица строк, второй опциональный аргумент, таблица цветов в формате #XXXXXX;ui:show_progress_bar(text, current_value, max_value)- показывает прогресс бар;ui:show_toast(string)- показывает информационное сообщение в стиле Android;ui:show_dialog(string, string, [string], [string])- показать диалог; первый аргумент - заголовок, второй - текст, третий (опциональный) - имя первой кнопки, четвертый (опциональный) - имя второй кнопки;ui:show_edit_dialog(string, [string], [string])- показать диалог с полем ввода: 1 - заголовок, 2 - подпись, 3 - стандартное значения поля ввода;ui:show_checkbox_dialog(string, table, [string])- показать дилога с выбром: 1 - заголовок, 2 - таблица строк, 3 - дефолтовое значение;ui:get_primary_text_color()- возвращает цвет текста темы в формате #XXXXXX;ui:get_secondary_text_color()- возвращает цвет вторичного текста (обычно серый) в формате #XXXXXX;
При нажатии на любой элемент интерфейса будет выполнен колбек on_click(number), где number - это порядковый номер элемента. Например, если вы используете ui:show_buttons для показа трех кнопок, то при нажатии первой кнопки будет вызван on_click с аргументом 1, второй - с аргументов 2, и так далее. Если элемент на экране всего один - аргумент всегда будет равен единице и его можно будет опустить.
Нажатия на кнопки диалога должны обрабатываться в колбеке on_dialog_dction(number), где 1 - это первая кнопка, 2 - вторая, а -1 - нажатие кнопки "закрыть", если никакие кнопки не были указаны. ui:edit_dialog() возвращает текст в колбек on_dialog_action(text).
Функции ui:show_text(string) и ui:show_lines(string) поддерживают многие теги HTML. Например:
First line<br/>Second line
<b>Bold Line</b><br/><i>Oblique Line</i>
<font color="red">Red text</font>
<span style="background-color: #00FF00">Text on green background</span>
Системные функции
system:open_app(string)- открывает приложение, имя пакета которого указано в аргументе;system:open_browser(string)- открывает указанный URL в браузере или в приложении, умеющем обрабатывать данный тип URL;system:exec(string)- выполняет shell-команду;system:su(string)- выполняет shell-команду от имени root;system:get_location()- возвращает местоположение в таблице с двумя значениями (запрос местоположения НЕ выполняется, используется значение, сохраненное системой ранее);
Результат выполнения shell-команды приходит в колбек on_shell_result(string).
Функции управления лаунчером
aio:do_action(string)- выполняет действие AIO (подробнее);aio:add_widget(string)- добавляет на экран встроенный виджет, виджет-скрипт или клон существующего виджета;aio:remove_widget(string)- удаляет с экрана встроенный виджет или виджет-скрипт (внимание: доп. виджеты тоже будут удалены);aio:is_widget_added(string)- проверяет, добавлен ли виджет на экран;aio:get_args()- возвращает таблицу аргументов, которые пользователь указал нажав на иконку настроек в режиме редактирования виджета;
Если в метаданных виджета есть поле arguments_help, его значение будет выведено при редактировании аргументов виджета. Если есть поле arguments_default - оно будет использовано для получения дефолтовых аргументов.
Сетевые функции
net:get_text(url)- функция для получения текстовых данных по по протоколу HTTP (JSON, XML, plain text).
Функция не возвращает никакого значения, а вместо этого вызывает колбек on_network_result(string, number). Первый аргмент: тело ответа, второй - код (200, 404 и т.д.).
Функции обработки данных
ajson:get_value(string, string)- получает указанное значение из JSON; первый аргумент - JSON-строка, второй - инструкция для получения значения.
В отличие от классических парзеров JSON, эта функция предназначена не для парзинга, а именно для извлечения одиночных значений. Например, есть следующий JSON:
{
"type": "success",
"value": {
"id": 344,
"joke": "Aliens DO indeed exist. They just know better than to visit a planet that Chuck Norris is on.",
"categories": []
}
}
Необходимо извлечь из него строку "joke". По тексту JSON видно, что эта строка содержится внутри объекта "value", а сам этот объект находится внутри основного объекта JSON. Другими словами чтобы извлечь нужную строку необходимо "открыть" основной объект JSON, затем "открыть" объект "value" и найти в нем строку "joke". В коде это будет выглядеть так:
joke = ajson:get_value(result, "object object:value string:joke")
При этом полный текст скрипта может выглядеть так:
function on_alarm()
net:get_text("http://api.icndb.com/jokes/random")
end
function on_network_result(result)
local joke = ajson:get_value(result, "object object:value string:joke")
aio:show_text(joke)
end
Обратите внимание, что последним элементом строки всегда должна идти инструкция для извлечения примитивных типов данных:
string:имяint:имяdouble:имя
Также вместо object можно использовать array если в JSON находится массив.
Другие функции
AIO Launcher включает в себя интерпретатор LuaJ 3.0.1 (совместимый с Lua 5.2) со стандартным набором библиотек: base, bit32, coroutine, io, math, os, package, string table.
В комплект также входят:
- LuaJava - прямой вызов методов Java;
- Penlight - набор портированных из Python функций и структур данных;
- luaDate - функции для работы со временем;
- json.lua - парзер JSON;
- SLAXDOM - парзер XML.
Метаданные
Чтобы AIO Launcher смог корректно показать информацию о скрипте в каталоге скриптов и корректно вывести заголовок, вы должны добавить в начало скрипта метаданные. Например:
-- name = "Covid info"
-- description = "Cases of illness and death from covid (covid19api.com)"
-- arguments_help = "Specify the country code"
-- arguments_default = "RU"
-- type = "widget"
-- author = "Evgeny Zobnin (zobnin@gmail.com)"
-- version = "1.0"