From 92f8678b3d2da18ad93bac6af0ae83984cf74714 Mon Sep 17 00:00:00 2001 From: Nico Alt Date: Thu, 30 Jul 2015 13:06:53 +0200 Subject: [PATCH] Prompt for beta updates Fixes #313 --- F-Droid/res/values/strings.xml | 2 ++ F-Droid/res/xml/preferences.xml | 5 +++++ F-Droid/src/org/fdroid/fdroid/FDroidApp.java | 8 ++++++++ .../src/org/fdroid/fdroid/Preferences.java | 19 +++++++++++++++++++ .../org/fdroid/fdroid/data/AppProvider.java | 4 +++- 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml index 8fae272f7..07cb85d56 100644 --- a/F-Droid/res/values/strings.xml +++ b/F-Droid/res/values/strings.xml @@ -13,6 +13,8 @@ App cache Keep downloaded .apk files on device Updates + Get updates newer than suggested version + Beta updates Other Last repo scan: %s never diff --git a/F-Droid/res/xml/preferences.xml b/F-Droid/res/xml/preferences.xml index 0de38fb22..839c0d41a 100644 --- a/F-Droid/res/xml/preferences.xml +++ b/F-Droid/res/xml/preferences.xml @@ -78,6 +78,11 @@ + diff --git a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java index 53848a639..03a1a66ff 100644 --- a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java +++ b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java @@ -182,6 +182,14 @@ public class FDroidApp extends Application { } }); + final Context context = this; + Preferences.get().registerBetaUpdatesChangeListener(new Preferences.ChangeListener() { + @Override + public void onPreferenceChange() { + AppProvider.Helper.calcDetailsFromIndex(context); + } + }); + // Clear cached apk files. We used to just remove them after they'd // been installed, but this causes problems for proprietary gapps // users since the introduction of verification (on pre-4.2 Android), diff --git a/F-Droid/src/org/fdroid/fdroid/Preferences.java b/F-Droid/src/org/fdroid/fdroid/Preferences.java index 61816b1b6..ede945a97 100644 --- a/F-Droid/src/org/fdroid/fdroid/Preferences.java +++ b/F-Droid/src/org/fdroid/fdroid/Preferences.java @@ -47,6 +47,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi public static final String PREF_COMPACT_LAYOUT = "compactlayout"; public static final String PREF_IGN_TOUCH = "ignoreTouchscreen"; public static final String PREF_CACHE_APK = "cacheDownloaded"; + public static final String PREF_BETA_UPDATES = "betaUpdates"; public static final String PREF_EXPERT = "expert"; public static final String PREF_UPD_LAST = "lastUpdateCheck"; public static final String PREF_SYSTEM_INSTALLER = "systemInstaller"; @@ -68,6 +69,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi private static final boolean DEFAULT_SYSTEM_INSTALLER = false; private static final boolean DEFAULT_LOCAL_REPO_BONJOUR = true; private static final boolean DEFAULT_CACHE_APK = false; + private static final boolean DEFAULT_BETA_UPDATES = false; private static final boolean DEFAULT_LOCAL_REPO_HTTPS = false; private static final boolean DEFAULT_INCOMP_VER = false; private static final boolean DEFAULT_EXPERT = false; @@ -90,6 +92,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi private final List localRepoBonjourListeners = new ArrayList<>(); private final List localRepoNameListeners = new ArrayList<>(); private final List localRepoHttpsListeners = new ArrayList<>(); + private final List betaUpdatesListeners = new ArrayList<>(); private boolean isInitialized(String key) { return initialized.containsKey(key) && initialized.get(key); @@ -135,6 +138,10 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi return preferences.getBoolean(PREF_CACHE_APK, DEFAULT_CACHE_APK); } + public boolean getBetaUpdates() { + return preferences.getBoolean(PREF_BETA_UPDATES, DEFAULT_BETA_UPDATES); + } + public boolean showIncompatibleVersions() { return preferences.getBoolean(PREF_INCOMP_VER, DEFAULT_INCOMP_VER); } @@ -241,6 +248,14 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi filterAppsRequiringRootListeners.remove(listener); } + public void registerBetaUpdatesChangeListener(ChangeListener listener) { + betaUpdatesListeners.add(listener); + } + + public void unregisterBetaUpdatesChangeListener(ChangeListener listener) { + betaUpdatesListeners.remove(listener); + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (BuildConfig.DEBUG) { @@ -278,6 +293,10 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi for (ChangeListener listener : localRepoHttpsListeners) { listener.onPreferenceChange(); } + case PREF_BETA_UPDATES: + for (ChangeListener listener : betaUpdatesListeners) { + listener.onPreferenceChange(); + } break; } } diff --git a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java index 7c223e3b5..27d2251ac 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java +++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java @@ -833,6 +833,8 @@ public class AppProvider extends FDroidProvider { final String apk = DBHelper.TABLE_APK; final String app = DBHelper.TABLE_APP; + final boolean betaUpdates = Preferences.get().getBetaUpdates(); + String restrictToStable = betaUpdates ? "" : ( apk + ".vercode <= " + app + ".upstreamVercode AND " ); String updateSql = "UPDATE " + app + " SET suggestedVercode = ( " + @@ -840,7 +842,7 @@ public class AppProvider extends FDroidProvider { " FROM " + apk + " WHERE " + app + ".id = " + apk + ".id AND " + - apk + ".vercode <= " + app + ".upstreamVercode AND " + + restrictToStable + " ( " + app + ".compatible = 0 OR " + apk + ".compatible = 1 ) ) " + " WHERE upstreamVercode > 0 ";