From 9aa5c13c42e3a697edd039adcdac1283e6d7f1c6 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Thu, 9 Mar 2023 00:32:36 -0500 Subject: [PATCH] UI for rich replies --- src/cheogram/res/values/themes.xml | 2 +- .../ui/ConversationFragment.java | 19 +++++++++ .../ui/adapter/MessageAdapter.java | 2 +- src/main/res/layout/fragment_conversation.xml | 40 ++++++++++++++++++- 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/cheogram/res/values/themes.xml b/src/cheogram/res/values/themes.xml index 18019aec1a5743fefaededabcd4b26824940d858..62f863331a9ababd7f1b5e5ceb6dc9ab258feb77 100644 --- a/src/cheogram/res/values/themes.xml +++ b/src/cheogram/res/values/themes.xml @@ -108,7 +108,7 @@ @drawable/ic_save_black_24dp @drawable/ic_group_white_24dp @drawable/ic_add_white_24dp - @drawable/ic_reply_white_24dp + @drawable/ic_reply_black @drawable/ic_refresh_black_24dp @drawable/ic_attach_file_white_24dp @drawable/ic_lock_open_white_24dp diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 579cd6b645e47e414c6593a0abce0d6222cc31f5..e3c3d4ad3f942a6a806a0fe6886c4871f158460c 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -30,6 +30,7 @@ import android.os.SystemClock; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.text.Editable; +import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.util.Log; import android.view.ContextMenu; @@ -916,6 +917,7 @@ public class ConversationFragment extends XmppFragment default: sendMessage(message); } + setupReply(null); } private boolean trustKeysIfNeeded(final Conversation conversation, final int requestCode) { @@ -1124,6 +1126,7 @@ public class ConversationFragment extends XmppFragment } else { activity.selectPresence(conversation, callback); } + setupReply(null); } private static boolean anyNeedsExternalStoragePermission( @@ -1275,6 +1278,7 @@ public class ConversationFragment extends XmppFragment binding.textinput.setRichContentListener(new String[] {"image/*"}, mEditorContentListener); binding.textSendButton.setOnClickListener(this.mSendButtonListener); + binding.contextPreviewCancel.setOnClickListener((v) -> setupReply(null)); binding.scrollToBottomButton.setOnClickListener(this.mScrollButtonListener); binding.messagesView.setOnScrollListener(mOnScrollListener); @@ -1364,7 +1368,21 @@ public class ConversationFragment extends XmppFragment private void quoteMessage(Message message) { setThread(message.getThread()); conversation.setUserSelectedThread(true); + if (message.getThread() == null) newThread(); + setupReply(message); + } + + private void setupReply(Message message) { conversation.setReplyTo(message); + if (message == null) { + binding.contextPreview.setVisibility(View.GONE); + return; + } + + SpannableStringBuilder body = message.getSpannableBody(null, null); + messageListAdapter.handleTextQuotes(body, activity.isDarkTheme()); + binding.contextPreviewText.setText(body); + binding.contextPreview.setVisibility(View.VISIBLE); } private void setThread(Element thread) { @@ -2727,6 +2745,7 @@ public class ConversationFragment extends XmppFragment } setThread(conversation.getThread()); + setupReply(conversation.getReplyTo()); stopScrolling(); Log.d(Config.LOGTAG, "reInit(hasExtras=" + hasExtras + ")"); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index f76bd8fb84e66bd120d5287659f1532f0c0eef1e..0e995696e0493b3dd1c9e69a189195604da8f524 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -415,7 +415,7 @@ public class MessageAdapter extends ArrayAdapter { * Applies QuoteSpan to group of lines which starts with > or ยป characters. * Appends likebreaks and applies DividerSpan to them to show a padding between quote and text. */ - private boolean handleTextQuotes(SpannableStringBuilder body, boolean darkBackground) { + public boolean handleTextQuotes(SpannableStringBuilder body, boolean darkBackground) { boolean startsWithQuote = false; int quoteDepth = 1; while (QuoteHelper.bodyContainsQuoteStart(body) && quoteDepth <= Config.QUOTE_MAX_DEPTH) { diff --git a/src/main/res/layout/fragment_conversation.xml b/src/main/res/layout/fragment_conversation.xml index 477ecf3f012a51b675de67ac4593e09424bc243b..e697828e9158275628fbed8559d4761d595a6ac7 100644 --- a/src/main/res/layout/fragment_conversation.xml +++ b/src/main/res/layout/fragment_conversation.xml @@ -48,6 +48,44 @@ android:transcriptMode="normal" tools:listitem="@layout/message_sent"> + + + + + + + + +