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 0eb8a10fb..926020ec4 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -494,7 +494,7 @@ private void displayTextMessage(final ViewHolder viewHolder, final Message messa if (highlightedTerm != null) { StylingHelper.highlight(activity, body, highlightedTerm, StylingHelper.isDarkText(viewHolder.messageBody)); } - MyLinkify.addLinks(body, true); + MyLinkify.addLinks(body, message.getConversation().getAccount()); viewHolder.messageBody.setAutoLinkMask(0); viewHolder.messageBody.setText(EmojiWrapper.transform(body)); viewHolder.messageBody.setMovementMethod(ClickableMovementMethod.getInstance()); 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 b72c5aa86..8ded49f1d 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java @@ -29,16 +29,22 @@ package eu.siacs.conversations.ui.util; +import android.net.Uri; import android.os.Build; import android.text.Editable; +import android.text.style.URLSpan; import android.text.util.Linkify; import java.util.Locale; +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.ListItem; +import eu.siacs.conversations.entities.Roster; import eu.siacs.conversations.ui.text.FixedURLSpan; import eu.siacs.conversations.utils.GeoHelper; import eu.siacs.conversations.utils.Patterns; import eu.siacs.conversations.utils.XmppUri; +import eu.siacs.conversations.xmpp.Jid; public class MyLinkify { @@ -118,4 +124,24 @@ public static void addLinks(Editable body, boolean includeGeo) { } FixedURLSpan.fix(body); } + + public static void addLinks(Editable body, Account account) { + 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())) { + try { + Jid jid = new XmppUri(uri).getJid(); + ListItem item = account.getBookmark(jid); + if (item == null) item = roster.getContact(jid); + body.replace( + body.getSpanStart(urlspan), + body.getSpanEnd(urlspan), + item.getDisplayName() + ); + } 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 26732b501..f72fc5bb7 100644 --- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java @@ -32,6 +32,7 @@ import eu.siacs.conversations.entities.RtpSessionStatus; import eu.siacs.conversations.entities.Transferable; import eu.siacs.conversations.services.ExportBackupService; +import eu.siacs.conversations.ui.util.MyLinkify; import eu.siacs.conversations.ui.util.QuoteHelper; import eu.siacs.conversations.xmpp.Jid; @@ -322,6 +323,7 @@ public static Pair getMessagePreview(final Context contex if (textColor != 0) { StylingHelper.format(styledBody, 0, styledBody.length() - 1, textColor); } + MyLinkify.addLinks(styledBody, message.getConversation().getAccount()); SpannableStringBuilder builder = new SpannableStringBuilder(); for (CharSequence l : CharSequenceUtils.split(styledBody, '\n')) { if (l.length() > 0) {