Merge "Use default color when artwork is too small" into rvc-qpr-dev

This commit is contained in:
Beth Thibodeau
2021-01-06 17:06:44 +00:00
committed by Android (Google) Code Review
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 DEFAULT_LUMINOSITY = 0.25f
private const val LUMINOSITY_THRESHOLD = 0.05f private const val LUMINOSITY_THRESHOLD = 0.05f
private const val SATURATION_MULTIPLIER = 0.8f 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, private val LOADING = MediaData(-1, false, 0, null, null, null, null, null,
emptyList(), emptyList(), "INVALID", null, null, null, true, null) emptyList(), emptyList(), "INVALID", null, null, null, true, null)
@@ -380,7 +381,7 @@ class MediaDataManager(
} else { } else {
null null
} }
val bgColor = artworkBitmap?.let { computeBackgroundColor(it) } ?: Color.DKGRAY val bgColor = artworkBitmap?.let { computeBackgroundColor(it) } ?: DEFAULT_COLOR
val mediaAction = getResumeMediaAction(resumeAction) val mediaAction = getResumeMediaAction(resumeAction)
foregroundExecutor.execute { foregroundExecutor.execute {
@@ -559,12 +560,14 @@ class MediaDataManager(
private fun computeBackgroundColor(artworkBitmap: Bitmap?): Int { private fun computeBackgroundColor(artworkBitmap: Bitmap?): Int {
var color = Color.WHITE var color = Color.WHITE
if (artworkBitmap != null) { if (artworkBitmap != null && artworkBitmap.width > 1 && artworkBitmap.height > 1) {
// If we have art, get colors from that // If we have valid art, get colors from that
val p = MediaNotificationProcessor.generateArtworkPaletteBuilder(artworkBitmap) val p = MediaNotificationProcessor.generateArtworkPaletteBuilder(artworkBitmap)
.generate() .generate()
val swatch = MediaNotificationProcessor.findBackgroundSwatch(p) val swatch = MediaNotificationProcessor.findBackgroundSwatch(p)
color = swatch.rgb color = swatch.rgb
} else {
return DEFAULT_COLOR
} }
// Adapt background color, so it's always subdued and text is legible // Adapt background color, so it's always subdued and text is legible
val tmpHsl = floatArrayOf(0f, 0f, 0f) 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.Notification.MediaStyle
import android.app.PendingIntent import android.app.PendingIntent
import android.graphics.Bitmap
import android.media.MediaDescription import android.media.MediaDescription
import android.media.MediaMetadata import android.media.MediaMetadata
import android.media.session.MediaController import android.media.session.MediaController
@@ -246,4 +247,26 @@ class MediaDataManagerTest : SysuiTestCase() {
verify(listener).onMediaDataRemoved(eq(KEY)) 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)
}
} }