Change summary
src/main/java/eu/siacs/conversations/generator/MessageGenerator.java | 25
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 21
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 7
3 files changed, 36 insertions(+), 17 deletions(-)
Detailed changes
@@ -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;
}
@@ -616,10 +616,14 @@ public class XmppConnectionService extends Service {
public void attachFileToConversation(final Conversation conversation, final Uri uri, final String type, final UiCallback<Message> 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)) {
@@ -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(