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

Commit 494599d3 authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Android Build Coastguard Worker
Browse files

Fix crash when loading album art by resource

When the album art is loaded from the notification largeIcon it may be a
resource rather than a bitmap, so it has to be loaded as a drawable.
Bitmaps are still loaded using `WallpaperColors.fromBitmap` to avoid
the extra steps needed by the `fromDrawable` method.

Fixes: 239368697
Test: manual
Test: atest MediaControlPanelTest
Change-Id: I0ba9a4b0f4d308cc360a785b68cbabdcb2480690
(cherry picked from commit ef53f601)
(cherry picked from commit d0c1f811)
Merged-In: I0ba9a4b0f4d308cc360a785b68cbabdcb2480690
parent cf589310
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -631,9 +631,22 @@ public class MediaControlPanel {
            Drawable artwork;
            boolean isArtworkBound;
            Icon artworkIcon = data.getArtwork();
            WallpaperColors wallpaperColors = null;
            if (artworkIcon != null) {
                WallpaperColors wallpaperColors = WallpaperColors
                if (artworkIcon.getType() == Icon.TYPE_BITMAP
                        || artworkIcon.getType() == Icon.TYPE_ADAPTIVE_BITMAP) {
                    // Avoids extra processing if this is already a valid bitmap
                    wallpaperColors = WallpaperColors
                            .fromBitmap(artworkIcon.getBitmap());
                } else {
                    Drawable artworkDrawable = artworkIcon.loadDrawable(mContext);
                    if (artworkDrawable != null) {
                        wallpaperColors = WallpaperColors
                                .fromDrawable(artworkIcon.loadDrawable(mContext));
                    }
                }
            }
            if (wallpaperColors != null) {
                mutableColorScheme = new ColorScheme(wallpaperColors, true, Style.CONTENT);
                artwork = getScaledBackground(artworkIcon, width, height);
                isArtworkBound = true;
+13 −0
Original line number Diff line number Diff line
@@ -546,6 +546,19 @@ public class MediaControlPanelTest : SysuiTestCase() {
        verify(albumView).setLayerType(View.LAYER_TYPE_HARDWARE, null)
    }

    @Test
    fun bindAlbumView_artUsesResource() {
        val albumArt = Icon.createWithResource(context, R.drawable.ic_android)
        val state = mediaData.copy(artwork = albumArt)

        player.attachPlayer(viewHolder)
        player.bindPlayer(state, PACKAGE)
        bgExecutor.runAllReady()
        mainExecutor.runAllReady()

        verify(albumView).setImageDrawable(any(Drawable::class.java))
    }

    @Test
    fun bindAlbumView_setAfterExecutors() {
        val bmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)