Ввод и диалоги: пульт, клавиши, текст, экранная клавиатура и контролы¶
2026-11-01: справочник по контролам вынесен в guide/controls-reference.md. Глава (2026-10-31), дополнена материалом варианта D. Как PHP-плагин Dune HD получает нажатия пульта, где и с какой прошивки ему доступны клавиши, как показать диалог, папку с контролами, меню или сообщение об ошибке, как запросить у пользователя текст и почему клавиша может не дойти до плагина. Источники: SDK плагинов (
doc; платформа и версия документа не указаны —any-documented); документ IP Control (doc, версии — по протоколам); код tv188b260827_0003_r24и261021_0117_r25(code,android-dune-fw); наблюдения на tv188b r25 (device); код плагинов Widget Ext 1.5.6, GlobalTV260130_1351, screenshoter 1.0.6, Dune Backup 2.9.2, altIPTV 5.2.9, ProIPTV 9.1.1938, Torrent Center 2.0.4, Remote Control 5.1.52 (code, платформа не установлена) и dune-voice (commitd6c6188,code,android); одно сообщение форума (forum). Фактов о вводе на не-Android прошивках в базе нет. Каждое фактическое предложение ссылается на claim id.Нажатия и текст снаружи — guide/ip-control.md §5–§6. Рядом: события VOD и ТВ, OSD и позиция — guide/playback.md §4; IP Control — guide/ip-control.md §1; очередь операций и тайм-ауты — guide/plugin-operations.md; сводка по прошивкам — guide/compat-matrix.md; каталог приёмов плагинов — guide/plugin-recipes.md.
Коротко: вопрос → ответ¶
| Вопрос | Ответ | Где |
|---|---|---|
| Как получить ввод в своём коде? | действие HANDLE_USER_INPUT вызывает handle_user_input() и исполняет то, что она вернёт (SDK)1 |
§1 |
| Что приходит в обработчик из контрола? | selected_control_id и текущие значения combobox и текстовых полей под их именами (SDK)2 |
§1 |
| Как назначить действие на кнопку пульта? | константа GuiEventKind (строка key_*) в карте actions (код r24, SDK)3 |
§2.1, §3.2 |
| Почему клавиша не доходит до плагина? | в регулярной папке ENTER, PLAY, INFO, POPUP_MENU, B_GREEN, C_YELLOW и D_BLUE без действия игнорируются (SDK)4; в общей папке Dune переопределяются только ENTER и PLAY (SDK)5; ENTER в диалоге не меняется (SDK)6 | §2.2 |
| С какой прошивки клавиши в диалогах и папках? | 120902 — стрелки, P_PLUS/P_MINUS, NEXT/PREV и цифры в диалогах, 130819_b8 — регулярные папки (SDK)7 | §3.1 |
| Как показать диалог с контролами? | ShowDialogAction с defs и необязательными actions/timer (SDK)8 |
§2.3, §3.3 |
| Как закрыть диалог и выполнить действие? | CloseDialogAndRunAction: его post_action становится результатом SHOW_DIALOG (SDK)9 |
§2.3 |
| Как обновить контролы, не закрывая диалог? | ResetControlsAction с новыми defs (SDK)10 |
§2.3 |
| Как запросить текст с экранной клавиатурой? | GuiTextFieldDef::has_osk = true плюс VGap под полем (SDK)11 |
§2.5 |
| Какие клавиши приходят в VOD? | r25, device: цветные — как ev_key_* (устройство r25)12, нецветные key_pause, key_play, стрелки, key_subtitle, key_audio, key_next, key_1, key_info, key_popup_menu — если зарегистрированы в actions (устройство r25)13 |
§2.6 |
Где задаётся карта actions? |
у точки входа в манифесте, у папок, диалогов, ТВ и VOD; ChangeBehaviour заменяет её на лету (код r24, SDK)14 |
§1 |
| Как нажать кнопку пульта снаружи? | IP Control cmd=ir_code с NEC-кодом (SDK)15 |
ip-control.md §5 |
| Как ввести текст в поле с компьютера? | IP Control cmd=set_text&text=… при активном редакторе (SDK)16 |
ip-control.md §5 |
| Как задать первый фокус? | initial_sel_ndx среди фокусируемых контролов: combobox, кнопок, текстовых полей (SDK)17 |
§2.9 |
| Как показать меню по POPUP_MENU? | вернуть ShowPopupMenuAction со списком GuiMenuItemDef (код r24, SDK)18 |
§2.10 |
| Как показать ошибку? | PluginShowErrorAction (fatal, title, msg_lines) (SDK)19 |
§2.11 |
| Как сделать свою клавиатуру с подсказками? | диалог с контролами, как AdvKeyboard из Widget Ext 1.5.6 (код)20 |
§4.5 |
1. Как устроен ввод в плагине¶
Объект: PHP-плагин Dune HD; SDK плагинов (doc, any-documented, версия документа не указана), dune_api.php
tv188b r24 (code, android-dune-fw, 260827_0003_r24), наблюдения на tv188b r25 (device, 261021_0117_r25).
Этот раздел — модель, на которую опираются все задачи главы. Главное ограничение: PHP API не даёт плагину рисовать произвольный телевизионный интерфейс и произвольно обрабатывать события пульта — доступен только высокоуровневый GUI-фреймворк с фиксированным набором возможностей (SDK)21. Поэтому плагин не «слушает» пульт, а заранее говорит оболочке, что делать на какое событие.
Это делается двумя связанными механизмами. Первый — карта actions: плагин назначает GuiAction на событие
GuiEventKind, и большинство таких событий соответствует кнопкам пульта (SDK)22; такие
карты есть, например, у диалога и у VOD (устройство r25, SDK)23. Второй — действие HANDLE_USER_INPUT: у него нет своих данных, оно вызывает
операцию handle_user_input с GuiAction::$params и возвращает её результат как post action
(SDK)24. Операция вызывается во время исполнения этого действия
(SDK)25 и может вернуть другой GuiAction, который исполняется сразу
(SDK)26. На практике механизмы соединяют: на клавишу вешают HANDLE_USER_INPUT, а решение принимает код плагина
в handle_user_input (SDK)27 (пример — §4.4).
В PHP GUI-действие — массив с handler_string_id (тип) и data (параметры) (SDK)28. Строковый id
HANDLE_USER_INPUT в dune_api.php r24 — plugin_handle_user_input
(код r24)29; остальные id — §3.8. В r24 у handle_user_input по ссылке
передаются и $user_input, и $plugin_cookies (код r24)30. Что лежит в data
этого действия, SDK и код описывают по-разному — §5. Сколько оболочка ждёт ответа и что бывает по тайм-ауту —
guide/plugin-operations.md.
На tv188b r25 (device, 261021_0117_r25) строковый id plugin_handle_user_input в key_enter манифеста принят:
при выборе точки входа kbp5.native shell.log пишет «plugin D: test_plugin5->handle_user_input(kbp5.native): start
(timeout=60.0s)» (устройство r25)31.
Где задаётся карта actions. Карту «событие → действие» задают в нескольких местах: в r24 поле actions типа
GuiActionMap есть у классов папок, диалогов и воспроизведения, а SDK описывает часть из них.
| Где | Поле | Что известно | Claim |
|---|---|---|---|
| Точка входа в манифесте | actions, popup_menu |
событие (клавиша) → GUI-действие при фокусе на точке входа; popup_menu добавляет пункты в её контекстное меню (§2.10) |
(SDK)32 |
| Регулярная папка | PluginRegularFolderView::actions |
тип GuiActionMap в r24 |
(код r24)33 |
| Папка с контролами | PluginControlsFolderView::actions |
тип GuiActionMap в r24; в описании класса в SDK поля нет (§5) |
(код r24)34 |
| Rows- и GComps-папка | PluginRowsFolderView::actions, PluginGCompsFolderView::actions |
тип GuiActionMap в r24 |
(код r24)35 |
| Диалог с контролами | ShowDialogActionData::actions |
действия на клавиши и событие таймера; ENTER не переопределяется | (код r24, SDK)36 |
| GComps-диалог | ShowGCompsDialogActionData::actions |
тип GuiActionMap в r24 |
(код r24)37 |
| ТВ-воспроизведение | PluginTvInfo::actions |
тип GuiActionMap в r24 |
(код r24)38 |
| VOD-воспроизведение | PluginVodInfo::actions |
тип GuiActionMap в r24; что доходит на r25 — §2.6 |
(код r24)39 |
| Замена на лету | ChangeBehaviourActionData::actions |
заданное actions заменяет существующую карту |
(SDK)40 |
ChangeBehaviour по SDK поддерживает регулярную папку, диалог с контролами и VOD-воспроизведение, а папки с
контролами и с фильмом, ТВ- и обычное воспроизведение обещаны в будущем (SDK)41.
Где живёт ввод. SDK называет три сценария handle_user_input: регулярные папки с HANDLE_USER_INPUT на клавишах,
экраны настроек с confirm/apply у текстового поля и combobox или кнопкой «Apply», и диалоги с произвольным набором
контролов, которые ведут себя почти как control-папки (SDK)27. Control-папка поддерживает
контролы button, combobox и text field, а изменения применяются и сохраняются через HANDLE_USER_INPUT
(SDK)42. Четвёртый контекст — воспроизведение плагина (§2.6). Какие клавиши доступны в каком контексте,
зависит от прошивки (§3.1), а чего оболочка не отдаёт плагину через PHP — в §2.2.
Что приходит в обработчик. Действие, исполняемое из контрола, получает в params поле selected_control_id со
значением GuiControlDef::name контрола, который его вызвал (SDK)43. Для каждого
combobox и текстового поля контейнера в params лежит ключ с именем контрола и его текущим значением — выбранным
choice_value или редактируемым текстом (SDK)44. Чтобы обработчик понял, откуда
пришёл вызов, SDK советует заранее добавлять в params свои метки контекста и контейнера
(SDK)45. На tv188b r25 handler_id и control_id из params действия
plugin_handle_user_input на key_enter точки входа приходят одноимёнными полями в input_data операции
(устройство r25)46. Там же при ENTER на точке входа есть selected_media_url и
orig_selected_media_url, равные media_url точки входа, а также play_mode=none и
topmenu_root_id=section:applications (устройство r25)47. В коде Widget Ext 1.5.6 значение контрола
читается как $user_input->{control_id}, а родительский media_url — как $user_input->parent_media_url
(код)48. Если плагин построен по образцу фреймворка shell_ext, обработчик выбирается по handler_id — см. §4.1.
2. Задачи¶
2.1. Назначить действие на клавишу пульта¶
Объект: события GuiEventKind в SDK плагинов (doc, any-documented) и их строки в dune_api.php tv188b r24
(code, android-dune-fw, 260827_0003_r24).
Кнопка пульта становится функциональной, когда на её константу GuiEventKind назначен GuiAction
(SDK)22. В PHP константы — строки: GUI_EVENT_KEY_ENTER='key_enter',
GUI_EVENT_KEY_PLAY='key_play' и так далее, полный перечень — §3.2 (код r24)49.
Минимальный пример — screenshoter 1.0.6: в обеих точках входа он вешает key_enter и key_play на
plugin_handle_user_input с handler_id = entry (код)50.
Без пометки версии SDK называет восемь клавишных событий: ENTER, PLAY, A_RED, B_GREEN, C_YELLOW, D_BLUE, POPUP_MENU и INFO (SDK)51. Дальше набор расширялся по прошивкам: с 120902 стрелки, P_PLUS/P_MINUS, NEXT/PREV и цифры появились только в диалогах с контролами, а с 130819_b8 все прежние клавишные события стали доступны и в регулярных папках (SDK)7. Смотрите таблицу §3.1, прежде чем назначать, например, стрелки в регулярной папке. Если назначенное действие не срабатывает, пройдите по списку §2.2.
2.2. Почему клавиша не доходит до плагина¶
Объект: ограничения на переопределение клавиш в SDK плагинов (doc, any-documented, версия документа не
указана) и диспетчер shell_ext tv188b r24/r25 (code, android-dune-fw).
Здесь собраны все известные причины, по которым нажатие не превращается в действие плагина. Проверяйте по порядку: контекст, перехват контролом, прошивка, затем собственный диспетчер.
| Где | Что происходит | Claim |
|---|---|---|
| Регулярная папка плагина | ENTER, PLAY, INFO, POPUP_MENU, B_GREEN, C_YELLOW, D_BLUE без назначенного действия игнорируются; A_RED переключает варианты отображения папки | (SDK)4 |
| Регулярная папка плагина | по A_RED GUI вызывает get_next_folder_view(), если PluginFolderView::multiple_views_supported == true |
(SDK)52 |
| Пустая регулярная папка | ENTER переопределить нельзя | (SDK)53 |
| Регулярная папка | ZOOM, POWER и EJECT переопределить нельзя | (SDK)54 |
| Общие папки Dune (точка входа плагина) | плагин переопределяет только ENTER и PLAY | (SDK)5 |
| Диалог с контролами | поведение ENTER картой actions изменить нельзя |
(SDK)6 |
| Активный текстовый редактор или раскрытый combobox в диалоге | часть кнопок имеет особое значение и картой actions диалога не переопределяется |
(SDK)55 |
Текстовое поле в active |
перехватывает стрелки, ENTER, RETURN и некоторые другие клавиши | (SDK)56 |
Combobox в active |
перехватывает стрелки, ENTER и RETURN | (SDK)57 |
ТВ-воспроизведение с PluginTvInfo::favorites_supported |
по B_GREEN, C_YELLOW, D_BLUE GUI вызывает change_tv_favorites() |
(SDK)58 |
| Пульт без нужной кнопки | по сообщениям пользователей, на комплектном (новом) пульте Dune Android нет кнопки Eject; тип пульта — §2.7 | (форум)59 |
| Прошивка старше нужной | клавиша в этом контексте ещё не поддержана — см. §3.1 | (SDK)7 |
Диспетчер shell_ext (r24, r25) |
без handler_id или с незарегистрированным handler_id результат null |
(код)60 |
Если нужна обработка пульта, которую не даёт ни одна строка таблицы, через PHP её не получить
(SDK)21; Android-приложение в составе плагина может перехватывать клавиши через accessibility-сервис
(§4.6), а веб-приложение получает их как события DOM (§2.12). Как ведут себя клавиши в VOD и ТВ — §2.6. Код
AdvKeyboard назначает ENTER в карте своего диалога вопреки строке «Диалог с контролами» — §5.
2.3. Показать диалог с контролами и получить результат¶
Объект: ShowDialogAction и связанные действия в SDK плагинов (doc, any-documented, версия документа не
указана; отдельные поля и действия — с пометками прошивок); фабрика shell_ext tv188b r24 (code, 260827_0003_r24),
плагин downloads на tv188b r25 (device).
Диалог — способ задать пользователю вопрос из нескольких контролов: ShowDialogAction показывает контролы
вертикальным списком и взаимодействует с пользователем, пока диалог не закрыт; у контрола может быть заголовок в одну
или две колонки, полоса прокрутки появляется при необходимости (SDK)61. Жизненный цикл
диалога — четыре шага.
- Открыть. Соберите список
GuiControlDef(controls-reference.md §3.5) вdefsи передайте его вShowDialogActionData; поля данных — в §3.3 (SDK)8. - Обработать нажатия. Кнопка исполняет
push_actionпо ENTER (SDK)62; это может бытьHANDLE_USER_INPUT(SDK)24, и тогда обработчик получает значения контролов (§1). Клавиши и таймер диалога задаются картойactions, но ENTER ею не переопределить (SDK)6. Таймер срабатывает один раз; новый обычно задают действиемChangeBehaviour(SDK)63 (подробнее — после списка). - Обновить без закрытия.
ResetControlsActionзаменяет состояние текущего диалога или папки с контролами (SDK)10 — так перерисовывают диалог после каждого нажатия (§4.3, §4.5). - Закрыть и вернуть результат.
CloseDialogAndRunActionзакрывает диалог и отдаёт свойpost_actionкак результат вызвавшегоSHOW_DIALOG(SDK)9; иначеShowDialogActionвозвращает статусok(SDK)64. Закрытие кнопкой RETURN включаетсяclose_by_return(SDK)65, а с прошивки 130904_b8 — ещё и последовательностью событийexit_seq(SDK)66. Кнопку «закрыть и применить»shell_extr24 строитadd_close_dialog_and_apply_button:action_type=apply, аpush_actionобёрнут вclose_dialog_and_run(код r24)67. Если RETURN должен делать своё, ставятclose_by_return = falseи назначаютGUI_EVENT_KEY_RETURNвactions— так сделаныEditListDialogGlobalTV (§4.3) и диалог настроекAdvKeyboard(код)68.
Диалог, который обновляется сам. GUI_EVENT_TIMER генерируется один раз по истечении GuiTimerDef::delay_ms
(SDK)69. В ChangeBehaviour (данные actions, timer, post_action) заданный таймер
перезапускается от текущего момента, а заданное actions заменяет карту (SDK)40. Отсюда схема периодического обновления: timer в ShowDialogActionData и
ChangeBehaviour с новым timer в ответ на событие таймера (SDK)70. На tv188b r25
(device) встроенный плагин downloads после open_magnet показывает show_dialog с опросом entry.dialog_open_dl
раз в ~1 с (устройство r25)71; другой приём — переоткрывать диалог по таймеру (§4.7).
CloseAndRunAction (с прошивки 121114) при активном диалоге с контролами работает как CloseDialogAndRunAction, при
другом диалоге ничего не делает, а без диалогов закрывает активную папку (переход вверх) и возвращает post_action
(SDK)72. С прошивки 131029_b9 оно же, вызванное из ТВ- или VOD-воспроизведения плагина без
активного диалога, работает как остановка воспроизведения (SDK)73.
Если нужен только выбор из списка, достаточно всплывающего меню ShowPopupMenuAction
(SDK)74 (§2.10). Готовые диалоги OK, Yes/No и ожидания в shell_ext r24 — controls-reference.md §3.9; строковые
id действий — §3.8.
| Действие | Данные | Что делает | Вне контейнера | Claim |
|---|---|---|---|---|
ShowDialogAction |
ShowDialogActionData (§3.3) |
показывает диалог до закрытия; возвращает ok или post_action из CloseDialogAndRun |
— | (SDK)75 |
CloseDialogAndRunAction |
post_action (необязательно) |
закрывает текущий диалог с контролами; post_action — результат SHOW_DIALOG |
игнорируется вне диалога с контролами | (SDK)76 |
CloseAndRunAction (121114+) |
post_action (необязательно) |
в диалоге с контролами — как CloseDialogAndRunAction |
при другом диалоге ничего; без диалогов закрывает активную папку | (SDK)72 |
ChangeBehaviour |
actions, timer, post_action (все необязательны) |
заменяет карту actions, перезапускает таймер |
поддержка контейнеров — §1 | (SDK)77 |
ResetControlsAction |
defs, initial_sel_ndx (−1 — выбор не менять), post_action (необязательно) |
заменяет состояние диалога или папки с контролами | игнорируется вне них | (SDK)78 |
ShowPopupMenuAction |
menu_items (List<GuiMenuItemDef>), selected_menu_item_index (по умолчанию 0) |
показывает меню до закрытия; действие выбранного пункта возвращается как post action | — | (SDK)79 |
PluginHandleUserInputAction |
нет | вызывает handle_user_input(params), результат — post action |
— | (SDK)24 |
2.4. Экран настроек: папка с контролами¶
Объект: PluginControlsFolderView в SDK плагинов (doc, any-documented, версия документа не указана) и в
dune_api.php / shell_ext tv188b r24 (code, android-dune-fw, 260827_0003_r24).
Папка с контролами — второй контейнер для тех же контролов. В отличие от диалога, это обычная папка в навигации Dune:
она закрывается кнопками RETURN и TOP_MENU, как другие папки (SDK)80. Папки плагина
открывает PluginOpenFolderAction: оно вызывает get_folder_view($media_url) и показывает результат
(SDK)81. Тип PluginFolderView::data зависит от view_kind: для control-папки это
PluginControlsFolderView (SDK)82 с полями defs, initial_sel_ndx и params
(SDK)83; defs — список определений контролов (SDK)84,
initial_sel_ndx — индекс контрола, получающего фокус первым, −1 — первый (SDK)85, а
params — PluginFolderViewParams с полями paint_path_box, paint_content_box_background и background_url
(SDK)86. В dune_api.php r24 у класса ещё есть actions и timer
(код r24)87, и AbstractControlsScreen::get_folder_view из shell_ext r24 отдаёт
PLUGIN_FOLDER_VIEW_CONTROLS со всеми пятью полями и multiple_views_supported=false
(код r24)88; расхождение с SDK — §5.
Изменения в такой папке применяются и сохраняются через HANDLE_USER_INPUT (SDK)42: либо confirm/apply
у текстового поля и combobox, либо отдельная кнопка «Apply» (SDK)27. Обновить набор контролов
можно тем же ResetControlsAction, что и в диалоге (§2.3) (SDK)10. Чем папка отличается от
диалога по полям — §3.4.
2.5. Запросить текст: текстовое поле и экранная клавиатура¶
Объект: GuiTextFieldDef и встроенная клавиатура has_osk в SDK плагинов (doc, any-documented, версия
документа не указана); пример VodSearchScreen tv188b r25 (code, android-dune-fw, 261021_0117_r25); строки и
фабрики r24 (code, 260827_0003_r24); GlobalTV 260130_1351 (code).
Есть два пути. Встроенный — текстовое поле GuiTextFieldDef в диалоге или папке с контролами; его поля — в controls-reference.md §3.6
(SDK)89. Свой — диалог-клавиатура из обычных контролов, как AdvKeyboard (§4.5)
(код)20; он нужен, если требуются подсказки (код)90
или своя раскладка (код)91.
Для встроенного пути решения такие. Экранную клавиатуру под полем включает has_osk = true; её высота при раскладке
не учитывается, поэтому SDK предлагает добавить под полем VGap (SDK)11, который
увеличивает расстояние до следующего контрола (SDK)92. Чтобы пользователь сразу
печатал, а не нажимал ENTER для входа в редактор (SDK)56, ставят
always_active = true: поле при фокусе сразу переходит в active (SDK)93. Проверку ввода делают в confirm_action: он исполняется по ENTER
до применения, и статус не OK откатывает изменения и оставляет поле в active
(SDK)94. Сохранение — в apply_action, который исполняется после применения и чей
статус игнорируется (SDK)95. Введённый текст приходит в params под именем
контрола (SDK)44 (§1).
Пример r25. VodSearchScreen в shell_ext r25 строит текстовое поле pattern с начальным значением из cookie
vod_search_pattern и флагами has_osk=true, always_active=true, need_confirm=true, need_apply=true
(код r25)96. По confirm с пустым pattern он показывает ошибку
vod_search_pattern_should_not_be_empty, а по apply сохраняет шаблон в cookie и возвращает reset_controls с
открытием папки поиска (код r25)97. Это образец всей связки:
встроенная клавиатура, always_active, проверка в confirm, сохранение в apply и запоминание последнего ввода.
Параметры клавиатуры. Экранную клавиатуру включает только флаг has_osk; раскладки или языка среди восьми полей
GuiTextFieldDef нет (SDK)89. GlobalTV 260130_1351 для кода родительского
контроля передаёт в params поля недокументированный ключ fixed_osk_id='numeric' (код)98; имя
fixed_osk_id есть и в libduneshell.so r24 среди ключей ktv_params манифеста
(код r24)99. Что делает этот ключ, в базе не установлено. В
GComps-интерфейсе текстовое поле строит GCompsFactory::text_field r24: оно заполняет GuiTextFieldDef
(initial_value, numeric, password, has_osk, width, apply_action) внутри GComponentDef
(код r24)100.
Снаружи текст активного редактора можно прочитать и заменить через IP Control — ip-control.md §5 (SDK)101.
2.6. Клавиши во время воспроизведения (VOD, ТВ)¶
Объект: клавиши в VOD-воспроизведении плагина на tv188b r25 (device, 261021_0117_r25) и событие таймера в ТВ
по SDK (doc, any-documented).
В VOD плагин регистрирует клавиши в PluginVodInfo::actions под теми же строками key_*, что и в папках
(key_a_red, key_b_green) (устройство r25, код r24)102. На tv188b r25 цветная кнопка приходит в handle_user_input с
control_id ev_key_a_red, ev_key_b_green, ev_key_c_yellow или ev_key_d_blue и полями plugin_vod_id,
plugin_vod_series_ndx, plugin_vod_sel_series_ndx, но без playback_position; позиция есть у ev_timer
(устройство r25)12. Нецветные клавиши на r25 тоже доставляются, если они
зарегистрированы в actions: key_pause, key_play, стрелки, key_subtitle, key_audio, key_next, key_1,
key_info и key_popup_menu (устройство r25)13. Назначенное действие на key_pause
перехватывает PAUSE: плагин получает событие, а воспроизведение продолжает идти
(устройство r25)103. Позицию для действия по клавише берите из ev_timer
(устройство r25)12. В input_data события цветной клавиши есть ещё
handler_id, control_id, play_mode, topmenu_root_id и playback_browser_activated
(устройство r25)104. Через те же actions на r25 приходят и неклавишные события playback_user_action,
playback_switched, playback_state_changed и playback_going_to_switch (устройство r25)105. SDK
описывает клавиши в VOD иначе — §5.
В ТВ-воспроизведении плагина событие таймера доступно с прошивки 131029_b9 (SDK)106; доставка клавиш в ТВ в базе не наблюдалась. Остальные события воспроизведения и их порядок — guide/playback.md §4.1.
2.7. Учесть тип пульта: few_buttons_remote_type (r24, r25)¶
Объект: dune_config.php tv188b r24 и экран фильма shell_ext r25 (code, android-dune-fw, 260827_0003_r24,
261021_0117_r25); меню настроек r24 (code).
На tv188b r24 фреймворк прошивки учитывает, что не у всех пультов есть цветные кнопки
(код r24)107. dune_config.php задаёт
константы FEW_BUTTONS_REMOTE_TYPE_NONE=0, _OVAL=1, _SMALL=2, _ARROWS=3
(код r24)108, а dune_config_get_few_buttons_remote_type() возвращает свойство
few_buttons_remote_type (код r24)109. dune_config_with_color_buttons()
возвращает false для пультов SMALL и ARROWS и true для остальных, а dune_config_show_pop_up_icon_only() — true
для OVAL, SMALL и ARROWS (код r24)107. Это код r24. В r25 оболочка по dune_config_show_pop_up_icon_only() выбирает иконку подсказки POPUP на экране фильма:
popup_icon_only.png вместо popup.png (код r25)110.
Повтор клавиш упоминается в меню настроек: на экране appearance_control в menu_config.xml r24 есть пункты
key_repeat_rate и delay_before_key_repeat (код r24)111. Автоповтор у
веб-приложений r25 — §2.12.
2.8. Нажать клавишу или ввести текст снаружи: IP Control¶
Команды ir_code, ui_action_*, get_text и set_text, коды кнопок NEC и строки key_action — в
guide/ip-control.md §5.
2.9. Задать и сохранить фокус¶
Объект: фокус в диалогах, папках и меню по SDK плагинов (doc, any-documented); наблюдения на tv188b r25
(device); GComps- и rows-структуры dune_api.php и shell_ext r24, экран EPG r25 (code, android-dune-fw).
В диалоге фокус переходит между фокусируемыми контролами — combobox, кнопками и текстовыми полями
(SDK)17; в папке с контролами первый фокус задаёт initial_sel_ndx
(SDK)85. Плагин задаёт начальную позицию фокуса и может переставить её при перерисовке.
| Где | Как задать фокус | Claim |
|---|---|---|
| Диалог | initial_sel_ndx среди фокусируемых; −1 — авто |
(SDK)112 |
| Папка с контролами | initial_sel_ndx с 0; −1 — первый контрол |
(SDK)85 |
| Перерисовка диалога или папки | ResetControlsAction::initial_sel_ndx; −1 — выбор не менять |
(SDK)113 |
| Регулярная папка | PluginUpdateFolderAction::sel_ndx >= 0 переводит фокус на элемент с этим индексом |
(SDK)114 |
| Всплывающее меню | selected_menu_item_index (по умолчанию 0) |
(SDK)115 |
| Главный экран | is_default_section точки входа (с 120901) делает её фокусной при первом входе |
(SDK)116 |
AdvKeyboard после смены цвета переоткрывает настройки с прежним initial_sel_ndx
(код)117. Кроме фокуса, у полей ввода и combobox есть состояние
active — controls-reference.md §3.7.
На tv188b r25 (device) в диалоге обновления плагина в фокусе по умолчанию кнопка «Обновить»
(устройство r25)118, а в диалоге downloads для торрента — кнопка
«Воспроизвести» (устройство r25)119. В обоих случаях эта кнопка названа в claim первой; общего
правила база не записывает.
В GComps- и rows-интерфейсе фокус описывается данными, а не контролами: в dune_api.php r24 у GComponentDef есть
focusable_def и focused_variant_def (код r24)120, а у PluginRowsPane — focus типа GCompFocusDef и
коэффициенты horizontal_focus_freedom_factor, vertical_focus_freedom_factor, vertical_focus_gravity
(код r24)121.
RowsFactory::focus r24 ставит type=GCOMP_FOCUS_SYSTEM, type2=GCOMP_FOCUS_NONE
(код r24)122. Навигацию по своему GComps-списку библиотека ведёт сама: экран
программы EPG r25 связывает стрелки и P+/P− с control_id=change и op (left/right/up/down/page_up/page_down)
(код r25)123, а GCompList::handle_op r24 принимает
page_up/page_down/up/down/left/right/sel:<n> с шагом страницы floor((page_size+1)/2)
(код r24)124. Подробный разбор GComps и rows в эту главу не входит.
2.10. Всплывающее меню: ShowPopupMenuAction и GuiMenuItemDef¶
Объект: ShowPopupMenuAction в SDK плагинов (doc, any-documented), GuiMenuItemDef и фабрики меню в
dune_api.php и shell_ext tv188b r24 (code, android-dune-fw, 260827_0003_r24).
Меню по POPUP_MENU плагин показывает сам: назначает на клавишу действие, которое возвращает ShowPopupMenuAction.
Данные — menu_items (List<GuiMenuItemDef>) и selected_menu_item_index (по умолчанию 0)
(SDK)115; меню показывается до закрытия, а действие выбранного пункта возвращается как post
action (SDK)74. Строковый id действия — show_popup_menu
(код r24)125.
GuiMenuItemDef в dune_api.php r24 имеет ключи is_separator, id, caption, icon_url, marked, action,
is_shown_action (код r24)126; action и is_shown_action — типа GuiAction
(код r24)127. Фабрики shell_ext r24: get_menu_item заполняет
caption, action и icon_url (последний — только если задан) (код r24)128,
get_menu_separator ставит is_separator=1 (код r24)129.
Списки GuiMenuItemDef встречаются и в других местах:
| Где | Что | Claim |
|---|---|---|
| Контекстное меню точки входа | popup_menu в манифесте; встроенные манифесты r24 пишут его как popup_menu/menu_items/menu_item с caption и action (о форме item из примера SDK — §6) |
(код r24, SDK)130 |
| VOD-воспроизведение | PluginVodInfo::extra_menu_items в r24 |
(код r24)131 |
| Добавить пункты в меню | AddMenuItemsActionData::menu_items (действие add_menu_items) в r24 |
(код r24)132 |
GlobalTV 260130_1351 отвечает действием add_menu_items на событие topmenu_popup, читая из user_input
selected_topmenu_item_id и topmenu_pcode_entered (код)133.
2.11. Сообщить об ошибке: PluginShowErrorAction¶
Объект: PluginShowErrorAction в SDK плагинов (doc, any-documented, версия документа не указана).
PluginShowErrorAction (данные fatal, title, msg_lines; msg_lines необязателен)
(SDK)19 в меню Dune показывает диалог с заголовком и строками сообщения, а в режиме
воспроизведения — одну строку текста в центре экрана (SDK)134. При fatal == true действие
планирует выход из плагина: воспроизведение останавливается, браузер Dune переходит в верхнее меню
(SDK)135. Действие всегда возвращает статус ошибки и никогда — post action
(SDK)136; строковый id в r24 — plugin_show_error
(код r24)29. На tv188b r25 (device) тот же строковый id в ответе
handle_user_input принят: shell.log пишет result action plugin_show_error
(устройство r25)137. В коде прошивки и плагинов отказ в неверном вводе встречается как
вызов show_error: VodSearchScreen r25 на
confirm с пустым pattern возвращает show_error(false, vod_search_pattern_should_not_be_empty) (§2.5)
(код r25)97, а EditListDialog GlobalTV так же отклоняет пустой
набор (§4.3).
2.12. Клавиши вне PHP-API: веб-приложения в StbWebView (r25)¶
Объект: StbWebView и JS-объект Stb прошивки tv188b r25 (code, android-dune-fw, 261021_0117_r25).
Веб-приложению клавиши приходят не через карту actions, а как события DOM: StbWebView r25 передаёт сопоставленные
клавиши событиями keydown/keyup с одинаковыми keyCode и which через document.body.dispatchEvent
(код r25)138. Метод Stb.setRcAutoRepeatKeys там — заглушка «not implemented»,
возвращающая ERROR даже после успешного разбора массива (код r25)139. Перехват клавиш
Android-приложением в составе плагина — §4.6.
3. Справочник¶
3.1. Клавишные события по прошивкам¶
Объект: события GuiEventKind в SDK плагинов (doc, any-documented; версии — из пометок в тексте SDK).
Таблица отвечает на вопрос «можно ли назначить эту клавишу здесь на этой прошивке». Клавиши в ТВ и VOD с 131029_b9 SDK описывает противоречиво — эти строки вынесены в §5 и §6.
| Прошивка | Что стало доступно | Где | Claim |
|---|---|---|---|
| без пометки | ENTER, PLAY, A_RED, B_GREEN, C_YELLOW, D_BLUE, POPUP_MENU, INFO | не уточнено | (SDK)51 |
| 120902+ | LEFT, RIGHT, UP, DOWN, P_PLUS, P_MINUS, NEXT, PREV, цифры 0–9 | только диалоги с контролами | (SDK)140 |
| 130819_b8+ | все прежние клавишные события | добавились регулярные папки плагина | (SDK)141 |
| 130819_b8+ | SETUP, RETURN, SELECT, CLEAR | диалоги с контролами и регулярные папки | (SDK)142 |
| 130904_b8+ | PAUSE | диалоги с контролами и регулярные папки | (SDK)143 |
| 131029_b9+ | событие GUI_EVENT_TIMER |
ТВ-воспроизведение плагина (как в VOD) | (SDK)106 |
| 150529+ | GUI_EVENT_PLAYBACK_SWITCHED, GUI_EVENT_PLAYBACK_GOING_TO_SWITCH |
воспроизведение; события переключения, не клавиши | (SDK)144 |
3.2. Строки GuiEventKind в dune_api.php (r24)¶
Объект: dune_api.php tv188b r24 (code, android-dune-fw, 260827_0003_r24).
Ниже — строки констант GuiEventKind, которые становятся ключами карты actions
(код r24)49. Константы перечисления, не показанные здесь, —
в api-reference.md §3.3. В VOD r25 цветные клавиши приходят в control_id с префиксом ev_, нецветные — без него — §2.6.
| Группа | Константа → строка |
|---|---|
| База | GUI_EVENT_KEY_ENTER → key_enter, GUI_EVENT_KEY_PLAY → key_play, GUI_EVENT_KEY_A_RED → key_a_red, GUI_EVENT_KEY_B_GREEN → key_b_green, GUI_EVENT_KEY_C_YELLOW → key_c_yellow, GUI_EVENT_KEY_D_BLUE → key_d_blue, GUI_EVENT_KEY_POPUP_MENU → key_popup_menu, GUI_EVENT_KEY_INFO → key_info |
| Навигация | GUI_EVENT_KEY_LEFT → key_left, GUI_EVENT_KEY_RIGHT → key_right, GUI_EVENT_KEY_UP → key_up, GUI_EVENT_KEY_DOWN → key_down, GUI_EVENT_KEY_P_PLUS → key_p_plus, GUI_EVENT_KEY_P_MINUS → key_p_minus, GUI_EVENT_KEY_NEXT → key_next, GUI_EVENT_KEY_PREV → key_prev, GUI_EVENT_KEY_FIP_NEXT → key_fip_next, GUI_EVENT_KEY_FIP_PREV → key_fip_prev |
| Служебные | GUI_EVENT_KEY_SETUP → key_setup, GUI_EVENT_KEY_RETURN → key_return, GUI_EVENT_KEY_SELECT → key_select, GUI_EVENT_KEY_CLEAR → key_clear, GUI_EVENT_KEY_PAUSE → key_pause |
| Медиа и прочее | GUI_EVENT_KEY_FWD → key_fwd, GUI_EVENT_KEY_REW → key_rew, GUI_EVENT_KEY_SLOW → key_slow, GUI_EVENT_KEY_STOP → key_stop, GUI_EVENT_KEY_TOP_MENU → key_top_menu, GUI_EVENT_KEY_POWER → key_power, GUI_EVENT_KEY_EJECT → key_eject, GUI_EVENT_KEY_MODE → key_mode, GUI_EVENT_KEY_VENDOR → key_vendor, GUI_EVENT_KEY_SHUFFLE → key_shuffle, GUI_EVENT_KEY_MUSIC → key_music, GUI_EVENT_KEY_MUTE → key_mute, GUI_EVENT_KEY_V_PLUS → key_v_plus, GUI_EVENT_KEY_V_MINUS → key_v_minus, GUI_EVENT_KEY_SEARCH → key_search, GUI_EVENT_KEY_ZOOM → key_zoom, GUI_EVENT_KEY_SUBTITLE → key_subtitle, GUI_EVENT_KEY_REPEAT → key_repeat, GUI_EVENT_KEY_AUDIO → key_audio, GUI_EVENT_KEY_REC → key_rec, GUI_EVENT_KEY_DUNE → key_dune, GUI_EVENT_KEY_FAVORITES → key_favorites, GUI_EVENT_KEY_URL → key_url |
| Цифры | GUI_EVENT_KEY_0 → key_0, GUI_EVENT_KEY_1 → key_1, GUI_EVENT_KEY_2 → key_2, GUI_EVENT_KEY_3 → key_3, GUI_EVENT_KEY_4 → key_4, GUI_EVENT_KEY_5 → key_5, GUI_EVENT_KEY_6 → key_6, GUI_EVENT_KEY_7 → key_7, GUI_EVENT_KEY_8 → key_8, GUI_EVENT_KEY_9 → key_9 |
| Не клавиши | GUI_EVENT_UI_ACTION → ui_action, GUI_EVENT_TIMER → timer, GUI_EVENT_PLUGIN_ROWS_INFO_UPDATE → plugin_rows_info_update, GUI_EVENT_PLAYBACK_STOP → playback_stop, GUI_EVENT_PLAYBACK_GOING_TO_SWITCH → playback_going_to_switch, GUI_EVENT_PLAYBACK_SWITCHED → playback_switched, GUI_EVENT_PLAYBACK_USER_ACTION → playback_user_action, GUI_EVENT_PLAYBACK_STATE_CHANGED → playback_state_changed; остальные события перечисления (folder_enter, boot, gui_start, network_change и т. п.) — в том же claim |
3.3. ShowDialogActionData: поля диалога¶
Объект: ShowDialogActionData в SDK плагинов (doc, any-documented; версии — из пометок SDK).
Состав полей — (SDK)8; класс ShowDialogActionData в dune_api.php r24 перечисляет те же
десять ключей (код r24)145, строковый id действия — show_dialog
(код r24)125. Значения по умолчанию в фабрике shell_ext r24 — controls-reference.md §3.9. Назначение
и версии — в столбце claim каждой строки. Пометка
120531_2200_beta означает, что поле перечислено в разделе изменений этой прошивки
(SDK)146.
| Поле | Тип, по умолчанию | Назначение | С прошивки | Claim |
|---|---|---|---|---|
title |
— | — | — | (SDK)8 |
defs |
List<GuiControlDef> |
контролы диалога, вертикальным списком | — | (SDK)147 |
actions |
GuiActionMap, необязательно |
действия на клавиши и таймер; ENTER не переопределяется | 120531_2200_beta | (SDK)148 |
timer |
GuiTimerDef, необязательно |
однократный таймер; delay_ms может быть 0 |
120531_2200_beta (и GuiTimerDef::delay_ms) |
(SDK)149 |
close_by_return |
false |
закрывается ли диалог кнопкой RETURN | — | (SDK)150 |
preferred_width |
необязательно | 0 — ширина по предпочтительной ширине контролов |
— | (SDK)150 |
max_height |
необязательно | — | 120531_2200_beta | (SDK)151 |
min_item_title_width |
0 — авто |
минимальная ширина под заголовки контролов | 121201 | (SDK)152 |
initial_sel_ndx |
−1 — авто |
индекс первого выбранного контрола среди фокусируемых: combobox, кнопок, текстовых полей | 120531_2200_beta | (SDK)153 |
params |
Map<String,String> |
ключи ниже | — | (SDK)8 |
params.frame_style |
default | glass (DIALOG_FRAME_STYLE_DEFAULT, DIALOG_FRAME_STYLE_GLASS) |
стиль рамки | 130824_b8 | (SDK)154 |
params.exit_seq |
виды GUI-событий через запятую | последовательность для закрытия диалога | 130904_b8 | (SDK)66 |
3.4. Диалог и папка с контролами: сравнение¶
Объект: ShowDialogAction и PluginControlsFolderView в SDK плагинов (doc, any-documented).
| Что | Диалог ShowDialogAction |
Папка PluginControlsFolderView |
Claim |
|---|---|---|---|
| Список контролов | defs |
defs |
(SDK)155 |
| Первый фокус | initial_sel_ndx, −1 — авто |
initial_sel_ndx, −1 — первый |
(SDK)156 |
| Закрытие RETURN | только при close_by_return |
как обычная папка: RETURN и TOP_MENU | (SDK)157 |
| Свои клавиши и таймер | карта actions, timer |
в SDK нет; в классе dune_api.php r24 есть actions и timer (§5) |
(код r24, SDK)158 |
params |
Map<String,String>: frame_style, exit_seq |
PluginFolderViewParams: paint_path_box, paint_content_box_background, background_url |
(SDK)159 |
| Замена контролов | ResetControlsAction |
ResetControlsAction |
(SDK)10 |
| Закрыть и выполнить действие | CloseDialogAndRunAction |
— (игнорируется вне диалога) | (SDK)160 |
3.5. GuiControlDef и виды контролов¶
Виды контролов, их specific_def и поля — в guide/controls-reference.md §3.5.
3.6. Поля контролов: text field, combobox, button, label, VGap¶
Поля каждого вида контрола и их значения по умолчанию — в guide/controls-reference.md §3.6.
3.7. Состояния контролов: focused и active¶
Вход в active, перехват клавиш и выход из состояния — в guide/controls-reference.md §3.7.
3.8. Строковые id действий ввода и диалогов (r24)¶
Объект: раздел «GUI-action ids» в dune_api.php tv188b r24 (code, android-dune-fw, 260827_0003_r24).
В PHP тип действия — строка в handler_string_id (§1). Ниже — id действий, о которых идёт речь в этой главе; полный
перечень — в тех же claims.
| Константа | Строка | Действие в SDK | Где в главе | Claim |
|---|---|---|---|---|
PLUGIN_HANDLE_USER_INPUT_ACTION_ID |
plugin_handle_user_input |
PluginHandleUserInputAction |
§1 | (код r24)29 |
SHOW_DIALOG_ACTION_ID |
show_dialog |
ShowDialogAction |
§2.3 | (код r24)125 |
CLOSE_DIALOG_AND_RUN_ACTION_ID |
close_dialog_and_run |
CloseDialogAndRunAction |
§2.3 | (код r24)161 |
CLOSE_AND_RUN_ACTION_ID |
close_and_run |
CloseAndRunAction |
§2.3 | (код r24)162 |
RESET_CONTROLS_ACTION_ID |
reset_controls |
ResetControlsAction |
§2.3 | (код r24)125 |
CHANGE_BEHAVIOUR_ACTION_ID |
change_behaviour |
ChangeBehaviour |
§1, §2.3 | (код r24)162 |
SHOW_POPUP_MENU_ACTION_ID |
show_popup_menu |
ShowPopupMenuAction |
§2.10 | (код r24)125 |
ADD_MENU_ITEMS_ACTION_ID |
add_menu_items |
— | §2.10 | (код r24)162 |
PLUGIN_SHOW_ERROR_ACTION_ID |
plugin_show_error |
PluginShowErrorAction |
§2.11 | (код r24)29 |
PLUGIN_OPEN_FOLDER_ACTION_ID |
plugin_open_folder |
PluginOpenFolderAction |
§2.4 | (код r24)29 |
SHOW_GCOMPS_DIALOG_ACTION_ID |
show_gcomps |
— | §1 | (код r24)125 |
На tv188b r25 (device, 261021_0117_r25) оболочка выполнила строковые id plugin_run_native_code и change_settings
в ответе handle_user_input: ответ с plugin_run_native_code вызвал
plugin_run_native_code(/flashdata/plugins/test_plugin5, kbp5_native) и передал native_code.so в
[native_plugins_handler] open plugin (устройство r25)163, а ответ с change_settings —
action D: (general) run test_plugin5->change_settings() (устройство r25)164.
3.9. Фабрики ControlFactory и ActionFactory в shell_ext (r24)¶
Что строит каждый метод фабрик — в guide/controls-reference.md §3.9.
3.10. С какой прошивки что есть: действия, поля и IP Control¶
Объект: пометки «available in firmware …» в SDK плагинов и версии протоколов в документе IP Control (doc,
any-documented). Клавишные события — §3.1, поля ShowDialogActionData с 120531_2200_beta — §3.3.
Версии ниже — пометки в документах; на устройствах эти границы в базе не проверялись.
| Прошивка | Что появилось | Claim |
|---|---|---|
| 110127_2105_beta | IP Control ir_code (протокол 1) |
(SDK)15 |
| 120531_2200_beta | IP Control get_text, set_text (протокол 3) |
(SDK)101 |
| 120901 | is_default_section точки входа |
(SDK)116 |
| 121114 | CloseAndRunAction |
(SDK)72 |
| 121201 | min_item_title_width в ShowDialogActionData |
(SDK)152 |
| 130820_b8 | smart, max_lines, lines_vgap, pars_vgap у Label |
(SDK)165 |
| 130824_b8 | params.frame_style диалога |
(SDK)154 |
| 130904_b8 | params.exit_seq диалога |
(SDK)66 |
| 131029_b9 | CloseAndRunAction из ТВ- или VOD-воспроизведения без диалога останавливает воспроизведение |
(SDK)73 |
| 181228_0252_r13 | IP Control ui_action_return, ui_action_enter, ui_action_popup_menu (протокол 5) |
(SDK)166 |
4. Как это делают плагины и shell_ext¶
Объект: фреймворк shell_ext прошивки tv188b r24/r25 (code, android-dune-fw) и плагины Widget Ext 1.5.6,
GlobalTV 260130_1351, screenshoter 1.0.6, Dune Backup 2.9.2, altIPTV 5.2.9, ProIPTV 9.1.1938, Torrent Center 2.0.4,
Remote Control 5.1.52 (code; платформа и прошивка исполнения не установлены) и dune-voice (commit d6c6188, code,
android). Это факты кода, а не поведение прошивки.
Приёмы ниже — образцы того, как собирать контролы, диалоги и обработчики, и их ограничения. Детали реализации — в
разборах плагинов и guide/plugin-recipes.md.
4.1. Фреймворк shell_ext прошивки: диспетчер, фабрики, тайм-ауты (r24, r25)¶
Объект: DefaultDunePlugin, UserInputHandlerRegistry, ControlFactory в shell_ext tv188b r24 и r25 (code,
android-dune-fw, 260827_0003_r24 и 261021_0117_r25).
shell_ext — каркас обработки ввода в прошивке, и его схема удобна как образец. Все действия контролов приходят в
одну handle_user_input() (§1), поэтому каркас кладёт в params каждого действия handler_id и control_id:
UserInputHandlerRegistry::create_action() r24 строит plugin_handle_user_input с этими параметрами и с данными
operation_timeout (по умолчанию 60000) и show_dialog_delay (по умолчанию 20000)
(код r24)167. handle_user_input() в DefaultDunePlugin r24 выбирает обработчик по
$user_input->handler_id среди зарегистрированных через register_handler(); без handler_id или с неизвестным id
результат null (код r24)168.
В r25 так же: UserInputHandlerRegistry возвращает обработчик по handler_id либо null
(код r25)169;
DefaultDunePlugin::handle_user_input сначала ищет обработчик, без него печатает «E: handler not found…» и возвращает
null, затем логирует ввод и сохраняет last_user_input (код r25)170. Перед вызовом обработчика
r25 сбрасывает накопленные result_action и smart_close_dialog и сохраняет последний ввод и обработчик
(код r25)171, которые потом отдают get_last_user_input и
get_last_user_input_handler (код r25)172. При smart_close_dialog внутри
диалога r25 вставляет накопленный result_action перед post_action нового close_dialog_and_run
(код r25)173. В r24 handle_user_input шести TV/VOD-экранов печатал все поля
user_input; в r25 этого блока нет (код r25)174.
Контролы и диалоги каркас строит фабриками ControlFactory и ActionFactory; что пишет каждый метод — controls-reference.md §3.9.
Тайм-ауты действий из контролов задаются там же: в r24 ControlFactory::add_button ставит timeout=60000 и
delay=20000 (код r24)175, а в r25 UserInputHandlerRegistry::create_action
при null подставляет timeout_ms=60000 и show_dialog_delay_ms=20000 и пишет их в data.operation_timeout и
data.show_dialog_delay (код r25)176. Что значат эти поля —
guide/plugin-operations.md; расхождение с SDK — §5.
4.2. Библиотеки плагинов: фабрики контролов и копии shell_ext (Widget Ext, GlobalTV, ProIPTV, altIPTV)¶
Объект: ControlFactory, ActionFactory, UserInputHandlerRegistry в Widget Ext 1.5.6, GlobalTV 260130_1351,
ProIPTV 9.1.1938 и altIPTV 5.2.9 (code; платформа и прошивка не установлены).
Сторонние плагины повторяют ту же маршрутизацию по handler_id: GlobalTV (код)177, Widget Ext (id
обработчика экрана — 'controls_' . id экрана) (код)178, altIPTV (controls_<id>)
(код)179 и ProIPTV, где неизвестный handler_id даёт null
(код)180. Ограничение: register_handler в Widget Ext записывает обработчик по handler_id
без проверки предыдущей регистрации (код)181.
Фабрики контролов. В Widget Ext UserInputHandlerRegistry::create_action формирует handler_id/control_id и сливает
их с add_params, причём одноимённые ключи берутся из add_params (код)182; add_button
строит push_action через create_action с action_type = apply (код)183. add_text_field
приводит initial_value через strval, а флаги и width — через intval (код)184, тогда как
add_combobox переносит поля без приведений (код)185. Метод «закрыть и применить» в Widget Ext
называется add_custom_close_dialog_and_apply_buffon — так записано в исходнике (код)186, в r24 —
add_custom_close_dialog_and_apply_button (код r24)187. GlobalTV пишет общий
набор name/title/kind/specific_def/params (код)188 и создаёт apply/confirm только
при need_apply/need_confirm, иначе оставляет действия null (код)189; по
action_type (apply или confirm) обработчик отличает подтверждение от применения, как VodSearchScreen (§2.5)
(код r25)97.
Копия библиотеки в GlobalTV расходится с shell_ext r24:
| Что | В GlobalTV | В r24 | Claim |
|---|---|---|---|
UserInputHandlerRegistry::create_action |
data=null |
timeout_ms/show_dialog_delay_ms с подстановкой 60000/20000 при null |
(код r24)190 |
ControlFactory::add_button |
create_action без тайм-аутов |
timeout_ms=60000, show_dialog_delay_ms=20000 |
(код r24)191 |
ActionFactory::show_dialog |
max_height — только при defined |
без проверки | (код r24)192 |
ActionFactory::show_title_dialog |
принимает attrs |
только title/post_action |
(код r24)193 |
Методы ControlFactory |
ещё add_button_close, add_close_dialog_and_apply_button_title, add_img_label, add_multiline_label, add_smart_label |
ещё add_progress_bar |
(код r24)194 |
DefaultDunePlugin::handle_user_input |
прямо возвращает результат реестра | OpHooks::fire_before_handle и связывание через set_post_action |
(код r24)195 |
4.3. Свой диалог-список с RETURN как «применить»: GlobalTV¶
Объект: EditListDialog в GlobalTV 260130_1351 (code; платформа и прошивка не установлены).
Приём — диалог, где RETURN не закрывает, а применяет выбор. EditListDialog открывает show_dialog с
close_by_return=false и своей картой actions (код)196 и назначает D_BLUE и RETURN на
собственное действие apply (код)197; в тех же данных диалога — max_height=870 и
params.page_size=11 (код)196. Список — это кнопки: defs идут в порядке apply, группы
group:<gid>, элементы item:<id>, а подпись кнопки сериализуется как JSON из текста, промежутков и иконки 48×48
(код)198. Каждое нажатие на группу или элемент меняет отметку
и возвращает reset_controls с новыми defs (код)199.
apply отклоняет пустой набор через show_error(empty_list_not_allowed), иначе закрывает диалог через
close_dialog_and_run (код)200; cancel закрывает диалог без apply_action
(код)201.
4.4. Клавиши в папке, поиск, пароль, PIN: GlobalTV, ProIPTV, screenshoter¶
Объект: TvRowsScreen, диалог поиска и код родительского контроля GlobalTV 260130_1351, поиск и пароль настроек
ProIPTV 9.1.1938, точки входа screenshoter 1.0.6 (code; платформа и прошивка не установлены).
В регулярном экране GlobalTV TvRowsScreen связывает ENTER с enter, D_BLUE с fav, CLEAR с fav_remove,
POPUP_MENU с popup и событие PLUGIN_ROWS_INFO_UPDATE с plugin_rows_info_update через custom_action
(код)202. Его диалог поиска заполняет поле search_channels_text из cookie
last_search_channels_text (код)203 и создаёт кнопки «ОК» (search_channels_submit_dialog) и «Отмена» (add_close_dialog_button)
(код)204; при отправке он делает trim, отклоняет пустую строку и закрывает диалог с запуском поиска
(код)205 — та же схема «запомнить ввод, проверить, применить», что у VodSearchScreen (§2.5).
Код родительского контроля GlobalTV вводится полем с numeric=true, has_osk=false, always_active=true
(код)98 (ключ fixed_osk_id — §2.5).
ProIPTV делает так же: поиск каналов открывает поле с OSK, подставляет последний запрос, а do_search сохраняет
непустой запрос обратно (код)206. Пароль настроек — диалог с полем pass, который обработчик
сверяет с параметром и при неверном значении возвращает err_bad_pass (код)207.
Самый короткий пример передачи клавиш в свой обработчик — screenshoter 1.0.6:
key_enter и key_play → plugin_handle_user_input с handler_id = entry (код)50.
4.5. Своя экранная клавиатура: AdvKeyboard (Widget Ext 1.5.6)¶
Объект: AdvKeyboard в Widget Ext 1.5.6 (code; платформа unknown, прошивка исполнения не установлена).
Приём — клавиатура как диалог с контролами, перерисовываемый на каждое нажатие; так делают подсказки и свои
раскладки. AdvKeyboard реализует UserInputHandler и регистрируется под id adv_text_keyboard
(код)208. startup_kbrd() открывает show_dialog с close_by_return = true и
таймером ActionFactory::timer(1) (код)20, а по таймеру загружает конфигурацию и
показывает раскладку или, при первом запуске, настройку языков (код)209. Перерисовка
идёт через reset_controls с новыми defs
(код)210. Подсказки даёт подключаемый поставщик с пятью методами, в том числе признаком
«искать только по подсказке» (код)90. Текст правится собственными функциями
mb_insert_str и mb_delete_chr на mb_strlen/mb_substr в UTF-8 (код)211, а строка
поиска уходит родителю через close_dialog_and_run (код)212. Раскладки — текстовые
файлы adv_keyboard_<lang>.txt; если файла нет, берётся adv_keyboard_english.txt (код)91.
Карта клавиш показывает, сколько клавиш можно занять в диалоге: CLEAR, цветные и AUDIO управляют вводом (clear_left,
clear_all, alt_onoff, shift_onoff, change_keyboard) (код)213; TOP_MENU, PLAY,
ENTER, SELECT, SETUP и TIMER — open_normal_search, do_search, selection_enter, space, config_lang и
timed_startup (код)214; цифры вставляют цифру в позицию курсора
(код)215; стрелки — selection_up/down/left/right, P_PLUS/P_MINUS — p_plus/p_minus
(код)216. Назначение ENTER в карте диалога расходится с SDK — §5. Ограничение: в режиме
searchAndSelectMode обычная отправка строки и open_normal_search возвращают null, а do_search на
выбранной подсказке обрабатывается раньше этой проверки (код)217. Раскладки, поставщики подсказок и настройки — в
разборе plg-dc-widget-ext--adv-keyboard; возможная ошибка с устаревшими подсказками — в §6.
4.6. Перехват клавиш Android-приложением: dune-voice¶
Объект: accessibility-сервис RemoteKeys в плагине dune-voice (commit d6c6188; code, платформа android).
Когда PHP-фреймворка не хватает, Android-приложение в составе плагина может перехватывать клавиши само.
dune-voice регистрирует accessibility-сервис RemoteKeys с правом BIND_ACCESSIBILITY_SERVICE
(код)218; сервис перехватывает KEYCODE_SEARCH, KEYCODE_ASSIST и
KEYCODE_VOICE_ASSIST и по первому нажатию открывает VoiceActivity (код)219. Для
этого remote_keys.xml включает flagRequestFilterKeyEvents и canRequestFilterKeyEvents=true при
canRetrieveWindowContent=false (код)220. Это путь только для Android-приложения,
к PHP-экранам он не относится.
4.7. Многостраничные настройки и самообновляющиеся диалоги: altIPTV, AdvKeyboard¶
Объект: DemoSetupScreen и диалог info_back_scan altIPTV 5.2.9, настройки AdvKeyboard Widget Ext 1.5.6 (code;
платформа и прошивка не установлены).
Приём — не открывать новый экран, а перестраивать текущий. DemoSetupScreen altIPTV листает четыре страницы настроек,
отвечая reset_controls с заново построенными контролами (код)221. Его диалог
info_back_scan использует timer(1000) и GUI_EVENT_TIMER → close_dialog_and_run, чтобы переоткрыть обновлённую
информацию (код)222 — другой способ обновлять диалог по таймеру (ср. §2.3). При переоткрытии фокус сохраняют явно: так делает AdvKeyboard (§2.9).
4.8. Карта клавиш по состоянию и скрытые комбинации: Dune Backup 2.9.2¶
Объект: экран Dune Backup 2.9.2 (code; платформа и прошивка не установлены).
Приём — собирать карту actions заново по состоянию плагина. get_action_map экрана всегда назначает POPUP_MENU, INFO,
SELECT, D_BLUE и TIMER, а ENTER, PLAY, CLEAR, A_RED, B_GREEN и C_YELLOW — только при определённых условиях
(код)223. На SELECT назначено действие change_mode_key_push_count (код)223: семь
нажатий SELECT в базовом режиме открывают диалог смены режима (код)224, а семь нажатий CLEAR или
SELECT при своих условиях — скрытый раздел users (код)225. Пункты цветных кнопок A/B/C/D в
popup_menu плагин добавляет, только если не flag_apk, не flag_new и intval(firmware_version) < 240619
(код)226.
4.9. Нажать кнопку пульта из плагина: IP Control и /proc/ir/button¶
Как плагины нажимают кнопки через локальный IP Control и запись в /proc/ir/button — в
guide/ip-control.md §6.
5. Расхождения¶
Объект: противоречия и неполнота по вводу; SDK плагинов (doc, any-documented) против tv188b r24/r25 (code,
device, android-dune-fw). Противоречия связаны conflicts_with; неполнота описания отмечена отдельно.
- Клавиши в VOD. SDK в описании
PluginVodInfo::actionsназывает из клавиш только цветные A_RED/B_GREEN/C_YELLOW/D_BLUE, а перечень обрывает на «- playback» (SDK)227; в разделе событий тот же SDK с 131029_b9 разрешает в ТВ и VOD все ранее перечисленные клавиши (SDK)228 и отдельно добавляет FWD, REW, …, URL (SDK)229. На tv188b r25 (device) нецветные клавиши в VOD доставляются, если зарегистрированы вactions(устройство r25)13. Все три SDK-утверждения помеченыdisputed, поэтому они есть и в §6; что видно на r25 — §2.6, события VOD — guide/playback.md §4.1 и §6. - Данные
PluginHandleUserInputAction. SDK: у действия нет данных, оно выполняетHandle_user_input(GuiAction::$params)и возвращает результат как post action (SDK)24. Код r24: вdune_api.phpесть классPluginHandleUserInputActionDataсoperation_timeout,show_dialog_delayиdialog_title(код r24)230, аActionFactory::handle_user_inputпри заданномtimeout_msпишетoperation_timeoutвdata(код r24)231. Код r25:ActionFactory::handle_user_inputпри переданныхtimeout_ms/show_dialog_delay_msпишетoperation_timeout/show_dialog_delay(код r25)232, а при обоихnullоставляетdata=null;UserInputHandlerRegistry::create_actionподставляет их по умолчанию (код r25)176. На tv188b r25 (device)operation_timeoutв данных действия задаётся в миллисекундах и перекрывает значение из манифеста (устройство r25)233. С SDK черезconflicts_withсвязаны все перечисленные claims:ActionFactory::handle_user_inputr24 и r25,create_actionr25, классPluginHandleUserInputActionDatar24 и наблюдение на устройстве. Вывод о типе данных действия — гипотеза в §6. actionsиtimerу папки с контролами. SDK: уPluginControlsFolderViewполяdefs,initial_sel_ndx,params(SDK)83, аChangeBehaviourдля папок с контролами обещан «в будущем» (SDK)41. Код r24: в классе ещёactionsиtimer(код r24)87, иAbstractControlsScreenотдаёт их в виде папки (код r24)88. Работают ли они на устройстве, в базе не проверено; поля класса r24 связаны с SDK черезconflicts_with.- ENTER в карте диалога. SDK: поведение
GUI_EVENT_KEY_ENTERвShowDialogActionизменить нельзя (SDK)6. КодAdvKeyboard: ENTER назначен наselection_enterв карте диалога (код)214. Код показывает только назначение; срабатывает ли оно — не проверено;conflicts_withнет. lines_vgapпротивlines_vgab. SDK называет ключи Labellines_vgapиpars_vgap(SDK)165;ControlFactory::add_img_labelв GlobalTV пишетlines_vgab/pars_vgab(код)234. Это расхождение имён в коде плагина;conflicts_withнет.- Перечитать плагины кнопкой ANGLE/ROTATE. SDK советует перечитать плагины по IP Control
cmd=main_screen, затемcmd=ir_code&ir_code=B24DBF00(SDK)235 (disputed, §6); на tv188b r25 (device) обе команды ответилиok, но новые плагины не подхватились (устройство r25)236, а удалённые в одном прогоне (collect6) остались в меню (устройство r25)237, в другом (collect5) после перечитывания пропали изinstalled_plugins.xml(устройство r25)238. Стороны связаныconflicts_with. - Имя цветной клавиши. В
PluginVodInfo::actionsr25 событие называетсяkey_a_red/key_b_green(устройство r25)104, а вhandle_user_inputприходитcontrol_id=ev_key_a_red/ev_key_b_green(устройство r25)12. Это не противоречие: одна сторона — ключ карты действий, другая — поле доставки. Но правило преобразования в базе не описано,conflicts_withнет. progress_bar. SDK перечисляет виды контролов черезGuiControlKindи не описываетprogress_bar(SDK)239, а в r24 константаGUI_CONTROL_PROGRESS_BAR='progress_bar'есть (код r24)240 иControlFactoryстроит такой элемент (код r24)241. Это неполнота SDK, а не доказанное расхождение поведения.playback_going_to_switchв конце последней серии. SDK: событие не генерируется при остановке и выключении (SDK)242; r25 (device): приходит в конце последней серии, когда переключения нет и плеер закрывается (устройство r25)243. Стороны связаныconflicts_with; подробнее — guide/playback.md §6.- Событие
GUI_EVENT_PLAYBACK_STOP. SDK: при назначенном действии плеер сначала приостанавливается, исполняет действие и ждёт цепочку, только потом останавливается (SDK)244 (disputed, §6); r25 (device): при ручном STOP действиеplayback_stopзапускается после перехода плеера вSTOPPED(устройство r25)245. Стороны связаныconflicts_with; подробнее — guide/playback.md §6. Для ввода важно, что событие входит вGuiEventKind(SDK)22 и имеет строкуplayback_stop(код r24)49.
6. Не проверено¶
Объект: гипотезы (inference) и disputed по вводу и диалогам; SDK плагинов (doc, any-documented), tv188b
r24/r25 (code/device, android-dune-fw), плагины (code). Кандидаты на проверку на устройстве или в коде.
| Утверждение | Статус | Claim |
|---|---|---|
Команда key_action r24, вероятно, принимает параметр key (имя действия клавиши) и без него завершается ошибкой; допустимые значения неизвестны |
inference | (вывод r24)246 |
cmd=ir_code в r24, вероятно, реализован записью кода в /proc/ir/button |
inference | (вывод r24)247 |
Запись IR-кода в /proc/ir/button, вероятно, эмулирует нажатие кнопки пульта; A15EBF00 — вероятно, код кнопки питания |
inference | (вывод)248 |
ef10bf00, вероятно, — кнопка пульта «скриншот», по которой прошивка сама сохраняет снимок |
inference | (вывод)249 |
Действие plugin_handle_user_input в r24, предположительно, принимает data типа PluginHandleUserInputActionData (operation_timeout, show_dialog_delay, dialog_title) |
inference | (вывод r24)250 |
Пункты контекстного меню точки входа: пример SDK кладёт их в popup_menu/menu_items/item, встроенные манифесты r24 — в menu_item; принимает ли парсер r24 item, не установлено |
inference | (вывод r24)251 |
SDK: перечитать плагины кнопкой ANGLE/ROTATE или по IP Control main_screen + ir_code=B24DBF00; на r25 не подтвердилось (§5) |
doc, disputed | (SDK)235 |
После сокращения или очистки строки в AdvKeyboard старые подсказки, вероятно, могут остаться доступными: короткая строка не обновляет suggestions, а рендер не очищает отсутствующие элементы scrBuff |
inference | (вывод)252 |
SDK: GUI_EVENT_PLAYBACK_STOP генерируется при остановке, выключении питания или перед переключением |
doc, disputed | (SDK)253 |
SDK: при назначенном на GUI_EVENT_PLAYBACK_STOP действии плеер сначала приостанавливается, исполняет действие, ждёт цепочку и только потом останавливается |
doc, disputed | (SDK)244 |
SDK: в PluginVodInfo::actions из клавиш поддержаны только цветные; перечень обрывается |
doc, disputed | (SDK)227 |
| SDK: с 131029_b9 все клавишные события работают в ТВ- и VOD-воспроизведении | doc, disputed | (SDK)228 |
| SDK: с 131029_b9 добавлены FWD, REW, SLOW, STOP, TOP_MENU, POWER, EJECT и другие клавиши для диалогов, папок, ТВ и VOD | doc, disputed | (SDK)229 |
-
- doc-sdk-plugins--gui-actions.c042 · doc · any-documented; прошивка — · PluginHandleUserInputAction не имеет данных; выполняет операцию Handle_user_input(GuiAction::$params) и возвращает её результат как post action
- doc-sdk-plugins--operations.c118 · doc · any-documented; прошивка — · handle_user_input() может вернуть другой объект GuiAction, который исполняется немедленно
-
- doc-sdk-plugins--controls-playback.c034 · doc · any-documented; прошивка — · Действие, исполняемое из контрола, получает в params selected_control_id со значением GuiControlDef::name выбранного контрола — производителя действия.
- doc-sdk-plugins--controls-playback.c035 · doc · any-documented; прошивка — · В params действия из контейнера для каждого combobox и текстового поля ключ с именем GuiControlDef::name содержит текущее значение контрола: выбранный choice_value или редактируемый текст.
-
- doc-sdk-plugins--gui-actions.c001 · doc · any-documented; прошивка — · Константы GuiEventKind позволяют назначить GuiAction на GUI-событие; большинство из них соответствует кнопкам пульта
- fw-tv188b-260827-0003-r24--php-framework.c105 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление GuiEventKind строковыми константами: GUI_EVENT_KEY_ENTER='key_enter', GUI_EVENT_KEY_PLAY='key_play', GUI_EVENT_KEY_A_RED='key_a_red', GUI_EVENT_KEY_B_GREEN='key_b_green', GUI_EVENT_KEY_C_YELLOW='key_c_yellow', GUI_EVENT_KEY_D_BLUE='key_d_blue', GUI_EVENT_KEY_POPUP_MENU='key_popup_menu', GUI_EVENT_KEY_INFO='key_info', GUI_EVENT_KEY_LEFT='key_left', GUI_EVENT_KEY_RIGHT='key_right', GUI_EVENT_KEY_UP='key_up', GUI_EVENT_KEY_DOWN='key_down', GUI_EVENT_KEY_P_PLUS='key_p_plus', GUI_EVENT_KEY_P_MINUS='key_p_minus', GUI_EVENT_KEY_NEXT='key_next', GUI_EVENT_KEY_PREV='key_prev', GUI_EVENT_KEY_FIP_NEXT='key_fip_next', GUI_EVENT_KEY_FIP_PREV='key_fip_prev', GUI_EVENT_KEY_SETUP='key_setup', GUI_EVENT_KEY_RETURN='key_return', GUI_EVENT_KEY_SELECT='key_select', GUI_EVENT_KEY_CLEAR='key_clear', GUI_EVENT_KEY_PAUSE='key_pause', GUI_EVENT_KEY_FWD='key_fwd', GUI_EVENT_KEY_REW='key_rew', GUI_EVENT_KEY_SLOW='key_slow', GUI_EVENT_KEY_STOP='key_stop', GUI_EVENT_KEY_TOP_MENU='key_top_menu', GUI_EVENT_KEY_POWER='key_power', GUI_EVENT_KEY_EJECT='key_eject', GUI_EVENT_KEY_MODE='key_mode', GUI_EVENT_KEY_VENDOR='key_vendor', GUI_EVENT_KEY_SHUFFLE='key_shuffle', GUI_EVENT_KEY_MUSIC='key_music', GUI_EVENT_KEY_MUTE='key_mute', GUI_EVENT_KEY_V_PLUS='key_v_plus', GUI_EVENT_KEY_V_MINUS='key_v_minus', GUI_EVENT_KEY_SEARCH='key_search', GUI_EVENT_KEY_ZOOM='key_zoom', GUI_EVENT_KEY_SUBTITLE='key_subtitle', GUI_EVENT_KEY_REPEAT='key_repeat', GUI_EVENT_KEY_AUDIO='key_audio', GUI_EVENT_KEY_REC='key_rec', GUI_EVENT_KEY_DUNE='key_dune', GUI_EVENT_KEY_FAVORITES='key_favorites', GUI_EVENT_KEY_URL='key_url', GUI_EVENT_KEY_0='key_0', GUI_EVENT_KEY_1='key_1', GUI_EVENT_KEY_2='key_2', GUI_EVENT_KEY_3='key_3', GUI_EVENT_KEY_4='key_4', GUI_EVENT_KEY_5='key_5', GUI_EVENT_KEY_6='key_6', GUI_EVENT_KEY_7='key_7', GUI_EVENT_KEY_8='key_8', GUI_EVENT_KEY_9='key_9', GUI_EVENT_UI_ACTION='ui_action', GUI_EVENT_TIMER='timer', GUI_EVENT_PLUGIN_ROWS_INFO_UPDATE='plugin_rows_info_update', GUI_EVENT_FOLDER_LEAVE='folder_leave', GUI_EVENT_FOLDER_ENTER='folder_enter', GUI_EVENT_FOLDER_RETURN_BACK='folder_return_back', GUI_EVENT_PLAYBACK_STOP='playback_stop', GUI_EVENT_PLAYBACK_GOING_TO_SWITCH='playback_going_to_switch', GUI_EVENT_PLAYBACK_SWITCHED='playback_switched', GUI_EVENT_PLAYBACK_USER_ACTION='playback_user_action', GUI_EVENT_PLAYBACK_STATE_CHANGED='playback_state_changed', GUI_EVENT_MENU_PLAYBACK_OSD_CLOSED='menu_playback_osd_closed', GUI_EVENT_MENU_PLAYBACK_OSD_GOING_TO_OPEN='menu_playback_osd_going_to_open', GUI_EVENT_MENU_PLAYBACK_FINISH='menu_playback_finish', GUI_EVENT_MENU_EXT_APP_FINISH='menu_ext_app_finish', GUI_EVENT_WEB_BROWSER_FINISH='web_browser_finish', GUI_EVENT_BOOT='boot', GUI_EVENT_BOOT_END='boot_end', GUI_EVENT_INSTALL='install', GUI_EVENT_UPDATE='update', GUI_EVENT_UNINSTALL='uninstall', GUI_EVENT_GOING_TO_UPDATE='going_to_update', GUI_EVENT_GOING_TO_STOP='going_to_stop', GUI_EVENT_GUI_START='gui_start', GUI_EVENT_EARLY_GUI_START='early_gui_start', GUI_EVENT_STORAGE_DETECTED_MENU='storage_detected_menu', GUI_EVENT_FILE_POPUP_MENU='file_popup_menu', GUI_EVENT_TOPMENU_POPUP_MENU='topmenu_popup_menu', GUI_EVENT_TOPMENU_REFRESH='topmenu_refresh', GUI_EVENT_GOING_TO_RELOAD_ALL_FOLDERS='going_to_reload_all_folders', GUI_EVENT_FAVORITES_UPDATED='favorites_updated', GUI_EVENT_NETWORK_CHANGE='network_change', GUI_EVENT_SETTINGS_UPDATED='settings_updated', GUI_EVENT_CONFIRM_UPDATE='confirm_update', GUI_EVENT_SHUTDOWN='shutdown'
-
doc-sdk-plugins.c072 · doc · any-documented; прошивка — · В регулярной папке плагина клавиши ENTER, PLAY, INFO, POPUP_MENU, B_GREEN, C_YELLOW, D_BLUE игнорируются, если плагин не назначил им действия; A_RED переключает варианты отображения (folder view) ↩↩
-
doc-sdk-plugins.c069 · doc · any-documented; прошивка — · В общих папках Dune плагин может переопределить на своей точке входа только клавиши ENTER и PLAY ↩↩
-
doc-sdk-plugins--gui-actions.c053 · doc · any-documented; прошивка — · Поле actions в ShowDialogAction задаёт действия на нажатия клавиш и событие таймера; поведение GUI_EVENT_KEY_ENTER изменить нельзя ↩↩↩↩
-
- doc-sdk-plugins--gui-actions.c007 · doc · any-documented; прошивка — · С прошивки 120902 добавлены клавишные события, доступные только в диалогах с контролами: GUI_EVENT_KEY_LEFT, GUI_EVENT_KEY_RIGHT, GUI_EVENT_KEY_UP, GUI_EVENT_KEY_DOWN, GUI_EVENT_KEY_P_PLUS, GUI_EVENT_KEY_P_MINUS, GUI_EVENT_KEY_NEXT, GUI_EVENT_KEY_PREV, GUI_EVENT_KEY_0, GUI_EVENT_KEY_1, GUI_EVENT_KEY_2, GUI_EVENT_KEY_3, GUI_EVENT_KEY_4, GUI_EVENT_KEY_5, GUI_EVENT_KEY_6, GUI_EVENT_KEY_7, GUI_EVENT_KEY_8, GUI_EVENT_KEY_9
- doc-sdk-plugins--gui-actions.c009 · doc · any-documented; прошивка — · С прошивки 130819_b8 все ранее перечисленные клавишные события можно использовать и в регулярных папках плагина
-
doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) ↩↩↩↩↩ -
doc-sdk-plugins--gui-actions.c061 · doc · any-documented; прошивка — · CloseDialogAndRunAction (данные CloseDialogAndRunActionData с необязательным post_action) закрывает текущий диалог с контролами и возвращает post_action как результат вызвавшего действия SHOW_DIALOG ↩↩
-
doc-sdk-plugins--gui-actions.c064 · doc · any-documented; прошивка — · ResetControlsAction заменяет состояние текущего диалога с контролами или папки с контролами; вне их игнорируется ↩↩↩↩
-
doc-sdk-plugins--controls-playback.c024 · doc · any-documented; прошивка — · У текстового поля has_osk = true рисует экранную клавиатуру под полем (по умолчанию false); её высота не учитывается при раскладке, поэтому SDK предлагает добавлять VGap. ↩↩
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c086 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 цветные клавиши пульта во время plugin VOD приходят плагину как handle_user_input с control_id ev_key_a_red, ev_key_b_green, ev_key_c_yellow, ev_key_d_blue и полями plugin_vod_id, plugin_vod_series_ndx, plugin_vod_sel_series_ndx, но без playback_position; playback_position есть у ev_timer. ↩↩↩↩
-
fw-tv188b-261021-0117-r25--media-player.c053 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при регистрации actions в plugin VOD плагину доставляются key_pause, key_play, стрелки, key_subtitle, key_audio, key_next, key_1, key_info и key_popup_menu. ↩↩↩
-
- doc-sdk-plugins.c038 · doc · any-documented; прошивка — · actions точки входа — соответствие событие (клавиша) → GUI-действие при фокусе на точке входа; popup_menu добавляет пункты в контекстное меню точки входа
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c087 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginRegularFolderView::{actions} имеют C-тип (GuiActionMap *).
- doc-sdk-plugins--gui-actions.c096 · doc · any-documented; прошивка — · В ChangeBehaviour заданное actions заменяет существующую карту действий, а заданный таймер перезапускается от текущего момента
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c021 · doc · any-documented; прошивка — · Параметр ir_code команды ir_code — 4-байтный NEC-код кнопки пульта с байтами в обратном порядке: кнопка RIGHT 00 BF 18 E7 → ir_code=E718BF00 ↩↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c036 · doc · any-documented; прошивка — · cmd=set_text&text=… заменяет редактируемую строку заданной (UTF-8); без активного редактора — failed ↩
-
doc-sdk-plugins--gui-actions.c057 · doc · any-documented; прошивка — · initial_sel_ndx в ShowDialogAction — индекс первого выбранного контрола среди фокусируемых (combobox, кнопки, текстовые поля) ↩↩
-
- doc-sdk-plugins--gui-actions.c065 · doc · any-documented; прошивка — · Данные ShowPopupMenuAction — класс ShowPopupMenuActionData: menu_items (List
), selected_menu_item_index (необязательно, по умолчанию 0) - fw-tv188b-260827-0003-r24--php-framework.c185 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс GuiMenuItemDef с ключами (7): is_separator, id, caption, icon_url, marked, action, is_shown_action
- doc-sdk-plugins--gui-actions.c065 · doc · any-documented; прошивка — · Данные ShowPopupMenuAction — класс ShowPopupMenuActionData: menu_items (List
-
doc-sdk-plugins--gui-actions.c043 · doc · any-documented; прошивка — · Данные PluginShowErrorAction — класс PluginShowErrorActionData: fatal (Boolean), title (String), msg_lines (List
, необязательно) ↩↩ -
plg-dc-widget-ext--adv-keyboard.c005 · code · unknown; прошивка — · startup_kbrd вызывает ActionFactory::show_dialog с close_by_return = true, шириной 1500, картой действий и таймером ActionFactory::timer(1). ↩↩↩
-
doc-sdk-plugins.c013 · doc · any-documented; прошивка — · PHP API не позволяет плагину рисовать произвольный ТВ-интерфейс и произвольно обрабатывать события пульта — только через высокоуровневый GUI-фреймворк с фиксированным набором возможностей ↩↩
-
doc-sdk-plugins--gui-actions.c001 · doc · any-documented; прошивка — · Константы GuiEventKind позволяют назначить GuiAction на GUI-событие; большинство из них соответствует кнопкам пульта ↩↩↩
-
- doc-sdk-plugins--gui-actions.c053 · doc · any-documented; прошивка — · Поле actions в ShowDialogAction задаёт действия на нажатия клавиш и событие таймера; поведение GUI_EVENT_KEY_ENTER изменить нельзя
- fw-tv188b-261021-0117-r25.c266 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие цветной клавиши в VOD (key_a_red, key_b_green из PluginVodInfo::actions) приходит в input_data без playback_position — с полями handler_id, control_id, play_mode, topmenu_root_id, playback_browser_activated, plugin_vod_id, plugin_vod_series_ndx, plugin_vod_sel_series_ndx.
-
doc-sdk-plugins--gui-actions.c042 · doc · any-documented; прошивка — · PluginHandleUserInputAction не имеет данных; выполняет операцию Handle_user_input(GuiAction::$params) и возвращает её результат как post action ↩↩↩↩
-
doc-sdk-plugins--operations.c117 · doc · any-documented; прошивка — · handle_user_input() вызывается во время исполнения GUI-действия HANDLE_USER_INPUT ↩
-
doc-sdk-plugins--operations.c118 · doc · any-documented; прошивка — · handle_user_input() может вернуть другой объект GuiAction, который исполняется немедленно ↩
-
doc-sdk-plugins--operations.c119 · doc · any-documented; прошивка — · Сценарии handle_user_input(): регулярные папки с элементами разных типов (HANDLE_USER_INPUT на клавишах), экраны настроек (confirm/apply у text field/combobox или кнопка «Apply») и control dialogs — диалоги с произвольным набором контролов, ведущие себя почти как control-папки ↩↩↩
-
doc-sdk-plugins.c070 · doc · any-documented; прошивка — · GUI-действие в PHP — массив с handler_string_id (тип) и data (параметры); среди типов PLUGIN_OPEN_FOLDER, PLUGIN_TV_PLAY, PLUGIN_VOD_PLAY и особый HANDLE_USER_INPUT, чей результат handle_user_input() исполняется как следующее действие ↩
-
fw-tv188b-260827-0003-r24--php-framework.c116 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php (раздел «GUI-action ids») определяет идентификаторы действий GUI: LAUNCH_EXT_APP_ACTION_ID='launch_ext_app', LAUNCH_MEDIA_URL_ACTION_ID='launch_media_url', OPEN_FOLDER_ACTION_ID='open_folder', PLAYLIST_PLAY_ACTION_ID='playlist_play', PLUGIN_CLEAR_ARCHIVE_CACHE_ACTION_ID='plugin_clear_archive_cache', PLUGIN_EXIT_FOLDERS_ACTION_ID='plugin_exit_folders', PLUGIN_HANDLE_USER_INPUT_ACTION_ID='plugin_handle_user_input', PLUGIN_INVALIDATE_FOLDERS_ACTION_ID='plugin_invalidate_folders', PLUGIN_OPEN_FOLDER_ACTION_ID='plugin_open_folder', PLUGIN_REFRESH_ENTRY_POINTS_ACTION_ID='plugin_refresh_entry_points', PLUGIN_REPLACE_PATH_ACTION_ID='plugin_replace_path', PLUGIN_RUN_NATIVE_CODE_ACTION_ID='plugin_run_native_code', PLUGIN_SHOW_ERROR_ACTION_ID='plugin_show_error', PLUGIN_SYSTEM_ACTION_ID='plugin_system', PLUGIN_TV_PLAY_ACTION_ID='plugin_tv_play' ↩↩↩↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c015 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Во всех методах DunePlugin $plugin_cookies передаётся по ссылке и описан как [inout] Map: Key -> Value; у handle_user_input по ссылке передаётся и $user_input ↩
-
fw-tv188b-261021-0117-r25.c336 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строковый id plugin_handle_user_input в key_enter манифеста принят: при выборе точки входа kbp5.native shell.log пишет «plugin D: test_plugin5->handle_user_input(kbp5.native): start (timeout=60.0s)». ↩
-
doc-sdk-plugins.c038 · doc · any-documented; прошивка — · actions точки входа — соответствие событие (клавиша) → GUI-действие при фокусе на точке входа; popup_menu добавляет пункты в контекстное меню точки входа ↩
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c087 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginRegularFolderView::{actions} имеют C-тип (GuiActionMap *). ↩
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c062 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginControlsFolderView::{actions} имеют C-тип (GuiActionMap *). ↩
-
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c100 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginRowsFolderView::{actions} имеют C-тип (GuiActionMap *).
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c069 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginGCompsFolderView::{actions} имеют C-тип (GuiActionMap *).
-
- doc-sdk-plugins--gui-actions.c053 · doc · any-documented; прошивка — · Поле actions в ShowDialogAction задаёт действия на нажатия клавиш и событие таймера; поведение GUI_EVENT_KEY_ENTER изменить нельзя
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c162 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля ShowDialogActionData::{actions} имеют C-тип (GuiActionMap *).
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c168 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля ShowGCompsDialogActionData::{actions} имеют C-тип (GuiActionMap *). ↩
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c129 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginTvInfo::{actions} имеют C-тип (GuiActionMap *). ↩
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c149 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginVodInfo::{actions} имеют C-тип (GuiActionMap *). ↩
-
- doc-sdk-plugins--gui-actions.c094 · doc · any-documented; прошивка — · Данные ChangeBehaviour — класс ChangeBehaviourActionData с необязательными полями actions (GuiActionMap), timer (GuiTimerDef), post_action
- doc-sdk-plugins--gui-actions.c096 · doc · any-documented; прошивка — · В ChangeBehaviour заданное actions заменяет существующую карту действий, а заданный таймер перезапускается от текущего момента
-
doc-sdk-plugins--gui-actions.c095 · doc · any-documented; прошивка — · ChangeBehaviour меняет поведение в текущем GUI-контейнере; поддерживаются регулярная папка, диалог с контролами и VOD-воспроизведение, а папки с контролами/фильмом, TV- и обычное воспроизведение обещаны в будущем ↩↩
-
doc-sdk-plugins.c074 · doc · any-documented; прошивка — · Control-папка поддерживает контролы button, combobox, text field; изменения применяются/сохраняются через действие HANDLE_USER_INPUT ↩↩
-
doc-sdk-plugins--controls-playback.c034 · doc · any-documented; прошивка — · Действие, исполняемое из контрола, получает в params selected_control_id со значением GuiControlDef::name выбранного контрола — производителя действия. ↩
-
doc-sdk-plugins--controls-playback.c035 · doc · any-documented; прошивка — · В params действия из контейнера для каждого combobox и текстового поля ключ с именем GuiControlDef::name содержит текущее значение контрола: выбранный choice_value или редактируемый текст. ↩↩
-
doc-sdk-plugins--controls-playback.c036 · doc · any-documented; прошивка — · При назначении HANDLE_USER_INPUT контролу плагину следует заранее добавить в params метки, позволяющие Handle_user_input() распознать контекст вызова и контейнер. ↩
-
fw-tv188b-261021-0117-r25.c262 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 params (handler_id, control_id) действия plugin_handle_user_input из key_enter точки входа в манифесте приходят полями handler_id и control_id в input_data операции handle_user_input. ↩
-
fw-tv188b-261021-0117-r25.c261 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при ENTER на точке входа (key_enter → plugin_handle_user_input) input_data операции handle_user_input содержит selected_media_url и orig_selected_media_url, равные media_url этой точки входа, а также play_mode none и topmenu_root_id section:applications. ↩
-
plg-dc-widget-ext.c092 · code · unknown; прошивка — · Значение элемента управления приходит в handle_user_input как свойство $user_input->{control_id}; родительский media_url — $user_input->parent_media_url ↩
-
fw-tv188b-260827-0003-r24--php-framework.c105 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление GuiEventKind строковыми константами: GUI_EVENT_KEY_ENTER='key_enter', GUI_EVENT_KEY_PLAY='key_play', GUI_EVENT_KEY_A_RED='key_a_red', GUI_EVENT_KEY_B_GREEN='key_b_green', GUI_EVENT_KEY_C_YELLOW='key_c_yellow', GUI_EVENT_KEY_D_BLUE='key_d_blue', GUI_EVENT_KEY_POPUP_MENU='key_popup_menu', GUI_EVENT_KEY_INFO='key_info', GUI_EVENT_KEY_LEFT='key_left', GUI_EVENT_KEY_RIGHT='key_right', GUI_EVENT_KEY_UP='key_up', GUI_EVENT_KEY_DOWN='key_down', GUI_EVENT_KEY_P_PLUS='key_p_plus', GUI_EVENT_KEY_P_MINUS='key_p_minus', GUI_EVENT_KEY_NEXT='key_next', GUI_EVENT_KEY_PREV='key_prev', GUI_EVENT_KEY_FIP_NEXT='key_fip_next', GUI_EVENT_KEY_FIP_PREV='key_fip_prev', GUI_EVENT_KEY_SETUP='key_setup', GUI_EVENT_KEY_RETURN='key_return', GUI_EVENT_KEY_SELECT='key_select', GUI_EVENT_KEY_CLEAR='key_clear', GUI_EVENT_KEY_PAUSE='key_pause', GUI_EVENT_KEY_FWD='key_fwd', GUI_EVENT_KEY_REW='key_rew', GUI_EVENT_KEY_SLOW='key_slow', GUI_EVENT_KEY_STOP='key_stop', GUI_EVENT_KEY_TOP_MENU='key_top_menu', GUI_EVENT_KEY_POWER='key_power', GUI_EVENT_KEY_EJECT='key_eject', GUI_EVENT_KEY_MODE='key_mode', GUI_EVENT_KEY_VENDOR='key_vendor', GUI_EVENT_KEY_SHUFFLE='key_shuffle', GUI_EVENT_KEY_MUSIC='key_music', GUI_EVENT_KEY_MUTE='key_mute', GUI_EVENT_KEY_V_PLUS='key_v_plus', GUI_EVENT_KEY_V_MINUS='key_v_minus', GUI_EVENT_KEY_SEARCH='key_search', GUI_EVENT_KEY_ZOOM='key_zoom', GUI_EVENT_KEY_SUBTITLE='key_subtitle', GUI_EVENT_KEY_REPEAT='key_repeat', GUI_EVENT_KEY_AUDIO='key_audio', GUI_EVENT_KEY_REC='key_rec', GUI_EVENT_KEY_DUNE='key_dune', GUI_EVENT_KEY_FAVORITES='key_favorites', GUI_EVENT_KEY_URL='key_url', GUI_EVENT_KEY_0='key_0', GUI_EVENT_KEY_1='key_1', GUI_EVENT_KEY_2='key_2', GUI_EVENT_KEY_3='key_3', GUI_EVENT_KEY_4='key_4', GUI_EVENT_KEY_5='key_5', GUI_EVENT_KEY_6='key_6', GUI_EVENT_KEY_7='key_7', GUI_EVENT_KEY_8='key_8', GUI_EVENT_KEY_9='key_9', GUI_EVENT_UI_ACTION='ui_action', GUI_EVENT_TIMER='timer', GUI_EVENT_PLUGIN_ROWS_INFO_UPDATE='plugin_rows_info_update', GUI_EVENT_FOLDER_LEAVE='folder_leave', GUI_EVENT_FOLDER_ENTER='folder_enter', GUI_EVENT_FOLDER_RETURN_BACK='folder_return_back', GUI_EVENT_PLAYBACK_STOP='playback_stop', GUI_EVENT_PLAYBACK_GOING_TO_SWITCH='playback_going_to_switch', GUI_EVENT_PLAYBACK_SWITCHED='playback_switched', GUI_EVENT_PLAYBACK_USER_ACTION='playback_user_action', GUI_EVENT_PLAYBACK_STATE_CHANGED='playback_state_changed', GUI_EVENT_MENU_PLAYBACK_OSD_CLOSED='menu_playback_osd_closed', GUI_EVENT_MENU_PLAYBACK_OSD_GOING_TO_OPEN='menu_playback_osd_going_to_open', GUI_EVENT_MENU_PLAYBACK_FINISH='menu_playback_finish', GUI_EVENT_MENU_EXT_APP_FINISH='menu_ext_app_finish', GUI_EVENT_WEB_BROWSER_FINISH='web_browser_finish', GUI_EVENT_BOOT='boot', GUI_EVENT_BOOT_END='boot_end', GUI_EVENT_INSTALL='install', GUI_EVENT_UPDATE='update', GUI_EVENT_UNINSTALL='uninstall', GUI_EVENT_GOING_TO_UPDATE='going_to_update', GUI_EVENT_GOING_TO_STOP='going_to_stop', GUI_EVENT_GUI_START='gui_start', GUI_EVENT_EARLY_GUI_START='early_gui_start', GUI_EVENT_STORAGE_DETECTED_MENU='storage_detected_menu', GUI_EVENT_FILE_POPUP_MENU='file_popup_menu', GUI_EVENT_TOPMENU_POPUP_MENU='topmenu_popup_menu', GUI_EVENT_TOPMENU_REFRESH='topmenu_refresh', GUI_EVENT_GOING_TO_RELOAD_ALL_FOLDERS='going_to_reload_all_folders', GUI_EVENT_FAVORITES_UPDATED='favorites_updated', GUI_EVENT_NETWORK_CHANGE='network_change', GUI_EVENT_SETTINGS_UPDATED='settings_updated', GUI_EVENT_CONFIRM_UPDATE='confirm_update', GUI_EVENT_SHUTDOWN='shutdown' ↩↩↩
-
plg-dc-screenshoter.c014 · code · unknown; прошивка — · В обеих точках входа клавиши key_enter и key_play вызывают действие plugin_handle_user_input с handler_id = entry ↩↩
-
doc-sdk-plugins--gui-actions.c002 · doc · any-documented; прошивка — · Исходный (без пометки версии) список клавишных событий GuiEventKind: GUI_EVENT_KEY_ENTER, GUI_EVENT_KEY_PLAY, GUI_EVENT_KEY_A_RED, GUI_EVENT_KEY_B_GREEN, GUI_EVENT_KEY_C_YELLOW, GUI_EVENT_KEY_D_BLUE, GUI_EVENT_KEY_POPUP_MENU, GUI_EVENT_KEY_INFO ↩↩
-
doc-sdk-plugins--operations.c033 · doc · any-documented; прошивка — · get_next_folder_view() возвращает следующий вид папки; GUI вызывает его по A_RED, если плагин задал PluginFolderView::multiple_views_supported == true ↩
-
doc-sdk-plugins--gui-actions.c010 · doc · any-documented; прошивка — · GUI_EVENT_KEY_ENTER нельзя переопределить для пустой регулярной папки плагина ↩
-
doc-sdk-plugins--gui-actions.c019 · doc · any-documented; прошивка — · В регулярных папках плагина нельзя переопределить события ZOOM, POWER, EJECT ↩
-
doc-sdk-plugins--gui-actions.c020 · doc · any-documented; прошивка — · В диалогах с контролами часть кнопок пульта имеет особое значение, когда активен текстовый редактор или раскрыт список combobox, и не может быть переопределена картой actions диалога ↩
-
doc-sdk-plugins--controls-playback.c021 · doc · any-documented; прошивка — · У текстового поля из состояния focused ENTER включает active; активный редактор перехватывает стрелки, ENTER, RETURN и некоторые другие клавиши. ↩↩
-
doc-sdk-plugins--controls-playback.c015 · doc · any-documented; прошивка — · У combobox из состояния focused клавиша ENTER открывает активное раскрытое меню; в active перехватываются стрелки, ENTER и RETURN. ↩
-
- doc-sdk-plugins--operations.c045 · doc · any-documented; прошивка — · PluginTvInfo::favorites_supported включает избранное: особую группу «favorites» и обработку клавиш, по которым GUI вызывает change_tv_favorites() (D_BLUE, B_GREEN, C_YELLOW)
- doc-sdk-plugins--operations.c082 · doc · any-documented; прошивка — · change_tv_favorites() обновляет список избранных каналов; вызывается в режиме ТВ-воспроизведения по B_GREEN, C_YELLOW, D_BLUE
-
thr-hdtv-19055.c027 · forum · Dune Android (Neo/Sky/Pro), android; прошивка — · На комплектном (новом) пульте Dune Android нет кнопки Eject; для Eject-скриншота нужен, например, IP-пульт ↩
-
- fw-tv188b-260827-0003-r24--shell-ext.c052 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · handle_user_input() в DefaultDunePlugin передаёт ввод в UserInputHandlerRegistry: обработчик выбирается по $user_input->handler_id среди зарегистрированных register_handler(); без handler_id или с неизвестным id результат null
- fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c043 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · UserInputHandlerRegistry::get_user_input_handler возвращает зарегистрированный handlers[handler_id] либо null, если handler_id отсутствует или неизвестен.
-
doc-sdk-plugins--gui-actions.c052 · doc · any-documented; прошивка — · ShowDialogAction показывает диалог с контролами и взаимодействует с пользователем, пока диалог не закрыт; контролы идут вертикальным списком, у каждого может быть заголовок (1 или 2 колонки), полоса прокрутки появляется при необходимости ↩
-
doc-sdk-plugins--controls-playback.c030 · doc · any-documented; прошивка — · push_action кнопки, если задан, исполняется по ENTER на кнопке с фокусом. ↩
-
- doc-sdk-plugins--gui-actions.c054 · doc · any-documented; прошивка — · Таймер ShowDialogAction срабатывает один раз; перезапустить его можно действием ChangeBehaviour
- doc-sdk-plugins--gui-actions.c004 · doc · any-documented; прошивка — · Новый таймер (GUI_EVENT_TIMER) обычно задаётся GUI-действием ChangeBehaviour
-
doc-sdk-plugins--gui-actions.c060 · doc · any-documented; прошивка — · ShowDialogAction возвращает статус ok, а если диалог закрыт действием CloseDialogAndRun — его CloseDialogAndRunActionData::post_action как post action ↩
-
doc-sdk-plugins--gui-actions.c055 · doc · any-documented; прошивка — · close_by_return в ShowDialogAction определяет, закрывается ли диалог кнопкой RETURN; preferred_width = 0 означает автоматический расчёт ширины по предпочтительной ширине контролов ↩
-
doc-sdk-plugins--gui-actions.c059 · doc · any-documented; прошивка — · Ключ exit_seq в params ShowDialogAction — последовательность для закрытия диалога: список видов GUI-событий через запятую; доступен с прошивки 130904_b8 ↩↩↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c085 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ControlFactory::add_close_dialog_and_apply_button строит GUI-элемент типа button; схема заполнения использует GuiControlDef::{name, title, kind, specific_def, params}; GuiButtonDef::{caption, width, push_action}. action_type=apply; push_action обёрнут в close_dialog_and_run. ↩
-
plg-dc-widget-ext--adv-keyboard.c063 · code · unknown; прошивка — · Диалог настроек клавиатуры задаёт ширину 1100 и close_by_return = false; RETURN переназначен на close_dialog с флагом close_config_dialog_kbrd_q21. ↩
-
doc-sdk-plugins--gui-actions.c003 · doc · any-documented; прошивка — · GUI_EVENT_TIMER — особое событие периодической активности; генерируется один раз по истечении тайм-аута GuiTimerDef::delay_ms ↩
-
doc-sdk-plugins--gui-actions.c054 · doc · any-documented; прошивка — · Таймер ShowDialogAction срабатывает один раз; перезапустить его можно действием ChangeBehaviour ↩
-
fw-tv188b-261021-0117-r25--downloads.c072 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 действие open_magnet плагина downloads с непустым magnet_url прошло цепочку entry.open_magnet → entry.ensure_ts (~11 с, запуск TorrServer) → entry.open_dl → show_dialog с опросом entry.dialog_open_dl раз в ~1 с (три вызова) → close_dialog_and_run → entry.show_open_magnet → show_dialog; тайм-аут open_magnet и dialog_open_dl — 300 с, остальных шагов — 60 с. ↩
-
doc-sdk-plugins--gui-actions.c099 · doc · any-documented; прошивка — · CloseAndRunAction (данные CloseAndRunActionData с необязательным post_action): при активном диалоге с контролами работает как CloseDialogAndRunAction, при другом диалоге ничего не делает, а без диалогов в активной папке закрывает её (переход вверх) и возвращает post_action; доступно с прошивки 121114 ↩↩↩
-
doc-sdk-plugins--gui-actions.c100 · doc · any-documented; прошивка — · С прошивки 131029_b9 CloseAndRunAction, вызванное из TV-воспроизведения или VOD-воспроизведения плагина без активного диалога, работает как остановка воспроизведения ↩↩
-
doc-sdk-plugins--gui-actions.c066 · doc · any-documented; прошивка — · ShowPopupMenuAction показывает всплывающее меню до его закрытия; действие выбранного пользователем пункта возвращается как post action ↩↩
-
- doc-sdk-plugins--gui-actions.c052 · doc · any-documented; прошивка — · ShowDialogAction показывает диалог с контролами и взаимодействует с пользователем, пока диалог не закрыт; контролы идут вертикальным списком, у каждого может быть заголовок (1 или 2 колонки), полоса прокрутки появляется при необходимости
- doc-sdk-plugins--gui-actions.c060 · doc · any-documented; прошивка — · ShowDialogAction возвращает статус ok, а если диалог закрыт действием CloseDialogAndRun — его CloseDialogAndRunActionData::post_action как post action
-
- doc-sdk-plugins--gui-actions.c061 · doc · any-documented; прошивка — · CloseDialogAndRunAction (данные CloseDialogAndRunActionData с необязательным post_action) закрывает текущий диалог с контролами и возвращает post_action как результат вызвавшего действия SHOW_DIALOG
- doc-sdk-plugins--gui-actions.c062 · doc · any-documented; прошивка — · Вне диалога с контролами CloseDialogAndRunAction игнорируется
-
- doc-sdk-plugins--gui-actions.c094 · doc · any-documented; прошивка — · Данные ChangeBehaviour — класс ChangeBehaviourActionData с необязательными полями actions (GuiActionMap), timer (GuiTimerDef), post_action
- doc-sdk-plugins--gui-actions.c095 · doc · any-documented; прошивка — · ChangeBehaviour меняет поведение в текущем GUI-контейнере; поддерживаются регулярная папка, диалог с контролами и VOD-воспроизведение, а папки с контролами/фильмом, TV- и обычное воспроизведение обещаны в будущем
- doc-sdk-plugins--gui-actions.c096 · doc · any-documented; прошивка — · В ChangeBehaviour заданное actions заменяет существующую карту действий, а заданный таймер перезапускается от текущего момента
-
- doc-sdk-plugins--gui-actions.c063 · doc · any-documented; прошивка — · Данные ResetControlsAction — класс ResetControlsActionData: defs (List
), initial_sel_ndx (по умолчанию −1 — выбор не менять), post_action (необязательно) - doc-sdk-plugins--gui-actions.c064 · doc · any-documented; прошивка — · ResetControlsAction заменяет состояние текущего диалога с контролами или папки с контролами; вне их игнорируется
- doc-sdk-plugins--gui-actions.c063 · doc · any-documented; прошивка — · Данные ResetControlsAction — класс ResetControlsActionData: defs (List
-
- doc-sdk-plugins--gui-actions.c065 · doc · any-documented; прошивка — · Данные ShowPopupMenuAction — класс ShowPopupMenuActionData: menu_items (List
), selected_menu_item_index (необязательно, по умолчанию 0) - doc-sdk-plugins--gui-actions.c066 · doc · any-documented; прошивка — · ShowPopupMenuAction показывает всплывающее меню до его закрытия; действие выбранного пользователем пункта возвращается как post action
- doc-sdk-plugins--gui-actions.c065 · doc · any-documented; прошивка — · Данные ShowPopupMenuAction — класс ShowPopupMenuActionData: menu_items (List
-
doc-sdk-plugins--controls-playback.c004 · doc · any-documented; прошивка — · Папка с контролами закрывается кнопками RETURN и TOP_MENU так же, как другие папки Dune. ↩
-
doc-sdk-plugins--gui-actions.c033 · doc · any-documented; прошивка — · PluginOpenFolderAction открывает папку плагина: caption добавляется в блок пути, выполняется операция Get_folder_view($media_url), её результат показывается как содержимое папки ↩
-
doc-sdk-plugins--operations.c008 · doc · any-documented; прошивка — · Тип PluginFolderView::data зависит от view_kind: регулярная папка — PluginRegularFolderView, control-папка — PluginControlsFolderView, movie-папка — PluginMovieFolderView ↩
-
doc-sdk-plugins--operations.c020 · doc · any-documented; прошивка — · Класс PluginControlsFolderView имеет поля defs (Array
), initial_sel_ndx (int), params (PluginFolderViewParams) ↩↩ -
doc-sdk-plugins--operations.c022 · doc · any-documented; прошивка — · PluginControlsFolderView::defs — список определений GUI-контролов (см. раздел «GUI controls») ↩
-
doc-sdk-plugins--operations.c023 · doc · any-documented; прошивка — · PluginControlsFolderView::initial_sel_ndx — индекс (с 0) контрола, получающего фокус первым; -1 означает контрол по умолчанию (первый) ↩↩↩
-
doc-sdk-plugins--operations.c021 · doc · any-documented; прошивка — · Класс PluginFolderViewParams (параметры control- и movie-папок) в документе имеет поля paint_path_box, paint_content_box_background (Boolean) и background_url (String) ↩
-
fw-tv188b-260827-0003-r24--php-framework.c199 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginControlsFolderView с ключами (5): defs, actions, timer, initial_sel_ndx, params ↩↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c186 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · AbstractControlsScreen::get_folder_view возвращает PluginFolderView вида PLUGIN_FOLDER_VIEW_CONTROLS с данными PluginControlsFolderView (defs, actions, timer, initial_sel_ndx, params) и multiple_views_supported=false. ↩↩
-
doc-sdk-plugins--controls-playback.c020 · doc · any-documented; прошивка — · GuiTextFieldDef описывает текстовое поле восемью полями: initial_value, numeric, password, has_osk, always_active, width, confirm_action, apply_action. ↩↩
-
plg-dc-widget-ext--adv-keyboard.c044 · code · unknown; прошивка — · SuggestionsProvider задаёт пять методов: получение подсказок, их представления, поискового текста, дополнительных параметров действия и признака поиска только по подсказке. ↩↩
-
plg-dc-widget-ext--adv-keyboard.c022 · code · unknown; прошивка — · load_keyboard читает adv_keyboard_
.txt без пустых строк и переводов строк; если файл отсутствует, пробует adv_keyboard_english.txt. ↩↩ -
doc-sdk-plugins--controls-playback.c033 · doc · any-documented; прошивка — · Нерисуемый псевдоконтрол VGap с GuiVGapDef::vgap изменяет стандартное расстояние между соседними контролами: положительное значение увеличивает его, отрицательное уменьшает. ↩
-
doc-sdk-plugins--controls-playback.c025 · doc · any-documented; прошивка — · У текстового поля always_active = true пропускает состояние focused: при получении фокуса контрол сразу переходит в active; по умолчанию always_active = false. ↩
-
doc-sdk-plugins--controls-playback.c027 · doc · any-documented; прошивка — · confirm_action текстового поля исполняется по ENTER в active до применения изменений: OK применяет текст и переводит поле в focused, иной статус откатывает изменения и оставляет поле в active. ↩
-
doc-sdk-plugins--controls-playback.c028 · doc · any-documented; прошивка — · apply_action текстового поля исполняется после применения изменений; статус исполнения действия игнорируется. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib--tv-vod.c065 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · VodSearchScreen расширяет AbstractControlsScreen и в do_get_control_defs читает cookie vod_search_pattern, добавляет label vod_enter_search_pattern и текстовое поле pattern с начальным значением из cookie, numeric=false, password=false, has_osk=true, always_active=true, width=500, need_confirm=true, need_apply=true; get_control_defs сначала вызывает vod->folder_entered. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib--tv-vod.c066 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · VodSearchScreen::handle_user_input при action_type=apply и control_id=pattern берёт pattern из user_input, сохраняет в cookie vod_search_pattern, печатает 'Vod search: applying pattern', перестраивает defs и возвращает reset_controls с open_folder(get_search_media_url_str(pattern), pattern); при action_type=confirm, control_id=pattern и пустом pattern возвращает show_error(false, vod_search_pattern_should_not_be_empty), при непустом ничего не возвращает. ↩↩↩
-
plg-dc-globaltv.c167 · code · unknown; прошивка — · Для ввода кода родительского контроля GlobalTvTvSectionListScreen вызывает ControlFactory::add_text_field с numeric=true, has_osk=false, always_active=true и params fixed_osk_id='numeric'. ↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c036 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит ключ ktv_params (подобласть parse_plugin_manifest()/ktv_params) и следом имена server_address, softid, softid_h265, fixed_osk_id, best_stream_server_url, ad_server_address, private_enabled, info_url, kiosk_url, use_catchup_api, catchup_api_without_gui, ext_epg_url, account_changed_action; рядом в блоке — ad.kartina.tv, http://dune.kartina.tv/releases/Info/info_splash.1.png и kartina_tv_launcher ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c093 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · GCompsFactory::text_field строит GUI-элемент типа text_field; схема заполнения использует GuiTextFieldDef::{initial_value, numeric, password, has_osk, width, apply_action}; GComponentDef::{id, geom_def, margins_def, kind, specific_def}; GCompTextFieldDef::{def, params}. other_params: numeric/password/has_osk=false, width=null, apply_action=null. ↩
-
- fw-tv188b-260827-0003-r24--http-api--ext-command-params.c035 · doc · any-documented; прошивка — · cmd=get_text возвращает редактируемую сейчас строку в параметре text; без активного редактора текста — command_status failed
- fw-tv188b-260827-0003-r24--http-api--ext-command-params.c036 · doc · any-documented; прошивка — · cmd=set_text&text=… заменяет редактируемую строку заданной (UTF-8); без активного редактора — failed
-
- fw-tv188b-261021-0117-r25.c266 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие цветной клавиши в VOD (key_a_red, key_b_green из PluginVodInfo::actions) приходит в input_data без playback_position — с полями handler_id, control_id, play_mode, topmenu_root_id, playback_browser_activated, plugin_vod_id, plugin_vod_series_ndx, plugin_vod_sel_series_ndx.
- fw-tv188b-260827-0003-r24--php-framework.c105 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление GuiEventKind строковыми константами: GUI_EVENT_KEY_ENTER='key_enter', GUI_EVENT_KEY_PLAY='key_play', GUI_EVENT_KEY_A_RED='key_a_red', GUI_EVENT_KEY_B_GREEN='key_b_green', GUI_EVENT_KEY_C_YELLOW='key_c_yellow', GUI_EVENT_KEY_D_BLUE='key_d_blue', GUI_EVENT_KEY_POPUP_MENU='key_popup_menu', GUI_EVENT_KEY_INFO='key_info', GUI_EVENT_KEY_LEFT='key_left', GUI_EVENT_KEY_RIGHT='key_right', GUI_EVENT_KEY_UP='key_up', GUI_EVENT_KEY_DOWN='key_down', GUI_EVENT_KEY_P_PLUS='key_p_plus', GUI_EVENT_KEY_P_MINUS='key_p_minus', GUI_EVENT_KEY_NEXT='key_next', GUI_EVENT_KEY_PREV='key_prev', GUI_EVENT_KEY_FIP_NEXT='key_fip_next', GUI_EVENT_KEY_FIP_PREV='key_fip_prev', GUI_EVENT_KEY_SETUP='key_setup', GUI_EVENT_KEY_RETURN='key_return', GUI_EVENT_KEY_SELECT='key_select', GUI_EVENT_KEY_CLEAR='key_clear', GUI_EVENT_KEY_PAUSE='key_pause', GUI_EVENT_KEY_FWD='key_fwd', GUI_EVENT_KEY_REW='key_rew', GUI_EVENT_KEY_SLOW='key_slow', GUI_EVENT_KEY_STOP='key_stop', GUI_EVENT_KEY_TOP_MENU='key_top_menu', GUI_EVENT_KEY_POWER='key_power', GUI_EVENT_KEY_EJECT='key_eject', GUI_EVENT_KEY_MODE='key_mode', GUI_EVENT_KEY_VENDOR='key_vendor', GUI_EVENT_KEY_SHUFFLE='key_shuffle', GUI_EVENT_KEY_MUSIC='key_music', GUI_EVENT_KEY_MUTE='key_mute', GUI_EVENT_KEY_V_PLUS='key_v_plus', GUI_EVENT_KEY_V_MINUS='key_v_minus', GUI_EVENT_KEY_SEARCH='key_search', GUI_EVENT_KEY_ZOOM='key_zoom', GUI_EVENT_KEY_SUBTITLE='key_subtitle', GUI_EVENT_KEY_REPEAT='key_repeat', GUI_EVENT_KEY_AUDIO='key_audio', GUI_EVENT_KEY_REC='key_rec', GUI_EVENT_KEY_DUNE='key_dune', GUI_EVENT_KEY_FAVORITES='key_favorites', GUI_EVENT_KEY_URL='key_url', GUI_EVENT_KEY_0='key_0', GUI_EVENT_KEY_1='key_1', GUI_EVENT_KEY_2='key_2', GUI_EVENT_KEY_3='key_3', GUI_EVENT_KEY_4='key_4', GUI_EVENT_KEY_5='key_5', GUI_EVENT_KEY_6='key_6', GUI_EVENT_KEY_7='key_7', GUI_EVENT_KEY_8='key_8', GUI_EVENT_KEY_9='key_9', GUI_EVENT_UI_ACTION='ui_action', GUI_EVENT_TIMER='timer', GUI_EVENT_PLUGIN_ROWS_INFO_UPDATE='plugin_rows_info_update', GUI_EVENT_FOLDER_LEAVE='folder_leave', GUI_EVENT_FOLDER_ENTER='folder_enter', GUI_EVENT_FOLDER_RETURN_BACK='folder_return_back', GUI_EVENT_PLAYBACK_STOP='playback_stop', GUI_EVENT_PLAYBACK_GOING_TO_SWITCH='playback_going_to_switch', GUI_EVENT_PLAYBACK_SWITCHED='playback_switched', GUI_EVENT_PLAYBACK_USER_ACTION='playback_user_action', GUI_EVENT_PLAYBACK_STATE_CHANGED='playback_state_changed', GUI_EVENT_MENU_PLAYBACK_OSD_CLOSED='menu_playback_osd_closed', GUI_EVENT_MENU_PLAYBACK_OSD_GOING_TO_OPEN='menu_playback_osd_going_to_open', GUI_EVENT_MENU_PLAYBACK_FINISH='menu_playback_finish', GUI_EVENT_MENU_EXT_APP_FINISH='menu_ext_app_finish', GUI_EVENT_WEB_BROWSER_FINISH='web_browser_finish', GUI_EVENT_BOOT='boot', GUI_EVENT_BOOT_END='boot_end', GUI_EVENT_INSTALL='install', GUI_EVENT_UPDATE='update', GUI_EVENT_UNINSTALL='uninstall', GUI_EVENT_GOING_TO_UPDATE='going_to_update', GUI_EVENT_GOING_TO_STOP='going_to_stop', GUI_EVENT_GUI_START='gui_start', GUI_EVENT_EARLY_GUI_START='early_gui_start', GUI_EVENT_STORAGE_DETECTED_MENU='storage_detected_menu', GUI_EVENT_FILE_POPUP_MENU='file_popup_menu', GUI_EVENT_TOPMENU_POPUP_MENU='topmenu_popup_menu', GUI_EVENT_TOPMENU_REFRESH='topmenu_refresh', GUI_EVENT_GOING_TO_RELOAD_ALL_FOLDERS='going_to_reload_all_folders', GUI_EVENT_FAVORITES_UPDATED='favorites_updated', GUI_EVENT_NETWORK_CHANGE='network_change', GUI_EVENT_SETTINGS_UPDATED='settings_updated', GUI_EVENT_CONFIRM_UPDATE='confirm_update', GUI_EVENT_SHUTDOWN='shutdown'
-
fw-tv188b-261021-0117-r25--media-player.c054 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 назначенное в PluginVodInfo::actions действие key_pause перехватывает PAUSE: плагин получает событие, а воспроизведение продолжает идти. ↩
-
fw-tv188b-261021-0117-r25.c266 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие цветной клавиши в VOD (key_a_red, key_b_green из PluginVodInfo::actions) приходит в input_data без playback_position — с полями handler_id, control_id, play_mode, topmenu_root_id, playback_browser_activated, plugin_vod_id, plugin_vod_series_ndx, plugin_vod_sel_series_ndx. ↩↩
-
fw-tv188b-261021-0117-r25.c265 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 через PluginVodInfo::actions при VOD приходят не только события цветных клавиш, таймера и остановки, но и playback_user_action, playback_switched, playback_state_changed и playback_going_to_switch — оболочка исполняет назначенное на них действие plugin_handle_user_input. ↩
-
doc-sdk-plugins--gui-actions.c014 · doc · any-documented; прошивка — · С прошивки 131029_b9 событие таймера можно использовать и в TV-воспроизведении плагина (так же, как в VOD-воспроизведении) ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c030 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_config_with_color_buttons() возвращает false для пультов SMALL и ARROWS и true для остальных; dune_config_show_pop_up_icon_only() возвращает true для OVAL, SMALL, ARROWS и false для остальных ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c028 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_config.php определяет константы типа пульта FEW_BUTTONS_REMOTE_TYPE_NONE=0, _OVAL=1, _SMALL=2, _ARROWS=3 ↩
-
fw-tv188b-260827-0003-r24--php-framework.c029 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_config_get_few_buttons_remote_type() возвращает DuneSystem::$properties['few_buttons_remote_type'] ↩
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler--movie-screen--panels.c013 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · hints_pane показывает иконку popup.png (или popup_icon_only.png, если dune_config_show_pop_up_icon_only() истинна) и подпись controls_button_popup только при включённом cur_movie_search_association_enabled или cur_movie_choose_playback_type_enabled; для первой кнопки и desc base добавляет p_plus_p_minus.png с action_scroll и up_down.png. ↩
-
fw-tv188b-260827-0003-r24--firmware-config.c044 · code · android-dune-fw; прошивка 260827_0003_r24 · Экран appearance_control в menu_config.xml перечисляет setting id: animation_effects, animation_speed, key_repeat_rate, delay_before_key_repeat, animation_for_keyboard. ↩
-
- doc-sdk-plugins--gui-actions.c057 · doc · any-documented; прошивка — · initial_sel_ndx в ShowDialogAction — индекс первого выбранного контрола среди фокусируемых (combobox, кнопки, текстовые поля)
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map )
-
doc-sdk-plugins--gui-actions.c063 · doc · any-documented; прошивка — · Данные ResetControlsAction — класс ResetControlsActionData: defs (List
), initial_sel_ndx (по умолчанию −1 — выбор не менять), post_action (необязательно) ↩ -
doc-sdk-plugins--gui-actions.c069 · doc · any-documented; прошивка — · PluginUpdateFolderAction частично заменяет состояние текущей регулярной папки плагина: при need_refresh очищается кэш состояния папки, применяется переданный range, при sel_ndx >= 0 фокус переходит на элемент с этим индексом ↩
-
doc-sdk-plugins--gui-actions.c065 · doc · any-documented; прошивка — · Данные ShowPopupMenuAction — класс ShowPopupMenuActionData: menu_items (List
), selected_menu_item_index (необязательно, по умолчанию 0) ↩↩ -
doc-sdk-plugins.c033 · doc · any-documented; прошивка — · section_index и is_default_section (с прошивки 120901) выводят точку входа как раздел главного экрана в стиле «Folders»; is_default_section делает её фокусной при первом входе ↩↩
-
plg-dc-widget-ext--adv-keyboard.c036 · code · unknown; прошивка — · При наличии argColor обработчик сохраняет значение user_input->{control_id} в adv_kbrd_colors[argColor] и переоткрывает настройки с прежним initial_sel_ndx. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c084 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при новой некритической версии проверка на запуске показывает диалог «Обновление приложения» с текстом «Приложение:
. Текущая версия: . Новая версия: . Обновить приложение?» и кнопками «Обновить» (в фокусе по умолчанию) и «Напомнить позже». ↩ -
fw-tv188b-261021-0117-r25--downloads.c073 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 show_open_magnet для торрента из трёх файлов показывает диалог «Выберите действие для торрента» с «Название торрента: <имя>», «Найдено файлов: 3» и кнопками «Воспроизвести» (в фокусе) и «Скачать все файлы». ↩
-
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c043 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля GComponentDef::{focusable_def} имеют C-тип (GCompFocusableDef *).
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c044 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля GComponentDef::{focused_variant_def} имеют C-тип (GCompVariantDef *).
-
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c105 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginRowsPane::{focus} имеют C-тип (GCompFocusDef *).
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c108 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginRowsPane::{horizontal_focus_freedom_factor, vertical_focus_freedom_factor, vertical_focus_gravity} имеют C-тип float.
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c126 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · RowsFactory::focus формирует или дополняет структуру с полями GCompFocusDef::{type, type2}. type=GCOMP_FOCUS_SYSTEM, type2=GCOMP_FOCUS_NONE. ↩
-
fw-tv188b-261021-0117-r25--ext-epg.c036 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · ProgramScreen::get_action_map связывает INFO с close_and_run, направления и P+/P− с control_id=change и op=left/right/up/down/page_up/page_down. ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c200 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · GCompList::handle_op принимает page_up/page_down/up/down/left/right/sel:
; шаг страницы равен floor((page_size+1)/2). ↩ -
fw-tv188b-260827-0003-r24--php-framework.c118 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php (раздел «GUI-action ids») определяет идентификаторы действий GUI: RESET_CONTROLS_ACTION_ID='reset_controls', RESTART_ACTION_ID='restart', RUN_BUILTIN_ACTION_ID='run_builtin', RUN_DEFAULT_ACTION_ID='run_default', SET_RESTRICTED_ACTION_ID='set_restricted', SET_TIME_ZONE_ACTION_ID='set_time_zone', SHOW_BLACK_SCREEN_ACTION_ID='show_black_screen', SHOW_DIALOG_ACTION_ID='show_dialog', SHOW_GCOMPS_DIALOG_ACTION_ID='show_gcomps', SHOW_MAIN_SCREEN_ACTION_ID='show_main_screen', SHOW_POPUP_MENU_ACTION_ID='show_popup_menu', SLEEP_ACTION_ID='sleep', START_SERVICE_ACTION_ID='start_service', STATUS_ACTION_ID='status', STOP_PLAYBACK_ACTION_ID='stop_playback' ↩↩↩↩↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c185 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс GuiMenuItemDef с ключами (7): is_separator, id, caption, icon_url, marked, action, is_shown_action ↩
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c055 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля GuiMenuItemDef::{action, is_shown_action} имеют C-тип (GuiAction *). ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c021 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ActionFactory::get_menu_item формирует или дополняет структуру с полями GuiMenuItemDef::{caption, action, icon_url}. icon_url только при истинности. ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c020 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ActionFactory::get_menu_separator формирует или дополняет структуру с полями GuiMenuItemDef::{is_separator}. is_separator=1. ↩
-
- doc-sdk-plugins.c038 · doc · any-documented; прошивка — · actions точки входа — соответствие событие (клавиша) → GUI-действие при фокусе на точке входа; popup_menu добавляет пункты в контекстное меню точки входа
- fw-tv188b-260827-0003-r24--plugin-loader--manifest.c016 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Встроенные манифесты r24 задают контекстное меню точки входа как popup_menu/menu_items/menu_item (с caption и action, у kartina_tv_launcher ещё is_shown_action) — в dunestore, kartina_tv_launcher, ktv_start, shell_ext
-
fw-tv188b-260827-0003-r24--php-framework--dune-api.c147 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля PluginVodInfo::{extra_menu_items} имеют C-тип (GuiMenuItemDefList *). ↩
-
- fw-tv188b-260827-0003-r24--php-framework--dune-api.c001 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В комментариях dune_api.php r24 поля AddMenuItemsActionData::{menu_items} имеют C-тип (GuiMenuItemDefList *).
- fw-tv188b-260827-0003-r24--php-framework.c114 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php (раздел «GUI-action ids») определяет идентификаторы действий GUI: ADD_MENU_ITEMS_ACTION_ID='add_menu_items', ADD_TO_FAVORITES_ACTION_ID='add_to_favorites', BLURAY_PLAY_ACTION_ID='bluray_play', BT_COMMAND_ACTION_ID='bt_command', CHANGE_BEHAVIOUR_ACTION_ID='change_behaviour', CHANGE_GCOMPS_ACTION_ID='change_gcomps', CHANGE_LIST_CONFIG_ACTION_ID='change_list_config', CHANGE_MOVIE_DATA_ACTION_ID='change_movie_data', CHANGE_PARENTAL_CODE_ACTION_ID='change_parental_code', CHANGE_SETTINGS_ACTION_ID='change_settings', CHECK_RESTRICTED_ACTION_ID='check_restricted', CHECK_SYSTEM_STORAGE_ACTION_ID='check_system_storage', CHOOSE_FILE_ACTION_ID='choose_file', CLEAR_WATCH_HISTORY_ACTION_ID='clear_watch_history', CLOSE_AND_RUN_ACTION_ID='close_and_run'
-
plg-dc-globaltv.c055 · code · unknown; прошивка — · Для topmenu_popup плагин читает из user_input selected_topmenu_item_id (формат plugin:<имя>:section_
) и topmenu_pcode_entered и отвечает действием add_menu_items. ↩ -
doc-sdk-plugins--gui-actions.c044 · doc · any-documented; прошивка — · PluginShowErrorAction в режиме воспроизведения показывает одну строку текста в центре экрана, а в меню Dune — диалог с заголовком и строками сообщения ↩
-
doc-sdk-plugins--gui-actions.c045 · doc · any-documented; прошивка — · При fatal == true PluginShowErrorAction планирует выход из плагина по фатальной ошибке: воспроизведение останавливается, браузер Dune переходит в верхнее меню ↩
-
doc-sdk-plugins--gui-actions.c046 · doc · any-documented; прошивка — · PluginShowErrorAction всегда возвращает статус ошибки (failed) и никогда не возвращает post action ↩
-
fw-tv188b-261021-0117-r25.c339 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строковый id plugin_show_error в ответе handle_user_input принят: shell.log пишет result action plugin_show_error. ↩
-
fw-tv188b-261021-0117-r25--stbapi-js.c039 · code · android-dune-fw; прошивка 261021_0117_r25 · StbWebView передаёт сопоставленные клавиши в DOM как keydown/keyup с одинаковыми keyCode и which через document.body.dispatchEvent. ↩
-
fw-tv188b-261021-0117-r25--stbapi-js.c040 · code · android-dune-fw; прошивка 261021_0117_r25 · Stb.setRcAutoRepeatKeys является заглушкой not implemented, возвращающей ERROR даже после успешного разбора массива Java-мостом. ↩
-
doc-sdk-plugins--gui-actions.c007 · doc · any-documented; прошивка — · С прошивки 120902 добавлены клавишные события, доступные только в диалогах с контролами: GUI_EVENT_KEY_LEFT, GUI_EVENT_KEY_RIGHT, GUI_EVENT_KEY_UP, GUI_EVENT_KEY_DOWN, GUI_EVENT_KEY_P_PLUS, GUI_EVENT_KEY_P_MINUS, GUI_EVENT_KEY_NEXT, GUI_EVENT_KEY_PREV, GUI_EVENT_KEY_0, GUI_EVENT_KEY_1, GUI_EVENT_KEY_2, GUI_EVENT_KEY_3, GUI_EVENT_KEY_4, GUI_EVENT_KEY_5, GUI_EVENT_KEY_6, GUI_EVENT_KEY_7, GUI_EVENT_KEY_8, GUI_EVENT_KEY_9 ↩
-
doc-sdk-plugins--gui-actions.c009 · doc · any-documented; прошивка — · С прошивки 130819_b8 все ранее перечисленные клавишные события можно использовать и в регулярных папках плагина ↩
-
doc-sdk-plugins--gui-actions.c011 · doc · any-documented; прошивка — · С прошивки 130819_b8 для диалогов с контролами и регулярных папок плагина добавлены события GUI_EVENT_KEY_SETUP, GUI_EVENT_KEY_RETURN, GUI_EVENT_KEY_SELECT, GUI_EVENT_KEY_CLEAR ↩
-
doc-sdk-plugins--gui-actions.c012 · doc · any-documented; прошивка — · С прошивки 130904_b8 для диалогов с контролами и регулярных папок плагина добавлено событие GUI_EVENT_KEY_PAUSE ↩
-
- doc-sdk-plugins--gui-actions.c016 · doc · any-documented; прошивка — · С прошивки 150529 событие GUI_EVENT_PLAYBACK_SWITCHED генерируется после переключения воспроизведения на новый media URL, включая самый первый
- doc-sdk-plugins--gui-actions.c017 · doc · any-documented; прошивка — · С прошивки 150529 событие GUI_EVENT_PLAYBACK_GOING_TO_SWITCH генерируется перед переключением на новый media URL; в отличие от GUI_EVENT_PLAYBACK_STOP, оно не генерируется при остановке и выключении
-
fw-tv188b-260827-0003-r24--php-framework.c266 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс ShowDialogActionData с ключами (10): title, defs, actions, timer, close_by_return, preferred_width, max_height, min_item_title_width, initial_sel_ndx, params ↩
-
- doc-sdk-plugins--controls-playback.c037 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 22 новых свойства существовавших структур PHP API.
- doc-sdk-plugins--controls-playback.c038 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 17 свойств новых структур данных PHP API.
-
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) - doc-sdk-plugins--gui-actions.c052 · doc · any-documented; прошивка — · ShowDialogAction показывает диалог с контролами и взаимодействует с пользователем, пока диалог не закрыт; контролы идут вертикальным списком, у каждого может быть заголовок (1 или 2 колонки), полоса прокрутки появляется при необходимости
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
-
- doc-sdk-plugins--gui-actions.c053 · doc · any-documented; прошивка — · Поле actions в ShowDialogAction задаёт действия на нажатия клавиш и событие таймера; поведение GUI_EVENT_KEY_ENTER изменить нельзя
- doc-sdk-plugins--controls-playback.c037 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 22 новых свойства существовавших структур PHP API.
-
- doc-sdk-plugins--gui-actions.c051 · doc · any-documented; прошивка — · В GuiTimerDef для ShowDialogAction задержка delay_ms (мс) может быть нулевой
- doc-sdk-plugins--gui-actions.c054 · doc · any-documented; прошивка — · Таймер ShowDialogAction срабатывает один раз; перезапустить его можно действием ChangeBehaviour
- doc-sdk-plugins--controls-playback.c037 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 22 новых свойства существовавших структур PHP API.
- doc-sdk-plugins--controls-playback.c038 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 17 свойств новых структур данных PHP API.
-
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) - doc-sdk-plugins--gui-actions.c055 · doc · any-documented; прошивка — · close_by_return в ShowDialogAction определяет, закрывается ли диалог кнопкой RETURN; preferred_width = 0 означает автоматический расчёт ширины по предпочтительной ширине контролов
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
-
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) - doc-sdk-plugins--controls-playback.c037 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 22 новых свойства существовавших структур PHP API.
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
-
doc-sdk-plugins--gui-actions.c056 · doc · any-documented; прошивка — · Поле min_item_title_width (минимальная ширина под заголовки контролов) в ShowDialogAction доступно с прошивки 121201 ↩↩
-
- doc-sdk-plugins--gui-actions.c057 · doc · any-documented; прошивка — · initial_sel_ndx в ShowDialogAction — индекс первого выбранного контрола среди фокусируемых (combobox, кнопки, текстовые поля)
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) - doc-sdk-plugins--controls-playback.c037 · doc · any-documented; прошивка — · Раздел изменений 120531_2200_beta перечисляет 22 новых свойства существовавших структур PHP API.
-
doc-sdk-plugins--gui-actions.c058 · doc · any-documented; прошивка — · Ключ frame_style=default|glass в params ShowDialogAction (константы DIALOG_FRAME_STYLE_DEFAULT, DIALOG_FRAME_STYLE_GLASS) доступен с прошивки 130824_b8 ↩↩
-
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) - doc-sdk-plugins--operations.c020 · doc · any-documented; прошивка — · Класс PluginControlsFolderView имеет поля defs (Array
), initial_sel_ndx (int), params (PluginFolderViewParams)
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
-
- doc-sdk-plugins--gui-actions.c057 · doc · any-documented; прошивка — · initial_sel_ndx в ShowDialogAction — индекс первого выбранного контрола среди фокусируемых (combobox, кнопки, текстовые поля)
- doc-sdk-plugins--gui-actions.c050 · doc · any-documented; прошивка — · Данные ShowDialogAction — класс ShowDialogActionData: title, defs (List
) и необязательные actions (GuiActionMap), timer (GuiTimerDef), close_by_return (false), preferred_width, max_height, min_item_title_width (0 — авто), initial_sel_ndx (−1 — авто), params (Map ) - doc-sdk-plugins--operations.c023 · doc · any-documented; прошивка — · PluginControlsFolderView::initial_sel_ndx — индекс (с 0) контрола, получающего фокус первым; -1 означает контрол по умолчанию (первый)
-
- doc-sdk-plugins--gui-actions.c055 · doc · any-documented; прошивка — · close_by_return в ShowDialogAction определяет, закрывается ли диалог кнопкой RETURN; preferred_width = 0 означает автоматический расчёт ширины по предпочтительной ширине контролов
- doc-sdk-plugins--controls-playback.c004 · doc · any-documented; прошивка — · Папка с контролами закрывается кнопками RETURN и TOP_MENU так же, как другие папки Dune.
-
- doc-sdk-plugins--gui-actions.c053 · doc · any-documented; прошивка — · Поле actions в ShowDialogAction задаёт действия на нажатия клавиш и событие таймера; поведение GUI_EVENT_KEY_ENTER изменить нельзя
- doc-sdk-plugins--operations.c020 · doc · any-documented; прошивка — · Класс PluginControlsFolderView имеет поля defs (Array
), initial_sel_ndx (int), params (PluginFolderViewParams) - fw-tv188b-260827-0003-r24--php-framework.c199 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginControlsFolderView с ключами (5): defs, actions, timer, initial_sel_ndx, params
-
- doc-sdk-plugins--gui-actions.c058 · doc · any-documented; прошивка — · Ключ frame_style=default|glass в params ShowDialogAction (константы DIALOG_FRAME_STYLE_DEFAULT, DIALOG_FRAME_STYLE_GLASS) доступен с прошивки 130824_b8
- doc-sdk-plugins--gui-actions.c059 · doc · any-documented; прошивка — · Ключ exit_seq в params ShowDialogAction — последовательность для закрытия диалога: список видов GUI-событий через запятую; доступен с прошивки 130904_b8
- doc-sdk-plugins--operations.c021 · doc · any-documented; прошивка — · Класс PluginFolderViewParams (параметры control- и movie-папок) в документе имеет поля paint_path_box, paint_content_box_background (Boolean) и background_url (String)
-
doc-sdk-plugins--gui-actions.c062 · doc · any-documented; прошивка — · Вне диалога с контролами CloseDialogAndRunAction игнорируется ↩
-
fw-tv188b-260827-0003-r24--php-framework.c115 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php (раздел «GUI-action ids») определяет идентификаторы действий GUI: CLOSE_DIALOG_AND_RUN_ACTION_ID='close_dialog_and_run', COMPOSITE_ACTION_ID='composite', CONFIRM_LOCATION_ACTION_ID='confirm_location', CREATE_NETWORK_FOLDER_ACTION_ID='create_network_folder', CUSTOM_IGNORE_UPDATE_ACTION_ID='custom_ignore_update', DETECT_SERIES_ACTION_ID='detect_series', DOWNLOAD_AND_INSTALL_APK_ACTION_ID='download_and_install_apk', DVB_COMMAND_ACTION_ID='dvb_command', DVD_PLAY_ACTION_ID='dvd_play', EDIT_LIST_CONFIG_ACTION_ID='edit_list_config', EDIT_MAIN_SCREEN_ACTION_ID='edit_main_screen', EDIT_MOVIE_DATA_ACTION_ID='edit_movie_data', FILE_PLAY_ACTION_ID='file_play', INIT_PERSISTFS_ACTION_ID='init_persistfs', INVALIDATE_FILES_ASSOCIATIONS_ACTION_ID='invalidate_files_associations' ↩
-
fw-tv188b-260827-0003-r24--php-framework.c114 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php (раздел «GUI-action ids») определяет идентификаторы действий GUI: ADD_MENU_ITEMS_ACTION_ID='add_menu_items', ADD_TO_FAVORITES_ACTION_ID='add_to_favorites', BLURAY_PLAY_ACTION_ID='bluray_play', BT_COMMAND_ACTION_ID='bt_command', CHANGE_BEHAVIOUR_ACTION_ID='change_behaviour', CHANGE_GCOMPS_ACTION_ID='change_gcomps', CHANGE_LIST_CONFIG_ACTION_ID='change_list_config', CHANGE_MOVIE_DATA_ACTION_ID='change_movie_data', CHANGE_PARENTAL_CODE_ACTION_ID='change_parental_code', CHANGE_SETTINGS_ACTION_ID='change_settings', CHECK_RESTRICTED_ACTION_ID='check_restricted', CHECK_SYSTEM_STORAGE_ACTION_ID='check_system_storage', CHOOSE_FILE_ACTION_ID='choose_file', CLEAR_WATCH_HISTORY_ACTION_ID='clear_watch_history', CLOSE_AND_RUN_ACTION_ID='close_and_run' ↩↩↩
-
fw-tv188b-261021-0117-r25.c337 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строковый id plugin_run_native_code в ответе handle_user_input выполнен: shell.log пишет result action plugin_run_native_code, вызывает plugin_run_native_code(/flashdata/plugins/test_plugin5, kbp5_native) и передаёт native_code.so в [native_plugins_handler] open plugin. ↩
-
fw-tv188b-261021-0117-r25.c338 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строковый id change_settings в ответе handle_user_input выполнен: shell.log пишет result action change_settings и action D: (general) run test_plugin5->change_settings(). ↩
-
doc-sdk-plugins--controls-playback.c008 · doc · any-documented; прошивка — · Для Label с прошивки 130820_b8+ поддержаны ключи smart, max_lines, lines_vgap и pars_vgap в GuiControlDef::params. ↩↩
-
- fw-tv188b-260827-0003-r24--http-api--ext-command-params.c051 · doc · any-documented; прошивка — · cmd=ui_action_return[&count=-1|N] — как нажатие RETURN в TV UI: -1 — на главный экран, N — назад на N экранов (по умолчанию 1)
- fw-tv188b-260827-0003-r24--http-api--ext-command-params.c052 · doc · any-documented; прошивка — · cmd=ui_action_enter&item_id=… — как выбор пункта с этим ID на текущем экране TV UI и нажатие ENTER
- fw-tv188b-260827-0003-r24--http-api--ext-command-params.c053 · doc · any-documented; прошивка — · cmd=ui_action_popup_menu&item_id=… — как выбор пункта с этим ID на текущем экране TV UI и нажатие POP UP MENU
-
fw-tv188b-260827-0003-r24--shell-ext.c053 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · UserInputHandlerRegistry::create_action() строит действие PLUGIN_HANDLE_USER_INPUT_ACTION_ID с params handler_id/control_id и data operation_timeout (по умолчанию 60000) и show_dialog_delay (по умолчанию 20000) ↩
-
fw-tv188b-260827-0003-r24--shell-ext.c052 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · handle_user_input() в DefaultDunePlugin передаёт ввод в UserInputHandlerRegistry: обработчик выбирается по $user_input->handler_id среди зарегистрированных register_handler(); без handler_id или с неизвестным id результат null ↩
-
- fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c043 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · UserInputHandlerRegistry::get_user_input_handler возвращает зарегистрированный handlers[handler_id] либо null, если handler_id отсутствует или неизвестен.
- fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c045 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · UserInputHandlerRegistry::handle_user_input принимает user_input и plugin_cookies без & и передаёт их найденному обработчику; при отсутствии обработчика возвращает null.
-
fw-tv188b-261021-0117-r25.c048 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · DefaultDunePlugin::handle_user_input в shell_ext/lib r25 сначала ищет обработчик (UserInputHandlerRegistry::get_user_input_handler), при отсутствии печатает «E: handler not found…» и возвращает null, затем логирует ввод через log_user_input и сохраняет last_user_input ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c047 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · DefaultDunePlugin::handle_user_input после fire_before_handle сбрасывает накопленные result_action и smart_close_dialog, сохраняет user_input и handler, затем вызывает handle_user_input обработчика. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c042 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · DefaultDunePlugin предоставляет get_last_user_input и get_last_user_input_handler, возвращающие сохранённые поля последнего ввода и обработчика. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c049 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При smart_close_dialog, истинном user_input.inside_dialog и верхнем CLOSE_DIALOG_AND_RUN_ACTION_ID DefaultDunePlugin::handle_user_input помещает накопленный result_action перед его post_action внутри нового close_dialog_and_run. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib--tv-vod.c069 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r24 handle_user_input шести TV/VOD-экранов начинался с hd_print с подписью и foreach по всем полям user_input; в r25 этого блока нет. ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c082 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ControlFactory::add_button строит GUI-элемент типа button; схема заполнения использует GuiControlDef::{name, title, kind, specific_def, params}; GuiButtonDef::{caption, width, push_action}. button_caption_centered по умолчанию title==null; action_type=apply; timeout=60000, delay=20000. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c012 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · UserInputHandlerRegistry::create_action подставляет timeout_ms=60000 и show_dialog_delay_ms=20000 при null и записывает int-значения в data.operation_timeout и data.show_dialog_delay. ↩↩
-
plg-dc-globaltv.c044 · code · unknown; прошивка — · DefaultDunePlugin::handle_user_input(&$user_input, &$plugin_cookies) передаёт ввод в UserInputHandlerRegistry, который выбирает обработчик по handler_id. ↩
-
plg-dc-widget-ext.c021 · code · unknown; прошивка — · Обработка ввода: UserInputHandlerRegistry выбирает обработчик по $user_input->handler_id; id обработчика экрана — 'controls_' . id экрана ↩
-
plg-gh-mdpuma-dune-plugin-altiptv.c119 · code · unknown; прошивка — · AbstractControlsScreen формирует PluginControlsFolderView с defs/initial_sel_ndx и идентификатором обработчика controls_
. ↩ -
plg-gh-kocourkuba-proiptv.c054 · code · unknown; прошивка — · Действия ввода описываются массивами GuiAction с handler_id и control_id: User_Input_Handler_Registry::create_action собирает их, create_screen_action ищет обработчик по '
_handler', а Default_Dune_Plugin::handle_user_input передаёт user_input зарегистрированному обработчику; неизвестный handler_id даёт null. ↩ -
plg-dc-widget-ext--lib.c046 · code · unknown; прошивка — · UserInputHandlerRegistry::register_handler записывает обработчик по handler_id без проверки предыдущей регистрации. ↩
-
plg-dc-widget-ext--lib.c044 · code · unknown; прошивка — · UserInputHandlerRegistry::create_action формирует handler_id/control_id, затем объединяет их с add_params через array_merge; поздние одноимённые ключи приходят из add_params. ↩
-
plg-dc-widget-ext--lib.c031 · code · unknown; прошивка — · ControlFactory::add_button строит push_action через UserInputHandlerRegistry::create_action и добавляет action_type = apply. ↩
-
plg-dc-widget-ext--lib.c038 · code · unknown; прошивка — · ControlFactory::add_text_field преобразует initial_value через strval, а numeric, password, has_osk, always_active и width через intval. ↩
-
plg-dc-widget-ext--lib.c039 · code · unknown; прошивка — · ControlFactory::add_combobox переносит initial_value, value_caption_pairs и width в GuiComboboxDef без приведений strval/intval. ↩
-
plg-dc-widget-ext--lib.c037 · code · unknown; прошивка — · ControlFactory::add_custom_close_dialog_and_apply_buffon помещает переданный action в close_dialog_and_run; имя buffon записано так в исходнике. ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c086 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ControlFactory::add_custom_close_dialog_and_apply_button строит GUI-элемент типа button; схема заполнения использует GuiControlDef::{name, title, kind, specific_def, params}; GuiButtonDef::{caption, width, push_action}. push_action=close_dialog_and_run(action); центрирование по умолчанию true. ↩
-
plg-dc-globaltv--gcomps-controls.c044 · code · unknown; прошивка — · ControlFactory::add_button, add_custom_button, add_text_field и add_combobox записывают общий набор GuiControlDef::name/title/kind/specific_def/params; name/title берутся из аргументов, params — из gui_params после обработки фабрикой. ↩
-
plg-dc-globaltv--gcomps-controls.c037 · code · unknown; прошивка — · В add_text_field и add_combobox defaults need_apply=false и need_confirm=false оставляют соответствующие действия null; при истинном флаге фабрика создаёт callback с action_type=apply либо confirm. ↩
-
plg-dc-globaltv--lib.c032 · code · android-dune-fw; прошивка 260827_0003_r24 · UserInputHandlerRegistry::create_action плагина задаёт data=null; r24 добавляет аргументы timeout_ms/show_dialog_delay_ms с подстановкой 60000/20000 при null и записывает целые operation_timeout/show_dialog_delay. ↩
-
plg-dc-globaltv--lib.c036 · code · android-dune-fw; прошивка 260827_0003_r24 · ControlFactory::add_button плагина вызывает create_action без таймаутов, а r24 принимает timeout_ms=60000/show_dialog_delay_ms=20000 и передаёт их реестру. ↩
-
plg-dc-globaltv--lib.c071 · code · android-dune-fw; прошивка 260827_0003_r24 · В ActionFactory::show_dialog плагина max_height добавляется при defined, а r24 записывает это поле без проверки. ↩
-
plg-dc-globaltv--lib.c072 · code · android-dune-fw; прошивка 260827_0003_r24 · ActionFactory::show_title_dialog плагина принимает attrs и передаёт их show_dialog, а r24 имеет только title/post_action и вызывает show_dialog с title/defs. ↩
-
plg-dc-globaltv--lib.c077 · code · android-dune-fw; прошивка 260827_0003_r24 · Набор объявленных методов ControlFactory различается: только в копии плагина — add_button_close, add_close_dialog_and_apply_button_title, add_img_label, add_multiline_label, add_smart_label; только в копии r24 — add_progress_bar. ↩
-
plg-dc-globaltv--lib.c027 · code · android-dune-fw; прошивка 260827_0003_r24 · DefaultDunePlugin::handle_user_input плагина прямо возвращает результат реестра, а r24 перед вызовом реестра выполняет OpHooks::fire_before_handle и затем связывает результат с накопленным действием через set_post_action. ↩
-
plg-dc-globaltv--list-config.c035 · code · unknown; прошивка — · EditListDialog передаёт show_dialog close_by_return=false, ширину, attrs max_height=870, actions и params.page_size=11; фабрика записывает max_height только при defined его константы. ↩↩
-
plg-dc-globaltv--list-config.c036 · code · unknown; прошивка — · EditListDialog назначает GUI_EVENT_KEY_D_BLUE и GUI_EVENT_KEY_RETURN на собственное действие apply. ↩
-
plg-dc-globaltv--list-config.c049 · code · unknown; прошивка — · EditListDialog строит defs в порядке apply, группы group:
, элементы item: ; подпись кнопки сериализуется как JSON с items из текста, промежутков и иконки 48×48. ↩ -
- plg-dc-globaltv--list-config.c038 · code · unknown; прошивка — · Для group:
EditListDialog снимает все id группы, если get_group_checked=3, иначе отмечает все; затем ставит changed=true и возвращает reset_controls с новыми defs. - plg-dc-globaltv--list-config.c039 · code · unknown; прошивка — · Для item:
EditListDialog инвертирует наличие id в checked_idset, ставит changed=true и возвращает reset_controls с новыми defs.
- plg-dc-globaltv--list-config.c038 · code · unknown; прошивка — · Для group:
-
plg-dc-globaltv--list-config.c040 · code · unknown; прошивка — · apply в EditListDialog отклоняет пустой checked_idset через show_error(empty_list_not_allowed), иначе возвращает close_dialog_and_run с действием do_apply. ↩
-
plg-dc-globaltv--list-config.c050 · code · unknown; прошивка — · Ветка cancel в EditListDialog возвращает ActionFactory::close_dialog() без вызова cleanup или apply_action. ↩
-
plg-dc-globaltv--rows-epf.c041 · code · unknown; прошивка — · TvRowsScreen связывает ENTER→enter, D_BLUE→fav, CLEAR→fav_remove, POPUP_MENU→popup, PLUGIN_ROWS_INFO_UPDATE→plugin_rows_info_update через custom_action. ↩
-
plg-dc-globaltv--rows-epf.c051 · code · unknown; прошивка — · Диалог поиска заполняет поле search_channels_text из cookie last_search_channels_text и передаёт section_id кнопке search_channels_submit_dialog. ↩
-
plg-dc-globaltv.c168 · code · unknown; прошивка — · Диалог поиска каналов берёт начальный текст из plugin_cookies last_search_channels_text, создаёт поле search_channels_text и кнопки «ОК» (search_channels_submit_dialog с section_id в add_params) и «Отмена» (add_close_dialog_button). ↩
-
plg-dc-globaltv--rows-epf.c052 · code · unknown; прошивка — · Обработчик отправки поиска применяет trim, отклоняет пустую строку, затем приводит текст к нижнему регистру UTF-8 и закрывает диалог с запуском поиска; section_id по умолчанию all. ↩
-
plg-gh-kocourkuba-proiptv.c065 · code · unknown; прошивка — · Control_Factory::add_text_field строит GUI_CONTROL_TEXT_FIELD с флагами numeric, password, has_osk, always_active, шириной и необязательными apply/confirm-действиями; поиск каналов открывает такое поле с OSK, подставляет последний запрос из PARAM_LAST_TV_SEARCH, а do_search сохраняет непустой запрос обратно. ↩
-
plg-gh-kocourkuba-proiptv.c070 · code · unknown; прошивка — · Если PARAM_SETTINGS_PASSWORD не пуст, entry handler перед открытием экранов настроек показывает диалог с полем pass (show_protect_settings_dialog); handle_protect_action сверяет введённый pass с параметром и при неверном возвращает err_bad_pass, а при верном открывает запрошенный экран. ↩
-
plg-dc-widget-ext--adv-keyboard.c002 · code · unknown; прошивка — · AdvKeyboard реализует UserInputHandler, регистрирует себя в UserInputHandlerRegistry и возвращает идентификатор adv_text_keyboard. ↩
-
plg-dc-widget-ext--adv-keyboard.c006 · code · unknown; прошивка — · Обработчик timed_startup сначала загружает конфигурацию; при firstRun открывает настройки языков, иначе вызывает change_keyboard(0). ↩
-
plg-dc-widget-ext--adv-keyboard.c007 · code · unknown; прошивка — · screen_render перестраивает подписи через highlight_selected и add_screen_labels, а screen_refresh передаёт defs в ActionFactory::reset_controls. ↩
-
plg-dc-widget-ext--adv-keyboard.c030 · code · unknown; прошивка — · AdvKeyboard использует UTF-8 по умолчанию в собственных функциях вставки mb_insert_str и удаления mb_delete_chr, построенных на mb_strlen и mb_substr. ↩
-
plg-dc-widget-ext--adv-keyboard.c016 · code · unknown; прошивка — · Обычный do_search передаёт str родительскому postActionCtrlId под ключом searchTextActionParamKey через close_dialog_and_run. ↩
-
plg-dc-widget-ext--adv-keyboard.c008 · code · unknown; прошивка — · Карта AdvKeyboard связывает CLEAR с clear_left, красную клавишу с clear_all, зелёную с alt_onoff, жёлтую с shift_onoff, синюю и AUDIO с change_keyboard. ↩
-
plg-dc-widget-ext--adv-keyboard.c009 · code · unknown; прошивка — · Карта AdvKeyboard связывает TOP_MENU с open_normal_search, PLAY с do_search, ENTER с selection_enter, SELECT с space, SETUP с config_lang, TIMER с timed_startup. ↩↩
-
plg-dc-widget-ext--adv-keyboard.c010 · code · unknown; прошивка — · Клавиши 0–9 создают add_num с num_key; обработчик вставляет эту цифру в str на cursPos и увеличивает позицию на один. ↩
-
plg-dc-widget-ext--adv-keyboard.c011 · code · unknown; прошивка — · Карта AdvKeyboard связывает направления с selection_up/down/left/right, а P_PLUS и P_MINUS — с p_plus и p_minus. ↩
-
plg-dc-widget-ext--adv-keyboard.c017 · code · unknown; прошивка — · В searchAndSelectMode обычная отправка строки через do_search, строку поиска, Enter раскладки и open_normal_search возвращает null; do_search на выбранной подсказке обрабатывается раньше этой проверки. ↩
-
plg-gh-vladikshkwok-lampa-dune-plugins.c095 · code · android; прошивка — · dune-voice регистрирует accessibility-сервис RemoteKeys с правом BIND_ACCESSIBILITY_SERVICE и описанием @xml/remote_keys. ↩
-
plg-gh-vladikshkwok-lampa-dune-plugins.c096 · code · android; прошивка — · RemoteKeys перехватывает KEYCODE_SEARCH, KEYCODE_ASSIST и KEYCODE_VOICE_ASSIST и по первому нажатию открывает VoiceActivity. ↩
-
plg-gh-vladikshkwok-lampa-dune-plugins.c097 · code · android; прошивка — · remote_keys.xml настраивает accessibility-сервис на typeWindowStateChanged, flagRequestFilterKeyEvents и canRequestFilterKeyEvents=true при canRetrieveWindowContent=false. ↩
-
plg-gh-mdpuma-dune-plugin-altiptv.c043 · code · unknown; прошивка — · DemoSetupScreen переключает page_num между четырьмя страницами и возвращает reset_controls с заново построенными контролами. ↩
-
plg-gh-mdpuma-dune-plugin-altiptv.c090 · code · unknown; прошивка — · Диалог info_back_scan использует timer(1000) и GUI_EVENT_TIMER→close_dialog_and_run для повторного открытия обновлённой информации. ↩
-
plg-dc-dune-backup.c024 · code · unknown; прошивка — · get_action_map всегда назначает POPUP_MENU — popup_menu, INFO — system_info, SELECT — change_mode_key_push_count, D_BLUE — info+ver и TIMER — timer; ENTER и PLAY — script_start_norm, CLEAR — script_stop — только при непустом Script_arr; A_RED — auto_start_show — при наличии файла автостарта; B_GREEN — setup_group — в полном режиме при более чем одной группе; C_YELLOW — chapter_run — в полном режиме при более чем одном подразделе. ↩↩
-
plg-dc-dune-backup.c036 · code · unknown; прошивка — · Семь нажатий SELECT в базовом режиме открывают диалог смены режима (кнопка change_mode переключает файл settings/mode); в полном режиме при parent_media_url, отличном от main_menu, они открывают раздел users, иначе показывают диалог смены режима. ↩
-
plg-dc-dune-backup.c037 · code · unknown; прошивка — · Раздел users открывается скрытно: семью нажатиями CLEAR, когда скрипт не работает и выбран не users, или семью нажатиями SELECT в полном режиме при parent_media_url, отличном от main_menu; fast_group_to_users включает группу users и запускает run. ↩
-
plg-dc-dune-backup.c133 · code · unknown; прошивка — · Блок цветных кнопок A/B/C/D в popup_menu добавляется, только если не flag_apk, не flag_new и intval(firmware_version) < 240619; иначе пункты не показываются. ↩
-
doc-sdk-plugins--operations.c108 · doc, disputed · any-documented; прошивка — · По тексту документа PluginVodInfo::actions при VOD-воспроизведении поддерживает из клавиш только цветные (GUI_EVENT_KEY_A_RED, GUI_EVENT_KEY_B_GREEN, GUI_EVENT_KEY_C_YELLOW, GUI_EVENT_KEY_D_BLUE); также описаны события таймера (GUI_EVENT_TIMER) и остановки (GUI_EVENT_PLAYBACK_STOP), но перечень в документе обрывается на «- playback» и не является исчерпывающим. ↩↩
-
doc-sdk-plugins--gui-actions.c013 · doc, disputed · any-documented; прошивка — · С прошивки 131029_b9 все ранее перечисленные клавишные события можно использовать в TV-воспроизведении и VOD-воспроизведении плагина ↩↩
-
doc-sdk-plugins--gui-actions.c015 · doc, disputed · any-documented; прошивка — · С прошивки 131029_b9 для диалогов с контролами, регулярных папок, TV- и VOD-воспроизведения плагина (с ограничениями) добавлены события GUI_EVENT_KEY_FWD, GUI_EVENT_KEY_REW, GUI_EVENT_KEY_SLOW, GUI_EVENT_KEY_STOP, GUI_EVENT_KEY_TOP_MENU, GUI_EVENT_KEY_POWER, GUI_EVENT_KEY_EJECT, GUI_EVENT_KEY_MODE, GUI_EVENT_KEY_VENDOR, GUI_EVENT_KEY_MUTE, GUI_EVENT_KEY_V_PLUS, GUI_EVENT_KEY_V_MINUS, GUI_EVENT_KEY_SEARCH, GUI_EVENT_KEY_ZOOM, GUI_EVENT_KEY_SUBTITLE, GUI_EVENT_KEY_REPEAT, GUI_EVENT_KEY_AUDIO, GUI_EVENT_KEY_REC, GUI_EVENT_KEY_DUNE, GUI_EVENT_KEY_URL ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c206 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginHandleUserInputActionData с ключами (3): operation_timeout, show_dialog_delay, dialog_title ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c209 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В ActionFactory::handle_user_input ветка isset(timeout_ms) записывает в data поле operation_timeout, приведённое к int. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib.c040 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · ActionFactory::handle_user_input при переданных timeout_ms или show_dialog_delay_ms записывает int-значения в operation_timeout или show_dialog_delay; при обоих null data остаётся null. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c034 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ключ operation_timeout в данных действия plugin_handle_user_input задаётся в миллисекундах: 3000 дало «start (timeout=3.0s)» и отмену через 3,3 с, 3 — «timeout=0.0s» и отмену через 0,36 с, 60000 — «timeout=60.0s»; значение из данных действия перекрывает operation_timeout/default манифеста (5). ↩
-
plg-dc-globaltv--gcomps-controls.c049 · code · unknown; прошивка — · ControlFactory содержит дополнительные методы add_smart_label (params smart=1), add_img_label (params max_lines/lines_vgab/pars_vgab), add_multiline_label (params max_lines, lines=2), add_button_close и add_close_dialog_and_apply_button_title. ↩
-
doc-sdk-plugins.c142 · doc, disputed · any-documented; прошивка — · Перечитать плагины без перезапуска оболочки: в верхнем меню нажать ANGLE/ROTATE (или Refresh в POP UP MENU) либо по IP Control: cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00 ↩↩
-
fw-tv188b-261021-0117-r25.c203 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги плагинов, положенные adb push в /data/data/com.dunehd.app/flashdata/plugins, не подхватились перечитыванием по IP Control (cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00; обе команды ответили command_status ok): в shell.log после них нет ни строк test_plugin5, ни «Loading plugins from», ни populate_plugins, а test_plugin5 нет в /tmp/run/installed_plugins.xml. test_plugin5 и test_plugin5_sup зарегистрировались после am force-stop com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c204 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (collect6) плагины, удалённые rm -rf из /data/data/com.dunehd.app/flashdata/plugins, после перечитывания по IP Control (cmd=main_screen + cmd=ir_code&ir_code=B24DBF00) остались в /tmp/run/installed_plugins.xml (grep -c test_plugin6 = 4) и в меню «Приложения»; исчезли они только после am force-stop com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c205 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (collect5) после rm -rf каталогов тестовых плагинов test_plugin5* из /data/data/com.dunehd.app/flashdata/plugins и перечитывания по IP Control (cmd=main_screen + cmd=ir_code&ir_code=B24DBF00) в /tmp/run/installed_plugins.xml не было ни одной строки с test_plugin5 (grep -c = 0). ↩
-
doc-sdk-plugins--controls-playback.c001 · doc · any-documented; прошивка — · Общая структура GuiControlDef содержит name, title, kind, specific_def и params; виды контролов перечислены в GuiControlKind. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c104 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление GuiControlKind строковыми константами: GUI_CONTROL_LABEL='label', GUI_CONTROL_PROGRESS_BAR='progress_bar', GUI_CONTROL_COMBOBOX='combobox', GUI_CONTROL_TEXT_FIELD='text_field', GUI_CONTROL_BUTTON='button', GUI_CONTROL_VGAP='vgap' ↩
-
fw-tv188b-260827-0003-r24--shell-ext--ui-lib.c089 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ControlFactory::add_progress_bar строит GUI-элемент типа progress_bar; схема заполнения использует GuiControlDef::{name, title, kind, specific_def, params}; GuiProgressBarDef::{width, progress}. title=null, width=0, progress=0. ↩
-
doc-sdk-plugins--gui-actions.c017 · doc · any-documented; прошивка — · С прошивки 150529 событие GUI_EVENT_PLAYBACK_GOING_TO_SWITCH генерируется перед переключением на новый media URL; в отличие от GUI_EVENT_PLAYBACK_STOP, оно не генерируется при остановке и выключении ↩
-
fw-tv188b-261021-0117-r25.c283 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие playback_going_to_switch приходит и в конце последней серии VOD, когда перехода на новый URL нет и плеер закрывается — после состояния stopped и непосредственно перед playback_stop с playback_end_of_stream=1. ↩
-
doc-sdk-plugins--gui-actions.c006 · doc, disputed · any-documented; прошивка — · Если на GUI_EVENT_PLAYBACK_STOP назначено действие, плеер сначала приостанавливает воспроизведение, исполняет действие, ждёт завершения цепочки действий и только потом выполняет остановку, выключение или переключение ↩↩
-
fw-tv188b-261021-0117-r25--media-player.c060 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при ручном STOP в plugin VOD действие playback_stop запускается после перехода Android-плеера в STOPPED. ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c085 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Команда key_action r24, вероятно, принимает параметр key (имя действия клавиши) и без него завершается ошибкой ↩
-
fw-tv188b-260827-0003-r24--http-api.c056 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 cmd=ir_code, вероятно, реализован записью кода в /proc/ir/button ↩
-
- plg-dc-screenshoter.c089 · inference · unknown; прошивка — · Запись IR-кода в /proc/ir/button, вероятно, эмулирует нажатие кнопки пульта (тот же файл использует команда ir_code HTTP-API прошивки)
- plg-dc-screenshoter.c090 · inference · unknown; прошивка — · A15EBF00, вероятно, — IR-код кнопки питания: его пишет пункт меню с подписью t77 «Выключить Dune»; таблицы кодов в репозитории нет
-
plg-dc-screenshoter.c091 · inference · unknown; прошивка — · IR-код ef10bf00, вероятно, — кнопка пульта «скриншот», по которой прошивка сама сохраняет снимок в каталог screenshots (поэтому плагин не знает пути и отвечает screenPath = auto) ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--gui-actions.c058 · inference · android-dune-fw; прошивка 260827_0003_r24 · Действие plugin_handle_user_input в этой прошивке, предположительно, принимает data типа PluginHandleUserInputActionData с operation_timeout, show_dialog_delay и dialog_title. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c017 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Пример SDK кладёт пункты контекстного меню точки входа в popup_menu/menu_items/item, а встроенные манифесты r24 — в popup_menu/menu_items/menu_item; парсер r24 проверяет имя дочернего элемента menu_items («unexpected 'entry_point/popup_menu/menu_items/%s' element»), но принимает ли он item, по strings не установить: строка короче 6 символов не извлекается и может быть хвостом строки menu_item ↩
-
plg-dc-widget-ext--adv-keyboard.c062 · inference · unknown; прошивка — · После сокращения или очистки строки старые подсказки, вероятно, могут остаться доступными: короткая строка не обновляет suggestions, а рендер не очищает отсутствующие элементы scrBuff. ↩
-
doc-sdk-plugins--gui-actions.c005 · doc, disputed · any-documented; прошивка — · GUI_EVENT_PLAYBACK_STOP генерируется при остановке воспроизведения, при выключении питания или перед переключением воспроизведения ↩