Single source of truth for the in-app update UX. All three entry points — Settings, Dashboard banner, Startup dialog — now follow the same two-step pattern:
> Idle → click Stáhnout → Downloading → Downloaded → click Instalovat → Android package instal
Zobrazit víceShow more
Single source of truth for the in-app update UX. All three entry points — Settings, Dashboard banner, Startup dialog — now follow the same two-step pattern:
> Idle → click Stáhnout → Downloading → Downloaded → click Instalovat → Android package installer
Settings already worked this way; the dialog and banner have been brought in line.
Dashboard banner
- Replaced
Intent(ACTION_VIEW, apkUrl)with the sameUpdateChecker.downloadApk → installApkpipeline Settings uses. The banner used to bounce users to the system browser when they tapped Download — that bypassed release-gating + signed-mirror checks and made the install flow feel disconnected. - Linear progress bar during the download; error text shown if the fetch fails.
- Later + ✕ stay disabled only while actually downloading.
Startup dialog
- Same two-step UX, same
UpdatePhasestate machine. Used to download + install on a single click; now shows progress, pauses at Downloaded, and waits for an explicit Install tap. Matches the user's mental model and stops the surprise system-installer prompt right after they hit Update.
Admin web (zeddihub-tools-website, separate commit)
- Login: "Zapamatovat heslo (30 dní)" checkbox with rotating cookie + UA-bind tokens + revoke on logout
- Sidebar scroll memory across navigation
- Drag & drop redesign of the Panel Editor (auto-save, modern UI, inline rename, hide/show toggle)