feat: Add batch app uninstall and reinstall actions - #739
Conversation
|
Added one follow-up fix after testing:
|
Add contextual multi-select actions on the home app list so selected installed apps can be uninstalled and saved patched apps can be reinstalled without leaving the selection flow. Extend the saved original and patched APK storage dialogs with matching per-item and multi-select install, reinstall, and uninstall actions. Batch installs are queued through the existing InstallViewModel so installer selection, conflict handling, and unavailable-installer prompts stay shared. Route explicit uninstall requests through InstallerManager so Shizuku, root, and system installer choices are respected, while mount installs continue to clean up the root module and saved record consistently.
Refresh the open app info dialog after mount, unmount, or remount operations finish so the action row immediately switches between Mount and Remount/Unmount without reopening the screen. Route the same dialog's uninstall action through InstallerManager so explicit uninstall requests respect the selected Shizuku, root, or system installer path, matching the batch uninstall flow.
|
I installed it for testing and noticed a few things: the "Select All" button should probably change to "Deselect All" when everything is selected. Also, if at least one of the selected apps is already installed, the "Install" button disappears from the multiaction bar. |
Thanks! I'll fix it. I can see that behavior in the Storage Management. Are you referring to that same behavior, or is this happening somewhere else? |
|
After seeing this in the code yesterday, I initially thought it should be everywhere. It’s a dilemma: either show two buttons and sacrifice space (there are already 6+ buttons), or try replacing them with a single button, which compromises UX slightly, but is still better than having no button at all. |
Update the shared selection action bar so Select All turns into Deselect All once every item is selected, and wire the behavior into saved APK and patch selection management. Allow mixed selections to expose actions for each eligible subset: install or reinstall remains available for selected apps with saved APKs, while uninstall remains available for selected installed apps. Home multi-select can now show reinstall and uninstall actions together when both apply.
Hide Reinstall/Install and Uninstall actions when selected APKs have mixed support. These actions are now only displayed when all selected items support the same operation, preventing invalid actions from appearing on the Home screen and Settings > Storage APK dialogs.
I agree, it's a bit of a tradeoff. The reason I changed it this way is because mixed selections made the existing actions misleading for example, showing Install/Reinstall or Uninstall when only some selected items support that action could lead to unexpected results. In the latest commit, I kept the current single-action behavior but made it stricter: actions are only shown when the entire selection supports the same operation. This avoids invalid buttons while keeping the UI clean and avoiding adding more buttons to an already crowded layout. For cases where selections have different capabilities, hiding the action felt safer than showing a button that only partially applies. |
|
If click the button to uninstall the app(s) and then cancel the operation, "Unable to uninstall" errors/toast appear, likely due to a timeout. |
Use PackageInstaller uninstall callbacks so cancelled system uninstall prompts are reported immediately instead of timing out. Keep batch uninstall and reinstall queues moving after skipped, cancelled, failed, or conflicting items, while still showing per-item error details. Add shared batch action summaries that only include non-zero counts, such as 'Reinstalled 2' or 'Reinstalled 2, Skipped 1'.
Thanks,i missed this as i was using shizuku auto install/uninstall. |
# [1.24.0](v1.23.0...v1.24.0) (2026-07-23) ### Bug Fixes * Add confirmation dialog before batch uninstall ([3486b62](3486b62)) * Align `About section` app-info item style with installer item ([d20d23b](d20d23b)) * Align patch options notices with `InfoBadge` component ([3b7236d](3b7236d)) * Center text in translation info dialog and format GitHub PAT link ([74e128c](74e128c)) * Consistent search field spacing in patch list dialogs ([1103fda](1103fda)) * Correct emoji flag size in language selection card ([72dd679](72dd679)) * Dedupe expert-mode UI patterns and reuse shared components ([e172fda](e172fda)) * Deduplicate confirmation dialogs with shared `ConfirmDialog` ([f954119](f954119)) * Don't trigger update badge for experimental-version-only changes ([#666](#666)) ([6854d0f](6854d0f)) * Drop top padding in title-less compact dialogs ([34545e9](34545e9)) * Extract `CardActionRow` and align card paddings ([7d2aabf](7d2aabf)) * Extract `SelectionTile` for grid-style appearance pickers ([7274264](7274264)) * Fix multiselect mode in APK dialogs ([b6f4f63](b6f4f63)) * Fix spurious patch source badge and refine installer dialog UI ([00059a0](00059a0)) * Harden root mount installs ([#737](#737)) ([5f05273](5f05273)) * Inline `SelectionActionBar` into `MultiSelectBar` and reorder cancel button ([70d7991](70d7991)) * Keep simple mode patch options rendered on tab re-entry ([fd33414](fd33414)) * Migrate `PatchCard` to shared `SettingsItemCard` ([4704c40](4704c40)) * Migrate language picker to shared `RadioSelectionCard` ([09c760b](09c760b)) * Move installer prompt toggle into selection dialog ([9f96f37](9f96f37)) * Normalize expert-mode padding to `MorpheDefaults` ([ecb6c7b](ecb6c7b)) * Prevent storage dialog crash when segments list is empty ([b155ddb](b155ddb)) * Replace bundle card toggles with `ToggleRow` and fix expanded card spacing ([3ca5d32](3ca5d32)) * Replace compactPadding/noPadding booleans with `DialogPadding` enum ([0d7758b](0d7758b)) * Rewrite `CreditsDialog` with Morphe-style components ([2a8eb38](2a8eb38)) * Share patch list components and consolidate badges ([797004d](797004d)) * Show installer prompt toggle regardless of expert mode ([9ce1857](9ce1857)) * Show intermediate dev versions in changelog dialog ([44a9948](44a9948)) * Show music note icon for audio files in custom file picker ([ac082cf](ac082cf)) * Split `ExpertModeDialog` into focused files ([a9e857c](a9e857c)) * Split `SectionsLayout` into focused files ([56085e0](56085e0)) * Top-align list-based dialogs and dedupe `MorpheDialog` ([c012263](c012263)) * Unify `RadioSelectionCard` visuals across dialogs ([885dd2d](885dd2d)) * Unify settings tabs with `SettingsGroup` and consolidate item components ([3277958](3277958)) * Use correct `ChangelogEntryHeader` color ([83bc437](83bc437)) * Wrap `AboutSection` items in `SettingsGroup` ([2367e6c](2367e6c)) ### Features * Add APK retention toggles in storage management ([c57edb7](c57edb7)) * Add batch app uninstall and reinstall actions ([#739](#739)) ([998e943](998e943)) * Add footer section to `RadioSelectionCard` and apply it to installer options ([ecfaf03](ecfaf03)) * Add home app grouping controls ([#725](#725)) ([6b10955](6b10955)) * Add monochrome theme ([#740](#740)) ([1e3d0b7](1e3d0b7)) * Add patcher notification sounds with settings toggle and reorganize settings tabs ([51dda37](51dda37)) * Add press-scale animation to `ActionPillButton` ([6721137](6721137)) * Add sort button visibility toggle in Appearance settings ([c3c5e8b](c3c5e8b)) * Add source labels and versions to patch source picker ([0b3f299](0b3f299)) * Add storage and cache management dialog ([#714](#714)) ([f8e354d](f8e354d)) * Add typed patch options ([#706](#706)) ([52727a4](52727a4)) * Animate `HeroInfoCard` in APK management dialogs with shimmer and counter transitions ([f98a602](f98a602)) * Display CPU architecture in saved and patched APK cards ([1d2b6e8](1d2b6e8)) * Improve Shizuku installer flow ([#734](#734)) ([08ab696](08ab696)) * Redesign `InstalledAppInfoDialog` with Morphe-style components and layout improvements ([d9e4ef3](d9e4ef3)) * Redesign `PatchListComponents` with Morphe-style components and layout improvements ([d733da6](d733da6)) * Redesign destructive confirmation dialogs ([85dfad9](85dfad9)) * Route add-source through the website and enforce a remote blocklist ([#715](#715)) ([8f1494e](8f1494e))
Add contextual multi-select actions on the home app list so selected installed apps can be uninstalled and saved patched apps can be reinstalled without leaving the selection flow.
Extend the saved original and patched APK storage dialogs with matching per-item and multi-select install, reinstall, and uninstall actions. Batch installs are queued through the existing InstallViewModel so installer selection, conflict handling, and unavailable-installer prompts stay shared.
Route explicit uninstall requests through InstallerManager so Shizuku, root, and system installer choices are respected, while mount installs continue to clean up the root module and saved record consistently.