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

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I5d139c24f7383d3cb6751ded3a7a78d91555ff89
This commit is contained in:
Beth Thibodeau
2021-01-06 17:29:59 +00:00
committed by Automerger Merge Worker
2 changed files with 29 additions and 3 deletions

View File

@@ -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)

View File

@@ -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)
}
}