Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a6c5db1 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Keep original bitmap's dimensions during processing.

Fixes: 324390147
Test: repro steps in the bug

Change-Id: I1a44225fd8ad251ad9c2bd55f31fec6217624a1c
Merged-In: I1a44225fd8ad251ad9c2bd55f31fec6217624a1c
(cherry picked from commit 0d8bbbde)
parent 876ac6d9
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -555,6 +555,28 @@ public class PackageArchiver {
        return iconFile.toPath();
    }

    /**
     * An extension of {@link BitmapDrawable} which returns the bitmap pixel size as intrinsic size.
     * This allows the badging to be done based on the actual bitmap size rather than
     * the scaled bitmap size.
     */
    private static class FixedSizeBitmapDrawable extends BitmapDrawable {

        FixedSizeBitmapDrawable(@Nullable final Bitmap bitmap) {
            super(null, bitmap);
        }

        @Override
        public int getIntrinsicHeight() {
            return getBitmap().getWidth();
        }

        @Override
        public int getIntrinsicWidth() {
            return getBitmap().getWidth();
        }
    }

    /**
     * Create an <a
     * href="https://developer.android.com/develop/ui/views/launch/icon_design_adaptive">
@@ -568,6 +590,11 @@ public class PackageArchiver {
        }

        // see BaseIconFactory#createShapedIconBitmap
        if (iconDrawable instanceof BitmapDrawable) {
            var icon = ((BitmapDrawable) iconDrawable).getBitmap();
            iconDrawable = new FixedSizeBitmapDrawable(icon);
        }

        float inset = getExtraInsetFraction();
        inset = inset / (1 + 2 * inset);
        Drawable d = new AdaptiveIconDrawable(new ColorDrawable(Color.BLACK),