From ccd36f199af42d7748639a319d41b44e75ac84d8 Mon Sep 17 00:00:00 2001 From: Rishabh Bhatia Date: Fri, 8 Aug 2025 18:59:44 +1000 Subject: [PATCH] Fixes a significant memory leak in the sticker keyboard, which caused UI lag and system slowdowns, particularly on lower-end devices. Closes signalapp/Signal-Android#14283 Fixes signalapp/Signal-Android#13770 --- .../keyboard/sticker/KeyboardStickerListAdapter.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/KeyboardStickerListAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/KeyboardStickerListAdapter.kt index 293460edde..b1d1ff0647 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/KeyboardStickerListAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/KeyboardStickerListAdapter.kt @@ -41,11 +41,12 @@ class KeyboardStickerListAdapter( private inner class StickerViewHolder(itemView: View) : MappingViewHolder(itemView) { - private val image: ImageView = findViewById(R.id.sticker_keyboard_page_image) + val image: ImageView = findViewById(R.id.sticker_keyboard_page_image) override fun bind(model: Sticker) { requestManager.load(model.uri) .set(ApngOptions.ANIMATE, allowApngAnimation) + .skipMemoryCache(true) .transition(DrawableTransitionOptions.withCrossFade()) .into(image) @@ -62,6 +63,12 @@ class KeyboardStickerListAdapter( } } + override fun onViewRecycled(holder: MappingViewHolder<*>) { + if (holder is StickerViewHolder) { + requestManager.clear(holder.image) + } + } + data class StickerHeader(override val packId: String, private val title: String?, private val titleResource: Int?) : MappingModel, HasPackId, Header { fun getTitle(context: Context): String { return title ?: context.resources.getString(titleResource ?: R.string.StickerManagementAdapter_untitled)