Loading packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt +6 −3 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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 { Loading Loading @@ -559,12 +560,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) Loading packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt +23 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) } } Loading
packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt +6 −3 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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 { Loading Loading @@ -559,12 +560,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) Loading
packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt +23 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) } }