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 @@
+