mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-22 20:18:36 +00:00
Add discard draft confirmation when editing.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -1351,6 +1351,12 @@
|
||||
<string name="InputPanel_tap_and_hold_to_record_a_voice_message_release_to_send">Tap and hold to record a voice message, release to send</string>
|
||||
<!-- When editing a message, label shown above the text input field in the composer -->
|
||||
<string name="InputPanel_edit_message">Edit message</string>
|
||||
<!-- Dialog title shown if users are about to discard their draft message -->
|
||||
<string name="InputPanel__discard_draft">Discard draft?</string>
|
||||
<!-- Dialog message explaining their action cannot be reversed -->
|
||||
<string name="InputPanel__this_action_cant_be_undone">This action can\'t be undone.</string>
|
||||
<!-- Button inside an alert dialog confirming the deletion of their draft -->
|
||||
<string name="InputPanel__discard">Discard</string>
|
||||
|
||||
<!-- InviteActivity -->
|
||||
<string name="InviteActivity_share">Share</string>
|
||||
|
||||
Reference in New Issue
Block a user