make the artwork theme transition duration caller-supplied

This commit is contained in:
austinried
2026-10-04 00:29:53 +00:00
parent 9fe316d5ba
commit eaa119cc39
3 changed files with 13 additions and 6 deletions
@@ -91,6 +91,7 @@ import kotlin.math.roundToInt
private const val DOT = "\u00B7"
private const val GRADIENT_SCREENS = 2.0f
private const val FADE_DISTANCE_DP = 64
private const val THEME_TRANSITION_MS = 350
@Composable
fun AlbumDetailRoute(
@@ -107,7 +108,7 @@ fun AlbumDetailRoute(
album = album,
songs = songs,
coverArt = viewModel::coverArt,
artwork = rememberArtworkColors(viewModel.coverArt(album?.coverArt, true)),
artwork = rememberArtworkColors(viewModel.coverArt(album?.coverArt, true), THEME_TRANSITION_MS),
onBack = onBack,
onSongClick = viewModel::play,
playingSongId = playback.item?.id.takeIf { context?.kind == QueueKind.Album && context.refId == albumId },
@@ -12,7 +12,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.lerp
private const val THEME_TRANSITION_MS = 600
const val ARTWORK_THEME_TRANSITION_MS = 600
fun baseArtworkColors(): ArtworkColors =
ArtworkColors(
@@ -25,7 +25,10 @@ fun baseArtworkColors(): ArtworkColors =
)
@Composable
fun rememberAnimatedArtworkColors(target: ArtworkColors?): ArtworkColors {
fun rememberAnimatedArtworkColors(
target: ArtworkColors?,
durationMillis: Int = ARTWORK_THEME_TRANSITION_MS,
): ArtworkColors {
val base = remember { baseArtworkColors() }
var from by remember { mutableStateOf(target ?: base) }
var to by remember { mutableStateOf(target ?: base) }
@@ -37,7 +40,7 @@ fun rememberAnimatedArtworkColors(target: ArtworkColors?): ArtworkColors {
from = to
to = next
progress.snapTo(0f)
progress.animateTo(1f, tween(durationMillis = THEME_TRANSITION_MS))
progress.animateTo(1f, tween(durationMillis = durationMillis))
}
}
@@ -158,10 +158,13 @@ private fun blendHue(
}
@Composable
fun rememberArtworkColors(ref: CoverArtRef?): ArtworkColors {
fun rememberArtworkColors(
ref: CoverArtRef?,
durationMillis: Int = ARTWORK_THEME_TRANSITION_MS,
): ArtworkColors {
val seeds by rememberArtworkSeed(ref)
val target = remember(seeds) { seeds?.let { (primary, secondary) -> artworkColorsFromSeeds(primary, secondary) } }
return rememberAnimatedArtworkColors(target)
return rememberAnimatedArtworkColors(target, durationMillis)
}
@Composable