diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index abf2bda06..90eee7026 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -841,7 +841,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable public SpannableStringBuilder getBodyForDisplaying() { if (replyMessage != null) { try { - return new SpannableStringBuilder(MessageUtils.filterLtrRtl(getReplyText(replyMessage) + "\n" + removeReplyFallback(this)).trim()); + return new SpannableStringBuilder(MessageUtils.filterLtrRtl(getReplyText(replyMessage) + "\n" + removeReplyFallback(this, replyMessage)).trim()); } catch (IndexOutOfBoundsException e) { return new SpannableStringBuilder(MessageUtils.filterLtrRtl(this.body).trim()); } @@ -859,7 +859,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable } private StringBuilder getReplyText(Message message) { - StringBuilder reply = removeReplyFallback(message); + StringBuilder reply = removeReplyFallback(message, message.replyMessage); reply.insert(0, '>'); for (int i=0;i replyFallback = message.getFallbacks("urn:xmpp:reply:0"); - if (replyFallback.size() == 0) { - return sb; + if (replyMessage != null && replyMessage.edits.isEmpty()) { + sb.replace(0, replyMessage.body.codePointCount(0, replyMessage.body.length()) + 3, ""); + } else { + List replyFallback = message.getFallbacks("urn:xmpp:reply:0"); + if (replyFallback.isEmpty()) { + return sb; + } + + Element bodyFallback = replyFallback.get(0).findChild("body"); + int startCodePoint = Integer.parseInt(bodyFallback.getAttribute("start")); + int endCodePoint = Integer.parseInt(bodyFallback.getAttribute("end")); + + if (startCodePoint < 0) return sb; + if (endCodePoint > sb.length()) return sb; + + sb.replace(message.body.offsetByCodePoints(0, startCodePoint), message.body.offsetByCodePoints(0, endCodePoint), ""); } - Element bodyFallback = replyFallback.get(0).findChild("body"); - int startCodePoint = Integer.parseInt(bodyFallback.getAttribute("start")); - int endCodePoint = Integer.parseInt(bodyFallback.getAttribute("end")); - - if (startCodePoint < 0) return sb; - if (endCodePoint > sb.length()) return sb; - - sb.replace(message.body.offsetByCodePoints(0, startCodePoint), message.body.offsetByCodePoints(0, endCodePoint), ""); return sb; }