From 00e740ee14be98e5958f068edd7bfc713e4bf61b Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 25 Jul 2025 12:08:51 -0400 Subject: [PATCH] Add migration to fix FREE tier setting. --- .../securesms/jobs/JobManagerFactories.java | 2 + .../securesms/keyvalue/BackupValues.kt | 5 ++ .../migrations/ApplicationMigrations.java | 7 ++- .../ResetArchiveTierMigrationJob.kt | 47 +++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/migrations/ResetArchiveTierMigrationJob.kt 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 8e88aa57c3..1f61f58a1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -87,6 +87,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.ResetArchiveTierMigrationJob; import org.thoughtcrime.securesms.migrations.SelfRegisteredStateMigrationJob; import org.thoughtcrime.securesms.migrations.StickerAdditionMigrationJob; import org.thoughtcrime.securesms.migrations.StickerDayByDayMigrationJob; @@ -323,6 +324,7 @@ public final class JobManagerFactories { put(RebuildMessageSearchIndexMigrationJob.KEY, new RebuildMessageSearchIndexMigrationJob.Factory()); put(RecheckPaymentsMigrationJob.KEY, new RecheckPaymentsMigrationJob.Factory()); put(RecipientSearchMigrationJob.KEY, new RecipientSearchMigrationJob.Factory()); + put(ResetArchiveTierMigrationJob.KEY, new ResetArchiveTierMigrationJob.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/keyvalue/BackupValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt index f946b8ef32..fd460e4cc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt @@ -230,6 +230,11 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) { return MessageBackupTier.deserialize(getLong(KEY_BACKUP_TIER, -1)) } set(value) { + // TODO [backup] Remove for launch + if (!RemoteConfig.internalUser) { + throw IllegalStateException("Setting backup tier is only allowed for internal users!") + } + Log.i(TAG, "Setting backup tier to $value", Throwable(), true) val serializedValue = MessageBackupTier.serialize(value) if (value != null) { 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 ba5eb5119a..a79a49d06f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -185,9 +185,10 @@ public class ApplicationMigrations { static final int E164_FORMATTING_3 = 141; static final int STORAGE_LOCAL_UNKNOWNS_FIX_2 = 142; static final int SVR2_ENCLAVE_UPDATE_4 = 143; + static final int RESET_ARCHIVE_TIER = 144; } - public static final int CURRENT_VERSION = 143; + public static final int CURRENT_VERSION = 144; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -854,6 +855,10 @@ public class ApplicationMigrations { jobs.put(Version.SVR2_ENCLAVE_UPDATE_4, new Svr2MirrorMigrationJob()); } + if (lastSeenVersion < Version.RESET_ARCHIVE_TIER) { + jobs.put(Version.RESET_ARCHIVE_TIER, new ResetArchiveTierMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ResetArchiveTierMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/ResetArchiveTierMigrationJob.kt new file mode 100644 index 0000000000..9698826b45 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ResetArchiveTierMigrationJob.kt @@ -0,0 +1,47 @@ +package org.thoughtcrime.securesms.migrations + +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.util.RemoteConfig + +/** + * There was an old bug that resulted in some users having their backup tier set to FREE. + * This fixes that. + */ +internal class ResetArchiveTierMigrationJob( + parameters: Parameters = Parameters.Builder().build() +) : MigrationJob(parameters) { + + companion object { + val TAG = Log.tag(ResetArchiveTierMigrationJob::class.java) + const val KEY = "ResetArchiveTierMigrationJob" + } + + override fun getFactoryKey(): String = KEY + + override fun isUiBlocking(): Boolean = false + + override fun performMigration() { + if (SignalStore.backup.backupTier == null) { + Log.i(TAG, "No backup tier set. Skipping.") + return + } + + if (RemoteConfig.internalUser) { + Log.i(TAG, "Internal user. Skipping.") + return + } + + Log.w(TAG, "Non-internal user had backup tier set: ${SignalStore.backup.backupTier}. Resetting.") + SignalStore.backup.backupTier = null + } + + override fun shouldRetry(e: Exception): Boolean = false + + class Factory : Job.Factory { + override fun create(parameters: Parameters, serializedData: ByteArray?): ResetArchiveTierMigrationJob { + return ResetArchiveTierMigrationJob(parameters) + } + } +}