fix(android): always use dominant swatch for NowPlaying background
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:
2026-06-02 10:24:19 -04:00
parent 516d22fc73
commit 5fd1a5724a
@@ -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)
}