diff --git a/app/src/androidTest/assets/backupTests/account_data_00.binproto b/app/src/androidTest/assets/backupTests/account_data_00.binproto index 3186ce9747..9f3ca718a3 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_00.binproto and b/app/src/androidTest/assets/backupTests/account_data_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_01.binproto b/app/src/androidTest/assets/backupTests/account_data_01.binproto index 3f1b5a5066..4c59bbfb41 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_01.binproto and b/app/src/androidTest/assets/backupTests/account_data_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_02.binproto b/app/src/androidTest/assets/backupTests/account_data_02.binproto index 1261027d24..d33e90f579 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_02.binproto and b/app/src/androidTest/assets/backupTests/account_data_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_03.binproto b/app/src/androidTest/assets/backupTests/account_data_03.binproto index 724edefba1..d16c38c972 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_03.binproto and b/app/src/androidTest/assets/backupTests/account_data_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_04.binproto b/app/src/androidTest/assets/backupTests/account_data_04.binproto index 0d673310e0..1c105ab3d0 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_04.binproto and b/app/src/androidTest/assets/backupTests/account_data_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_05.binproto b/app/src/androidTest/assets/backupTests/account_data_05.binproto index 8fbce2f249..d1b15898f0 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_05.binproto and b/app/src/androidTest/assets/backupTests/account_data_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_06.binproto b/app/src/androidTest/assets/backupTests/account_data_06.binproto index 3bcc7f46af..1780989e6e 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_06.binproto and b/app/src/androidTest/assets/backupTests/account_data_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_07.binproto b/app/src/androidTest/assets/backupTests/account_data_07.binproto index 543723762e..d0f2e351fe 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_07.binproto and b/app/src/androidTest/assets/backupTests/account_data_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_08.binproto b/app/src/androidTest/assets/backupTests/account_data_08.binproto index 3372a0cca9..aeffa78d3f 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_08.binproto and b/app/src/androidTest/assets/backupTests/account_data_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_09.binproto b/app/src/androidTest/assets/backupTests/account_data_09.binproto index aba744ef9e..236bbbb91b 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_09.binproto and b/app/src/androidTest/assets/backupTests/account_data_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_10.binproto b/app/src/androidTest/assets/backupTests/account_data_10.binproto index a1ba413e98..990e8a1656 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_10.binproto and b/app/src/androidTest/assets/backupTests/account_data_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_11.binproto b/app/src/androidTest/assets/backupTests/account_data_11.binproto index 3204db3c3a..1a89d507fb 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_11.binproto and b/app/src/androidTest/assets/backupTests/account_data_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_12.binproto b/app/src/androidTest/assets/backupTests/account_data_12.binproto index 0755e01987..0fbe208c51 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_12.binproto and b/app/src/androidTest/assets/backupTests/account_data_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_13.binproto b/app/src/androidTest/assets/backupTests/account_data_13.binproto index be5e0b63d3..6b28bf4086 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_13.binproto and b/app/src/androidTest/assets/backupTests/account_data_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_14.binproto b/app/src/androidTest/assets/backupTests/account_data_14.binproto index 13cf9bc999..dfa24fa270 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_14.binproto and b/app/src/androidTest/assets/backupTests/account_data_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_15.binproto b/app/src/androidTest/assets/backupTests/account_data_15.binproto index 1f94e2f822..d7cf688612 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_15.binproto and b/app/src/androidTest/assets/backupTests/account_data_15.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_16.binproto b/app/src/androidTest/assets/backupTests/account_data_16.binproto index 9dd3dbef3a..893acc65ab 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_16.binproto and b/app/src/androidTest/assets/backupTests/account_data_16.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_17.binproto b/app/src/androidTest/assets/backupTests/account_data_17.binproto index 190a40715d..7e89e1addb 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_17.binproto and b/app/src/androidTest/assets/backupTests/account_data_17.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_18.binproto b/app/src/androidTest/assets/backupTests/account_data_18.binproto index d1ec48ed14..c62554ed61 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_18.binproto and b/app/src/androidTest/assets/backupTests/account_data_18.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_19.binproto b/app/src/androidTest/assets/backupTests/account_data_19.binproto index 2320be5aef..0818c93931 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_19.binproto and b/app/src/androidTest/assets/backupTests/account_data_19.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_20.binproto b/app/src/androidTest/assets/backupTests/account_data_20.binproto index 35ef6edbd8..2ebcf9db93 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_20.binproto and b/app/src/androidTest/assets/backupTests/account_data_20.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_21.binproto b/app/src/androidTest/assets/backupTests/account_data_21.binproto index 8dd00d3677..b3593e9521 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_21.binproto and b/app/src/androidTest/assets/backupTests/account_data_21.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_22.binproto b/app/src/androidTest/assets/backupTests/account_data_22.binproto index 7b36b9ef89..1f1f2bac6b 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_22.binproto and b/app/src/androidTest/assets/backupTests/account_data_22.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_23.binproto b/app/src/androidTest/assets/backupTests/account_data_23.binproto index 04c82c11a8..1736c477c0 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_23.binproto and b/app/src/androidTest/assets/backupTests/account_data_23.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_24.binproto b/app/src/androidTest/assets/backupTests/account_data_24.binproto index 1e18c74a71..73e07d057a 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_24.binproto and b/app/src/androidTest/assets/backupTests/account_data_24.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_25.binproto b/app/src/androidTest/assets/backupTests/account_data_25.binproto index 2a331b84a3..c1f9dd80a2 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_25.binproto and b/app/src/androidTest/assets/backupTests/account_data_25.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_26.binproto b/app/src/androidTest/assets/backupTests/account_data_26.binproto index 8d8c28b33e..d34b2eece8 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_26.binproto and b/app/src/androidTest/assets/backupTests/account_data_26.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_27.binproto b/app/src/androidTest/assets/backupTests/account_data_27.binproto index 8208d46c48..699a64a2ac 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_27.binproto and b/app/src/androidTest/assets/backupTests/account_data_27.binproto differ diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt index 9a535a7cc1..dbe2ba438b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt @@ -145,7 +145,8 @@ object AccountDataArchiveProcessor { chatWallpaper = chatWallpaper, backupMode = exportState.backupMode ), - allowAutomaticKeyVerification = signalStore.settingsValues.automaticVerificationEnabled + allowAutomaticKeyVerification = signalStore.settingsValues.automaticVerificationEnabled, + hasSeenAdminDeleteEducationDialog = signalStore.uiHintValues.hasSeenAdminDeleteEducationDialog() ), donationSubscriberData = donationSubscriber?.toSubscriberData(signalStore.inAppPaymentValues.isDonationSubscriptionManuallyCancelled()), backupsSubscriberData = backupSubscriberRecord?.toIAPSubscriberData(), @@ -345,6 +346,10 @@ object AccountDataArchiveProcessor { if (settings.hasCompletedUsernameOnboarding) { SignalStore.uiHints.setHasCompletedUsernameOnboarding(true) } + + if (settings.hasSeenAdminDeleteEducationDialog) { + SignalStore.uiHints.setHasSeenAdminDeleteEducationDialog() + } } private fun PhoneNumberPrivacyValues.PhoneNumberSharingMode.toRemotePhoneNumberSharingMode(): AccountData.PhoneNumberSharingMode { diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHintValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHintValues.java index 19efeea2c4..dba675f2ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHintValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHintValues.java @@ -33,6 +33,7 @@ public class UiHintValues extends SignalStoreValues { private static final String HAS_SEEN_PINNED_MESSAGE_SHEET = "uihints.has_seen_pinned_message_sheet"; private static final String HAS_SEEN_VERIFY_AUTO_SHEET = "uihints.has_seen_verify_auto_sheet"; private static final String HAS_DISMISSED_MEMBER_LABEL_ABOUT_OVERRIDE_WARNING = "uihints.has_dismissed_member_label_about_override_warning"; + private static final String HAS_SEEN_ADMIN_DELETE_EDUCATION_DIALOG = "uihints.has_seen_admin_delete_education_dialog"; UiHintValues(@NonNull KeyValueStore store) { super(store); @@ -250,4 +251,12 @@ public class UiHintValues extends SignalStoreValues { public void markMemberLabelAboutOverrideWarningDismissed() { putBoolean(HAS_DISMISSED_MEMBER_LABEL_ABOUT_OVERRIDE_WARNING, true); } + + public boolean hasSeenAdminDeleteEducationDialog() { + return getBoolean(HAS_SEEN_ADMIN_DELETE_EDUCATION_DIALOG, false); + } + + public void setHasSeenAdminDeleteEducationDialog() { + putBoolean(HAS_SEEN_ADMIN_DELETE_EDUCATION_DIALOG, true); + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.kt index 5651faf602..e3a00b8b9b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.kt @@ -139,6 +139,7 @@ class AccountRecordProcessor( notificationProfileManualOverride = remote.proto.notificationProfileManualOverride backupTier = local.proto.backupTier ?: remote.proto.backupTier automaticKeyVerificationDisabled = remote.proto.automaticKeyVerificationDisabled + hasSeenAdminDeleteEducationDialog = remote.proto.hasSeenAdminDeleteEducationDialog safeSetPayments(payments?.enabled == true, payments?.entropy?.toByteArray()) safeSetSubscriber(donationSubscriberId, donationSubscriberCurrencyCode) diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt index dd63d0be68..6cbbd8f421 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.kt @@ -196,6 +196,7 @@ object StorageSyncHelper { safeSetPayments(SignalStore.payments.mobileCoinPaymentsEnabled(), Optional.ofNullable(SignalStore.payments.paymentsEntropy).map { obj: Entropy -> obj.bytes }.orElse(null)) automaticKeyVerificationDisabled = !SignalStore.settings.automaticVerificationEnabled + hasSeenAdminDeleteEducationDialog = SignalStore.uiHints.hasSeenAdminDeleteEducationDialog() } return accountRecord.toSignalAccountRecord(StorageId.forAccount(storageId)).toSignalStorageRecord() @@ -264,6 +265,10 @@ object StorageSyncHelper { } SignalStore.settings.automaticVerificationEnabled = !update.new.proto.automaticKeyVerificationDisabled + if (update.new.proto.hasSeenAdminDeleteEducationDialog) { + SignalStore.uiHints.setHasSeenAdminDeleteEducationDialog() + } + if (update.new.proto.storyViewReceiptsEnabled == OptionalBool.UNSET) { SignalStore.story.viewedReceiptsEnabled = update.new.proto.readReceipts } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DeleteDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/util/DeleteDialog.kt index de2fbdde0b..75da828266 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/DeleteDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DeleteDialog.kt @@ -10,7 +10,9 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.jobs.MultiDeviceDeleteSyncJob import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.sms.MessageSender +import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask object DeleteDialog { @@ -75,15 +77,24 @@ object DeleteDialog { } private fun handleAdminDeleteForEveryone(context: Context, messageRecords: Set, emitter: SingleEmitter>) { - MaterialAlertDialogBuilder(context) - .setTitle("${context.getString(R.string.ConversationFragment_delete_for_everyone_title)} - INTERNAL ONLY") - .setMessage(R.string.ConversationFragment_delete_for_everyone_body) - .setPositiveButton(R.string.ConversationFragment_delete_for_everyone) { _, _ -> - handleDeleteForEveryone(context = context, messageRecords = messageRecords, emitter = emitter) - } - .setNegativeButton(android.R.string.cancel) { _, _ -> emitter.onSuccess(Pair(false, false)) } - .setOnCancelListener { emitter.onSuccess(Pair(false, false)) } - .show() + if (SignalStore.uiHints.hasSeenAdminDeleteEducationDialog()) { + handleDeleteForEveryone(context = context, messageRecords = messageRecords, emitter = emitter) + } else { + MaterialAlertDialogBuilder(context) + .setTitle("${context.getString(R.string.ConversationFragment_delete_for_everyone_title)} - INTERNAL ONLY") + .setMessage(R.string.ConversationFragment_delete_for_everyone_body) + .setPositiveButton(R.string.ConversationFragment_delete_for_everyone) { _, _ -> + SignalStore.uiHints.setHasSeenAdminDeleteEducationDialog() + SignalExecutors.BOUNDED.execute { + SignalDatabase.recipients.markNeedsSync(Recipient.self().id) + StorageSyncHelper.scheduleSyncForDataChange() + } + handleDeleteForEveryone(context = context, messageRecords = messageRecords, emitter = emitter) + } + .setNegativeButton(android.R.string.cancel) { _, _ -> emitter.onSuccess(Pair(false, false)) } + .setOnCancelListener { emitter.onSuccess(Pair(false, false)) } + .show() + } } private fun handleDeleteForEveryone(context: Context, messageRecords: Set, emitter: SingleEmitter>) { diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index ae21f362c2..817a1d4c4f 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -135,6 +135,7 @@ message AccountData { CallsUseLessDataSetting callsUseLessDataSetting = 29; // If unset, treat the same as "Unknown" case bool allowSealedSenderFromAnyone = 30; bool allowAutomaticKeyVerification = 31; + bool hasSeenAdminDeleteEducationDialog = 32; } message SubscriberData { diff --git a/lib/libsignal-service/src/main/protowire/StorageService.proto b/lib/libsignal-service/src/main/protowire/StorageService.proto index 6964ea299c..d22babc235 100644 --- a/lib/libsignal-service/src/main/protowire/StorageService.proto +++ b/lib/libsignal-service/src/main/protowire/StorageService.proto @@ -296,6 +296,7 @@ message AccountRecord { NotificationProfileManualOverride notificationProfileManualOverride = 44; bool notificationProfileSyncDisabled = 45; bool automaticKeyVerificationDisabled = 46; + bool hasSeenAdminDeleteEducationDialog = 47; } message StoryDistributionListRecord {