diff --git a/CHANGELOG.md b/CHANGELOG.md index fdfef9ee9..ef3d9a8e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ * Fix crash when trying to install incompatible apps with the privileged installer +* Add option to prompt for unstable updates globally + * Add support for free Certificate Authorities: cert.startcom.org and letsencrypt.org diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml index 1deafd4ad..3a0b2bd1f 100644 --- a/F-Droid/res/values/strings.xml +++ b/F-Droid/res/values/strings.xml @@ -15,6 +15,8 @@ Cache packages Keep downloaded package files on device Updates + Unstable updates + Suggest updates to unstable versions Other Last repo scan: %s Never diff --git a/F-Droid/res/xml/preferences.xml b/F-Droid/res/xml/preferences.xml index e038d5963..b647b95c0 100644 --- a/F-Droid/res/xml/preferences.xml +++ b/F-Droid/res/xml/preferences.xml @@ -73,6 +73,12 @@ + updateHistoryListeners = new ArrayList<>(); private final List localRepoNameListeners = new ArrayList<>(); private final List localRepoHttpsListeners = new ArrayList<>(); + private final List unstableUpdatesListeners = new ArrayList<>(); private boolean isInitialized(String key) { return initialized.containsKey(key) && initialized.get(key); @@ -129,6 +132,10 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi return preferences.getBoolean(PREF_CACHE_APK, DEFAULT_CACHE_APK); } + public boolean getUnstableUpdates() { + return preferences.getBoolean(PREF_UNSTABLE_UPDATES, DEFAULT_UNSTABLE_UPDATES); + } + public boolean showIncompatibleVersions() { return preferences.getBoolean(PREF_INCOMP_VER, DEFAULT_INCOMP_VER); } @@ -235,6 +242,14 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi filterAppsRequiringRootListeners.remove(listener); } + public void registerUnstableUpdatesChangeListener(ChangeListener listener) { + unstableUpdatesListeners.add(listener); + } + + public void unregisterUnstableUpdatesChangeListener(ChangeListener listener) { + unstableUpdatesListeners.remove(listener); + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Utils.debugLog(TAG, "Invalidating preference '" + key + "'."); @@ -265,6 +280,10 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi for (ChangeListener listener : localRepoHttpsListeners) { listener.onPreferenceChange(); } + case PREF_UNSTABLE_UPDATES: + for (ChangeListener listener : unstableUpdatesListeners) { + 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 305f07b43..c87e832ec 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java +++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java @@ -868,6 +868,8 @@ public class AppProvider extends FDroidProvider { final String apk = DBHelper.TABLE_APK; final String app = DBHelper.TABLE_APP; + final boolean unstableUpdates = Preferences.get().getUnstableUpdates(); + String restrictToStable = unstableUpdates ? "" : ( apk + ".vercode <= " + app + ".upstreamVercode AND " ); String updateSql = "UPDATE " + app + " SET suggestedVercode = ( " + @@ -875,7 +877,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 ";