diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index a5f827b1b1120dccf381c55edd65562431b38dd3..7fef2192ce0cf03727034cb4fdeaec85f40a0459 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -4403,7 +4403,7 @@ public class XmppConnectionService extends Service { public Conversation findUniqueConversationByJid(XmppUri xmppUri) { List findings = new ArrayList<>(); for (Conversation c : getConversations()) { - if (c.getAccount().isEnabled() && c.getJid().asBareJid().equals(xmppUri.getJid()) && ((c.getMode() == Conversational.MODE_MULTI) == xmppUri.isAction(XmppUri.ACTION_JOIN))) { + if (c.getAccount().isEnabled() && c.getJid().asBareJid().equals(xmppUri.getJid().asBareJid()) && ((c.getMode() == Conversational.MODE_MULTI) == xmppUri.isAction(XmppUri.ACTION_JOIN))) { findings.add(c); } } 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 cf126078c807a454d4bf943dda0dab8f56912d66..a043bef84e8664c329479612e475a454f4fb69a7 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -581,7 +581,7 @@ public class MessageAdapter extends ArrayAdapter { if (highlightedTerm != null) { StylingHelper.highlight(activity, body, highlightedTerm, StylingHelper.isDarkText(viewHolder.messageBody)); } - MyLinkify.addLinks(body, message.getConversation().getAccount()); + MyLinkify.addLinks(body, message.getConversation().getAccount(), message.getConversation().getJid()); viewHolder.messageBody.setAutoLinkMask(0); viewHolder.messageBody.setText(body); BetterLinkMovementMethod method = new BetterLinkMovementMethod() { diff --git a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java index fccac2df083a1da874f4cd22a92823a1884e51c4..4b74022485798924521ea33d0bd9801a901a0cf0 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java @@ -133,21 +133,34 @@ public class MyLinkify { FixedURLSpan.fix(body); } - public static void addLinks(Editable body, Account account) { + public static void addLinks(Editable body, Account account, Jid context) { addLinks(body, true); Roster roster = account.getRoster(); for (final URLSpan urlspan : body.getSpans(0, body.length() - 1, URLSpan.class)) { Uri uri = Uri.parse(urlspan.getURL()); if ("xmpp".equals(uri.getScheme())) { + if (!body.subSequence(body.getSpanStart(urlspan), body.getSpanEnd(urlspan)).toString().startsWith("xmpp:")) { + // Already customized + continue; + } + try { XmppUri xmppUri = new XmppUri(uri); Jid jid = xmppUri.getJid(); - ListItem item = account.getBookmark(jid); - if (item == null) item = roster.getContact(jid); + String display = xmppUri.toString(); + if (jid.asBareJid().equals(context) && xmppUri.isAction("message") && xmppUri.getBody() != null) { + display = xmppUri.getBody(); + } else if (jid.asBareJid().equals(context)) { + display = xmppUri.parameterString(); + } else { + ListItem item = account.getBookmark(jid); + if (item == null) item = roster.getContact(jid); + display = item.getDisplayName() + xmppUri.parameterString(); + } body.replace( body.getSpanStart(urlspan), body.getSpanEnd(urlspan), - item.getDisplayName() + xmppUri.parameterString() + display ); } catch (final IllegalArgumentException e) { /* bad JID */ } } diff --git a/src/main/java/eu/siacs/conversations/utils/UIHelper.java b/src/main/java/eu/siacs/conversations/utils/UIHelper.java index 2bbcd08b7c5094da14ad123e9d0ce05bd850c593..6468fcc150fefc83d3c00d3dbc73f91dab5d7346 100644 --- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java @@ -339,7 +339,7 @@ public class UIHelper { if (textColor != 0) { StylingHelper.format(styledBody, 0, styledBody.length() - 1, textColor); } - MyLinkify.addLinks(styledBody, message.getConversation().getAccount()); + MyLinkify.addLinks(styledBody, message.getConversation().getAccount(), message.getConversation().getJid()); SpannableStringBuilder builder = new SpannableStringBuilder(); for (CharSequence l : CharSequenceUtils.split(styledBody, '\n')) { if (l.length() > 0) {