summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/app/fedilab/android/helper/SpannableHelper.java')
-rw-r--r--app/src/main/java/app/fedilab/android/helper/SpannableHelper.java34
1 files changed, 32 insertions, 2 deletions
diff --git a/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java b/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java
index c9c45c7b0..c23c7f032 100644
--- a/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java
+++ b/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java
@@ -54,6 +54,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -89,6 +90,17 @@ public class SpannableHelper {
if (text == null) {
return null;
}
+ Pattern imgPattern = Pattern.compile("<img [^>]*src=\"([^\"]+)\"[^>]*>");
+ Matcher matcherImg = imgPattern.matcher(text);
+ HashMap<String, String> imagesToReplace = new LinkedHashMap<>();
+ int inc = 0;
+ while (matcherImg.find()) {
+ String replacement = "[FEDI_IMG_" + inc + "]";
+ imagesToReplace.put(replacement, matcherImg.group(1));
+ inc++;
+ text = text.replaceAll(Pattern.quote(matcherImg.group()), replacement);
+ }
+
SpannableStringBuilder content;
View view = viewWeakReference.get();
List<Mention> mentionList = null;
@@ -132,9 +144,9 @@ public class SpannableHelper {
} else {
content = new SpannableStringBuilder(text);
}
+ SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
+ boolean animate = !sharedpreferences.getBoolean(context.getString(R.string.SET_DISABLE_ANIMATED_EMOJI), false);
if (emojiList != null && emojiList.size() > 0) {
- SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
- boolean animate = !sharedpreferences.getBoolean(context.getString(R.string.SET_DISABLE_ANIMATED_EMOJI), false);
for (Emoji emoji : emojiList) {
Matcher matcher = Pattern.compile(":" + emoji.shortcode + ":", Pattern.LITERAL)
.matcher(content);
@@ -148,6 +160,24 @@ public class SpannableHelper {
}
}
}
+
+ if (imagesToReplace.size() > 0) {
+ for (Map.Entry<String, String> entry : imagesToReplace.entrySet()) {
+ String key = entry.getKey();
+ String url = entry.getValue();
+ Matcher matcher = Pattern.compile(key, Pattern.LITERAL)
+ .matcher(content);
+ while (matcher.find()) {
+ CustomEmoji customEmoji = new CustomEmoji(new WeakReference<>(view));
+ content.setSpan(customEmoji, matcher.start(), matcher.end(), 0);
+ Glide.with(view)
+ .asDrawable()
+ .load(url)
+ .into(customEmoji.getTarget(animate));
+ }
+ }
+
+ }
return trimSpannable(new SpannableStringBuilder(content));
}