From 01eca4eab4d791b88615640d172f98fb231175b7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 7 Feb 2023 08:56:16 -0300 Subject: [PATCH 1/2] [app] Force repo update on UiThread --- app/src/main/java/org/fdroid/fdroid/UpdateService.java | 4 ++++ app/src/main/java/org/fdroid/fdroid/data/DBHelper.java | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index 711013faf..2d5268382 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -36,6 +36,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.UiThread; import androidx.core.app.JobIntentService; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; @@ -128,6 +129,7 @@ public class UpdateService extends JobIntentService { return intent; } + @UiThread public static void updateNewRepoNow(Context context, String address, @Nullable String fingerprint) { enqueueWork(context, getIntent(context, address, fingerprint)); } @@ -137,6 +139,7 @@ public class UpdateService extends JobIntentService { * when the system language changes, or the underlying OS was upgraded. * This wipes the existing database before running the update! */ + @UiThread public static void forceUpdateRepo(Context context) { Intent intent = new Intent(context, UpdateService.class); intent.putExtra(EXTRA_FORCED_UPDATE, true); @@ -152,6 +155,7 @@ public class UpdateService extends JobIntentService { * * @see JobIntentService#enqueueWork(Context, Class, int, Intent) */ + @UiThread private static void enqueueWork(Context context, @NonNull Intent intent) { if (FDroidApp.networkState > 0 && !Preferences.get().isOnDemandDownloadAllowed()) { Toast.makeText(context, R.string.updates_disabled_by_settings, Toast.LENGTH_LONG).show(); 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 2cdc90371..501785ed4 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -24,6 +24,8 @@ package org.fdroid.fdroid.data; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.util.Log; import androidx.annotation.AnyThread; @@ -89,7 +91,8 @@ public class DBHelper { Log.d(TAG, "Migrating DB..."); migrator.migrateOldRepos(context, db); migrator.removeOldDb(context); - UpdateService.forceUpdateRepo(context); + // force update on UiThread in case we need to show Toasts + new Handler(Looper.getMainLooper()).post(() -> UpdateService.forceUpdateRepo(context)); } } From f81aff1520a93816a1e87c3ac1bc455f96fe0031 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 7 Feb 2023 09:02:48 -0300 Subject: [PATCH 2/2] [app] Catch exception when old disabledMirrors column is missing --- .../org/fdroid/fdroid/data/ContentProviderMigrator.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java b/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java index 57f948f12..fd8ff02d0 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java +++ b/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java @@ -3,7 +3,9 @@ package org.fdroid.fdroid.data; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; import androidx.core.util.ObjectsCompat; @@ -32,9 +34,10 @@ final class ContentProviderMigrator { List repos = repoDao.getRepositories(); int weight = repos.isEmpty() ? 0 : repos.get(repos.size() - 1).getWeight(); - try (SQLiteDatabase oldDb = new ContentProviderDbHelper(context).getReadableDatabase()) { + try (ContentProviderDbHelper helper = new ContentProviderDbHelper(context)) { String[] projection = new String[]{"name", "address", "pubkey", "inuse", "userMirrors", "disabledMirrors", "username", "password"}; + SQLiteDatabase oldDb = helper.getReadableDatabase(); try (Cursor c = oldDb.query("fdroid_repo", projection, null, null, null, null, null)) { while (c.moveToNext()) { String name = c.getString(c.getColumnIndexOrThrow("name")); @@ -83,6 +86,10 @@ final class ContentProviderMigrator { repoDao.updateUsernameAndPassword(repo.getRepoId(), username, password); } } + } catch (SQLiteException e) { + if (e.getMessage() != null && e.getMessage().contains("disabledMirrors")) { + Log.e("DbHelper", "disabledMirrors column missing. Can't migrate. ", e); + } else throw e; } } }