From 6a1ca2ff49bfb2a54326703d23e4a06d8db76743 Mon Sep 17 00:00:00 2001 From: Jernej Virag Date: Mon, 14 Feb 2022 16:19:10 +0000 Subject: [PATCH] Fix loaded size of BigPicture bitmap Right now the big picutre bitmap was loaded at 480px from URI and unrestricted from any other source. This adjusts that size to always consistently restrict it to 358dp, which is the maximum size of notifications. Bug:210690571 Bug:218845090 Test: Manually on device Change-Id: I9586488ba307e19bdc8c1af6f8c99cd369cd94c9 --- .../BigPictureNotificationImageView.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/core/java/com/android/internal/widget/BigPictureNotificationImageView.java b/core/java/com/android/internal/widget/BigPictureNotificationImageView.java index c34a42224f5ae..3a7cf74df4a88 100644 --- a/core/java/com/android/internal/widget/BigPictureNotificationImageView.java +++ b/core/java/com/android/internal/widget/BigPictureNotificationImageView.java @@ -20,16 +20,16 @@ import android.annotation.AttrRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StyleRes; +import android.app.ActivityManager; import android.content.Context; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.net.Uri; import android.util.AttributeSet; -import android.util.Log; import android.widget.ImageView; import android.widget.RemoteViews; -import java.io.IOException; +import com.android.internal.R; /** * An ImageView used by BigPicture Notifications to correctly resolve the Uri in an Icon using the @@ -41,22 +41,32 @@ public class BigPictureNotificationImageView extends ImageView { private static final String TAG = BigPictureNotificationImageView.class.getSimpleName(); + private final int mMaximumDrawableWidth; + private final int mMaximumDrawableHeight; + public BigPictureNotificationImageView(@NonNull Context context) { - super(context); + this(context, null, 0, 0); } public BigPictureNotificationImageView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); + this(context, attrs, 0, 0); } public BigPictureNotificationImageView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { - super(context, attrs, defStyleAttr); + this(context, attrs, defStyleAttr, 0); } public BigPictureNotificationImageView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); + boolean isLowRam = ActivityManager.isLowRamDeviceStatic(); + mMaximumDrawableWidth = context.getResources().getDimensionPixelSize( + isLowRam ? R.dimen.notification_big_picture_max_width_low_ram + : R.dimen.notification_big_picture_max_width); + mMaximumDrawableHeight = context.getResources().getDimensionPixelSize( + isLowRam ? R.dimen.notification_big_picture_max_height_low_ram + : R.dimen.notification_big_picture_max_height); } @Override @@ -85,21 +95,17 @@ public class BigPictureNotificationImageView extends ImageView { private Drawable loadImage(Uri uri) { if (uri == null) return null; - try { - return LocalImageResolver.resolveImage(uri, mContext); - } catch (IOException ex) { - Log.d(TAG, "Resolve failed from " + uri, ex); - return null; - } + return LocalImageResolver.resolveImage(uri, mContext, mMaximumDrawableWidth, + mMaximumDrawableHeight); } private Drawable loadImage(Icon icon) { if (icon == null) return null; - try { - return LocalImageResolver.resolveImage(icon, mContext); - } catch (IOException ex) { - Log.d(TAG, "Resolve failed from " + icon, ex); - return null; + Drawable drawable = LocalImageResolver.resolveImage(icon, mContext, mMaximumDrawableWidth, + mMaximumDrawableHeight); + if (drawable == null) { + return icon.loadDrawable(mContext); } + return drawable; } }