Merge "Use default color when artwork is too small" into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6ae71ece49
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user