From d491fc151a59f84e68c277ea8e4beafa3cef2bee Mon Sep 17 00:00:00 2001
From: Hans-Christoph Steiner <hans@eds.org>
Date: Mon, 23 Oct 2017 21:58:26 +0200
Subject: [PATCH] force all Android 5.0 devices to use the old index v0 XML
 format

The workaround is fugly, so we really don't want to include it in the
modern code.  Luckily, we have old index support there :-D

closes #1014
closes #1202
closes #1208
#111
---
 app/src/main/java/org/fdroid/fdroid/FDroidApp.java   | 9 +++++++++
 app/src/main/java/org/fdroid/fdroid/Preferences.java | 8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
index 8047e0d0a..04c101f37 100644
--- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
+++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
@@ -233,6 +233,15 @@ public class FDroidApp extends Application {
         curTheme = Preferences.get().getTheme();
         Preferences.get().configureProxy();
 
+        // bug specific to exactly 5.0 makes it only work with the old index
+        // which includes an ugly, hacky workaround
+        // https://gitlab.com/fdroid/fdroidclient/issues/1014
+        if (Build.VERSION.SDK_INT == 21) {
+            Preferences p = Preferences.get();
+            p.setExpertMode(true);
+            p.setForceOldIndex(true);
+        }
+
         InstalledAppProviderService.compareToPackageManager(this);
         AppUpdateStatusService.scanDownloadedApks(this);
 
diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java
index 60d6f7964..3d6b614e1 100644
--- a/app/src/main/java/org/fdroid/fdroid/Preferences.java
+++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java
@@ -120,6 +120,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
         return preferences.getBoolean(PREF_FORCE_OLD_INDEX, DEFAULT_FORCE_OLD_INDEX);
     }
 
+    public void setForceOldIndex(boolean flag) {
+        preferences.edit().putBoolean(PREF_FORCE_OLD_INDEX, flag).apply();
+    }
+
     /**
      * Whether to use the Privileged Installer, based on if it is installed.  Only the disabled
      * state is stored as a preference since the enabled state is based entirely on the presence
@@ -225,6 +229,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
         return preferences.getBoolean(PREF_EXPERT, DEFAULT_EXPERT);
     }
 
+    public void setExpertMode(boolean flag) {
+        preferences.edit().putBoolean(PREF_EXPERT, flag).apply();
+    }
+
     public Theme getTheme() {
         return Theme.valueOf(preferences.getString(Preferences.PREF_THEME, Preferences.DEFAULT_THEME));
     }