From 7f1227ee192b95c307e711a484767ea28ca2888e Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Tue, 16 Jul 2024 20:08:10 -0400 Subject: [PATCH] Add discard draft confirmation when editing. --- .../securesms/components/InputPanel.java | 18 +++++++++++++++++- .../conversation/v2/ConversationFragment.kt | 2 +- app/src/main/res/values/strings.xml | 6 ++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index 581bf6738f..9d2ab1dc80 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -27,6 +27,7 @@ import androidx.annotation.DimenRes; import androidx.annotation.MainThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; @@ -36,6 +37,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.ThreadUtil; import org.signal.core.util.concurrent.ListenableFuture; @@ -408,6 +410,20 @@ public class InputPanel extends ConstraintLayout quoteView.setWallpaperEnabled(enabled); } + public void enterEditModeIfPossible(@NonNull RequestManager requestManager, @NonNull ConversationMessage conversationMessageToEdit, boolean fromDraft, boolean clearQuote) { + String currentText = composeText.getText() == null ? "" : composeText.getText().toString(); + if ((messageToEdit == null && currentText.isEmpty()) || (messageToEdit != null && currentText.equals(messageToEdit.getBody()))) { + enterEditMessageMode(requestManager, conversationMessageToEdit, fromDraft, clearQuote); + } else { + AlertDialog.Builder builder = new MaterialAlertDialogBuilder(getContext()); + builder.setTitle(R.string.InputPanel__discard_draft); + builder.setMessage(R.string.InputPanel__this_action_cant_be_undone); + builder.setPositiveButton(R.string.InputPanel__discard, (dialog, which) -> enterEditMessageMode(requestManager, conversationMessageToEdit, fromDraft, clearQuote)); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show(); + } +} + public void enterEditMessageMode(@NonNull RequestManager requestManager, @NonNull ConversationMessage conversationMessageToEdit, boolean fromDraft, boolean clearQuote) { int originalHeight = composeTextContainer.getMeasuredHeight(); SpannableString textToEdit = conversationMessageToEdit.getDisplayBody(getContext()); @@ -437,7 +453,7 @@ public class InputPanel extends ConstraintLayout int finalHeight = (inEditMessageMode()) ? composeTextContainer.getMeasuredHeight() : composeTextContainer.getMeasuredHeight() + editMessageTitle.getMeasuredHeight(); if (editMessageAnimator != null) { - editMessageAnimator.cancel(); + editMessageAnimator.cancel(); } editMessageAnimator = createHeightAnimator(composeTextContainer, originalHeight, finalHeight, new AnimationCompleteListener() { @Override 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 b5f321c6d2..da20e212b8 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 @@ -2328,7 +2328,7 @@ class ConversationFragment : viewModel.resolveMessageToEdit(conversationMessage) .subscribeBy { updatedMessage -> - inputPanel.enterEditMessageMode(Glide.with(this), updatedMessage, false, false) + inputPanel.enterEditModeIfPossible(Glide.with(this), updatedMessage, false, false) } .addTo(disposables) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d66dd693b6..7c3bfeae89 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1351,6 +1351,12 @@ Tap and hold to record a voice message, release to send Edit message + + Discard draft? + + This action can\'t be undone. + + Discard Share