aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java19
1 files changed, 16 insertions, 3 deletions
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 c08b41f0..74bfb491 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
+++ b/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);