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 dcf7c2e383..ea9283ce8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -68,6 +68,7 @@ import org.thoughtcrime.securesms.migrations.ProfileSharingUpdateMigrationJob; import org.thoughtcrime.securesms.migrations.RebuildMessageSearchIndexMigrationJob; import org.thoughtcrime.securesms.migrations.RecheckPaymentsMigrationJob; import org.thoughtcrime.securesms.migrations.RecipientSearchMigrationJob; +import org.thoughtcrime.securesms.migrations.SelfRegisteredStateMigrationJob; import org.thoughtcrime.securesms.migrations.StickerAdditionMigrationJob; import org.thoughtcrime.securesms.migrations.StickerDayByDayMigrationJob; import org.thoughtcrime.securesms.migrations.StickerLaunchMigrationJob; @@ -253,6 +254,7 @@ public final class JobManagerFactories { put(RebuildMessageSearchIndexMigrationJob.KEY, new RebuildMessageSearchIndexMigrationJob.Factory()); put(RecheckPaymentsMigrationJob.KEY, new RecheckPaymentsMigrationJob.Factory()); put(RecipientSearchMigrationJob.KEY, new RecipientSearchMigrationJob.Factory()); + put(SelfRegisteredStateMigrationJob.KEY, new SelfRegisteredStateMigrationJob.Factory()); put(StickerLaunchMigrationJob.KEY, new StickerLaunchMigrationJob.Factory()); put(StickerAdditionMigrationJob.KEY, new StickerAdditionMigrationJob.Factory()); put(StickerDayByDayMigrationJob.KEY, new StickerDayByDayMigrationJob.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 e995338322..38883cc34e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -140,9 +140,10 @@ public class ApplicationMigrations { static final int RECHECK_PAYMENTS = 96; static final int THREAD_COUNT_DB_MIGRATION = 97; static final int SYNC_KEYS_MIGRATION = 98; + static final int SELF_REGISTERTED_STATE = 99; } - public static final int CURRENT_VERSION = 98; + public static final int CURRENT_VERSION = 99; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -637,6 +638,10 @@ public class ApplicationMigrations { jobs.put(Version.SYNC_KEYS_MIGRATION, new SyncKeysMigrationJob()); } + if (lastSeenVersion < Version.SELF_REGISTERTED_STATE) { + jobs.put(Version.SELF_REGISTERTED_STATE, new SelfRegisteredStateMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/SelfRegisteredStateMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/SelfRegisteredStateMigrationJob.kt new file mode 100644 index 0000000000..3033750395 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/SelfRegisteredStateMigrationJob.kt @@ -0,0 +1,49 @@ +package org.thoughtcrime.securesms.migrations + +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.RecipientTable +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.recipients.Recipient + +/** + * There was a bug where some users had their own recipient entry marked unregistered. This fixes that. + */ +internal class SelfRegisteredStateMigrationJob( + parameters: Parameters = Parameters.Builder().build() +) : MigrationJob(parameters) { + + companion object { + const val KEY = "SelfRegisteredStateMigrationJob" + + val TAG = Log.tag(SelfRegisteredStateMigrationJob::class.java) + } + + override fun getFactoryKey(): String = KEY + + override fun isUiBlocking(): Boolean = false + + override fun performMigration() { + if (SignalStore.account().isRegistered && SignalStore.account().aci != null) { + val record = SignalDatabase.recipients.getRecord(Recipient.self().id) + + if (record.registered != RecipientTable.RegisteredState.REGISTERED) { + Log.w(TAG, "Inconsistent registered state! Fixing...") + SignalDatabase.recipients.markRegistered(Recipient.self().id, SignalStore.account().aci!!) + } else { + Log.d(TAG, "Local user is already registered.") + } + } else { + Log.d(TAG, "Not registered. Skipping.") + } + } + + override fun shouldRetry(e: Exception): Boolean = false + + class Factory : Job.Factory { + override fun create(parameters: Parameters, serializedData: ByteArray?): SelfRegisteredStateMigrationJob { + return SelfRegisteredStateMigrationJob(parameters) + } + } +}