fix(android): always use dominant swatch for NowPlaying background
android / Build + lint + test (push) Has been cancelled
android / Build + lint + test (push) Has been cancelled
Operator framing: the cover art is the main feature of NowPlaying, not the background. A vibrant accent on the cover (small bright logo, sticker, stripe) should pop against the background, not be matched by it. The previous vibrant → muted → dominant fallback chain often picked a high-saturation accent that covered only a sliver of the cover, producing gradients that clashed with the actual image. Drop to dominantSwatch only — the majority-by-pixel-count color. If the palette resolves no dominant swatch (extremely rare; essentially uniform/empty bitmap) the held color stays on the previous track's dominant, matching the existing "keep previous on failure" docstring contract.
This commit is contained in:
@@ -59,9 +59,14 @@ fun rememberDominantColor(coverUrl: String?): Color {
|
||||
val palette = withContext(Dispatchers.Default) {
|
||||
Palette.from(bitmap).generate()
|
||||
}
|
||||
val swatch = palette.vibrantSwatch
|
||||
?: palette.mutedSwatch
|
||||
?: palette.dominantSwatch
|
||||
// Always use the dominant (majority-by-pixel-count) swatch.
|
||||
// The cover art is the main feature of this view; a vibrant
|
||||
// accent on the cover should pop against the background, not
|
||||
// be matched by it. Previously we tried vibrant first, which
|
||||
// picked the highest-saturation swatch even when it covered
|
||||
// a tiny fraction of the cover — small bright accents made
|
||||
// the gradient feel disconnected from the actual image.
|
||||
val swatch = palette.dominantSwatch
|
||||
if (swatch != null) {
|
||||
extracted = Color(swatch.rgb)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user