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

Commit 246bde6b authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Automerger Merge Worker
Browse files

Merge "Use default color when artwork is too small" into rvc-qpr-dev am: 6ae71ece

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13287026

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I5d139c24f7383d3cb6751ded3a7a78d91555ff89
parents 4a1a9748 6ae71ece
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ private const val DEBUG = true
private const val DEFAULT_LUMINOSITY = 0.25f
private const val LUMINOSITY_THRESHOLD = 0.05f
private const val SATURATION_MULTIPLIER = 0.8f
const val DEFAULT_COLOR = Color.DKGRAY

private val LOADING = MediaData(-1, false, 0, null, null, null, null, null,
        emptyList(), emptyList(), "INVALID", null, null, null, true, null)
@@ -380,7 +381,7 @@ class MediaDataManager(
        } else {
            null
        }
        val bgColor = artworkBitmap?.let { computeBackgroundColor(it) } ?: Color.DKGRAY
        val bgColor = artworkBitmap?.let { computeBackgroundColor(it) } ?: DEFAULT_COLOR

        val mediaAction = getResumeMediaAction(resumeAction)
        foregroundExecutor.execute {
@@ -560,12 +561,14 @@ class MediaDataManager(

    private fun computeBackgroundColor(artworkBitmap: Bitmap?): Int {
        var color = Color.WHITE
        if (artworkBitmap != null) {
            // If we have art, get colors from that
        if (artworkBitmap != null && artworkBitmap.width > 1 && artworkBitmap.height > 1) {
            // If we have valid art, get colors from that
            val p = MediaNotificationProcessor.generateArtworkPaletteBuilder(artworkBitmap)
                    .generate()
            val swatch = MediaNotificationProcessor.findBackgroundSwatch(p)
            color = swatch.rgb
        } else {
            return DEFAULT_COLOR
        }
        // Adapt background color, so it's always subdued and text is legible
        val tmpHsl = floatArrayOf(0f, 0f, 0f)
+23 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ package com.android.systemui.media

import android.app.Notification.MediaStyle
import android.app.PendingIntent
import android.graphics.Bitmap
import android.media.MediaDescription
import android.media.MediaMetadata
import android.media.session.MediaController
@@ -246,4 +247,26 @@ class MediaDataManagerTest : SysuiTestCase() {

        verify(listener).onMediaDataRemoved(eq(KEY))
    }

    @Test
    fun testBadArtwork_doesNotUse() {
        // WHEN notification has a too-small artwork
        val artwork = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
        val notif = SbnBuilder().run {
            setPkg(PACKAGE_NAME)
            modifyNotification(context).also {
                it.setSmallIcon(android.R.drawable.ic_media_pause)
                it.setStyle(MediaStyle().apply { setMediaSession(session.sessionToken) })
                it.setLargeIcon(artwork)
            }
            build()
        }
        mediaDataManager.onNotificationAdded(KEY, notif)

        // THEN it loads and uses the default background color
        assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
        assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
        verify(listener).onMediaDataLoaded(eq(KEY), eq(null), capture(mediaDataCaptor))
        assertThat(mediaDataCaptor.value!!.backgroundColor).isEqualTo(DEFAULT_COLOR)
    }
}