diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml
index 770a1b222..a748eb0e2 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 b6b05c35a..c1c10b429 100644
--- a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
+++ b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
@@ -183,6 +183,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 78d2792b0..239856469 100644
--- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
+++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
@@ -851,6 +851,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 = ( " +
@@ -858,7 +860,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 ";