diff options
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.java | 34 |
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)); } |