From 56803a8850945a88c606f121b906a1f453d09a0e Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 28 Apr 2026 10:27:57 -0400 Subject: [PATCH] Add internal preference to disable ANR induced crashing. --- .../org/thoughtcrime/securesms/ApplicationContext.java | 2 +- .../settings/app/internal/InternalSettingsFragment.kt | 8 ++++++++ .../org/thoughtcrime/securesms/keyvalue/InternalValues.kt | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 49e8a65667..55ac35e690 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -321,7 +321,7 @@ public class ApplicationContext extends Application implements AppForegroundObse * This is so we can capture ANR's that happen on boot before the foreground event. */ private void startAnrDetector() { - AnrDetector.start(TimeUnit.SECONDS.toMillis(5), RemoteConfig::internalUser, (dumps) -> { + AnrDetector.start(TimeUnit.SECONDS.toMillis(5), () -> RemoteConfig.internalUser() && SignalStore.internal().getAnrDetectionCrashes(), (dumps) -> { LogDatabase.getInstance(this).anrs().save(System.currentTimeMillis(), dumps); return Unit.INSTANCE; }); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index f39ce5168b..80efbc827a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -370,6 +370,14 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter } ) + switchPref( + title = DSLSettingsText.from("Enable ANR-induced crashing"), + isChecked = SignalStore.internal.anrDetectionCrashes, + onClick = { + SignalStore.internal.anrDetectionCrashes = !SignalStore.internal.anrDetectionCrashes + } + ) + dividerPref() sectionHeaderPref(DSLSettingsText.from("Logging")) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.kt index 94df3fd917..b5f334809a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.kt @@ -36,6 +36,7 @@ class InternalValues internal constructor(store: KeyValueStore) : SignalStoreVal const val INCLUDE_DEBUGLOG_IN_BACKUP: String = "internal.include_debuglog_in_backup" const val IMPORTED_BACKUP_DEBUG_INFO: String = "internal.imported_backup_debug_info" const val USE_NEW_MEDIA_ACTIVITY: String = "internal.use_new_media_activity" + const val ANR_DETECTION_CRASH: String = "internal.anr_detection_crash" } public override fun onFirstEverAppLaunch() = Unit @@ -184,6 +185,9 @@ class InternalValues internal constructor(store: KeyValueStore) : SignalStoreVal /** Any [BackupDebugInfo] that was imported during the last backup restore, if any. */ var importedBackupDebugInfo: BackupDebugInfo? by protoValue(IMPORTED_BACKUP_DEBUG_INFO, BackupDebugInfo.ADAPTER).defaultForExternalUsers() + /** Enable ANR detector forcing a crash. */ + var anrDetectionCrashes by booleanValue(ANR_DETECTION_CRASH, true).falseForExternalUsers() + private fun SignalStoreValueDelegate.defaultForExternalUsers(): SignalStoreValueDelegate { return this.withPrecondition { RemoteConfig.internalUser } }