fix(ui): подпись играющего трека на карточке станции даже без обложки трека
Раньше now-track (трек/исполнитель + обложка) показывался ТОЛЬКО при наличии обложки трека — поэтому DFM-станции без обогащённой обложки оставались пустой плиткой. Теперь: если трек известен — всегда показываем подпись, а фоном берём обложку трека → лого станции → плитку. DFM работает как Record. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -61,16 +61,43 @@ 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
|
||||
)
|
||||
// Тёмный скрим снизу для читаемости текста.
|
||||
}
|
||||
!station.coverUrl.isNullOrBlank() -> {
|
||||
AsyncImage(
|
||||
model = crossfadeModel(station.coverUrl),
|
||||
contentDescription = station.name,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentScale = ContentScale.Crop
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(stationTileBrush(station.name)),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Text(
|
||||
text = stationInitials(station.name),
|
||||
color = Color.White,
|
||||
fontWeight = FontWeight.Black,
|
||||
style = androidx.compose.material3.MaterialTheme.typography.headlineMedium
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Подпись играющего трека — поверх любого фона, если трек известен.
|
||||
if (nowTrack != null) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
@@ -82,7 +109,6 @@ fun StationCard(
|
||||
)
|
||||
)
|
||||
)
|
||||
// Название трека и исполнитель в нижнем-левом углу.
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.align(Alignment.BottomStart)
|
||||
@@ -105,32 +131,6 @@ fun StationCard(
|
||||
)
|
||||
}
|
||||
}
|
||||
// Приоритет 2: логотип самой станции.
|
||||
!station.coverUrl.isNullOrBlank() -> {
|
||||
AsyncImage(
|
||||
model = crossfadeModel(station.coverUrl),
|
||||
contentDescription = station.name,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentScale = ContentScale.Crop
|
||||
)
|
||||
}
|
||||
// Приоритет 3: фирменная плитка (цвет из названия + инициалы).
|
||||
else -> {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(stationTileBrush(station.name)),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Text(
|
||||
text = stationInitials(station.name),
|
||||
color = Color.White,
|
||||
fontWeight = FontWeight.Black,
|
||||
style = androidx.compose.material3.MaterialTheme.typography.headlineMedium
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Кнопка сердечка — поверх всего, top-end.
|
||||
Box(
|
||||
modifier = Modifier
|
||||
|
||||
Reference in New Issue
Block a user