Add one-click install for favourite apps

Addresses #1508

Add an 'Install all' action to the Favourites screen that bulk-fetches
details and enqueues every installable favourite (skipping already
installed apps and paid apps anonymous accounts can't acquire), gated
behind a confirmation dialog that warns about per-app install prompts.

Show live state on each favourite row: an installed tick that updates
on install/uninstall events, and download/install progress mirroring the
Updates screen. Hide 'Install all' once every favourite is installed.

Treat only non-finished download statuses as in progress on both the
Favourites and Updates rows so a dismissed system install prompt no
longer leaves a row stuck showing 'Installing'.
This commit is contained in:
Rahul Patel
2026-05-30 23:17:41 +05:30
parent 2115ed8479
commit cb682f1f0b
6 changed files with 305 additions and 22 deletions

View File

@@ -77,6 +77,7 @@
<string name="action_granted">"Granted"</string>
<string name="action_ignore">"Ignore"</string>
<string name="action_install">"Install"</string>
<string name="action_install_all">"Install all"</string>
<string name="action_install_microG">"Install microG Bundle"</string>
<string name="action_installations">"Installations"</string>
<string name="action_installing">"Installing"</string>
@@ -296,6 +297,9 @@
<string name="title_installation">"Installation"</string>
<string name="title_installed">"Installed"</string>
<string name="title_installer">"App installer"</string>
<string name="title_install_favourites">"Install favourites?"</string>
<string name="install_favourites_summary">"This will download and install %1$d apps."</string>
<string name="install_favourites_warning">"You may see a separate installation prompt for each app."</string>
<string name="title_language">"Language"</string>
<string name="title_library">"Library"</string>
<string name="title_no_network">"No network"</string>
@@ -508,6 +512,9 @@
<string name="toast_fav_export_failed">Failed to export favourites!</string>
<string name="toast_fav_import_success">Favourites imported!</string>
<string name="toast_fav_export_success">Favourites exported!</string>
<string name="toast_fav_install_enqueued">"Installing %1$d apps"</string>
<string name="toast_fav_install_none">"Nothing to install"</string>
<string name="toast_fav_install_failed">"Failed to fetch app details"</string>
<!-- BlacklistFragment-->
<string name="toast_black_import_failed">Failed to import blacklist!</string>
@@ -586,6 +593,10 @@
<item quantity="one">Permission required</item>
<item quantity="other">Permissions required</item>
</plurals>
<plurals name="favourites_count">
<item quantity="one">%1$d favourite</item>
<item quantity="other">%1$d favourites</item>
</plurals>
<plurals name="notification_installed_summary">
<item quantity="one">%d app installed</item>
<item quantity="other">%d apps installed</item>