fix(ui): отступы под системную навигацию + подписи сервисов + краш навбара

- навбар и мини-плеер: navigationBarsPadding — не налезают на системные кнопки
- плеер: navigationBarsPadding снизу, ряд сервисов не уходит под системную панель
- подписи сервисов без обрезки слов (Яндекс / ВК Музыка / YT Music и т.д.)
- фикс NPE при холодном старте: навбар обращается к NavDestinations напрямую,
  не к companion-списку (порядок инициализации Kotlin)
This commit is contained in:
nk
2026-06-02 22:13:10 +03:00
parent 9e9f4c8009
commit 58f735823e
3 changed files with 27 additions and 4 deletions

View File

@@ -78,7 +78,7 @@ class MainActivity : ComponentActivity() {
Scaffold(
bottomBar = {
if (showChrome) {
Column {
Column(Modifier.navigationBarsPadding()) {
if (currentStation != null) {
MiniPlayer(
stationName = currentStation!!.name,

View File

@@ -37,7 +37,15 @@ import com.radiola.ui.theme.RadiolaTheme
fun BottomNavBar(navController: NavController) {
val colors = RadiolaTheme.colors
val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route
val items = NavDestinations.items.filter { it.showInBottomBar }
// Обращаемся к объектам напрямую: companion-список NavDestinations.items
// при холодном старте может содержать null (порядок инициализации Kotlin).
val items = listOf(
NavDestinations.Stations,
NavDestinations.Favorites,
NavDestinations.History,
NavDestinations.Recordings,
NavDestinations.Settings
)
Row(
modifier = Modifier

View File

@@ -8,6 +8,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
@@ -69,6 +70,7 @@ fun PlayerBottomSheet(
modifier = modifier
.fillMaxWidth()
.background(colors.bgBase)
.navigationBarsPadding()
.padding(horizontal = 24.dp, vertical = 20.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
@@ -262,7 +264,20 @@ private fun PlayerIconBtn(
}
}
/** Монохромная кнопка сервиса для поиска трека (без официальных логотипов). */
/** Короткая подпись сервиса под кнопкой (без обрезки слов). */
private fun serviceShortName(service: DeeplinkService): String = when (service.serviceId) {
"yandex" -> "Яндекс"
"vk" -> "ВК Музыка"
"boom" -> "BOOM"
"spotify" -> "Spotify"
"apple" -> "Apple Music"
"youtube" -> "YT Music"
"tidal" -> "Tidal"
"deezer" -> "Deezer"
else -> service.displayName
}
/** Монохромная кнопка сервиса для поиска трека. */
@Composable
private fun ServiceDeeplinkBtn(
service: DeeplinkService,
@@ -302,7 +317,7 @@ private fun ServiceDeeplinkBtn(
}
}
Text(
text = service.displayName.take(8),
text = serviceShortName(service),
style = MaterialTheme.typography.labelSmall,
color = colors.textSecondary,
maxLines = 1,