From beb9dd69e4eb56818a8cfa04b40a861b1c19c920 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 11 May 2020 22:15:36 +0300 Subject: [PATCH] CustomEmojiHelper: add a way to disable big emojis --- .../tusky/util/CustomEmojiHelper.kt | 43 ++++++++++++++++--- app/src/main/res/values/husky.xml | 1 + app/src/main/res/xml/preferences.xml | 6 +++ 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt index c29cc9f8..29870080 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt @@ -43,7 +43,11 @@ import androidx.preference.PreferenceManager * @param view a reference to the a view the emojis will be shown in (should be the TextView, but parents of the TextView are also acceptable) * @return the text with the shortcodes replaced by EmojiSpans */ -fun emojifyText(text: Spanned, emojis: List?, view: View) : Spanned { +fun emojifyText(text: Spanned, emojis: List?, view: View, forceSmallEmoji: Boolean) : Spanned { + val pm = PreferenceManager.getDefaultSharedPreferences(view.context) + val smallEmojis = forceSmallEmoji || !pm.getBoolean("bigEmojis", true) + // val animatedEmojis = pm.getBoolean("animateEmojis", false) + if (emojis != null && emojis.isNotEmpty()) { val builder = SpannableStringBuilder(text) for (emoji in emojis) { @@ -51,7 +55,11 @@ fun emojifyText(text: Spanned, emojis: List?, view: View) : Spanned { val matcher = Pattern.compile(pattern.toString(), Pattern.LITERAL) .matcher(text) while(matcher.find()) { - val span = EmojiSpan(WeakReference(view)) + val span = if(smallEmojis) { + SmallEmojiSpan(WeakReference(view)) + } else { + EmojiSpan(WeakReference(view)) + } builder.setSpan(span, matcher.start(), matcher.end(), 0); Glide.with(view) .asBitmap() @@ -66,11 +74,19 @@ fun emojifyText(text: Spanned, emojis: List?, view: View) : Spanned { return text } -fun emojifyString(string: String, emojis: List?, view: View) : Spanned { - return emojifyText(SpannedString(string), emojis, view) +fun emojifyText(text: Spanned, emojis: List?, view: View) : Spanned { + return emojifyText(text, emojis, view, false) } -public class EmojiSpan(val viewWeakReference: WeakReference) : ReplacementSpan() { +fun emojifyString(string: String, emojis: List?, view: View, forceSmallEmoji: Boolean) : Spanned { + return emojifyText(SpannedString(string), emojis, view, forceSmallEmoji) +} + +fun emojifyString(string: String, emojis: List?, view: View) : Spanned { + return emojifyString(string, emojis, view, false) +} + +public open class EmojiSpan(val viewWeakReference: WeakReference) : ReplacementSpan() { var imageDrawable: Drawable? = null override fun getSize(paint: Paint, text: CharSequence, start: Int, end: Int, fm: Paint.FontMetricsInt?) : Int { @@ -118,3 +134,20 @@ public class EmojiSpan(val viewWeakReference: WeakReference) : Replacement } } } + +public class SmallEmojiSpan(viewWeakReference: WeakReference) + : EmojiSpan(viewWeakReference) { + override fun getSize(paint: Paint, text: CharSequence, start: Int, end: Int, fm: Paint.FontMetricsInt?): Int { + if (fm != null) { + /* update FontMetricsInt or otherwise span does not get drawn when + * it covers the whole text */ + val metrics = paint.fontMetricsInt + fm.top = metrics.top + fm.ascent = metrics.ascent + fm.descent = metrics.descent + fm.bottom = metrics.bottom + } + + return paint.textSize.toInt() + } +} \ No newline at end of file diff --git a/app/src/main/res/values/husky.xml b/app/src/main/res/values/husky.xml index c21b60fc..9759fe91 100644 --- a/app/src/main/res/values/husky.xml +++ b/app/src/main/res/values/husky.xml @@ -26,5 +26,6 @@ Default formatting syntax(if supported by instance) my posts are reacted with emojis Hide muted users + Enable bigger custom emojis diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 1ea25247..cc3fe008 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -96,6 +96,12 @@ android:title="@string/pref_title_enable_swipe_for_tabs" app:singleLineTitle="false" /> + +