diff --git a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java index ee51cf743b58e430cb165b04e9f9575ce22bd4c8..600136144dbca544fa4527d3c7b9078191f12f68 100644 --- a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java @@ -102,18 +102,25 @@ public class MessageGenerator extends AbstractGenerator { public MessagePacket generateChat(Message message) { MessagePacket packet = preparePacket(message); - String content; if (message.hasFileOnRemoteHost()) { final Message.FileParams fileParams = message.getFileParams(); - content = fileParams.url; - packet.addChild("x", Namespace.OOB).addChild("url").setContent(content); - packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", Namespace.OOB) - .addChild("body", "urn:xmpp:fallback:0"); - message.setBody(content); - } else { - content = message.getBody(); + + if (message.getBody().equals("")) { + message.setBody(fileParams.url); + packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", Namespace.OOB) + .addChild("body", "urn:xmpp:fallback:0"); + } else { + long start = message.getQuoteableBody().length(); + message.appendBody(fileParams.url); + packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", Namespace.OOB) + .addChild("body", "urn:xmpp:fallback:0") + .setAttribute("start", String.valueOf(start)) + .setAttribute("end", String.valueOf(start + fileParams.url.length())); + } + + packet.addChild("x", Namespace.OOB).addChild("url").setContent(fileParams.url); } - packet.setBody(content); + packet.setBody(message.getQuoteableBody()); return packet; } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 652a35233790bfc7e8ef69e176a8ba1d3493c4db..fcbbc2451aa09c2ec9a93b08397ce4a5ced9b18e 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -616,10 +616,14 @@ public class XmppConnectionService extends Service { public void attachFileToConversation(final Conversation conversation, final Uri uri, final String type, final UiCallback callback) { final Message message; - if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) { - message = new Message(conversation, "", Message.ENCRYPTION_DECRYPTED); - } else { + if (conversation.getReplyTo() == null) { message = new Message(conversation, "", conversation.getNextEncryption()); + } else { + message = conversation.getReplyTo().reply(); + message.setEncryption(conversation.getNextEncryption()); + } + if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) { + message.setEncryption(Message.ENCRYPTION_DECRYPTED); } message.setThread(conversation.getThread()); if (!Message.configurePrivateFileMessage(message)) { @@ -649,10 +653,15 @@ public class XmppConnectionService extends Service { return; } final Message message; - if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) { - message = new Message(conversation, "", Message.ENCRYPTION_DECRYPTED); - } else { + + if (conversation.getReplyTo() == null) { message = new Message(conversation, "", conversation.getNextEncryption()); + } else { + message = conversation.getReplyTo().reply(); + message.setEncryption(conversation.getNextEncryption()); + } + if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) { + message.setEncryption(Message.ENCRYPTION_DECRYPTED); } message.setThread(conversation.getThread()); if (!Message.configurePrivateFileMessage(message)) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index a855dcadaea336eef80b2fa5557fd60a5a8eb1b0..2585957e85ba73f7f9e0c5b4c68901fe8a3e42d7 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -807,7 +807,10 @@ public class ConversationFragment extends XmppFragment @Override public void success(Message message) { - runOnUiThread(() -> activity.hideToast()); + runOnUiThread(() -> { + activity.hideToast(); + setupReply(null); + }); hidePrepareFileToast(prepareFileToast); } @@ -852,6 +855,7 @@ public class ConversationFragment extends XmppFragment @Override public void success(Message message) { hidePrepareFileToast(prepareFileToast); + runOnUiThread(() -> setupReply(null)); } @Override @@ -1125,7 +1129,6 @@ public class ConversationFragment extends XmppFragment } else { activity.selectPresence(conversation, callback); } - setupReply(null); } private static boolean anyNeedsExternalStoragePermission(