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
This commit is contained in:
Rishabh Bhatia
2025-08-08 18:59:44 +10:00
committed by Jeffrey Starke
parent 7c7f2ff2aa
commit ccd36f199a

View File

@@ -41,11 +41,12 @@ class KeyboardStickerListAdapter(
private inner class StickerViewHolder(itemView: View) : MappingViewHolder<Sticker>(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<StickerHeader>, HasPackId, Header {
fun getTitle(context: Context): String {
return title ?: context.resources.getString(titleResource ?: R.string.StickerManagementAdapter_untitled)