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