Files
hisense-root/modding/03-ui.md
T
2026-10-27 15:56:27 +01:00

367 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 03 — UI: `hisenseUI`, Web-Browser, Launcher, AM, Daten
**Status:** UI-Start, Pfade, Prozesse, App-/Launcher-Daten und AM-Konfiguration **CONFIRMED** (live/static). Template-/API-Details und die aktive Skin-Auswahl teils `UNVERIFIED`.
---
## 1. Zwei Browser, zwei Welten
| | TV-UI | Web-Browser |
|---|---|---|
| Prozess | **`hisenseUI`** (z. B. PID 589) | **`hisense_browser`** (z. B. PID 1320) |
| Start | `/3rd/opera4x/hisenseUI/start-UI.sh` (autorun Zeile 168) | `/3rd/opera4x/browser/run-Browser.sh` (AM-App `opera4x`) |
| Renderer | **GLES** (`--hw-gles`, Mali) | **DirectFB** (`--hw-dfb`) |
| Seite | **`/3rd_rw/UI/index.html`** | beliebige Web-URL; unsere Recon-Seite |
| JS-Plugins | **`/3rd/UI_jsplugins`** | `/3rd/opera4x/opera_dir/jsplugins` |
| DevTools | **9223** (wenn `enable_developer_tools`) | **9224** (wenn `enable_developer_tools`) |
| Zweck | TV-Home/Settings/Launcher | Internet/TV-Browser/Web-Apps |
| User | root | root |
**Wichtig:** Das TV-UI ist **nicht** der „TV Browser“-Tile. Der Tile startet `opera4x`/`hisense_browser` (Web-Browser). Das System-UI ist `hisenseUI` und läuft separat.
---
## 2. TV-UI: Start und Seite
### 2.1 Startskript
`/3rd/opera4x/hisenseUI/start-UI.sh` (ro; Aufruf aus `/basic/autorun.sh` Zeile 168):
```sh
set -e
cd /3rd/opera4x/hisenseUI
. ./opera_env.sh
export MEMORY_LIMIT=$(( 500*1024*1024 ))
STARTPAGE=/3rd_rw/UI/index.html
# optional: "disk" -> /3rd_rw/UI/index.html; "url" -> http://172.16.12.134/modernTV/UI/hisenseUI/index.html
export LD_PRELOAD="/3rd/opera4x/lib/libcurl.so.4.4.0"
cmd="./bin/hisenseUI"
cmd+=" --hw-gles"
cmd+=" --js-flags=\"--expose-gc\""
cmd+=" --jsplugins-dir=/3rd/UI_jsplugins"
cmd+=" --enable-gpu-rasterization --force-gpu-rasterization"
cmd+=" --force-gpu-mem-available-mb=512 --disable-software-rasterizer"
cmd+=" --disable-web-security"
cmd+=" --http-cache-size=30"
cmd+=" -u ${STARTPAGE}"
# wenn /3rd_rw/appdata/enable_developer_tools: --remote-debugging-port=9223
exec $cmd
```
- **Seite:** `/3rd_rw/UI/index.html` (rw).
- **`--disable-web-security`**: lokale Files/Cross-Origin erlaubt; die UI kann `file://`/`/3rd_rw` lesen.
- **`--jsplugins-dir=/3rd/UI_jsplugins`**: TV-APIs der UI.
- **GLES/Mali**: `ins_arm_mali_mod.sh`, `OPERA_EGL_SCREEN_SIZE=1920x1080`; UI-CSS nutzt 1280×720.
- **DevTools 9223** nur mit `/3rd_rw/appdata/enable_developer_tools` (existiert).
- **MEMORY_LIMIT 500 MB**; `--expose-gc`; GPU-Rasterisierung.
### 2.2 UI-Seite `/3rd_rw/UI/index.html`
Die Seite ist eine **PIXI-basierte Web-UI** (`loadModel()`):
```js
$LAB.script("pub/PubDefine.js").wait()
.script("model/model.js")
.script("lib/pixi.js")
.script("lib/tweenjs-0.6.2.combined.js")
.script("sdk/MessagePool.js")
.script("sdk/UI.js")
.script("lib/jquery-1.8.2.js")
.script("sdk/Const.js")
.script("sdk/Debug.js")
.script("sdk/Util.js")
.script("pub/PubFunc.js")
.script("lib/launcherDataInterface.js")
.script("lib/parseXML.js")
.script("lib/inputsInterface.js")
.script("pub/HisProductConfig.js")
.script("sdk/Logreport.js")
.script("pub/persianCalendarTime.js")
```
- **`UI/`-Unterordner:** `assets/`, `data/`, `keyboard/`, `language/`, `lib/`, `model/`, `module/`, `pub/`, `sdk/`, `templates/`, `tools/`.
- **`pub/HisProductConfig.js`** (Dump): `acrflag=false`, `ciplus_certification=false`, `pvr_enable=true`.
- **`model/model.js`/`sdk/UI.js`**: UI-Framework; `TVAPI`/`model`/`guijs` stehen der UI-Seite zur Verfügung.
- **`lib/launcherDataInterface.js` (139 KB, `ldi.js`)**: lädt Launcher-/Kategorie-/App-Daten; zentrale Stelle für App-Tiles.
- **`templates/`/`module/`**: UI-Templates/Module (Settings, Launcher, etc.).
- **`UI_jsplugins`** (ro, `/3rd/UI_jsplugins`): `libhisensejs`, `libmodeljs`, `libutiljs`, `libimejs`, `libdtv`, `libmmp`, `libsql`, `libpwjs`, `libmtkrpcwrapper`, `libchanneldump`, `libdmp-adapter`, `libavsmusic`, … — die `Hisense_*`/`TVAPI`-Funktionen.
### 2.3 UI-Prozess prüfen / neu starten
```sh
ps | grep hisenseUI | grep -v grep
# PID ermitteln
kill <PID>
nohup /3rd/opera4x/hisenseUI/start-UI.sh >/tmp/hisenseUI.log 2>&1 &
```
- `start-UI.sh` **exec**t `hisenseUI`; nach `kill` startet das Skript einen neuen UI-Prozess.
- **Achtung:** Bei kaputter `UI/index.html` wird der Bildschirm schwarz. SSH/Root-Loop als Rettungsweg; Backup der `index.html` zurückkopieren, UI neu starten.
- **DevTools 9223** (wenn `enable_developer_tools`): `http://192.168.188.94:9223/` vom Host (Chrome/Chromium). Dort kannst du die UI-Seite inspizieren/JS ausführen.
---
## 3. Launcher-/App-Daten (das eigentliche „Wo ist das UI?“)
Die UI liest die App-/Kategorie-Daten über `lib/launcherDataInterface.js` (`ldi.js`) aus `/3rd_rw/appdata/launcher/` (Bridge-Root `/3rd_rw/appdata`):
```
/3rd_rw/appdata/launcher/
preset.txt # 26 vorinstallierte App-Tiles (Cache/Liste)
Appinfo.json # vom Nutzer installierte Web-Apps (unser VidaaRecon)
deletedPresetApp.txt # JSON-Array der ausgeblendeten Tiles
rememberEditApp.json # Launcher-Edit-State
settingappinfo.txt # Setting-/App-Info
data/
CategoryIndex.xml # Kategorien (aktiv, wenn serviceUpdate zum Land passt)
CategoryList_*.xml
Category_1001_*.xml # App-Tiles (35 KB)
Category_57_*.xml # App-Tiles (35 KB)
PicInfo.xml # Bilder/Assets
serviceUpdate.xml # Land/Timestamp der Store-/Kategorie-Daten
SwitchFeatureList.xml
res/ # Tile-Icons (PNG/JPG)
cache/index.json # Icon-Cache
firstNotification.txt, lanCode.txt, NotifySwitchStatus.txt
```
Zusätzlich:
```
/3rd_rw/launcher/ # Alt-/Asset-Skin (html/js/css/img/data); Datenpfad appdata/launcher
/3rd_rw/UI/data/ # Default-/Fallback-Launcher-Daten (wenn Store-Land/Timestamp nicht passt)
/3rd_rw/launcher/data/templateConfig.xml # Template-Konfiguration (Alt-/UI-Templates)
/3rd_rw/VIDAAU2Launcher/ # VIDAA-U2-Tile-Launcher (Alternativ-Skin; Aktivierung UNVERIFIED)
```
### 3.1 `ldi.js`: aktive Datenquelle
```js
var mainJSON;
var defaultData = (serviceCountryCode != currentCountryCode) || getAlwaysDefaultDataStatus() || serviceUpdate.timeStamp == 0;
var launcherPath = defaultData ? "UI/data/" : "launcher/data/";
if (defaultData) mainJSON = loadLauncherDefaultData(launcherPath, currentCountryCode);
else mainJSON = readXMLDOM(launcherPath + "CategoryIndex.xml", 1);
...
```
- **Land/Sprache:** `user_db.db` → `tvapi.str.basic.settings.tvset.location = DEU`, `tvapi.i32.language.osd = 16`, Brand `his`, Region 7.
- **Aktiver Pfad:** `launcher/data/` (`/3rd_rw/appdata/launcher/data`), sofern `serviceUpdate.xml` zum Land `DEU` passt und Timestamp ≠ 0; sonst `UI/data/`-Default.
- **Quelle:** `CategoryIndex.xml`/`CategoryList_*.xml`/`Category_*.xml`/`PicInfo.xml`.
- **`preset.txt`:** wird aus den Kategorie-/App-Daten + `deletedPresetApp.txt` erzeugt (`allAppsWriteToFileForUse`); ist ein **Cache**.
- **`deletedPresetApp.txt`:** persistente **Hide-Liste** (JSON-Array von URLs/IDs); die UI/der Launcher filtert damit.
- **`Appinfo.json`:** User-Web-Apps (`pushFavoriteApps`), z. B. unser `VidaaRecon`.
### 3.2 Die 26 Preset-Tiles (Stand live)
Aus `preset.txt` (Reihenfolge/Inhalt live):
| App | StartCommand / URL | Typ |
|---|---|---|
| Netflix | `netflix` | native (AM) |
| Prime Video | `amazon` | native (AM) |
| Disney+ | `https://cd-dmgz.bamgrid.com/bbd/hisense_tv/index.html` | Web |
| maxdome | `http://8577004de253-ott-tv.maxdome.de` | Web |
| YouTube | `youtube` | native/Web (AM) |
| Rakuten TV | `https://prod-hisense-ui40-app.rakuten.tv/` | Web |
| rlaxxTV | `https://tvapp.rlaxxtv.com/r/no-animations/720/?customer=Hisense` | Web |
| Chili | `https://hisense.chili.com` | Web |
| UEFA.TV | `https://smarttv.uefa.tv` | Web |
| RTL TVNOW | `https://app.hisense.rtl-smart.tv/` | Web |
| Kidoodle.TV | `https://ctv-vewd.kidoodle.tv` | Web |
| AccuWeather | `accuweather` | native/Web |
| YuppTV | `http://www.yupptv.com/hisense/index.html` | Web |
| Plex | `http://plex.tv/web/tv/hisense?mixedContent=1` | Web |
| Videociety | `https://smarttv3.videociety.de` | Web |
| App Store | `http://2897431816.fxm3751860294.com/?category=apps` | Store/Foxxum |
| Movies | `...?category=movies` | Store |
| Catch up TV | `...?category=catchup` | Store |
| News | `...?category=news` | Store |
| Music | `...?category=music` | Store |
| Sports | `...?category=sport` | Store |
| Search | `...?category=search` | Store |
| Game Center | `http://apps.tvgam.es/tv_games/hisense_portal/production/portal/index.html` | Web |
| TV Browser | `browser` | native (Web-Browser) |
| VIDAA tv | `vidaa-plus` | native/Store |
| VidaaRecon | `http://192.168.188.150:9000/recon.html` | User/Web (`UrlType 36`) |
- **`UrlType 37`** = Start Web App; **`36`** = User-/Recon-App (unser Eintrag).
- **`PreInstall:true`** bei den Presets; unser `VidaaRecon` ist in `preset.txt` gelandet (Launcher-Cache), `Appinfo.json` hat den User-Eintrag.
- **`StoreType`:** `0`/`foxxum`; die Store-Apps sind Foxxum-URLs.
- **Icons:** `res/167593027...png`; `Image`/`IconURL`/`Thumb`/`Icon_96`; Fallback `useDefaultImg`.
### 3.3 `Appinfo.json` (User-Apps) — unser Beispiel
```json
{"AppInfo":[
{"AppId":"VidaaRecondebug",
"Thumb":"http://192.168.188.150:9000/icon.png",
"Icon_96":"http://192.168.188.150:9000/icon.png",
"Image":"http://192.168.188.150:9000/icon.png",
"URL":"http://192.168.188.150:9000/recon.html",
"AppName":"VidaaRecon",
"Title":"VidaaRecon",
"IconURL":"http://192.168.188.150:9000/icon.png",
"StartCommand":"http://192.168.188.150:9000/recon.html",
"InstallTime":"2026-10-25",
"RunTimes":0,
"StoreType":"foxxum",
"PreInstall":false}
]}
```
- Die UI/der Launcher liest `AppInfo` und fügt die Apps als **User-Apps** hinzu (`canRemove=true`; `appUrlType=START_WEBAPP`).
- Der `StartCommand`/`URL` kann `http://…` oder `file:///3rd_rw/…` sein; der **Web-Browser** (`hisense_browser`) öffnet ihn (nicht die UI).
- **Icon:** HTTP/`file://`; lokal in `res/`/`cache`; `useDefaultImg` als Fallback.
### 3.4 `deletedPresetApp.txt` (Hide-Liste)
- JSON-Array von URLs/StartCommands/IDs.
- Der Launcher/`ldi.js` filtert die Kategorien/`preset`-Liste damit.
- **Stand 2026-10-26:** Die alten Probe-Einträge (data:, javascript:, 127.0.0.1;cd…) wurden beim Cleanup entfernt; die Datei ist jetzt `[]`. Die 26 Presets sind sichtbar. Zum Ausblenden die gewünschten URLs/IDs eintragen (siehe `05-bloat.md`).
- Die Datei ist rw (`/3rd_rw/appdata/launcher/deletedPresetApp.txt`); per SSH/`File.write` änderbar.
---
## 4. LauncherService
`/3rd/launcherservice/startLS.sh` (aus `delayrun.sh` nach 15 s):
```sh
export LD_LIBRARY_PATH=/lib:/basic:/basic/lib:/3rd/lib:/3rd/hicjson/lib/:/3rd/hisdk2.0/lib:/3rd/hisdk/lib:/3rd/loglevel/lib:/3rd/his_runlog/lib:/3rd/launcherservice/lib
/3rd/launcherservice/bin/LauncherService &
```
- **Rolle:** liefert/aktualisiert Launcher-/Kategorie-/App-Daten und Auth für die UI; verwaltet `/tmp/launcher/…`.
- **Strings (Auszug):**
- `/3rd_rw/appdata/launcher/data/CategoryIndex.xml`, `PicInfo.xml`, `serviceUpdate.xml`
- `/3rd_rw/appdata/launcher/res`, `cache`
- `/tmp/launcher/{CategoryIndexNew.xml,PicInfo.xml,launcher_recv_socket,launcher_send_socket,launcherServiceAuth.xml}`
- `/cgi-bin/launcher_index.fcgi?action=GetChannelFilePath|GetEULAFilePath|GetSwitchFlag`
- `updateFile4weblauncher`, `LauncherInit`, `Launcher_SendMsgToLauncher`
- **`Hisense_GetLauncherServiceAuth`** (JS) liest `/tmp/launcherServiceAuth.xml` (Launcher-Auth-Token).
- **Store/Foxxum:** die Kategorie-/App-Daten kommen aus den Store-/Foxxum-Daten; `serviceUpdate.xml` (Land/Timestamp) entscheidet, ob `launcher/data` oder `UI/data` genutzt wird.
**Für Modding:** `preset`/`Appinfo`/`deleted` sind die lokalen, einfachen Hebel. Die `Category*.xml`/`PicInfo`/`serviceUpdate` sind die Store-/Launcher-Quelle; Änderungen daran nur mit Backup (der Service kann sie überschreiben).
---
## 5. AM (`app_man`) und `:am`
- **Start:** `/basic/app_man -c /basic/am_config -s /basic/am_start.ini -input_fifo &` (autorun Zeile 177).
- **Boot-Apps:** `dtv_app_mtk` (`/basic/dtv_svc`), `netflix`, `dialserver`, `samba_relay_agent`, `browser_base`, `securetime` (aus `am_start.ini`).
- **On-demand/Apps:** `opera4x` (`run-Browser.sh`), `opera_browser`, `youtube`, `cobalt`, `amazon_ignition`, `factory_lite`, `huluplus`, `hotlist`, `generic_osd`, `vudu`, `diskcache`, `youtube_kids`/`youtube_tv`, …
- **Protokoll:** `:am,<app>,:<verb>=<val>`; Verbs u. a.:
- `start`, `stop`, `pause`, `resume`, `URL`, `backgm`, `foregm`, `shutdown`, `suspend`, `wakeup`
- `:am,am,:shutdowned=…`, `:am,am,:stoped_all=…`
- `:am,<app>,<sub>:started=…` etc. (Status-Reports)
- **Kein `exec`/`args` über AM**; nur die konfigurierten `exec`/`args` aus `am_config`.
- **JS:** `HiBrowser.System.startApp(":am,<app>,:start=<val>")` im Web-Browser; `Hisense_StartApp(…)` in der UI (Signatur/Verhalten `UNVERIFIED`; im UI-JS/DevTools testen).
- **Beispiele:**
```js
HiBrowser.System.startApp(":am,opera4x,:start=opera4x");
HiBrowser.System.startApp(":am,netflix,:start=netflix");
HiBrowser.System.startApp(":am,opera4x,:URL=http://192.168.188.150:9000/recon.html");
HiBrowser.System.startApp(":am,opera4x,:stop=opera4x");
```
(Die exakte `start`-Semantik je App ist `UNVERIFIED`; `:URL`/`:stop` sind aus den `app_man`-Strings belegt.)
---
## 6. Web-Browser (`hisense_browser`, `opera4x`)
`/3rd/opera4x/browser/run-Browser.sh` (ro):
```sh
. ./opera_env.sh
export LD_PRELOAD=/3rd/opera4x/lib/libcurl.so.4.4.0
cmd="./bin/hisense_browser"
cmd+=" --hw-dfb --dfb-memory-limit-mb=128"
cmd+=" --disable-imestart-on-enter-key"
cmd+=" --with-feature:tvsdk-netview=on"
cmd+=" --with-feature:adaptive-streaming-secure-path-drm=on"
cmd+=" --ait=data/mit.sec"
cmd+=" --allow-running-insecure-content"
cmd+=" --enable-spatial-navigation"
cmd+=" --allow-file-access-from-files"
cmd+=" --http-cache-size=30"
# --disable-single-window-browsing (Modell)
# --remote-debugging-port=9224, wenn /3rd_rw/appdata/enable_developer_tools
exec $cmd "$@"
```
- **Profil:** `/3rd_rw/opera4x/opera_home_browser/` (`opera.json`, `browser.db`, `cookies`, `Local Storage`, `web_ui`, `widevine`, …).
- **`opera.json`:** `userjs.path=/3rd/opera4x/opera_dir/userjs_browser` (ro); `spatial_navigation_enabled=true`; `transparent=true`; Font Tiresias; `http_accept_language=de, en`.
- **`browser.db`:** SQLite (Opera Speed Dial/History); **nicht** die TV-UI-App-Liste.
- **`user_db.db`:** TV-Settings (Sprache, Land, Brand, Region); **nicht** die App-Liste.
- **JS-APIs:** `/3rd/opera4x/opera_dir/jsplugins` (`libhspdk-jsx`, `libhspdk-linux`, `libhisensejs`, `libmodeljs`, …) → `HiBrowser` (`File`, `System`, `loadLibrary`, `Cache`, `JsonWrite`, …), `Hisense_*`.
- **Unlock:** `--allow-file-access-from-files`, `--allow-running-insecure-content`, `--disable-web-security`? (das UI nutzt `--disable-web-security`; der Web-Browser nicht, aber `--allow-file-access-from-files`).
- **DevTools 9224** mit `enable_developer_tools`; von dort kann die Seite/JS inspiziert werden.
- **Unser Recon:** `http://192.168.188.150:9000/recon.html`; `HiBrowser.File.download`/`write`, `HiBrowser.System.startApp`, `HiBrowser.loadLibrary`.
**Root-Kontext:** `hisense_browser` ist UID/GID 0, `CapEff` voll, Single-Process, kein Seccomp. Die `HiBrowser.File`-APIs sind root-equivalent (Whitelist: `/3rd_rw/appdata`, `/dev/shm/shm_tmp`, `/3rd/launcher/data`; USB-Symlink-Bypass).
---
## 7. Aktive UI vs. Alt-/Alternativ-Skins
| Pfad | Rolle | Status |
|---|---|---|
| `/3rd_rw/UI/index.html` + `/3rd/opera4x/hisenseUI` | **aktive TV-UI** (PIXI, GLES) | **aktiv** (Startskript) |
| `/3rd_rw/appdata/launcher` | **aktive Launcher-/App-Daten** | **aktiv** (`ldi.js` `launcher/data`) |
| `/3rd_rw/UI/data` | Default-/Fallback-Daten | Fallback, wenn Store-Land/Timestamp nicht passt |
| `/3rd_rw/launcher` | Alt-/Asset-Skin (HTML/JS/CSS/IMG; `data/templateConfig.xml`) | Alt/Asset; **nicht** der UI-Start |
| `/3rd_rw/VIDAAU2Launcher` | VIDAA-U2-Tile-Launcher | Alternativ; **Aktivierung auf diesem Modell UNVERIFIED** |
| `/3rd/UI_jsplugins` | UI-TV-APIs | aktiv |
| `/3rd/opera4x/opera_dir/jsplugins` | Web-Browser-JS-APIs | aktiv (für `hisense_browser`) |
**Wichtig:** Wenn du „die UI ändern“ willst, ist der aktive Einstieg **`/3rd_rw/UI/index.html`** und die **Launcher-Daten** in `/3rd_rw/appdata/launcher`. Die `launcher`-/`VIDAAU2Launcher`-HTML/JS sind Alt-/Alternativ-Skins; Änderungen dort wirken nur, wenn die UI sie tatsächlich lädt (`UNVERIFIED`).
---
## 8. UI-Restart / DevTools / Tests
```sh
# UI-Prozess
ps | grep hisenseUI | grep -v grep
kill <PID>
nohup /3rd/opera4x/hisenseUI/start-UI.sh >/tmp/hisenseUI.log 2>&1 &
# Web-Browser via AM
# :am,opera4x,:stop / :start (oder TV-Browser-Tile)
```
- **UI DevTools 9223:** `http://192.168.188.94:9223/` (Host-Chrome). Dort `document`, `TVAPI`, `model`, `guijs`, `Hisense_*` prüfen.
- **Web-Browser DevTools 9224:** `http://192.168.188.94:9224/`; dort `HiBrowser`, `File`, `System`, `Hisense_*` prüfen.
- **UI-Test:** Nach Änderung der `UI/index.html`/JS/CSS UI neu starten; bei schwarzem Bildschirm SSH/Root-Loop + Backup.
- **Launcher-Test:** `Appinfo.json`/`deletedPresetApp.txt` ändern; UI/Launcher neu starten; Tiles prüfen.
- **App-Tile-Test:** `Appinfo.json` ergänzen; UI neu starten; App öffnen; Web-Browser/Recon.
- **UI-Dateien hochladen:** nach optionalem SFTP-Install
(`../root/scripts/host/install_sftp.sh`) mit `sftp root@192.168.188.94`
(`put -r`/`get`); sonst per SSH/`tar` oder `File.download`. Backup vorher.
---
## 9. Evidence
- Prozesse: `ps`, `/proc/<pid>/cmdline`, `/proc/<pid>/environ` (`hisenseUI` PID 589; `hisense_browser` PID 1320).
- Startskripte: `/3rd/opera4x/hisenseUI/start-UI.sh`, `/3rd/opera4x/browser/run-Browser.sh`, `/3rd/launcherservice/startLS.sh`.
- UI-Seite: `/3rd_rw/UI/index.html`; `UI/pub/HisProductConfig.js`; `UI/lib/launcherDataInterface.js` (`ldi.js`); `UI/data/`; `UI/templates/`.
- Launcher: `/3rd_rw/appdata/launcher/{preset.txt,Appinfo.json,deletedPresetApp.txt,data/*,res/*,cache/*}`; `/3rd_rw/launcher/data/templateConfig.xml`; `/3rd_rw/VIDAAU2Launcher/html/*`.
- AM: `/basic/am_config`, `/basic/am_start.ini`, `app_man`-Strings (`:am,…`).
- LauncherService: `/3rd/launcherservice/bin/LauncherService`-Strings.
- Browser: `/3rd_rw/opera4x/opera_home_browser/opera.json`, `browser.db`; `run-Browser.sh`; `enable_developer_tools`.
- Settings: `/3rd_rw/user_db.db` (DEU, Brand his, Region 7).
---
## 10. Unknowns
- Aktive UI-Template-/Skin-Auswahl (`UI/templates` vs. `launcher`/`VIDAAU2Launcher`); `VIDAAU2Launcher` auf diesem Modell aktiv? `UNVERIFIED`.
- Exakte `Hisense_*`-Signaturen/Semantik (UI-APIs) und `guijs`/`TVAPI`/`model`-Interna.
- `LauncherService`-Datenquelle/Update (Store/Foxxum/FCGI) und ob `preset.txt` bei jedem Start aus `Category*.xml` neu geschrieben wird.
- `app_man`/AM-Interna, `coexist_set`/`backgm`/`keymap`, exakte `:am`-Semantik je App.
- Ob die UI die `launcher`-HTML/JS überhaupt lädt (Alt-Skin) oder nur die Daten (`launcher/data`); die aktive Seite ist `/3rd_rw/UI`.
- Ob eigene `UI/index.html`-Pages die `TVAPI`/`model`-Globals brauchen oder ob `Hisense_*`/`guijs` direkt nutzbar sind (im UI-DevTools testen).
- Bloat-/Deaktivierungsfolgen (siehe `05`): `ms_service`, `swrc`, `runlog`, `Seriallog`, `HamService`, `securetime`, `netflix`, `browser_base`, `app_man`, `dtv_svc`.