From 658b7f9452d756a68c96bb27613457b872c529f1 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Fri, 25 Sep 2026 12:28:36 +0000 Subject: [PATCH] fade the artist name scrim in instead of popping it in The busy check can only resolve after the art's first decode, so the scrim appeared in a single frame. Animate it over 180ms so it eases in behind the name. --- .../kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt b/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt index 8ca33e40..85b40294 100644 --- a/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt +++ b/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt @@ -1,5 +1,7 @@ package com.subtracks.ui.library +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource @@ -71,6 +73,7 @@ private val ART_HEIGHT = 420.dp private val TITLE_INSET = 16.dp private val FADE_LEAD = 24.dp private const val THEME_TRANSITION_MS = 100 +private const val SCRIM_FADE_MS = 180 internal const val ARTIST_NAME_SCRIM_TAG = "artistNameScrim" @Composable @@ -145,6 +148,7 @@ fun ArtistDetailScreen( ), ) val nameBusy = rememberOverlaidNameBusy(art ?: artThumbnail) + val nameScrimAlpha by animateFloatAsState(if (nameBusy) 1f else 0f, tween(SCRIM_FADE_MS), label = "artistNameScrim") CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onBackground) { ArtworkTheme(artwork) { @@ -181,13 +185,14 @@ fun ArtistDetailScreen( showPlaceholder = art == null, modifier = Modifier.fillMaxWidth().height(ART_HEIGHT), ) - if (nameBusy) { + if (nameScrimAlpha > 0f) { Box( modifier = Modifier .align(Alignment.BottomStart) .fillMaxWidth() .height(ART_HEIGHT * 0.4f) + .graphicsLayer { alpha = nameScrimAlpha } .background( Brush.verticalGradient( listOf(Color.Transparent, Color.Black.copy(alpha = 0.6f)),