From eaa119cc391665565c0439622fe7a2f613903eb4 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Wed, 23 Sep 2026 16:14:05 +0000 Subject: [PATCH] make the artwork theme transition duration caller-supplied --- .../kotlin/com/subtracks/ui/library/AlbumDetailScreen.kt | 3 ++- .../com/subtracks/ui/theme/AnimatedArtworkColors.kt | 9 ++++++--- .../main/kotlin/com/subtracks/ui/theme/ArtworkTheme.kt | 7 +++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/subtracks/ui/library/AlbumDetailScreen.kt b/app/src/main/kotlin/com/subtracks/ui/library/AlbumDetailScreen.kt index ba5f7316..63f93eae 100644 --- a/app/src/main/kotlin/com/subtracks/ui/library/AlbumDetailScreen.kt +++ b/app/src/main/kotlin/com/subtracks/ui/library/AlbumDetailScreen.kt @@ -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 }, diff --git a/app/src/main/kotlin/com/subtracks/ui/theme/AnimatedArtworkColors.kt b/app/src/main/kotlin/com/subtracks/ui/theme/AnimatedArtworkColors.kt index d697710f..8509852a 100644 --- a/app/src/main/kotlin/com/subtracks/ui/theme/AnimatedArtworkColors.kt +++ b/app/src/main/kotlin/com/subtracks/ui/theme/AnimatedArtworkColors.kt @@ -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)) } } diff --git a/app/src/main/kotlin/com/subtracks/ui/theme/ArtworkTheme.kt b/app/src/main/kotlin/com/subtracks/ui/theme/ArtworkTheme.kt index 8a1504b8..19b123cc 100644 --- a/app/src/main/kotlin/com/subtracks/ui/theme/ArtworkTheme.kt +++ b/app/src/main/kotlin/com/subtracks/ui/theme/ArtworkTheme.kt @@ -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