Repository navigation
Mobile: desktop parity pass (Tweaks, Apps, Launcher, Files, Optimize, Diagnostics, Snapshots) - #163
bryanroscoe wants to merge 12 commits into
Conversation
…elpers, Tweaks tab Register set_home_any, disable_stock_launcher, disable_setup_helper, app_storage_map and app_apk_size on mobile (Pro gating stays inside core), and add typed wrappers for them plus the already-registered permission, appop and process-safety commands. Port desktop's recommendation, app-report and app-details helpers, align the safety labels with desktop (Safe to remove), and make Tweaks a bottom tab while Optimize becomes a screen pushed from the Dashboard.
…pshot Now column Optimize Back returns to the screen that opened it, a search box filters the plan by name or package id, and tapping a row opens the app detail sheet. Recommended defaults now come from recommendation(), the same rule desktop's Optimize wizard pre-selects with, and review rows carry the "Review: ... if unused" pill. Health's top memory rows gain desktop's Suggestion: a process name is an app only once the TV confirms the package is installed, then it gets the App List's recommendation; anything else is classified with process_safety_info and reads "Not an app". When the installed list can't be read, package-shaped names say "Not checked" rather than claiming they are not apps. Snapshots are marked Beta, "Preview & apply" is "Preview restore", and the preview lists every row with what the TV has now: settings already at the snapshot's value read "Already set". The copy states that a restore disables recorded apps and writes settings back but never re-enables or reinstalls anything.
…ck disable Brings the mobile Launcher screen to parity with desktop's Launcher tab. - Setup Wraith status card (off / on / risk) with the desktop copy, Turn it off (disable_setup_helper) and Re-enable Setup Wraith, which puts the previous default back if Android hands Home to the helper. - Advanced: set another app as Home. Installed-app picker, optional activity, set_home_any with Android's answer shown verbatim; ok is only styled as success when the TV confirmed it. - Disable stock launcher is its own confirmed step (save snapshot first, disable, cancel), gated until the picked app is Home or set_home_any said stock is in the way. The Setup Wraith note comes from the re-read state, not the prediction. - Every launcher action re-reads the TV afterwards, ok or not (#157/#158), and not-ok results stay on screen with copyable diagnostics. - Source site links for uninstalled launchers (copied until the app can open a URL externally) and Play Store install polling. - Pure view logic in launcherView.ts; tests/launcher.test.mjs covers it and drives the screen at 384px against mocked Tauri.
Move the file-manager guards and the device-side find/delete into core (commands::files) so desktop and mobile apply the same /sdcard confinement, protected-path refusal and pattern validation. Desktop's commands now wrap the shared implementation; mobile registers find_files and an always /sdcard-confined delete_path. find now ends with a completion marker. A missing directory makes find exit nonzero, which the desktop driver turned into an error, so a SmartTube user with only one of the three backup folders was told the others "couldn't be searched". Only a failed call or a stream without the marker is reported as unsearched now (#86), on both drivers. The mobile Files screen reads desktop's app-files catalog in place, shows "Find app backups" with copy-to-phone and open-folder for each hit, keeps a failed search distinct from no matches, and deletes files or folders under /sdcard behind a confirmation bound to the TV it was raised on.
…ng-press menu The Apps screen only listed packages outside the catalogue, so a recognised app like Google Assistant (com.google.android.katniss) could not be found anywhere outside the Pro-only Optimize screen. Apps now shows a Recognised section (catalogue description, safety verdict, suggestion) above Everything else, with one search over name and package id, desktop's Hide not installed, and disabled apps reachable so they can be re-enabled. The detail sheet gains storage figures with when they were measured and a re-measure, the catalogue description, review date and sources, and Report this app (#100). Long-pressing a row opens an action menu (#129) whose Disable/Enable go through the same safety-gated paths as the sheet.
…Tune tiles; More header Tweaks adds Nvidia System Hooks (re-enable free, disable Pro), the Remote Assistant Button mic permission, Screensaver with Basic Daydream / Off / Restore previous, and the 720p display preset, regrouped into Remote & buttons, Picture & sound, Interface and Network with current values shown to Free users. Dashboard consolidates the Optimize entry points into one call to action and adds Tweaks and Launcher tiles. More is titled More, drops the duplicate Tweaks row and lists Optimize.
…resh icon subset and notices - tauri-plugin-opener on mobile, scoped to http(s) only; api.openUrl rejects any other scheme. Launcher's source-site link and Report this app both use it, falling back to copying the link. - types.ts now carries the screensaver keys, the 720p scaling preset and the snapshot plan's current_values/current_launcher/launcher_not_installed, so Tweaks and the snapshot preview drop their local widened types. - Icon font re-subset for the parity screens; notices regenerated for the opener crates (first-party crates marked publish = false so cargo-about skips them instead of failing on their proprietary license). - Tests: launcher source-site covers open and copy fallback; the Diagnostics rank-swap test stubs the installed list that safety_info now depends on. - Header row gap so a title never butts against the remote button.
…ktop #86 fix HANDOFF and BACKLOG get a dated checkpoint listing what reached mobile, that none of it has run on a device, and the remaining gaps (phone-to-TV upload, sideload, collect_diagnostics bundle, patch-notes viewer). The Android plan's MVP exclusions note what has since shipped. CHANGELOG Unreleased carries the desktop Find app backups fix (#86).
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f4e2513174
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!screensaverOriginals.has(serial)) { | ||
| screensaverOriginals.set(serial, { | ||
| components: value.screensaver_components ?? null, | ||
| enabled: value.screensaver_enabled ?? null, | ||
| }); |
There was a problem hiding this comment.
Key screensaver originals by verified device identity
On mobile, serial is the wireless host:port transport key rather than a stable TV identity. If the same TV reconnects on a rotated port, this captures the app-written value as a new “original” and loses the real restore target; if another TV later occupies the same endpoint during the session, Restore previous can write the first TV's screensaver component onto it. Key this cache by verified hardware ID, with connection generation as the fallback when no ID is available, rather than by endpoint alone.
AGENTS.md reference: AGENTS.md:L38-L45
Useful? React with 👍 / 👎.
Guard mobile file actions across TV reconnects
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 94079cc45c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const r = await api.disableSetupHelper(serial, row.entry.package); | ||
| if (serial !== session.serial) return; |
There was a problem hiding this comment.
Bind launcher mutations to the connection generation
When a TV disconnects and the session reconnects to the same host:port, possibly to a different TV now using that endpoint, the Launcher screen retains its old rows and confirmation state because it watches and validates only session.serial. This call can therefore disable Setup Wraith on the replacement TV; the new set-home and stock-disable flows use the same serial-only checks and can likewise alter its Home configuration. Key the loaded launcher state and action intents to session.generation/liveness and invalidate them on every reconnect, rather than treating endpoint equality as device identity.
AGENTS.md reference: AGENTS.md:L38-L45
Useful? React with 👍 / 👎.
Brings the mobile app up to the desktop features from v2-2.3.0/2.3.1: Tweaks as a bottom tab at desktop parity, Optimize search and app sheet, Diagnostics suggestions, snapshot preview with a Now column, Apps listing catalogued apps (katniss is findable) with storage details, Report this app (#100) and a long-press menu (#129), the Launcher Setup Wraith card, set-any-app-as-Home and separate stock disable (#157/#158), and Files with the app-backup finder and TV-side delete.
File find/delete moved into core and is shared with desktop, which also fixes desktop's #86 message: a missing backup folder now reads as no matches instead of "couldn't be searched".
Mobile now has
tauri-plugin-opener, scoped to http(s), so source-site and GitHub report links open in the phone's browser. None of this has run on a device yet; remaining gaps (phone-to-TV upload, sideload, bug-report bundle, patch-notes viewer) are listed inv2/mobile/HANDOFF.md.🤖 Generated with Claude Code