From ef0f8d4507391dafba2fc9d2b691a117e84b40fc Mon Sep 17 00:00:00 2001 From: lookshe Date: Fri, 21 Aug 2015 19:58:16 +0200 Subject: fixes FS#42 - Smilie replacement in url --- .../ankushsachdeva/emojicon/EmojiconHandler.java | 26 +++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java index 958ac760..bc1d670d 100644 --- a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java +++ b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java @@ -19,10 +19,16 @@ import github.ankushsachdeva.emojicon.R; import android.content.Context; import android.text.Spannable; +import android.util.Pair; +import android.util.Patterns; import android.util.SparseIntArray; +import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.Map; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1440,13 +1446,20 @@ public final class EmojiconHandler { spannable.removeSpan(oldSpans[i]); } boolean hasChanges = false; + + Matcher webUrlMatcher = Patterns.WEB_URL.matcher(spannable); + Set> webUrls = new HashSet>(); + while (webUrlMatcher.find()) { + webUrls.add(Pair.create(webUrlMatcher.start(), webUrlMatcher.end())); + } + Map emoticons = ANDROID_EMOTICONS; for (Map.Entry entry : emoticons.entrySet()) { Matcher matcher = entry.getKey().matcher(spannable); while (matcher.find()) { boolean set = true; for (EmojiconImageSpan span : spannable.getSpans(matcher.start(), - matcher.end(), EmojiconImageSpan.class)) + matcher.end(), EmojiconImageSpan.class)) { if (spannable.getSpanStart(span) >= matcher.start() && spannable.getSpanEnd(span) <= matcher.end()) spannable.removeSpan(span); @@ -1454,6 +1467,17 @@ public final class EmojiconHandler { set = false; break; } + } + if (set) { + // check that found emojicon is not in an web url + for (Pair webUrl : webUrls) { + if ((matcher.start() >= webUrl.first && matcher.start() <= webUrl.second) + || (matcher.end() >= webUrl.first && matcher.end() <= webUrl.second)) { + set = false; + break; + } + } + } if (set) { spannable.setSpan(new EmojiconImageSpan(context, entry.getValue()), matcher.start(), matcher.end(), -- cgit v1.2.3