From e5ebf7a218f609cbf8f2c476fac7ab61d93ebe53 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 9 Sep 2022 17:55:07 -0300 Subject: [PATCH] [app] Make forceOldIndex preference work for forcing v1 in case there are severe bugs with v2 after it rolled out to users, so they can at least continue to receive updates with this setting. --- .../java/org/fdroid/fdroid/Preferences.java | 4 ---- .../java/org/fdroid/fdroid/UpdateService.java | 19 ++++++++++++++++--- .../fdroid/fdroid/net/DownloaderFactory.java | 6 +++++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java index 53facc0b0..13bc04b4c 100644 --- a/app/src/main/java/org/fdroid/fdroid/Preferences.java +++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java @@ -199,10 +199,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh return preferences.getBoolean(PREF_FORCE_OLD_INDEX, IGNORED_B); } - 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 diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index 251a59978..9c2e19b59 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -58,7 +58,10 @@ import org.fdroid.fdroid.net.DownloaderFactory; import org.fdroid.index.IndexUpdateResult; import org.fdroid.index.RepoUpdater; import org.fdroid.index.RepoUriBuilder; +import org.fdroid.index.TempFileProvider; +import org.fdroid.index.v1.IndexV1Updater; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -439,9 +442,19 @@ public class UpdateService extends JobIntentService { final CompatibilityChecker compatChecker = new CompatibilityCheckerImpl(getPackageManager(), Preferences.get().forceTouchApps()); final UpdateServiceListener listener = new UpdateServiceListener(UpdateService.this); - final RepoUpdater repoUpdater = new RepoUpdater(getApplicationContext().getCacheDir(), db, - DownloaderFactory.INSTANCE, repoUriBuilder, compatChecker, listener); - final IndexUpdateResult result = repoUpdater.update(repo, fingerprint); + final File cacheDir = getApplicationContext().getCacheDir(); + final IndexUpdateResult result; + if (Preferences.get().isForceOldIndexEnabled()) { + final TempFileProvider tempFileProvider = () -> + File.createTempFile("dl-", "", cacheDir); + final IndexV1Updater updater = new IndexV1Updater(db, tempFileProvider, + DownloaderFactory.INSTANCE, repoUriBuilder, compatChecker, listener); + result = updater.updateNewRepo(repo, fingerprint); + } else { + final RepoUpdater updater = new RepoUpdater(cacheDir, db, + DownloaderFactory.INSTANCE, repoUriBuilder, compatChecker, listener); + result = updater.update(repo, fingerprint); + } if (result instanceof IndexUpdateResult.Unchanged) { unchangedRepos++; } else if (result instanceof IndexUpdateResult.Processed) { diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java b/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java index 4fdd79307..1b22bf504 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java +++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java @@ -15,6 +15,7 @@ import org.fdroid.download.HttpDownloaderV2; import org.fdroid.download.HttpManager; import org.fdroid.download.Mirror; import org.fdroid.fdroid.FDroidApp; +import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.Utils; import org.fdroid.index.IndexFormatVersion; @@ -64,7 +65,10 @@ public class DownloaderFactory extends org.fdroid.download.DownloaderFactory { Proxy proxy = NetCipher.getProxy(); DownloadRequest request = new DownloadRequest(indexFile, mirrors, proxy, repo.getUsername(), repo.getPassword(), tryFirst); - if (repo.getFormatVersion() == null || repo.getFormatVersion() == IndexFormatVersion.ONE) { + boolean oldIndex = Preferences.get().isForceOldIndexEnabled(); + boolean v1OrUnknown = repo.getFormatVersion() == null || + repo.getFormatVersion() == IndexFormatVersion.ONE; + if (oldIndex || v1OrUnknown) { //noinspection deprecation downloader = new HttpDownloader(HTTP_MANAGER, request, destFile); } else {