From ffb57b66b128ba1f953ea7269f6bc5ffd098ee8f Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 26 Sep 2022 08:51:38 -0500 Subject: [PATCH 1/2] Show XMPP URI links with contact name if there is a contact In messages and notifications/previews --- .../ui/adapter/MessageAdapter.java | 2 +- .../conversations/ui/util/MyLinkify.java | 24 +++++++++++++++++++ .../siacs/conversations/utils/UIHelper.java | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) 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..f48d75367 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.Contact; +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,22 @@ 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 { + Contact contact = roster.getContact(Jid.of(uri.getSchemeSpecificPart())); + body.replace( + body.getSpanStart(urlspan), + body.getSpanEnd(urlspan), + contact.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) { From 7e5d47c1e463738c8ef4f44873dda6e2b2c8fe21 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 16 Aug 2022 13:35:43 -0500 Subject: [PATCH 2/2] Get XMPP URI names from bookmarks as well --- .../java/eu/siacs/conversations/ui/util/MyLinkify.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 f48d75367..8ded49f1d 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java @@ -38,7 +38,7 @@ import java.util.Locale; import eu.siacs.conversations.entities.Account; -import eu.siacs.conversations.entities.Contact; +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; @@ -132,11 +132,13 @@ public static void addLinks(Editable body, Account account) { Uri uri = Uri.parse(urlspan.getURL()); if ("xmpp".equals(uri.getScheme())) { try { - Contact contact = roster.getContact(Jid.of(uri.getSchemeSpecificPart())); + 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), - contact.getDisplayName() + item.getDisplayName() ); } catch (final IllegalArgumentException e) { /* bad JID */ } }