Boot splash and periodic announcement banner

Splash: resources/splash/splash.gif built into the binary, played once by
SplashOverlay over a black cover present from the first frame (no UI
flash), then fades into the UI; hides icons loading. GIF, so no
QtMultimedia/gstreamer. Toggle: splash.enabled.

Banner (InfoBanner): metro-style band that fades/slides in with a hold
pictogram; text that does not fit runs as a seamless ticker for two
rounds. Never takes touches; hidden during splash and settings. Config
section banner (enabled, text, intervalSec, showSec, position,
accentColor), editable in the web UI and on-device settings; shown once
after saving.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-10 10:58:16 +00:00
co-authored by Claude Opus 5.5
parent ec84133417
commit f07e153f09
22 changed files with 753 additions and 3 deletions
+14
View File
@@ -21,6 +21,11 @@ companion Flask web configurator. Both share a single JSON config file.
- Ethernet configuration via NetworkManager (`nmcli`) from the web UI
- OTA software update with automatic rollback on a failed launch (health-check)
- Hot reload: app picks up config changes via `QFileSystemWatcher`
- Boot splash (`resources/splash/splash.gif`, built into the binary, played once
by `qml/SplashOverlay.qml`; covers icons loading). GIF, not mp4: no QtMultimedia
- Periodic announcement banner (`qml/InfoBanner.qml`, metro-style fade/slide,
ticker scroll for long text, never takes touches); text, period, duration,
position and colour in the web UI («Внешний вид») and on-device settings
## Layout
@@ -342,6 +347,15 @@ sudo -u buttontask sudo -n /opt/buttontask/scripts/bt-brightness status
"errorWidth": 6, // ring width (px) on error
"glowRadius": 20 // glow radius (0 disables the glow)
},
"banner": { // periodic announcement over the buttons
"enabled": false,
"text": "Для вызова клининга удерживайте кнопку",
"intervalSec": 180, // 30..3600, period between shows
"showSec": 10, // 3..60, longer if the text has to scroll
"position": "bottom", // "bottom" | "top"
"accentColor": "#e4002b" // stripe + hold-ring colour
},
"splash": { "enabled": true }, // boot splash, read at app start
"settings": {
"darkMode": true,
"password": "admin", // shared with web auth