diff --git a/app/src/main/java/com/radiola/MainActivity.kt b/app/src/main/java/com/radiola/MainActivity.kt index 11702a6..07a8dd8 100644 --- a/app/src/main/java/com/radiola/MainActivity.kt +++ b/app/src/main/java/com/radiola/MainActivity.kt @@ -4,15 +4,47 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.radiola.ui.navigation.BottomNavBar +import com.radiola.ui.navigation.NavDestinations import com.radiola.ui.theme.RadiolaTheme +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { RadiolaTheme { - // TODO: Navigation will go here + val navController = rememberNavController() + Scaffold( + bottomBar = { BottomNavBar(navController) } + ) { paddingValues -> + NavHost( + navController = navController, + startDestination = NavDestinations.Stations.route, + modifier = Modifier.padding(paddingValues) + ) { + composable(NavDestinations.Stations.route) { + // TODO: StationsScreen + } + composable(NavDestinations.Favorites.route) { + // TODO: FavoritesScreen + } + composable(NavDestinations.History.route) { + // TODO: HistoryScreen + } + composable(NavDestinations.Settings.route) { + // TODO: SettingsScreen + } + } + } } } } diff --git a/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt b/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt new file mode 100644 index 0000000..ccf7262 --- /dev/null +++ b/app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt @@ -0,0 +1,32 @@ +package com.radiola.ui.navigation + +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.navigation.NavController +import androidx.navigation.compose.currentBackStackEntryAsState + +@Composable +fun BottomNavBar(navController: NavController) { + val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route + NavigationBar { + NavDestinations.items.forEach { destination -> + NavigationBarItem( + icon = { Icon(destination.icon, contentDescription = destination.labelRes) }, + label = { Text(destination.labelRes) }, + selected = currentRoute == destination.route, + onClick = { + if (currentRoute != destination.route) { + navController.navigate(destination.route) { + popUpTo(navController.graph.startDestinationId) { saveState = true } + launchSingleTop = true + restoreState = true + } + } + } + ) + } + } +} diff --git a/app/src/main/java/com/radiola/ui/navigation/NavDestinations.kt b/app/src/main/java/com/radiola/ui/navigation/NavDestinations.kt new file mode 100644 index 0000000..76cadb5 --- /dev/null +++ b/app/src/main/java/com/radiola/ui/navigation/NavDestinations.kt @@ -0,0 +1,23 @@ +package com.radiola.ui.navigation + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Favorite +import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.filled.History +import androidx.compose.ui.graphics.vector.ImageVector + +sealed class NavDestinations( + val route: String, + val labelRes: String, + val icon: ImageVector +) { + data object Stations : NavDestinations("stations", "Радио", Icons.Default.Home) + data object Favorites : NavDestinations("favorites", "Избранное", Icons.Default.Favorite) + data object History : NavDestinations("history", "История", Icons.Default.History) + data object Settings : NavDestinations("settings", "Настройки", Icons.Default.Settings) + + companion object { + val items = listOf(Stations, Favorites, History, Settings) + } +}