From 56d64b24ff61367b09656fa8f5cae2a7d78ceff4 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Tue, 15 Sep 2026 12:08:33 -0400 Subject: [PATCH] Disable unread reminders for existing users. --- .../securesms/jobs/JobManagerFactories.java | 2 + .../migrations/ApplicationMigrations.java | 7 ++- .../DisableUnreadReminderMigrationJob.kt | 48 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/migrations/DisableUnreadReminderMigrationJob.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 9e63cb4c89..d0148d639c 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.CopyUsernameToSignalStoreMigrationJ import org.thoughtcrime.securesms.migrations.DatabaseMigrationJob; import org.thoughtcrime.securesms.migrations.DeleteDeprecatedLogsMigrationJob; import org.thoughtcrime.securesms.migrations.DirectoryRefreshMigrationJob; +import org.thoughtcrime.securesms.migrations.DisableUnreadReminderMigrationJob; import org.thoughtcrime.securesms.migrations.DuplicateE164MigrationJob; import org.thoughtcrime.securesms.migrations.E164FormattingMigrationJob; import org.thoughtcrime.securesms.migrations.EmojiDownloadMigrationJob; @@ -344,6 +345,7 @@ public final class JobManagerFactories { put(DatabaseMigrationJob.KEY, new DatabaseMigrationJob.Factory()); put(DeleteDeprecatedLogsMigrationJob.KEY, new DeleteDeprecatedLogsMigrationJob.Factory()); put(DirectoryRefreshMigrationJob.KEY, new DirectoryRefreshMigrationJob.Factory()); + put(DisableUnreadReminderMigrationJob.KEY, new DisableUnreadReminderMigrationJob.Factory()); put(DuplicateE164MigrationJob.KEY, new DuplicateE164MigrationJob.Factory()); put(E164FormattingMigrationJob.KEY, new E164FormattingMigrationJob.Factory()); put(EmojiDownloadMigrationJob.KEY, new EmojiDownloadMigrationJob.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 1a9799d280..7856b3fad9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -216,9 +216,10 @@ public class ApplicationMigrations { static final int ENABLE_MUTED_CALL_SETTING = 171; static final int CLEAR_ZK_CREDENTIALS = 172; static final int SVR2_ENCLAVE_UPDATE_7 = 173; + static final int DISABLE_UNREAD_REMINDER = 174; } - public static final int CURRENT_VERSION = 173; + public static final int CURRENT_VERSION = 174; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -1001,6 +1002,10 @@ public class ApplicationMigrations { jobs.put(Version.SVR2_ENCLAVE_UPDATE_7, new Svr2MirrorMigrationJob()); } + if (lastSeenVersion < Version.DISABLE_UNREAD_REMINDER) { + jobs.put(Version.DISABLE_UNREAD_REMINDER, new DisableUnreadReminderMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DisableUnreadReminderMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/DisableUnreadReminderMigrationJob.kt new file mode 100644 index 0000000000..31d10426b9 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DisableUnreadReminderMigrationJob.kt @@ -0,0 +1,48 @@ +package org.thoughtcrime.securesms.migrations + +import org.signal.core.util.logging.Log +import org.signal.core.util.logging.Log.tag +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.storage.StorageSyncHelper + +/** + * Turns off setting for unread reminders for existing users. + */ +internal class DisableUnreadReminderMigrationJob private constructor(parameters: Parameters) : MigrationJob(parameters) { + + companion object { + + const val KEY = "DisableUnreadReminderMigrationJob" + + private val TAG: String = tag(DisableUnreadReminderMigrationJob::class.java) + } + + internal constructor() : this(Parameters.Builder().build()) + + override fun isUiBlocking(): Boolean = false + + override fun getFactoryKey(): String = KEY + + override fun performMigration() { + if (!SignalStore.account.isRegistered || SignalStore.account.aci == null || SignalStore.account.pni == null) { + Log.i(TAG, "Unregistered, skipping.") + return + } + + Log.i(TAG, "Disabling unread reminders") + SignalStore.settings.unreadReminderEnabled = false + SignalDatabase.recipients.markNeedsSync(Recipient.self().id) + StorageSyncHelper.scheduleSyncForDataChange() + } + + override fun shouldRetry(e: Exception): Boolean = false + + class Factory : Job.Factory { + override fun create(parameters: Parameters, serializedData: ByteArray?): DisableUnreadReminderMigrationJob { + return DisableUnreadReminderMigrationJob(parameters) + } + } +}