run xmpp uris through XmppUri parser before displaying them

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java |  3 +
src/main/java/eu/siacs/conversations/utils/XmppUri.java     | 11 +++---
2 files changed, 9 insertions(+), 5 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java 🔗

@@ -29,6 +29,7 @@
 
 package eu.siacs.conversations.ui.util;
 
+import android.net.Uri;
 import android.text.Editable;
 import android.text.style.URLSpan;
 import android.text.util.Linkify;
@@ -39,6 +40,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import eu.siacs.conversations.ui.text.FixedURLSpan;
 import eu.siacs.conversations.utils.Patterns;
+import eu.siacs.conversations.utils.XmppUri;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Comparator;
@@ -59,6 +61,7 @@ public class MyLinkify {
                     case "tel" -> Patterns.URI_TEL.matcher(match).matches();
                     case "http", "https" -> Patterns.URI_HTTP.matcher(match).matches();
                     case "geo" -> Patterns.URI_GEO.matcher(match).matches();
+                    case "xmpp" -> new XmppUri(Uri.parse(match.toString())).isValidJid();
                     default -> true;
                 };
             };

src/main/java/eu/siacs/conversations/utils/XmppUri.java 🔗

@@ -45,19 +45,19 @@ public class XmppUri {
         }
     }
 
-    public XmppUri(Uri uri) {
+    public XmppUri(final Uri uri) {
         parse(uri);
     }
 
-    public XmppUri(Uri uri, boolean safeSource) {
+    public XmppUri(final Uri uri, final boolean safeSource) {
         this.safeSource = safeSource;
         parse(uri);
     }
 
-    private static Map<String, String> parseParameters(final String query, final char seperator) {
+    private static Map<String, String> parseParameters(final String query, final char separator) {
         final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<>();
         final String[] pairs =
-                query == null ? new String[0] : query.split(String.valueOf(seperator));
+                query == null ? new String[0] : query.split(String.valueOf(separator));
         for (String pair : pairs) {
             final String[] parts = pair.split("=", 2);
             if (parts.length == 0) {
@@ -251,7 +251,8 @@ public class XmppUri {
         public final String fingerprint;
         final int deviceId;
 
-        public Fingerprint(FingerprintType type, String fingerprint, int deviceId) {
+        public Fingerprint(
+                final FingerprintType type, final String fingerprint, final int deviceId) {
             this.type = type;
             this.fingerprint = fingerprint;
             this.deviceId = deviceId;