# Функции (колбеки) жизненного цикла * `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_default_title()` - возвращает стандартный заголовок виджета (задается в метаданных `name`); * `ui:set_title()` - изменяет заголовок виджета, функцию следует вызывать до функции отображения данных (пустая строка - сброс до стандартного заголовка); * `ui:get_primary_text_color()` - возвращает цвет текста темы в формате #XXXXXX; * `ui:get_secondary_text_color()` - возвращает цвет вторичного текста (обычно серый) в формате #XXXXXX; * `ui:set_folding_flag(boolean)` - устанавливает или снимает флаг свернутого режима виджета, функцию следует вызывать до функций отображения данных; При нажатии на любой элемент интерфейса будет выполнен колбек `on_click(number)`, где number - это порядковый номер элемента. Например, если вы используете `ui:show_buttons` для показа трех кнопок, то при нажатии первой кнопки будет вызван `on_click` с аргументом 1, второй - с аргументов 2, и так далее. Если элемент на экране всего один - аргумент всегда будет равен единице и его можно будет опустить. Нажатия на кнопки диалога должны обрабатываться в колбеке `on_dialog_dction(number)`, где 1 - это первая кнопка, 2 - вторая, а -1 - нажатие кнопки "закрыть", если никакие кнопки не были указаны. `ui:show_edit_dialog()` возвращает текст в колбек `on_dialog_action(text)`. Функции `ui:show_text(string)` и `ui:show_lines(string)` поддерживают многие теги HTML. Например: ``` First line
Second line Bold Line
Oblique Line Red text Text on green background ``` # Системные функции * `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 ([подробнее](https://aiolauncher.app/api.html)); * `aio:add_widget(string)` - добавляет на экран встроенный виджет, виджет-скрипт или клон существующего виджета; * `aio:remove_widget(string)` - удаляет с экрана встроенный виджет или виджет-скрипт (внимание: доп. виджеты тоже будут удалены); * `aio:is_widget_added(string)` - проверяет, добавлен ли виджет на экран; * `aio:get_args()` - возвращает таблицу аргументов, которые пользователь указал нажав на иконку настроек в режиме редактирования виджета; * `aio:set_args(table)` - принудительно устанавливает аргументы скрипта (можно использовать для сохранения настроек скрипта - аргументы не стираются при отключении скрипта); Если в метаданных виджета есть поле `arguments_help`, его значение будет выведено при редактировании аргументов виджета. Если есть поле `arguments_default` - оно будет использовано для получения дефолтовых аргументов. # Сетевые функции * `http:get(url, [id])` - выполняет запрос HTTP GET, id - строка-идентификатор запрос (см. ниже); * `http:post(url, string, [id])` - выполняет запрос HTTP POST, второй аргумент - JSON-строка; * `http:put(url, [id])` - выполняет запрос HTTP PUT; * `http:delete(url, [id])` - выполняет запрос HTTP DELETE. Эти функции не возвращают никакого значения, а вместо этого вызывают колбек `on_network_result(string, [code])`. Первый аргумент: тело ответа, второй (опциональный) - код (200, 404 и т.д.). Если в запросе был указан `id`, то функция вместо описанного выше колбека вызовет `on_network_result_$id(string, [code])`. То есть если id равен "server1", то колбек будет иметь вид `on_network_result_server1(string, [code])`. # Функции обработки данных * `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](https://github.com/luaj/luaj#the-luajava-library) - прямой вызов методов Java; * [Penlight](http://stevedonovan.github.io/Penlight/api/manual/01-introduction.md.html) - набор портированных из Python функций и структур данных; * [luaDate](https://github.com/Tieske/date) - функции для работы со временем; * [json.lua](https://github.com/rxi/json.lua) - парзер JSON; * [SLAXDOM](https://github.com/Phrogz/SLAXML) - парзер 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" ```