From 5c26aec10d45c878c31e0ac80982b08d0fe4b69f Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 15 Nov 2019 17:12:17 +0100 Subject: [PATCH] make private messages in MUCs more visible --- .../messenger/ui/ConversationFragment.java | 27 ++++++++++------- .../messenger/ui/adapter/MessageAdapter.java | 29 ++++++++++++++----- ...age_bubble_received_light_dark_private.xml | 15 ++++++++++ .../message_bubble_received_light_private.xml | 15 ++++++++++ ...e_bubble_received_warning_dark_private.xml | 15 ++++++++++ ...essage_bubble_received_warning_private.xml | 15 ++++++++++ .../message_bubble_sent_dark_private.xml | 15 ++++++++++ .../drawable/message_bubble_sent_private.xml | 15 ++++++++++ src/main/res/values/themes.xml | 3 ++ 9 files changed, 132 insertions(+), 17 deletions(-) create mode 100644 src/main/res/drawable/message_bubble_received_light_dark_private.xml create mode 100644 src/main/res/drawable/message_bubble_received_light_private.xml create mode 100644 src/main/res/drawable/message_bubble_received_warning_dark_private.xml create mode 100644 src/main/res/drawable/message_bubble_received_warning_private.xml create mode 100644 src/main/res/drawable/message_bubble_sent_dark_private.xml create mode 100644 src/main/res/drawable/message_bubble_sent_private.xml diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java index fdeb4a56f..37b283ecd 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java @@ -14,6 +14,7 @@ import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.graphics.Typeface; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -22,7 +23,10 @@ import android.os.SystemClock; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.text.Editable; +import android.text.Spannable; +import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.text.style.StyleSpan; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; @@ -927,12 +931,12 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke this.binding.textInputHint.setVisibility(View.VISIBLE); this.binding.textInputHint.setText(R.string.send_corrected_message); this.binding.textinput.setHint(R.string.send_corrected_message); - } else if (multi && conversation.getNextCounterpart() != null) { + } else if (isPrivateMessage()) { this.binding.textinput.setHint(R.string.send_unencrypted_message); this.binding.textInputHint.setVisibility(View.VISIBLE); - this.binding.textInputHint.setText(getString( - R.string.send_private_message_to, - conversation.getNextCounterpart().getResource())); + SpannableStringBuilder hint = new SpannableStringBuilder(getString(R.string.send_private_message_to, conversation.getNextCounterpart().getResource())); + hint.setSpan(new StyleSpan(Typeface.BOLD), 0, hint.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + this.binding.textInputHint.setText(hint); } else if (multi && !conversation.getMucOptions().participating()) { this.binding.textInputHint.setVisibility(View.VISIBLE); this.binding.textInputHint.setText(R.string.ask_for_writeaccess); @@ -944,6 +948,10 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } } + private boolean isPrivateMessage() { + return conversation != null && conversation.getMode() == Conversation.MODE_MULTI && conversation.getNextCounterpart() != null; + } + public void setupIme() { this.binding.textinput.refreshIme(); } @@ -1156,7 +1164,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke binding.textinput.addTextChangedListener(new StylingHelper.MessageEditorStyler(binding.textinput)); binding.textinput.setOnEditorActionListener(mEditorActionListener); binding.textinput.setRichContentListener(new String[]{"image/*"}, mEditorContentListener); - binding.messageInputBox.setBackgroundResource(messageInputBubble()); + binding.messageInputBox.setBackgroundResource(messageInputBubble(false)); binding.textSendButton.setOnClickListener(this.mSendButtonListener); binding.textSendButton.setOnLongClickListener(this.mSendButtonLongListener); @@ -1172,13 +1180,11 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke messageListAdapter.setOnContactPictureLongClicked(this); messageListAdapter.setOnQuoteListener(text -> quoteText(text, getUsername(selectedMessage))); binding.messagesView.setAdapter(messageListAdapter); - registerForContextMenu(binding.messagesView); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { this.binding.textinput.setCustomInsertionActionModeCallback(new EditMessageActionModeCallback(this.binding.textinput)); } - + return binding.getRoot(); } @@ -2632,6 +2638,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke public void updateSendButton() { updateChatMsgHint(); + binding.messageInputBox.setBackgroundResource(messageInputBubble(isPrivateMessage())); boolean hasAttachments = mediaPreviewAdapter != null && mediaPreviewAdapter.hasAttachments(); boolean useSendButtonToIndicateStatus = activity != null && PreferenceManager.getDefaultSharedPreferences(activity).getBoolean("send_button_status", getResources().getBoolean(R.bool.send_button_status)); final Conversation c = this.conversation; @@ -3087,8 +3094,8 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } } - private int messageInputBubble() { - return activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent; + private int messageInputBubble(final boolean isPrivate) { + return isPrivate ? activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_private : R.drawable.message_bubble_sent_private : activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent; } public Conversation getConversation() { diff --git a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java index dffbd6a6f..9d9c68b19 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java @@ -198,6 +198,10 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie } } + private int getMessageTextColorPrivate() { + return ContextCompat.getColor(activity, R.color.accent); + } + private int getWarningTextColor(boolean onDark) { if (onDark) { return ContextCompat.getColor(activity, R.color.white70); @@ -574,12 +578,11 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie int privateMarkerIndex = privateMarker.length(); if (startsWithQuote) { body.insert(privateMarkerIndex, "\n\n"); - body.setSpan(new DividerSpan(false), privateMarkerIndex, privateMarkerIndex + 2, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + body.setSpan(new DividerSpan(false), privateMarkerIndex, privateMarkerIndex + 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else { body.insert(privateMarkerIndex, " "); } - body.setSpan(new ForegroundColorSpan(getMessageTextColor(darkBackground, false)), 0, privateMarkerIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + body.setSpan(new ForegroundColorSpan(getMessageTextColorPrivate()), 0, privateMarkerIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); body.setSpan(new StyleSpan(Typeface.BOLD), 0, privateMarkerIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); if (hasMeCommand) { body.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), privateMarkerIndex + 1, privateMarkerIndex + 1 + nick.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -879,7 +882,7 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie body.append("\n"); body.append(messageBody); } - body.setSpan(new ForegroundColorSpan(getMessageTextColor(darkBackground, false)), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + body.setSpan(new ForegroundColorSpan(getMessageTextColorPrivate()), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); body.setSpan(new StyleSpan(Typeface.BOLD), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); MyLinkify.addLinks(body, false); viewHolder.messageBody.setAutoLinkMask(0); @@ -1132,11 +1135,19 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie if (type == RECEIVED) { if (isInValidSession) { - viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_dark : R.drawable.message_bubble_received_light); + if (message.isPrivateMessage()) { + viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_dark_private : R.drawable.message_bubble_received_light_private); + } else { + viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_dark : R.drawable.message_bubble_received_light); + } viewHolder.encryption.setVisibility(View.GONE); viewHolder.encryption.setTextColor(this.getMessageTextColor(darkBackground, false)); } else { - viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_warning_dark : R.drawable.message_bubble_received_warning); + if (message.isPrivateMessage()) { + viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_warning_dark : R.drawable.message_bubble_received_warning); + } else { + viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_warning_dark : R.drawable.message_bubble_received_warning); + } viewHolder.encryption.setVisibility(View.VISIBLE); viewHolder.encryption.setTextColor(this.getWarningTextColor(darkBackground)); if (omemoEncryption && !message.isTrusted()) { @@ -1148,7 +1159,11 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie } if (type == SENT) { - viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent); + if (message.isPrivateMessage()) { + viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_private : R.drawable.message_bubble_sent_private); + } else { + viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent); + } } displayStatus(viewHolder, message, type, darkBackground); return view; diff --git a/src/main/res/drawable/message_bubble_received_light_dark_private.xml b/src/main/res/drawable/message_bubble_received_light_dark_private.xml new file mode 100644 index 000000000..28bdb9b15 --- /dev/null +++ b/src/main/res/drawable/message_bubble_received_light_dark_private.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/message_bubble_received_light_private.xml b/src/main/res/drawable/message_bubble_received_light_private.xml new file mode 100644 index 000000000..6752d9393 --- /dev/null +++ b/src/main/res/drawable/message_bubble_received_light_private.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/message_bubble_received_warning_dark_private.xml b/src/main/res/drawable/message_bubble_received_warning_dark_private.xml new file mode 100644 index 000000000..758d6d2e8 --- /dev/null +++ b/src/main/res/drawable/message_bubble_received_warning_dark_private.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/message_bubble_received_warning_private.xml b/src/main/res/drawable/message_bubble_received_warning_private.xml new file mode 100644 index 000000000..6aef6105e --- /dev/null +++ b/src/main/res/drawable/message_bubble_received_warning_private.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/message_bubble_sent_dark_private.xml b/src/main/res/drawable/message_bubble_sent_dark_private.xml new file mode 100644 index 000000000..e37c43ad3 --- /dev/null +++ b/src/main/res/drawable/message_bubble_sent_dark_private.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/message_bubble_sent_private.xml b/src/main/res/drawable/message_bubble_sent_private.xml new file mode 100644 index 000000000..e83ded310 --- /dev/null +++ b/src/main/res/drawable/message_bubble_sent_private.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index 1672e1576..cebd97038 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -194,6 +194,9 @@ true @color/accent + @drawable/ic_arrow_back_white_24dp + + 12sp 14sp 14sp