diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt index be0a9130ca..52334104e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsViewModel.kt @@ -75,6 +75,7 @@ class AdvancedPrivacySettingsViewModel( viewModelScope.launch(SignalDispatchers.IO) { if (!enabled) { SignalDatabase.recipients.clearAllKeyTransparencyData() + SignalStore.account.distinguishedHead = null } SignalDatabase.recipients.markNeedsSync(Recipient.self().id) StorageSyncHelper.scheduleSyncForDataChange() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 832c9cef51..1a564e0890 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -94,6 +94,7 @@ import org.thoughtcrime.securesms.migrations.RecheckPaymentsMigrationJob; import org.thoughtcrime.securesms.migrations.ReleaseChannelRecipientFixMigrationJob; import org.thoughtcrime.securesms.migrations.RecipientSearchMigrationJob; import org.thoughtcrime.securesms.migrations.ResetArchiveTierMigrationJob; +import org.thoughtcrime.securesms.migrations.ResetKeyTransparencyMigrationJob; import org.thoughtcrime.securesms.migrations.SelfRegisteredStateMigrationJob; import org.thoughtcrime.securesms.migrations.StickerAdditionMigrationJob; import org.thoughtcrime.securesms.migrations.StickerDayByDayMigrationJob; @@ -351,6 +352,7 @@ public final class JobManagerFactories { put(ReleaseChannelRecipientFixMigrationJob.KEY, new ReleaseChannelRecipientFixMigrationJob.Factory()); put(RecipientSearchMigrationJob.KEY, new RecipientSearchMigrationJob.Factory()); put(ResetArchiveTierMigrationJob.KEY, new ResetArchiveTierMigrationJob.Factory()); + put(ResetKeyTransparencyMigrationJob.KEY, new ResetKeyTransparencyMigrationJob.Factory()); put(SelfRegisteredStateMigrationJob.KEY, new SelfRegisteredStateMigrationJob.Factory()); put(StickerLaunchMigrationJob.KEY, new StickerLaunchMigrationJob.Factory()); put(StickerAdditionMigrationJob.KEY, new StickerAdditionMigrationJob.Factory()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java index e308a104a2..335554e9e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -198,9 +198,10 @@ public class ApplicationMigrations { static final int EMOJI_VERSION_13 = 154; static final int COLLAPSED_EVENTS = 155; static final int COLLAPSED_EVENTS_2 = 156; + static final int KEY_TRANSPARENCY = 157; } - public static final int CURRENT_VERSION = 156; + public static final int CURRENT_VERSION = 157; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -919,6 +920,10 @@ public class ApplicationMigrations { jobs.put(Version.COLLAPSED_EVENTS_2, new BackfillCollapsedEventsMigrationJob()); } + if (lastSeenVersion < Version.KEY_TRANSPARENCY) { + jobs.put(Version.KEY_TRANSPARENCY, new ResetKeyTransparencyMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ResetKeyTransparencyMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/ResetKeyTransparencyMigrationJob.kt new file mode 100644 index 0000000000..c96e7725cc --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ResetKeyTransparencyMigrationJob.kt @@ -0,0 +1,37 @@ +package org.thoughtcrime.securesms.migrations + +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobs.CheckKeyTransparencyJob +import org.thoughtcrime.securesms.keyvalue.SignalStore + +/** + * Clears all existing key transparency data + */ +internal class ResetKeyTransparencyMigrationJob private constructor(parameters: Parameters) : MigrationJob(parameters) { + + companion object { + const val KEY = "ResetKeyTransparencyMigrationJob" + } + + internal constructor() : this(Parameters.Builder().build()) + + override fun isUiBlocking(): Boolean = false + + override fun getFactoryKey(): String = KEY + + override fun performMigration() { + SignalStore.account.distinguishedHead = null + SignalStore.misc.lastKeyTransparencyTime = 0 + SignalDatabase.recipients.clearAllKeyTransparencyData() + CheckKeyTransparencyJob.enqueueIfNecessary(addDelay = false) + } + + override fun shouldRetry(e: Exception): Boolean = false + + class Factory : Job.Factory { + override fun create(parameters: Parameters, serializedData: ByteArray?): ResetKeyTransparencyMigrationJob { + return ResetKeyTransparencyMigrationJob(parameters) + } + } +}