From d318c3d9dcc727ea1dd6fc91b0786941d1bd0766 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 14 Aug 2026 20:52:35 +0000 Subject: [PATCH] Remove obsolete delete sync education sheet. --- .../compose/DeleteSyncEducationDialog.kt | 135 ------------------ .../conversation/v2/ConversationFragment.kt | 10 -- .../ConversationListFragment.java | 10 -- .../securesms/keyvalue/UiHintValues.java | 9 -- .../MediaOverviewPageFragment.java | 16 --- .../mediapreview/MediaPreviewFragment.kt | 11 -- .../main/res/drawable-night/delete_sync.xml | 38 ----- app/src/main/res/drawable/delete_sync.xml | 38 ----- app/src/main/res/values/strings.xml | 7 - 9 files changed, 274 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/components/compose/DeleteSyncEducationDialog.kt delete mode 100644 app/src/main/res/drawable-night/delete_sync.xml delete mode 100644 app/src/main/res/drawable/delete_sync.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/compose/DeleteSyncEducationDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/components/compose/DeleteSyncEducationDialog.kt deleted file mode 100644 index 401649eb44..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/components/compose/DeleteSyncEducationDialog.kt +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2024 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.thoughtcrime.securesms.components.compose - -import android.content.DialogInterface -import android.os.Bundle -import android.view.View -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.fragment.app.FragmentManager -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.core.Completable -import io.reactivex.rxjava3.subjects.CompletableSubject -import org.signal.core.ui.compose.Buttons -import org.signal.core.ui.compose.ComposeBottomSheetDialogFragment -import org.signal.core.ui.compose.DayNightPreviews -import org.signal.core.ui.compose.Previews -import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.keyvalue.SignalStore - -/** - * Show educational info about delete syncing to linked devices. This dialog uses a subject to convey when - * it completes and will dismiss itself if that subject is null aka dialog is recreated by OS instead of being - * shown by our code. - */ -class DeleteSyncEducationDialog : ComposeBottomSheetDialogFragment() { - - companion object { - - @JvmStatic - fun shouldShow(): Boolean { - return SignalStore.account.isMultiDevice && !SignalStore.uiHints.hasSeenDeleteSyncEducationSheet - } - - @JvmStatic - fun show(fragmentManager: FragmentManager): Completable { - val dialog = DeleteSyncEducationDialog() - - dialog.show(fragmentManager, null) - SignalStore.uiHints.hasSeenDeleteSyncEducationSheet = true - - val subject = CompletableSubject.create() - dialog.subject = subject - - return subject - .onErrorComplete() - .observeOn(AndroidSchedulers.mainThread()) - } - } - - override val peekHeightPercentage: Float = 1f - - private var subject: CompletableSubject? = null - - @Composable - override fun SheetContent() { - Sheet(dismiss = this::dismissAllowingStateLoss) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - if (subject == null || savedInstanceState != null) { - dismissAllowingStateLoss() - } - } - - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - subject?.onComplete() - } -} - -@Composable -private fun Sheet( - dismiss: () -> Unit = {} -) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .padding(24.dp) - ) { - Image( - painter = painterResource(id = R.drawable.delete_sync), - contentDescription = null, - modifier = Modifier - .padding(top = 48.dp) - ) - - Text( - text = stringResource(id = R.string.DeleteSyncEducation_title), - style = MaterialTheme.typography.titleLarge, - textAlign = TextAlign.Center, - modifier = Modifier - .padding(top = 24.dp, bottom = 12.dp) - ) - - Text( - text = stringResource(id = R.string.DeleteSyncEducation_message), - style = MaterialTheme.typography.bodyLarge, - textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.secondary - ) - - Buttons.LargeTonal( - onClick = dismiss, - modifier = Modifier - .padding(top = 64.dp) - .defaultMinSize(minWidth = 132.dp) - ) { - Text(text = stringResource(id = R.string.DeleteSyncEducation_acknowledge_button)) - } - } -} - -@DayNightPreviews -@Composable -private fun SheetPreview() { - Previews.Preview { - Sheet() - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index eb5dd352dc..d36f8be48f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -166,7 +166,6 @@ import org.thoughtcrime.securesms.components.SendButton import org.thoughtcrime.securesms.components.SignalProgressDialog import org.thoughtcrime.securesms.components.ViewBinderDelegate import org.thoughtcrime.securesms.components.compose.ActionModeTopBarView -import org.thoughtcrime.securesms.components.compose.DeleteSyncEducationDialog import org.thoughtcrime.securesms.components.emoji.MediaKeyboard import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel import org.thoughtcrime.securesms.components.location.SignalPlace @@ -3156,15 +3155,6 @@ class ConversationFragment : } private fun handleDeleteMessages(messageParts: Set) { - if (DeleteSyncEducationDialog.shouldShow()) { - DeleteSyncEducationDialog - .show(childFragmentManager) - .subscribe { handleDeleteMessages(messageParts) } - .addTo(disposables) - - return - } - val records = messageParts.map(MultiselectPart::getMessageRecord).toSet() disposables += DeleteDialog.show( diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index be8d41d662..c886543cd2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -105,7 +105,6 @@ import org.thoughtcrime.securesms.banner.banners.UnauthorizedBanner; import org.thoughtcrime.securesms.banner.banners.UsernameOutOfSyncBanner; import org.thoughtcrime.securesms.components.RatingManager; import org.thoughtcrime.securesms.components.SignalProgressDialog; -import org.thoughtcrime.securesms.components.compose.DeleteSyncEducationDialog; import org.thoughtcrime.securesms.components.menu.ActionItem; import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar; import org.thoughtcrime.securesms.components.menu.SignalContextMenu; @@ -1194,15 +1193,6 @@ public class ConversationListFragment extends MainFragment implements Conversati @SuppressLint("StaticFieldLeak") private void handleDelete(@NonNull Collection ids, boolean containsActiveGroup) { - if (DeleteSyncEducationDialog.shouldShow()) { - lifecycleDisposable.add( - DeleteSyncEducationDialog.show(getChildFragmentManager()) - .subscribe(() -> handleDelete(ids, containsActiveGroup)) - ); - - return; - } - int conversationsCount = ids.size(); MaterialAlertDialogBuilder alert = new MaterialAlertDialogBuilder(requireActivity()); Context context = requireContext(); 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 dba675f2ac..74ba5e14a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHintValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHintValues.java @@ -24,7 +24,6 @@ public class UiHintValues extends SignalStoreValues { private static final String HAS_COMPLETED_USERNAME_ONBOARDING = "uihints.has_completed_username_onboarding"; private static final String HAS_SEEN_DOUBLE_TAP_EDIT_EDUCATION_SHEET = "uihints.has_seen_double_tap_edit_education_sheet"; private static final String DISMISSED_CONTACTS_PERMISSION_BANNER = "uihints.dismissed_contacts_permission_banner"; - private static final String HAS_SEEN_DELETE_SYNC_EDUCATION_SHEET = "uihints.has_seen_delete_sync_education_sheet"; private static final String LAST_SUPPORT_VERSION_SEEN = "uihints.last_support_version_seen"; private static final String HAS_EVER_ENABLED_REMOTE_BACKUPS = "uihints.has_ever_enabled_remote_backups"; private static final String HAS_SEEN_CHAT_FOLDERS_EDUCATION_SHEET = "uihints.has_seen_chat_folders_education_sheet"; @@ -170,14 +169,6 @@ public class UiHintValues extends SignalStoreValues { return getBoolean(DISMISSED_CONTACTS_PERMISSION_BANNER, false); } - public void setHasSeenDeleteSyncEducationSheet(boolean seen) { - putBoolean(HAS_SEEN_DELETE_SYNC_EDUCATION_SHEET, seen); - } - - public boolean getHasSeenDeleteSyncEducationSheet() { - return getBoolean(HAS_SEEN_DELETE_SYNC_EDUCATION_SHEET, false); - } - /** * @return the last version of the support article for delayed notifications that users have seen. Versions are increased in a remote config. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java index e23985fb20..0a442874f9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java @@ -39,7 +39,6 @@ import org.signal.core.ui.logging.LoggingFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.components.SignalProgressDialog; -import org.thoughtcrime.securesms.components.compose.DeleteSyncEducationDialog; import org.thoughtcrime.securesms.components.menu.ActionItem; import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar; import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController; @@ -452,25 +451,10 @@ public final class MediaOverviewPageFragment extends LoggingFragment } private void handleDeleteSingleMedia(@NonNull MediaTable.MediaRecord mediaRecord) { - if (DeleteSyncEducationDialog.shouldShow()) { - lifecycleDisposable.add( - DeleteSyncEducationDialog.show(getChildFragmentManager()) - .subscribe(() -> handleDeleteSingleMedia(mediaRecord)) - ); - return; - } MediaActions.handleDeleteMedia(this, Collections.singleton(mediaRecord)); } private void handleDeleteSelectedMedia() { - if (DeleteSyncEducationDialog.shouldShow()) { - lifecycleDisposable.add( - DeleteSyncEducationDialog.show(getChildFragmentManager()) - .subscribe(this::handleDeleteSelectedMedia) - ); - return; - } - MediaActions.handleDeleteMedia(this, getListAdapter().getSelectedMedia()); exitMultiSelect(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.kt index 7428f6e546..597b795276 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.kt @@ -47,14 +47,12 @@ import org.signal.core.models.media.Media import org.signal.core.ui.logging.LoggingFragment import org.signal.core.util.Debouncer import org.signal.core.util.concurrent.LifecycleDisposable -import org.signal.core.util.concurrent.addTo import org.signal.core.util.logging.Log import org.signal.core.util.requireDrawable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.attachments.AttachmentSaver import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.components.ViewBinderDelegate -import org.thoughtcrime.securesms.components.compose.DeleteSyncEducationDialog import org.thoughtcrime.securesms.components.mention.MentionAnnotation import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs @@ -674,15 +672,6 @@ class MediaPreviewFragment : private fun deleteMedia(mediaItem: MediaTable.MediaRecord) { val attachment: DatabaseAttachment = mediaItem.attachment ?: return - if (DeleteSyncEducationDialog.shouldShow()) { - DeleteSyncEducationDialog - .show(childFragmentManager) - .subscribe { deleteMedia(mediaItem) } - .addTo(lifecycleDisposable) - - return - } - val messageRecord = SignalDatabase.messages.getMessageRecord(attachment.mmsId) val isNoteToSelf = messageRecord.isOutgoing && messageRecord.toRecipient.isSelf diff --git a/app/src/main/res/drawable-night/delete_sync.xml b/app/src/main/res/drawable-night/delete_sync.xml deleted file mode 100644 index 3edb3b2368..0000000000 --- a/app/src/main/res/drawable-night/delete_sync.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/delete_sync.xml b/app/src/main/res/drawable/delete_sync.xml deleted file mode 100644 index 6d304d2489..0000000000 --- a/app/src/main/res/drawable/delete_sync.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 559fa78d56..a71f5b159a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8717,13 +8717,6 @@ You can no longer send and receive messages or calls in this group. - - Deleting is now synced across all of your devices - - When you delete messages or chats, they will be deleted from your phone and linked devices. - - OK -