diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 04175632ef46035b175a40da6cf09727de0b2c14..399dc61734db6647bafc08ea726ebfec23fbddce 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -392,6 +392,11 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable public Contact getContact() { if (this.conversation.getMode() == Conversation.MODE_SINGLE) { + if (this.trueCounterpart != null) { + return this.conversation.getAccount().getRoster() + .getContact(this.trueCounterpart); + } + return this.conversation.getContact(); } else { if (this.trueCounterpart == null) { diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 6ccfe69b4cde5c2b07cb84656c6b2bd5354a7a17..655ddcbf8ff6dc54ee1fc6853f29d88217e08a46 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -602,6 +602,22 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece } } + Element addresses = packet.findChild("addresses", "http://jabber.org/protocol/address"); + if (status == Message.STATUS_RECEIVED && addresses != null) { + for (Element address : addresses.getChildren()) { + if (!address.getName().equals("address") || !address.getNamespace().equals("http://jabber.org/protocol/address")) continue; + + if (address.getAttribute("type").equals("ofrom") && address.getAttribute("jid") != null) { + Jid ofrom = address.getAttributeAsJid("jid"); + if (InvalidJid.isValid(ofrom) && ofrom.getDomain().equals(counterpart.getDomain()) && + conversation.getAccount().getRoster().getContact(counterpart.getDomain()).getPresences().anySupport("http://jabber.org/protocol/address")) { + + message.setTrueCounterpart(ofrom); + } + } + } + } + if (html != null) message.addPayload(html); message.setSubject(original.findChildContent("subject")); message.setCounterpart(counterpart); 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 7194f5c80ec1f7a890a454bd0fcfbc02ffde8a00..a6e53d77a3b45713efd628a1d1c8511185e98c00 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -267,7 +267,7 @@ public class MessageAdapter extends ArrayAdapter { error = true; break; default: - if (mForceNames || multiReceived) { + if (mForceNames || multiReceived || (message.getTrueCounterpart() != null && message.getContact() != null)) { info = UIHelper.getMessageDisplayName(message); } break;