diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index a4cc0a6a7..bfee87f2d 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -647,11 +647,12 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl return null; } - public boolean setNextMessage(String message) { + public boolean setNextMessage(final String input) { + final String message = input == null || input.trim().isEmpty() ? null : input; boolean changed = !getNextMessage().equals(message); this.setAttribute(ATTRIBUTE_NEXT_MESSAGE, message); if (changed) { - this.setAttribute(ATTRIBUTE_NEXT_MESSAGE_TIMESTAMP, TextUtils.isEmpty(message) ? 0 : System.currentTimeMillis()); + this.setAttribute(ATTRIBUTE_NEXT_MESSAGE_TIMESTAMP, message == null ? 0 : System.currentTimeMillis()); } return changed; } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index b7c9c84d9..9b1d7bfbd 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -2391,7 +2391,9 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke return; } String previous = this.binding.textinput.getText().toString(); - if (previous.length() != 0 && !previous.endsWith(" ")) { + if (UIHelper.isLastLineQuote(previous)) { + text = '\n' + text; + } else if (previous.length() != 0 && !Character.isWhitespace(previous.charAt(previous.length() - 1))) { text = " " + text; } this.binding.textinput.append(text); diff --git a/src/main/java/eu/siacs/conversations/utils/UIHelper.java b/src/main/java/eu/siacs/conversations/utils/UIHelper.java index 97aa38bdd..d889c9e95 100644 --- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java @@ -334,6 +334,22 @@ public class UIHelper { } } + public static boolean isLastLineQuote(String body) { + if (body.endsWith("\n")) { + return false; + } + String[] lines = body.split("\n"); + if (lines.length == 0) { + return false; + } + String line = lines[lines.length - 1]; + if (line.isEmpty()) { + return false; + } + char first = line.charAt(0); + return first == '>' && isPositionFollowedByQuoteableCharacter(line,0) || first == '\u00bb'; + } + public static CharSequence shorten(CharSequence input) { return input.length() > 256 ? StylingHelper.subSequence(input, 0, 256) : input; }