diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java index 36451ce78..df67a16f6 100644 --- a/app/src/main/java/org/fdroid/fdroid/Preferences.java +++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java @@ -45,6 +45,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh public static final String PREF_UPD_INTERVAL = "updateInterval"; public static final String PREF_UPD_WIFI_ONLY = "updateOnWifiOnly"; + public static final String PREF_UPD_AUTO_DOWNLOAD = "updateAutoDownload"; public static final String PREF_UPD_NOTIFY = "updateNotify"; public static final String PREF_UPD_HISTORY = "updateHistoryDays"; public static final String PREF_ROOTED = "rooted"; @@ -182,6 +183,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh return preferences.getBoolean(PREF_UPD_NOTIFY, true); } + public boolean isAutoDownloadEnabled() { + return preferences.getBoolean(PREF_UPD_AUTO_DOWNLOAD, false); + } + public boolean isUpdateOnlyOnWifi() { return preferences.getBoolean(PREF_UPD_WIFI_ONLY, false); } diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index c423e4ca1..613436fa1 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -42,6 +42,7 @@ import android.util.Log; import android.widget.Toast; import org.fdroid.fdroid.compat.PreferencesCompat; +import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.ApkProvider; import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.AppProvider; @@ -386,6 +387,11 @@ public class UpdateService extends IntentService implements ProgressListener { Log.e(TAG, "Error updating repository " + repo.address, e); } localBroadcastManager.unregisterReceiver(downloadProgressReceiver); + + // now that downloading the index is done, start downloading updates + if (changes && Preferences.get().isAutoDownloadEnabled()) { + autoDownloadUpdates(repo.address); + } } if (!changes) { @@ -476,6 +482,25 @@ public class UpdateService extends IntentService implements ProgressListener { return inboxStyle; } + private void autoDownloadUpdates(String repoAddress) { + Cursor cursor = getContentResolver().query( + AppProvider.getCanUpdateUri(), + new String[]{ + AppProvider.DataColumns.PACKAGE_NAME, + AppProvider.DataColumns.SUGGESTED_VERSION_CODE, + }, null, null, null); + cursor.moveToFirst(); + for (int i = 0; i < cursor.getCount(); i++) { + App app = new App(cursor); + Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVercode, new String[]{ + ApkProvider.DataColumns.NAME, + }); + String urlString = Utils.getApkUrl(repoAddress, apk); + DownloaderService.queue(this, urlString); + cursor.moveToNext(); + } + } + private void showAppUpdatesNotification(Cursor hasUpdates) { Utils.debugLog(TAG, "Notifying " + hasUpdates.getCount() + " updates."); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ab11e85e8..d99f819e6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,6 +21,8 @@ No automatic app list updates Only on Wi-Fi Update app lists automatically only on Wi-Fi + Automatically download updates + Download the update files in the background Update notifications Show a notification when updates are available Update history diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 43cb8b184..4b2c7d14f 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -9,6 +9,10 @@ +