From 6d6800f2bbc512a84a73ef07b77aaa0fc8aff044 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 6 Sep 2023 19:22:16 -0500 Subject: [PATCH] Linkyfy tel and sms URIs --- .../eu/siacs/conversations/ui/util/MyLinkify.java | 2 ++ .../eu/siacs/conversations/utils/Patterns.java | 14 +++++++++++--- 2 files changed, 13 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 479d04917f661b3a11885eff6d0211b8a0cc46e1..ef33fac14dfa7fd54c770293d17b5cb3ae1b21e1 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java @@ -127,6 +127,8 @@ public class MyLinkify { public static void addLinks(Editable body, boolean includeGeo) { Linkify.addLinks(body, Patterns.XMPP_PATTERN, "xmpp", XMPPURI_MATCH_FILTER, null); + Linkify.addLinks(body, Patterns.TEL_URI, "tel"); + Linkify.addLinks(body, Patterns.SMS_URI, "sms"); Linkify.addLinks(body, Patterns.AUTOLINK_WEB_URL, "http", WEBURL_MATCH_FILTER, WEBURL_TRANSFORM_FILTER); if (includeGeo) { Linkify.addLinks(body, GeoHelper.GEO_URI, "geo"); diff --git a/src/main/java/eu/siacs/conversations/utils/Patterns.java b/src/main/java/eu/siacs/conversations/utils/Patterns.java index 026951b22eed95f2943f46c8a44266e1dabe8058..51ba44b316bf5bd513d6b20ffb3ac36772270b0a 100644 --- a/src/main/java/eu/siacs/conversations/utils/Patterns.java +++ b/src/main/java/eu/siacs/conversations/utils/Patterns.java @@ -337,9 +337,10 @@ public class Patterns { + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@"; private static final String PORT_NUMBER = "\\:\\d{1,5}"; - private static final String PATH_AND_QUERY = "\\/(?:(?:[" + LABEL_CHAR - + "\\;\\/\\?\\:\\@\\&\\=\\#\\~" // plus optional query params - + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_\\$])|(?:\\%[a-fA-F0-9]{2}))*"; + private static final String PATH_CHAR = "(?:(?:[" + LABEL_CHAR + + "\\;\\/\\?\\:\\@\\&\\=\\#\\~" + + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_\\$])|(?:\\%[a-fA-F0-9]{2}))"; + private static final String PATH_AND_QUERY = "\\/" + PATH_CHAR + "*"; /** * Regular expression pattern to match most part of RFC 3987 * Internationalized URLs, aka IRIs. @@ -464,6 +465,13 @@ public class Patterns { "(\\+[0-9]+[\\- \\.]*)?" // +* + "(\\([0-9]+\\)[\\- \\.]*)?" // ()* + "([0-9][0-9\\- \\.]+[0-9])"); // + + + public static final Pattern TEL_URI = + Pattern.compile("tel:(?:(?:\\+\\d+)|(?:\\d+;phone-context=" + PATH_CHAR + "+))"); + + public static final Pattern SMS_URI = + Pattern.compile("sms:(?:(?:\\+\\d+)|(?:\\d+;phone-context=" + PATH_CHAR + "+))"); + /** * Convenience method to take all of the non-null matching groups in a * regex Matcher and return them as a concatenated string.