count xmpp uris when disableing text selection

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java | 19 
1 file changed, 16 insertions(+), 3 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java 🔗

@@ -35,6 +35,7 @@ import java.lang.ref.WeakReference;
 import java.net.URL;
 import java.util.List;
 import java.util.concurrent.RejectedExecutionException;
+import java.util.regex.MatchResult;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -352,14 +353,26 @@ public class MessageAdapter extends ArrayAdapter<Message> {
 				viewHolder.messageBody.setText(span);
 			}
 			int urlCount = 0;
-			Matcher matcher = Patterns.WEB_URL.matcher(body);
+			final Matcher matcher = Patterns.WEB_URL.matcher(body);
+			int beginWebURL = Integer.MAX_VALUE;
+			int endWebURL = 0;
 			while (matcher.find()) {
+				MatchResult result = matcher.toMatchResult();
+				beginWebURL = result.start();
+				endWebURL = result.end();
 				urlCount++;
 			}
-			Matcher geoMatcher = GeoHelper.GEO_URI.matcher(body);
-			while (matcher.find()) {
+			final Matcher geoMatcher = GeoHelper.GEO_URI.matcher(body);
+			while (geoMatcher.find()) {
 				urlCount++;
 			}
+			final Matcher xmppMatcher = XMPP_PATTERN.matcher(body);
+			while (xmppMatcher.find()) {
+				MatchResult result = xmppMatcher.toMatchResult();
+				if (beginWebURL < result.start() || endWebURL > result.end()) {
+					urlCount++;
+				}
+			}
 			viewHolder.messageBody.setTextIsSelectable(urlCount <= 1);
 			viewHolder.messageBody.setAutoLinkMask(0);
 			Linkify.addLinks(viewHolder.messageBody, Linkify.WEB_URLS);