From 14859607ec994ffd9c17a00f0f02e45c57ae388f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 7 Nov 2022 15:47:34 +0100 Subject: [PATCH] limit shown attachment sizes in thread to avoid OOM --- .../smsmessenger/adapters/ThreadAdapter.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 479e14a2..066cbf13 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -8,6 +8,7 @@ import android.graphics.Typeface import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.net.Uri +import android.util.Size import android.util.TypedValue import android.view.Menu import android.view.View @@ -60,6 +61,7 @@ class ThreadAdapter( @SuppressLint("MissingPermission") private val hasMultipleSIMCards = (activity.subscriptionManagerCompat().activeSubscriptionInfoList?.size ?: 0) > 1 + private val maxChatBubbleWidth = activity.usableScreenSize.x * 0.8f init { setupDragListener(true) @@ -374,14 +376,20 @@ class ThreadAdapter( return false } - override fun onResourceReady(dr: Drawable?, a: Any?, t: Target?, d: DataSource?, i: Boolean) = - false + override fun onResourceReady(dr: Drawable?, a: Any?, t: Target?, d: DataSource?, i: Boolean) = false }) + // limit attachment sizes to avoid causing OOM + var wantedAttachmentSize = Size(attachment.width, attachment.height) + if (wantedAttachmentSize.width > maxChatBubbleWidth) { + val newHeight = wantedAttachmentSize.height / (wantedAttachmentSize.width / maxChatBubbleWidth) + wantedAttachmentSize = Size(maxChatBubbleWidth.toInt(), newHeight.toInt()) + } + builder = if (isTallImage) { - builder.override(attachment.width, attachment.width) + builder.override(wantedAttachmentSize.width, wantedAttachmentSize.width) } else { - builder.override(attachment.width, attachment.height) + builder.override(wantedAttachmentSize.width, wantedAttachmentSize.height) } try {