From f89ad98b6bf2f1386b24b50140b2deaea9586189 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 3 Jan 2025 10:33:23 +0100 Subject: [PATCH] trim whitespace of messages in view --- .../siacs/conversations/entities/Message.java | 2 +- .../ui/adapter/MessageAdapter.java | 176 +++++++++--------- 2 files changed, 89 insertions(+), 89 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index ee61056fa96d1bc1900cad6b2bd1cbb83261c33e..5b6f0e2aecbbb1b4f0cb061223ff74f5b8c9bf30 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -724,7 +724,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable } public boolean trusted() { - Contact contact = this.getContact(); + final var contact = this.getContact(); return status > STATUS_RECEIVED || (contact != null && (contact.showInContactList() || contact.isSelf())); } 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 7eb8ea05ca7f4074585c260639197925bf0a5707..091ab1fbbcaf085772bd03267996dd66c7fe9e03 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -479,111 +479,111 @@ public class MessageAdapter extends ArrayAdapter { setTextColor(viewHolder.messageBody(), bubbleColor); setTextSize(viewHolder.messageBody(), this.bubbleDesign.largeFont); viewHolder.messageBody().setTypeface(null, Typeface.NORMAL); - - if (message.getBody() != null) { - final String nick = UIHelper.getMessageDisplayName(message); - final boolean hasMeCommand = message.hasMeCommand(); - final var rawBody = message.getBody(); - final SpannableStringBuilder body; - if (rawBody.length() > Config.MAX_DISPLAY_MESSAGE_CHARS) { - body = new SpannableStringBuilder(rawBody, 0, Config.MAX_DISPLAY_MESSAGE_CHARS); - body.append("…"); - } else { - body = new SpannableStringBuilder(rawBody); - } + final var rawBody = message.getBody(); + if (Strings.isNullOrEmpty(rawBody)) { + viewHolder.messageBody().setText(""); + viewHolder.messageBody().setTextIsSelectable(false); + return; + } + final String nick = UIHelper.getMessageDisplayName(message); + final boolean hasMeCommand = message.hasMeCommand(); + final var trimmedBody = rawBody.trim(); + final SpannableStringBuilder body; + if (trimmedBody.length() > Config.MAX_DISPLAY_MESSAGE_CHARS) { + body = new SpannableStringBuilder(trimmedBody, 0, Config.MAX_DISPLAY_MESSAGE_CHARS); + body.append("…"); + } else { + body = new SpannableStringBuilder(trimmedBody); + } + if (hasMeCommand) { + body.replace(0, Message.ME_COMMAND.length(), String.format("%s ", nick)); + } + boolean startsWithQuote = handleTextQuotes(viewHolder.messageBody(), body, bubbleColor); + if (!message.isPrivateMessage()) { if (hasMeCommand) { - body.replace(0, Message.ME_COMMAND.length(), String.format("%s ", nick)); - } - boolean startsWithQuote = handleTextQuotes(viewHolder.messageBody(), body, bubbleColor); - if (!message.isPrivateMessage()) { - if (hasMeCommand) { - body.setSpan( - new StyleSpan(Typeface.BOLD_ITALIC), - 0, - nick.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } - } else { - String privateMarker; - if (message.getStatus() <= Message.STATUS_RECEIVED) { - privateMarker = activity.getString(R.string.private_message); - } else { - Jid cp = message.getCounterpart(); - privateMarker = - activity.getString( - R.string.private_message_to, - Strings.nullToEmpty(cp == null ? null : cp.getResource())); - } - body.insert(0, privateMarker); - int privateMarkerIndex = privateMarker.length(); - if (startsWithQuote) { - body.insert(privateMarkerIndex, "\n\n"); - body.setSpan( - new DividerSpan(false), - privateMarkerIndex, - privateMarkerIndex + 2, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } else { - body.insert(privateMarkerIndex, " "); - } body.setSpan( - new ForegroundColorSpan( - bubbleToOnSurfaceVariant(viewHolder.messageBody(), bubbleColor)), + new StyleSpan(Typeface.BOLD_ITALIC), 0, - privateMarkerIndex, + nick.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } else { + String privateMarker; + if (message.getStatus() <= Message.STATUS_RECEIVED) { + privateMarker = activity.getString(R.string.private_message); + } else { + Jid cp = message.getCounterpart(); + privateMarker = + activity.getString( + R.string.private_message_to, + Strings.nullToEmpty(cp == null ? null : cp.getResource())); + } + body.insert(0, privateMarker); + int privateMarkerIndex = privateMarker.length(); + if (startsWithQuote) { + body.insert(privateMarkerIndex, "\n\n"); body.setSpan( - new StyleSpan(Typeface.BOLD), - 0, + new DividerSpan(false), privateMarkerIndex, + privateMarkerIndex + 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - if (hasMeCommand) { - body.setSpan( - new StyleSpan(Typeface.BOLD_ITALIC), - privateMarkerIndex + 1, - privateMarkerIndex + 1 + nick.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } + } else { + body.insert(privateMarkerIndex, " "); } - if (message.getConversation().getMode() == Conversation.MODE_MULTI - && message.getStatus() == Message.STATUS_RECEIVED) { - if (message.getConversation() instanceof Conversation conversation) { - Pattern pattern = - NotificationService.generateNickHighlightPattern( - conversation.getMucOptions().getActualNick()); - Matcher matcher = pattern.matcher(body); - while (matcher.find()) { - body.setSpan( - new StyleSpan(Typeface.BOLD), - matcher.start(), - matcher.end(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } - } + body.setSpan( + new ForegroundColorSpan( + bubbleToOnSurfaceVariant(viewHolder.messageBody(), bubbleColor)), + 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); } - Matcher matcher = Emoticons.getEmojiPattern(body).matcher(body); - while (matcher.find()) { - if (matcher.start() < matcher.end()) { + } + if (message.getConversation().getMode() == Conversation.MODE_MULTI + && message.getStatus() == Message.STATUS_RECEIVED) { + if (message.getConversation() instanceof Conversation conversation) { + Pattern pattern = + NotificationService.generateNickHighlightPattern( + conversation.getMucOptions().getActualNick()); + Matcher matcher = pattern.matcher(body); + while (matcher.find()) { body.setSpan( - new RelativeSizeSpan(1.2f), + new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } - - StylingHelper.format(body, viewHolder.messageBody().getCurrentTextColor()); - MyLinkify.addLinks(body, true); - if (highlightedTerm != null) { - StylingHelper.highlight(viewHolder.messageBody(), body, highlightedTerm); + } + Matcher matcher = Emoticons.getEmojiPattern(body).matcher(body); + while (matcher.find()) { + if (matcher.start() < matcher.end()) { + body.setSpan( + new RelativeSizeSpan(1.2f), + matcher.start(), + matcher.end(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } - viewHolder.messageBody().setAutoLinkMask(0); - viewHolder.messageBody().setText(body); - viewHolder.messageBody().setMovementMethod(ClickableMovementMethod.getInstance()); - } else { - viewHolder.messageBody().setText(""); - viewHolder.messageBody().setTextIsSelectable(false); } + + StylingHelper.format(body, viewHolder.messageBody().getCurrentTextColor()); + MyLinkify.addLinks(body, true); + if (highlightedTerm != null) { + StylingHelper.highlight(viewHolder.messageBody(), body, highlightedTerm); + } + viewHolder.messageBody().setAutoLinkMask(0); + viewHolder.messageBody().setText(body); + viewHolder.messageBody().setMovementMethod(ClickableMovementMethod.getInstance()); } private void displayDownloadableMessage(