From 58f735823ed2c6108255e9ad45e8e8e93ed17fd1 Mon Sep 17 00:00:00 2001 From: nk Date: Tue, 2 Jun 2026 22:13:10 +0300 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=D0=BE=D1=82=D1=81=D1=82=D1=83=D0=BF?= =?UTF-8?q?=D1=8B=20=D0=BF=D0=BE=D0=B4=20=D1=81=D0=B8=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=BC=D0=BD=D1=83=D1=8E=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8E=20+=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=BE=D0=B2=20+?= =?UTF-8?q?=20=D0=BA=D1=80=D0=B0=D1=88=20=D0=BD=D0=B0=D0=B2=D0=B1=D0=B0?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - навбар и мини-плеер: navigationBarsPadding — не налезают на системные кнопки - плеер: navigationBarsPadding снизу, ряд сервисов не уходит под системную панель - подписи сервисов без обрезки слов (Яндекс / ВК Музыка / YT Music и т.д.) - фикс NPE при холодном старте: навбар обращается к NavDestinations напрямую, не к companion-списку (порядок инициализации Kotlin) --- app/src/main/java/com/radiola/MainActivity.kt | 2 +- .../com/radiola/ui/navigation/BottomNavBar.kt | 10 +++++++++- .../radiola/ui/player/PlayerBottomSheet.kt | 19 +++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/radiola/MainActivity.kt b/app/src/main/java/com/radiola/MainActivity.kt index 61de425..cec4f61 100644 --- a/app/src/main/java/com/radiola/MainActivity.kt +++ b/app/src/main/java/com/radiola/MainActivity.kt @@ -78,7 +78,7 @@ class MainActivity : ComponentActivity() { Scaffold( bottomBar = { if (showChrome) { - Column { + Column(Modifier.navigationBarsPadding()) { if (currentStation != null) { MiniPlayer( stationName = currentStation!!.name, diff --git a/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt b/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt index d43fa0c..22ccb90 100644 --- a/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt +++ b/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt @@ -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 diff --git a/app/src/main/java/com/radiola/ui/player/PlayerBottomSheet.kt b/app/src/main/java/com/radiola/ui/player/PlayerBottomSheet.kt index 429ea23..59a1ecd 100644 --- a/app/src/main/java/com/radiola/ui/player/PlayerBottomSheet.kt +++ b/app/src/main/java/com/radiola/ui/player/PlayerBottomSheet.kt @@ -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,