From 77772789bb06454d0197560447dc2a42b2475f95 Mon Sep 17 00:00:00 2001 From: nk Date: Wed, 3 Jun 2026 14:16:41 +0300 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=20=D0=B8=D0=B3=D1=80=D0=B0=D1=8E=D1=89=D0=B5=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=82=D1=80=D0=B5=D0=BA=D0=B0=20=D0=BD=D0=B0=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B5=20=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B4=D0=B0=D0=B6=D0=B5=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=BA=D0=B8=20=D1=82?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше now-track (трек/исполнитель + обложка) показывался ТОЛЬКО при наличии обложки трека — поэтому DFM-станции без обогащённой обложки оставались пустой плиткой. Теперь: если трек известен — всегда показываем подпись, а фоном берём обложку трека → лого станции → плитку. DFM работает как Record. Co-Authored-By: Claude Opus 4.8 --- .../com/radiola/ui/components/StationCard.kt | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/radiola/ui/components/StationCard.kt b/app/src/main/java/com/radiola/ui/components/StationCard.kt index 5778f96..396206d 100644 --- a/app/src/main/java/com/radiola/ui/components/StationCard.kt +++ b/app/src/main/java/com/radiola/ui/components/StationCard.kt @@ -61,51 +61,17 @@ fun StationCard( .clip(RoundedCornerShape(16.dp)) .background(colors.surface2) ) { + val trackCover = nowTrack?.coverUrl?.takeIf { it.isNotBlank() } + // Фон карточки: обложка трека → логотип станции → фирменная плитка. when { - // Приоритет 1: обложка текущего трека с градиентом и подписью. - !nowTrack?.coverUrl.isNullOrBlank() -> { + trackCover != null -> { AsyncImage( - model = crossfadeModel(nowTrack!!.coverUrl), + model = crossfadeModel(trackCover), contentDescription = nowTrack.song, modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) - // Тёмный скрим снизу для читаемости текста. - Box( - modifier = Modifier - .fillMaxSize() - .background( - Brush.verticalGradient( - 0f to Color.Transparent, - 0.5f to Color.Transparent, - 1f to Color.Black.copy(alpha = 0.8f) - ) - ) - ) - // Название трека и исполнитель в нижнем-левом углу. - Column( - modifier = Modifier - .align(Alignment.BottomStart) - .padding(10.dp) - ) { - Text( - text = nowTrack.song, - color = Color.White, - fontWeight = FontWeight.Bold, - style = androidx.compose.material3.MaterialTheme.typography.bodyMedium, - maxLines = 1, - overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis - ) - Text( - text = nowTrack.artist, - color = Color.White.copy(alpha = 0.8f), - style = androidx.compose.material3.MaterialTheme.typography.labelMedium, - maxLines = 1, - overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis - ) - } } - // Приоритет 2: логотип самой станции. !station.coverUrl.isNullOrBlank() -> { AsyncImage( model = crossfadeModel(station.coverUrl), @@ -114,7 +80,6 @@ fun StationCard( contentScale = ContentScale.Crop ) } - // Приоритет 3: фирменная плитка (цвет из названия + инициалы). else -> { Box( modifier = Modifier @@ -131,6 +96,41 @@ fun StationCard( } } } + // Подпись играющего трека — поверх любого фона, если трек известен. + if (nowTrack != null) { + Box( + modifier = Modifier + .fillMaxSize() + .background( + Brush.verticalGradient( + 0f to Color.Transparent, + 0.5f to Color.Transparent, + 1f to Color.Black.copy(alpha = 0.8f) + ) + ) + ) + Column( + modifier = Modifier + .align(Alignment.BottomStart) + .padding(10.dp) + ) { + Text( + text = nowTrack.song, + color = Color.White, + fontWeight = FontWeight.Bold, + style = androidx.compose.material3.MaterialTheme.typography.bodyMedium, + maxLines = 1, + overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis + ) + Text( + text = nowTrack.artist, + color = Color.White.copy(alpha = 0.8f), + style = androidx.compose.material3.MaterialTheme.typography.labelMedium, + maxLines = 1, + overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis + ) + } + } // Кнопка сердечка — поверх всего, top-end. Box( modifier = Modifier