From 8c23b17517b34b1da2522f5abd0ba33b1f998b4d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 20 Feb 2020 01:01:14 -0500 Subject: [PATCH] Fix some state issues post backup restore. --- .../securesms/AppInitialization.java | 48 +++++++++++++++++++ .../securesms/ApplicationContext.java | 13 +---- .../fragments/RestoreBackupFragment.java | 2 + 3 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/AppInitialization.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/AppInitialization.java b/app/src/main/java/org/thoughtcrime/securesms/AppInitialization.java new file mode 100644 index 0000000000..0ddb10242e --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/AppInitialization.java @@ -0,0 +1,48 @@ +package org.thoughtcrime.securesms; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; +import org.thoughtcrime.securesms.insights.InsightsOptOut; +import org.thoughtcrime.securesms.jobmanager.JobManager; +import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob; +import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.migrations.ApplicationMigrations; +import org.thoughtcrime.securesms.stickers.BlessedPacks; +import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.thoughtcrime.securesms.util.Util; + +/** + * Rule of thumb: if there's something you want to do on the first app launch that involves + * persisting state to the database, you'll almost certainly *also* want to do it post backup + * restore, since a backup restore will wipe the current state of the database. + */ +public final class AppInitialization { + + private AppInitialization() {} + + public static void onFirstEverAppLaunch(@NonNull Context context) { + InsightsOptOut.userRequestedOptOut(context); + TextSecurePreferences.setAppMigrationVersion(context, ApplicationMigrations.CURRENT_VERSION); + TextSecurePreferences.setJobManagerVersion(context, JobManager.CURRENT_VERSION); + TextSecurePreferences.setLastExperienceVersionCode(context, Util.getCanonicalVersionCode()); + TextSecurePreferences.setHasSeenStickerIntroTooltip(context, true); + ApplicationDependencies.getMegaphoneRepository().onFirstEverAppLaunch(); + SignalStore.registrationValues().onNewInstall(); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false)); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.BANDIT.getPackId(), BlessedPacks.BANDIT.getPackKey(), false)); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_HANDS.getPackId(), BlessedPacks.SWOON_HANDS.getPackKey())); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_FACES.getPackId(), BlessedPacks.SWOON_FACES.getPackKey())); + } + + public static void onPostBackupRestore(@NonNull Context context) { + ApplicationDependencies.getMegaphoneRepository().onFirstEverAppLaunch(); + SignalStore.registrationValues().onNewInstall(); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false)); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.BANDIT.getPackId(), BlessedPacks.BANDIT.getPackKey(), false)); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_HANDS.getPackId(), BlessedPacks.SWOON_HANDS.getPackKey())); + ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_FACES.getPackId(), BlessedPacks.SWOON_FACES.getPackKey())); + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 2975a33ba8..16692546ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -246,18 +246,7 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi if (TextSecurePreferences.getFirstInstallVersion(this) == -1) { if (!SQLCipherOpenHelper.databaseFileExists(this)) { Log.i(TAG, "First ever app launch!"); - - InsightsOptOut.userRequestedOptOut(this); - TextSecurePreferences.setAppMigrationVersion(this, ApplicationMigrations.CURRENT_VERSION); - TextSecurePreferences.setJobManagerVersion(this, JobManager.CURRENT_VERSION); - TextSecurePreferences.setLastExperienceVersionCode(this, Util.getCanonicalVersionCode()); - TextSecurePreferences.setHasSeenStickerIntroTooltip(this, true); - ApplicationDependencies.getMegaphoneRepository().onFirstEverAppLaunch(); - SignalStore.registrationValues().onNewInstall(); - ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false)); - ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.BANDIT.getPackId(), BlessedPacks.BANDIT.getPackKey(), false)); - ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_HANDS.getPackId(), BlessedPacks.SWOON_HANDS.getPackKey())); - ApplicationDependencies.getJobManager().add(StickerPackDownloadJob.forReference(BlessedPacks.SWOON_FACES.getPackId(), BlessedPacks.SWOON_FACES.getPackKey())); + AppInitialization.onFirstEverAppLaunch(this); } Log.i(TAG, "Setting first install version to " + BuildConfig.CANONICAL_VERSION_CODE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java index 6f1d9e4c2f..b0e4a0f8fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java @@ -32,6 +32,7 @@ import net.sqlcipher.database.SQLiteDatabase; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import org.thoughtcrime.securesms.AppInitialization; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.backup.BackupPassphrase; import org.thoughtcrime.securesms.backup.FullBackupBase; @@ -210,6 +211,7 @@ public final class RestoreBackupFragment extends BaseRegistrationFragment { BackupPassphrase.set(context, passphrase); TextSecurePreferences.setBackupEnabled(context, true); LocalBackupListener.schedule(context); + AppInitialization.onPostBackupRestore(context); Log.i(TAG, "Backup restore complete."); return BackupImportResult.SUCCESS;