From 636b540e6eb4d7738efe107cecccc93d1edf6239 Mon Sep 17 00:00:00 2001 From: Ruben Gees Date: Fri, 27 Apr 2018 19:26:31 +0200 Subject: [PATCH] Add a switch for enabling and disabling BBCode emoticons This improves the performance for views not needing them --- .../kotlin/me/proxer/app/forum/PostAdapter.kt | 2 ++ .../proxer/app/ui/view/bbcode/BBCodeView.kt | 3 +++ .../me/proxer/app/ui/view/bbcode/BBTree.kt | 11 ++++++++-- .../ui/view/bbcode/prototype/RootPrototype.kt | 20 +++++++++++++------ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/me/proxer/app/forum/PostAdapter.kt b/src/main/kotlin/me/proxer/app/forum/PostAdapter.kt index 3dcdcb1a..bd5ce432 100644 --- a/src/main/kotlin/me/proxer/app/forum/PostAdapter.kt +++ b/src/main/kotlin/me/proxer/app/forum/PostAdapter.kt @@ -75,12 +75,14 @@ class PostAdapter : BaseAdapter() { } post.glide = glide + post.enableEmotions = true post.heightChangedListener = { post.requestLayout() layoutManager?.requestSimpleAnimationsInNextLayout() } signature.glide = glide + post.enableEmotions = true signature.heightChangedListener = { signature.requestLayout() layoutManager?.requestSimpleAnimationsInNextLayout() diff --git a/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBCodeView.kt b/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBCodeView.kt index 871ce354..60c34f11 100644 --- a/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBCodeView.kt +++ b/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBCodeView.kt @@ -26,6 +26,7 @@ class BBCodeView @JvmOverloads constructor( var heightChangedListener: (() -> Unit)? = null var glide: GlideRequests? = null var userId: String? = null + var enableEmotions = false init { orientation = VERTICAL @@ -60,7 +61,9 @@ class BBCodeView @JvmOverloads constructor( tree.glide = glide tree.userId = userId + tree.enableEmoticons = enableEmotions tree.makeViews(context).forEach { this.addView(it) } + tree.enableEmoticons = false tree.userId = null tree.glide = null } diff --git a/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBTree.kt b/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBTree.kt index 297fc9f3..7e8f4e6e 100644 --- a/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBTree.kt +++ b/src/main/kotlin/me/proxer/app/ui/view/bbcode/BBTree.kt @@ -22,6 +22,7 @@ class BBTree( companion object { internal const val GLIDE_ARGUMENT = "glide" internal const val USER_ID_ARGUMENT = "userId" + internal const val ENABLE_EMOTICONS_ARGUMENT = "enable_emoticons" } var glide: GlideRequests? = null @@ -42,9 +43,15 @@ class BBTree( } } + var enableEmoticons: Boolean = false + fun endsWith(code: String) = prototype.endRegex.matches(code) - fun makeViews(context: Context) = prototype.makeViews(context, children, - args.plus(arrayOf(GLIDE_ARGUMENT to glide, USER_ID_ARGUMENT to userId))) + + fun makeViews(context: Context) = prototype.makeViews(context, children, args.plus(arrayOf( + GLIDE_ARGUMENT to glide, + USER_ID_ARGUMENT to userId, + ENABLE_EMOTICONS_ARGUMENT to enableEmoticons + ))) fun optimize() = recursiveOptimize().first() diff --git a/src/main/kotlin/me/proxer/app/ui/view/bbcode/prototype/RootPrototype.kt b/src/main/kotlin/me/proxer/app/ui/view/bbcode/prototype/RootPrototype.kt index 3e7479c4..c6687963 100644 --- a/src/main/kotlin/me/proxer/app/ui/view/bbcode/prototype/RootPrototype.kt +++ b/src/main/kotlin/me/proxer/app/ui/view/bbcode/prototype/RootPrototype.kt @@ -6,6 +6,7 @@ import me.proxer.app.GlideRequests import me.proxer.app.ui.view.GifAwareTextView import me.proxer.app.ui.view.bbcode.BBCodeEmoticons import me.proxer.app.ui.view.bbcode.BBTree +import me.proxer.app.ui.view.bbcode.BBTree.Companion.ENABLE_EMOTICONS_ARGUMENT import me.proxer.app.ui.view.bbcode.BBTree.Companion.GLIDE_ARGUMENT import me.proxer.app.ui.view.bbcode.applyToViews @@ -19,13 +20,20 @@ object RootPrototype : BBPrototype { override fun makeViews(context: Context, children: List, args: Map): List { val views = super.makeViews(context, children, args) - val glide = args[GLIDE_ARGUMENT] as GlideRequests? + val enableEmotions = args[ENABLE_EMOTICONS_ARGUMENT] as Boolean? - return when (glide) { - null -> views - else -> applyToViews(views, { view: GifAwareTextView -> - BBCodeEmoticons.replaceWithGifs(view, glide) - }) + return when (enableEmotions) { + true -> { + val glide = args[GLIDE_ARGUMENT] as GlideRequests? + + when (glide) { + null -> views + else -> applyToViews(views, { view: GifAwareTextView -> + BBCodeEmoticons.replaceWithGifs(view, glide) + }) + } + } + else -> views } } }