fix(ui): отступы под системную навигацию + подписи сервисов + краш навбара
- навбар и мини-плеер: navigationBarsPadding — не налезают на системные кнопки - плеер: navigationBarsPadding снизу, ряд сервисов не уходит под системную панель - подписи сервисов без обрезки слов (Яндекс / ВК Музыка / YT Music и т.д.) - фикс NPE при холодном старте: навбар обращается к NavDestinations напрямую, не к companion-списку (порядок инициализации Kotlin)
This commit is contained in:
@@ -78,7 +78,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
bottomBar = {
|
bottomBar = {
|
||||||
if (showChrome) {
|
if (showChrome) {
|
||||||
Column {
|
Column(Modifier.navigationBarsPadding()) {
|
||||||
if (currentStation != null) {
|
if (currentStation != null) {
|
||||||
MiniPlayer(
|
MiniPlayer(
|
||||||
stationName = currentStation!!.name,
|
stationName = currentStation!!.name,
|
||||||
|
|||||||
@@ -37,7 +37,15 @@ import com.radiola.ui.theme.RadiolaTheme
|
|||||||
fun BottomNavBar(navController: NavController) {
|
fun BottomNavBar(navController: NavController) {
|
||||||
val colors = RadiolaTheme.colors
|
val colors = RadiolaTheme.colors
|
||||||
val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route
|
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(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import androidx.compose.foundation.background
|
|||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.layout.navigationBarsPadding
|
||||||
import androidx.compose.foundation.lazy.LazyRow
|
import androidx.compose.foundation.lazy.LazyRow
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
@@ -69,6 +70,7 @@ fun PlayerBottomSheet(
|
|||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.background(colors.bgBase)
|
.background(colors.bgBase)
|
||||||
|
.navigationBarsPadding()
|
||||||
.padding(horizontal = 24.dp, vertical = 20.dp),
|
.padding(horizontal = 24.dp, vertical = 20.dp),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
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
|
@Composable
|
||||||
private fun ServiceDeeplinkBtn(
|
private fun ServiceDeeplinkBtn(
|
||||||
service: DeeplinkService,
|
service: DeeplinkService,
|
||||||
@@ -302,7 +317,7 @@ private fun ServiceDeeplinkBtn(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Text(
|
Text(
|
||||||
text = service.displayName.take(8),
|
text = serviceShortName(service),
|
||||||
style = MaterialTheme.typography.labelSmall,
|
style = MaterialTheme.typography.labelSmall,
|
||||||
color = colors.textSecondary,
|
color = colors.textSecondary,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
|
|||||||
Reference in New Issue
Block a user