diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index b40a06cb5..51d3ac9cd 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -353,9 +353,9 @@ public class FDroidApp extends Application implements androidx.work.Configuratio if (preferences.isIndexNeverUpdated()) { preferences.setDefaultForDataOnlyConnection(this); - // force this check to ensure it starts fetching the index on initial runs - networkState = ConnectivityMonitorService.getNetworkState(this); } + // force setting network state to ensure it is set before UpdateService checks it + networkState = ConnectivityMonitorService.getNetworkState(this); ConnectivityMonitorService.registerAndStart(this); UpdateService.schedule(getApplicationContext()); diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index 4e04b26b0..b8b4a16b7 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -102,6 +102,7 @@ public class UpdateService extends JobIntentService { private static final int NOTIFY_ID_UPDATING = 0; private static UpdateService updateService; + private static boolean isForcedUpdate; private FDroidDatabase db; private NotificationManager notificationManager; @@ -211,6 +212,15 @@ public class UpdateService extends JobIntentService { return updateService != null; } + /** + * Whether or not a forced repo update is currently in progress. + * This is typically the case when the phone was updated to a new major OS version + * or the client DB was updated, so that all data needed to be purged. + */ + public static boolean isUpdatingForced() { + return updateService != null && isForcedUpdate; + } + public static void stopNow() { if (updateService != null) { updateService.stopSelf(JOB_ID); @@ -261,6 +271,7 @@ public class UpdateService extends JobIntentService { super.onDestroy(); notificationManager.cancel(NOTIFY_ID_UPDATING); LocalBroadcastManager.getInstance(this).unregisterReceiver(updateStatusReceiver); + isForcedUpdate = false; updateService = null; } @@ -378,6 +389,7 @@ public class UpdateService extends JobIntentService { final long startTime = System.currentTimeMillis(); boolean manualUpdate = intent.getBooleanExtra(EXTRA_MANUAL_UPDATE, false); boolean forcedUpdate = intent.getBooleanExtra(EXTRA_FORCED_UPDATE, false); + isForcedUpdate = forcedUpdate; String fingerprint = intent.getStringExtra(EXTRA_REPO_FINGERPRINT); String address = intent.getDataString(); @@ -402,6 +414,7 @@ public class UpdateService extends JobIntentService { if (manualUpdate) { Utils.showToastFromService(this, getString(R.string.warning_no_internet), Toast.LENGTH_SHORT); } + isForcedUpdate = false; return; } } else if ((manualUpdate || forcedUpdate) && fdroidPrefs.isOnDemandDownloadAllowed()) { @@ -409,6 +422,7 @@ public class UpdateService extends JobIntentService { if (forcedUpdate) DBHelper.resetTransient(this); } else if (!fdroidPrefs.isBackgroundDownloadAllowed() && !fdroidPrefs.isOnDemandDownloadAllowed()) { Utils.debugLog(TAG, "don't run update"); + isForcedUpdate = false; return; } @@ -503,6 +517,7 @@ public class UpdateService extends JobIntentService { sendStatus(this, STATUS_ERROR_GLOBAL, e.getMessage()); } + isForcedUpdate = false; long time = System.currentTimeMillis() - startTime; Log.i(TAG, "Updating repo(s) complete, took " + time / 1000 + " seconds to complete."); } diff --git a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java index a52d5127a..57cd94741 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -84,6 +84,7 @@ public class DBHelper { // Added end of 2022 for alphas, can be removed after sufficient time has passed. ContentProviderMigrator migrator = new ContentProviderMigrator(); if (migrator.needsMigration(context)) { + Log.d(TAG, "Migrating DB..."); migrator.migrateOldRepos(context, db); migrator.removeOldDb(context); UpdateService.forceUpdateRepo(context); diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/LatestViewBinder.java b/app/src/main/java/org/fdroid/fdroid/views/main/LatestViewBinder.java index 69bb763b3..8c846557c 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/LatestViewBinder.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/LatestViewBinder.java @@ -183,6 +183,10 @@ class LatestViewBinder implements Observer>, ChangeListene appList.setVisibility(View.GONE); return; } + if (UpdateService.isUpdatingForced()) { + emptyState.setText(R.string.latest__empty_state__upgrading); + return; + } StringBuilder emptyStateText = new StringBuilder(); emptyStateText.append(activity.getString(R.string.latest__empty_state__no_recent_apps)); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e0a4f7dc5..d5beffbfb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -263,6 +263,7 @@ This often occurs with apps installed via Google Play or other sources, if they Show install history No recent apps found + Upgrading database… Once your list of apps has been updated, the latest apps should show here diff --git a/libs/database/src/main/java/org/fdroid/database/Repository.kt b/libs/database/src/main/java/org/fdroid/database/Repository.kt index ce7eb3aee..ce239960e 100644 --- a/libs/database/src/main/java/org/fdroid/database/Repository.kt +++ b/libs/database/src/main/java/org/fdroid/database/Repository.kt @@ -177,7 +177,7 @@ public data class Repository internal constructor( public fun getMirrors(): List { return getAllMirrors(true).filter { !disabledMirrors.contains(it.baseUrl) - } + }.ifEmpty { listOf(org.fdroid.download.Mirror(address)) } } /**