fix(ui): отступы под системную навигацию + подписи сервисов + краш навбара
- навбар и мини-плеер: navigationBarsPadding — не налезают на системные кнопки - плеер: navigationBarsPadding снизу, ряд сервисов не уходит под системную панель - подписи сервисов без обрезки слов (Яндекс / ВК Музыка / YT Music и т.д.) - фикс NPE при холодном старте: навбар обращается к NavDestinations напрямую, не к companion-списку (порядок инициализации Kotlin)
This commit is contained in:
@@ -78,7 +78,7 @@ class MainActivity : ComponentActivity() {
|
||||
Scaffold(
|
||||
bottomBar = {
|
||||
if (showChrome) {
|
||||
Column {
|
||||
Column(Modifier.navigationBarsPadding()) {
|
||||
if (currentStation != null) {
|
||||
MiniPlayer(
|
||||
stationName = currentStation!!.name,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user