aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java26
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/http/HttpDownloadConnection.java6
2 files changed, 28 insertions, 4 deletions
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<Pair<Integer, Integer>> webUrls = new HashSet<Pair<Integer, Integer>>();
+ while (webUrlMatcher.find()) {
+ webUrls.add(Pair.create(webUrlMatcher.start(), webUrlMatcher.end()));
+ }
+
Map<Pattern, Integer> emoticons = ANDROID_EMOTICONS;
for (Map.Entry<Pattern, Integer> 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<Integer, Integer> 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(),
diff --git a/src/main/java/de/thedevstack/conversationsplus/http/HttpDownloadConnection.java b/src/main/java/de/thedevstack/conversationsplus/http/HttpDownloadConnection.java
index 3f66be21..834539d5 100644
--- a/src/main/java/de/thedevstack/conversationsplus/http/HttpDownloadConnection.java
+++ b/src/main/java/de/thedevstack/conversationsplus/http/HttpDownloadConnection.java
@@ -150,7 +150,7 @@ public class HttpDownloadConnection implements Transferable {
return;
}
file.setExpectedSize(size);
- if (size <= mHttpConnectionManager.getAutoAcceptFileSize()) {
+ if (size != -1 && size <= mHttpConnectionManager.getAutoAcceptFileSize()) {
HttpDownloadConnection.this.acceptedAutomatically = true;
new Thread(new FileDownloader(interactive)).start();
} else {
@@ -171,12 +171,12 @@ public class HttpDownloadConnection implements Transferable {
connection.connect();
String contentLength = connection.getHeaderField("Content-Length");
if (contentLength == null) {
- throw new IOException();
+ return -1;
}
try {
return Long.parseLong(contentLength, 10);
} catch (NumberFormatException e) {
- throw new IOException();
+ return -1;
}
}