From dd397eac4901c7e08607f0d974a5b8181ca5bc37 Mon Sep 17 00:00:00 2001 From: Jernej Virag Date: Thu, 21 Apr 2022 07:22:41 +0000 Subject: [PATCH] Prevent LocalImageResolver from upscaling images LocalImageResolver should not upscale the image if it's already smaller than the maximum width. Bug: 228719813 Test: atest LocalImageResolverTest New test failed before change / passed after change Change-Id: I4fc09d1955fe94159cf0e2e8125044712f3c3134 --- .../android/internal/widget/LocalImageResolver.java | 5 +++++ .../internal/widget/LocalImageResolverTest.java | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/core/java/com/android/internal/widget/LocalImageResolver.java b/core/java/com/android/internal/widget/LocalImageResolver.java index c9953513a97a8..b866723954b5b 100644 --- a/core/java/com/android/internal/widget/LocalImageResolver.java +++ b/core/java/com/android/internal/widget/LocalImageResolver.java @@ -198,6 +198,11 @@ public class LocalImageResolver { } final Size size = info.getSize(); + if (size.getWidth() <= maxWidth && size.getHeight() <= maxHeight) { + // We don't want to upscale images needlessly. + return; + } + if (size.getWidth() > size.getHeight()) { if (size.getWidth() > maxWidth) { final int targetHeight = size.getHeight() * maxWidth / size.getWidth(); diff --git a/core/tests/coretests/src/com/android/internal/widget/LocalImageResolverTest.java b/core/tests/coretests/src/com/android/internal/widget/LocalImageResolverTest.java index 033c3cae5beb7..c63d18bfa5315 100644 --- a/core/tests/coretests/src/com/android/internal/widget/LocalImageResolverTest.java +++ b/core/tests/coretests/src/com/android/internal/widget/LocalImageResolverTest.java @@ -194,6 +194,17 @@ public class LocalImageResolverTest { assertThat(bd.getBitmap().getHeight()).isGreaterThan(51); } + @Test + public void resolveImage_smallBitmapIcon_passedSmallerSize_dontResize() { + Icon icon = Icon.createWithResource(mContext.getResources(), R.drawable.test32x24); + Drawable d = LocalImageResolver.resolveImage(icon, mContext, 600, 450); + + assertThat(d).isInstanceOf(BitmapDrawable.class); + BitmapDrawable bd = (BitmapDrawable) d; + assertThat(bd.getBitmap().getWidth()).isEqualTo(32); + assertThat(bd.getBitmap().getHeight()).isEqualTo(24); + } + @Test public void resolveImage_largeBitmapIcon_passedSize_resizeToDefinedSize() { Icon icon = Icon.createWithBitmap(