From b35a1c07589342e0cadb7eb4d4b6a7b4cc9599d4 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Tue, 5 Mar 2019 21:06:16 +0100 Subject: [PATCH] Improve coloring Signed-off-by: Mario Danic --- .../MagicIncomingTextMessageViewHolder.java | 3 +-- .../MagicOutcomingTextMessageViewHolder.java | 5 ++-- .../MagicSystemMessageViewHolder.java | 4 +-- .../MentionAutocompleteCallback.java | 2 +- .../talk/controllers/ChatController.java | 10 +++++++ .../nextcloud/talk/utils/DisplayUtils.java | 27 ++++++++++++------- 6 files changed, 34 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java index c891571fa..0136b95d7 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java @@ -143,8 +143,7 @@ public class MagicIncomingTextMessageViewHolder .nc_incoming_text_mention_others); } - messageString = DisplayUtils.searchAndColor(messageText.getText().toString(), - messageString, "@" + individualHashMap.get("name"), color); + messageString = DisplayUtils.searchAndColor(message.getText(), "@" + individualHashMap.get("name"), color); } else if (individualHashMap.get("type").equals("file")) { itemView.setOnClickListener(v -> { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(individualHashMap.get("link"))); diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java index d7a725a39..da3dd2c52 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java @@ -90,8 +90,9 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin Map individualHashMap = message.getMessageParameters().get(key); if (individualHashMap.get("type").equals("user") || individualHashMap.get("type").equals("guest")) { if (!individualHashMap.get("id").equals(message.getActiveUserId())) { - messageString = DisplayUtils.searchAndColor(messageText.getText().toString(), - messageString, "@" + individualHashMap.get("name"), NextcloudTalkApplication + messageString = + DisplayUtils.searchAndColor(message.getText(), + "@" + individualHashMap.get("name"), NextcloudTalkApplication .getSharedApplication().getResources().getColor(R.color.nc_outcoming_text_default)); } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java index 30ca90f47..7d11602e1 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java @@ -67,8 +67,8 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes color = context.getResources().getColor(R.color.nc_incoming_text_mention_others); } - messageString = DisplayUtils.searchAndColor(message.getText(), - messageString, "@" + individualHashMap.get("name"), color); + messageString = + DisplayUtils.searchAndColor(message.getText(), "@" + individualHashMap.get("name"), color); } } } diff --git a/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java b/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java index f58bbb13e..9785db472 100644 --- a/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java +++ b/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java @@ -38,7 +38,7 @@ public class MentionAutocompleteCallback implements AutocompleteCallback= editable.getSpanStart(mentionSpan) && start < editable.getSpanEnd(mentionSpan)) { + editable.removeSpan(mentionSpan); + } + } } @Override diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java index 97e05b267..7f19fbc7f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -203,27 +203,34 @@ public class DisplayUtils { } - public static Spannable searchAndColor(String text, Spannable spannable, String searchText, @ColorInt int color) { + public static Spannable searchAndColor(String text, String searchText, @ColorInt int color) { + + Spannable spannableString = new SpannableString(text); if (TextUtils.isEmpty(text) || TextUtils.isEmpty(searchText)) { - return spannable; + return spannableString; } - Matcher m = Pattern.compile(searchText, Pattern.CASE_INSENSITIVE | Pattern.LITERAL) - .matcher(text); + Matcher m = Pattern.compile(searchText, + Pattern.CASE_INSENSITIVE | Pattern.LITERAL | Pattern.MULTILINE) + .matcher(spannableString); int textSize = NextcloudTalkApplication.getSharedApplication().getResources().getDimensionPixelSize(R.dimen .chat_text_size); + + int lastStartIndex = -1; while (m.find()) { - int start = text.indexOf(m.group()); - int end = text.indexOf(m.group()) + m.group().length(); - spannable.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - spannable.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - spannable.setSpan(new AbsoluteSizeSpan(textSize), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + int start = text.indexOf(m.group(), lastStartIndex); + int end = start + m.group().length(); + lastStartIndex = end; + spannableString.setSpan(new ForegroundColorSpan(color), start, end, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableString.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableString.setSpan(new AbsoluteSizeSpan(textSize), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } - return spannable; + return spannableString; } public static Drawable getMessageSelector(@ColorInt int normalColor, @ColorInt int selectedColor,