From b04ca202f688acc10876324fdc9fb2fd026b0667 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 15 Jul 2021 13:19:06 -0400 Subject: [PATCH] Fix ApplicationMigrations UI. --- app/src/main/AndroidManifest.xml | 2 +- .../securesms/ApplicationContext.java | 4 +- .../securesms/database/DatabaseFactory.java | 2 - .../securesms/database/JobDatabase.java | 9 ++- .../securesms/database/KeyValueDatabase.java | 11 +-- .../securesms/database/MegaphoneDatabase.java | 11 +-- .../dependencies/ApplicationDependencies.java | 10 ++- .../layout/application_migration_activity.xml | 68 ++++++++----------- 8 files changed, 59 insertions(+), 58 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 695e0e5f5e..81126b7e82 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -319,7 +319,7 @@ android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/> diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index b832b707f7..aae842422b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -27,6 +27,8 @@ import androidx.multidex.MultiDexApplication; import com.google.android.gms.security.ProviderInstaller; +import net.sqlcipher.database.SQLiteDatabase; + import org.conscrypt.Conscrypt; import org.signal.aesgcmprovider.AesGcmProvider; import org.signal.core.util.concurrent.SignalExecutors; @@ -126,11 +128,11 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr Log.i(TAG, "onCreate()"); }) .addBlocking("crash-handling", this::initializeCrashHandling) + .addBlocking("sqlcipher-init", () -> SQLiteDatabase.loadLibs(this)) .addBlocking("rx-init", () -> { RxJavaPlugins.setInitIoSchedulerHandler(schedulerSupplier -> Schedulers.from(SignalExecutors.BOUNDED_IO, true, false)); RxJavaPlugins.setInitComputationSchedulerHandler(schedulerSupplier -> Schedulers.from(SignalExecutors.BOUNDED, true, false)); }) - .addBlocking("eat-db", () -> DatabaseFactory.getInstance(this)) .addBlocking("app-dependencies", this::initializeAppDependencies) .addBlocking("notification-channels", () -> NotificationChannels.create(this)) .addBlocking("first-launch", this::initializeFirstEverAppLaunch) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java index 8e08e377f4..e68f1689f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java @@ -227,8 +227,6 @@ public class DatabaseFactory { } private DatabaseFactory(@NonNull Context context) { - SQLiteDatabase.loadLibs(context); - DatabaseSecret databaseSecret = DatabaseSecretProvider.getOrCreateDatabaseSecret(context); AttachmentSecret attachmentSecret = AttachmentSecretProvider.getInstance(context).getOrCreateAttachmentSecret(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java index 3e62c0b17d..6c5087ec6e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java @@ -11,6 +11,7 @@ import com.annimon.stream.Stream; import net.sqlcipher.database.SQLiteOpenHelper; import net.sqlcipher.database.SQLiteDatabase; +import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.DatabaseSecret; import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider; @@ -140,9 +141,11 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase { public void onOpen(SQLiteDatabase db) { Log.i(TAG, "onOpen()"); - dropTableIfPresent("job_spec"); - dropTableIfPresent("constraint_spec"); - dropTableIfPresent("dependency_spec"); + SignalExecutors.BOUNDED.execute(() -> { + dropTableIfPresent("job_spec"); + dropTableIfPresent("constraint_spec"); + dropTableIfPresent("dependency_spec"); + }); } public synchronized void insertJobs(@NonNull List fullSpecs) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java index 9039a4ccba..f3a4939229 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java @@ -10,6 +10,7 @@ import net.sqlcipher.database.SQLiteDatabase; import net.sqlcipher.database.SQLiteDatabaseHook; import net.sqlcipher.database.SQLiteOpenHelper; +import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.DatabaseSecret; import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider; @@ -88,10 +89,12 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase public void onOpen(SQLiteDatabase db) { Log.i(TAG, "onOpen()"); - if (DatabaseFactory.getInstance(application).hasTable("key_value")) { - Log.i(TAG, "Dropping original key_value table from the main database."); - DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE key_value"); - } + SignalExecutors.BOUNDED.execute(() -> { + if (DatabaseFactory.getInstance(application).hasTable("key_value")) { + Log.i(TAG, "Dropping original key_value table from the main database."); + DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE key_value"); + } + }); } public @NonNull KeyValueDataSet getDataSet() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java index 824e8532dd..d1c2757ea4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java @@ -9,6 +9,7 @@ import androidx.annotation.NonNull; import net.sqlcipher.database.SQLiteDatabase; import net.sqlcipher.database.SQLiteOpenHelper; +import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.DatabaseSecret; import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider; @@ -91,10 +92,12 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas public void onOpen(SQLiteDatabase db) { Log.i(TAG, "onOpen()"); - if (DatabaseFactory.getInstance(application).hasTable("megaphone")) { - Log.i(TAG, "Dropping original megaphone table from the main database."); - DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE megaphone"); - } + SignalExecutors.BOUNDED.execute(() -> { + if (DatabaseFactory.getInstance(application).hasTable("megaphone")) { + Log.i(TAG, "Dropping original megaphone table from the main database."); + DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE megaphone"); + } + }); } public void insert(@NonNull Collection events) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java index 280dee7125..8b7477e468 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java @@ -62,7 +62,6 @@ public class ApplicationDependencies { private static Application application; private static Provider provider; - private static MessageNotifier messageNotifier; private static AppForegroundObserver appForegroundObserver; private static volatile SignalServiceAccountManager accountManager; @@ -92,6 +91,7 @@ public class ApplicationDependencies { private static volatile PendingRetryReceiptManager pendingRetryReceiptManager; private static volatile PendingRetryReceiptCache pendingRetryReceiptCache; private static volatile SignalWebSocket signalWebSocket; + private static volatile MessageNotifier messageNotifier; @MainThread public static void init(@NonNull Application application, @NonNull Provider provider) { @@ -102,7 +102,6 @@ public class ApplicationDependencies { ApplicationDependencies.application = application; ApplicationDependencies.provider = provider; - ApplicationDependencies.messageNotifier = provider.provideMessageNotifier(); ApplicationDependencies.appForegroundObserver = provider.provideAppForegroundObserver(); ApplicationDependencies.appForegroundObserver.begin(); @@ -322,6 +321,13 @@ public class ApplicationDependencies { } public static @NonNull MessageNotifier getMessageNotifier() { + if (messageNotifier == null) { + synchronized (LOCK) { + if (messageNotifier == null) { + messageNotifier = provider.provideMessageNotifier(); + } + } + } return messageNotifier; } diff --git a/app/src/main/res/layout/application_migration_activity.xml b/app/src/main/res/layout/application_migration_activity.xml index 37e178a620..b3ebf5f2bc 100644 --- a/app/src/main/res/layout/application_migration_activity.xml +++ b/app/src/main/res/layout/application_migration_activity.xml @@ -1,46 +1,32 @@ - + - + - + - - - - - - - - - \ No newline at end of file + \ No newline at end of file