diff --git a/app/src/main/java/com/keylesspalace/tusky/view/CustomEmojiTextView.kt b/app/src/main/java/com/keylesspalace/tusky/view/CustomEmojiTextView.kt
new file mode 100644
index 00000000..d3a85153
--- /dev/null
+++ b/app/src/main/java/com/keylesspalace/tusky/view/CustomEmojiTextView.kt
@@ -0,0 +1,60 @@
+package com.keylesspalace.tusky.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.os.Build
+import android.text.Layout
+import android.text.Spannable
+import android.util.AttributeSet
+import android.util.Log
+import androidx.emoji.widget.EmojiAppCompatTextView
+import com.keylesspalace.tusky.R
+import com.keylesspalace.tusky.entity.Emoji
+import com.keylesspalace.tusky.util.EmojiSpan
+import com.keylesspalace.tusky.util.LinkHelper
+import com.keylesspalace.tusky.util.emojify
+
+/*
+ * This is a TextView that changes break strategy to simple
+ * if there is too much custom emojis
+ *
+ * Fixes Android performance bug
+ */
+
+class CustomEmojiTextView
+@JvmOverloads constructor(context:Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+): EmojiAppCompatTextView(context, attrs, defStyleAttr) {
+ private var oldBreakStrategy = 1 // Layout.BREAK_STRATEGY_HIGH_QUALITY
+
+ @SuppressLint("WrongConstant")
+ override fun setText(text: CharSequence?, type: BufferType?) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ var overridden = false
+
+ // don't change if break strategy already simple
+ if(text is Spannable && breakStrategy != Layout.BREAK_STRATEGY_SIMPLE) {
+ val spans = text.getSpans(0, text.length, EmojiSpan::class.java)
+
+ if (spans.size >= SPAN_LIMIT) {
+ oldBreakStrategy = breakStrategy
+ breakStrategy = Layout.BREAK_STRATEGY_SIMPLE
+ overridden = true
+
+ Log.d("CustomEmojiTextView", "break strategy overriden!");
+ }
+ }
+
+ if(!overridden)
+ breakStrategy = oldBreakStrategy
+ }
+
+ super.setText(text, type)
+ }
+
+ companion object {
+ const val SPAN_LIMIT = 100 // heuristics
+ }
+}
+
diff --git a/app/src/main/res/layout/item_chat.xml b/app/src/main/res/layout/item_chat.xml
index 694ad1f9..629b5171 100644
--- a/app/src/main/res/layout/item_chat.xml
+++ b/app/src/main/res/layout/item_chat.xml
@@ -87,13 +87,14 @@
app:layout_constraintBaseline_toBaselineOf="@id/status_display_name"
tools:text="13:37" />
-
-
-
-
-
-
-
-
-
-
-
-
-