From d114f428e7c800f61b142db2082e0a50af7704ef Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 6 Apr 2016 13:45:29 +0200 Subject: [PATCH] add "Auto Download" pref to enable auto-downloading of updates Now that we have a nice background service, let's put it to work! This makes update APKs be automatically downloaded after the index is updated. Then when the user goes to install the updates, they will not have to wait for the download part. #601 https://gitlab.com/fdroid/fdroidclient/issues/601 --- .../java/org/fdroid/fdroid/Preferences.java | 5 ++++ .../java/org/fdroid/fdroid/UpdateService.java | 25 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 4 +++ 4 files changed, 36 insertions(+) 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 @@ +