Skip to content

Commit

Permalink
Migrate from Screen to CinemaxNavigationDestination (#71)
Browse files Browse the repository at this point in the history
* Implement CinemaxNavigationDestination

* Delete Screen

* Minor improvements

* Add HomeDestination

* Migrate from Screen to CinemaxNavigationDestination
  • Loading branch information
AfigAliyev committed Aug 14, 2022
1 parent 726d34a commit 3c9d530
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,30 @@ package com.maximillianleonov.cinemax.presentation.navigation
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import com.maximillianleonov.cinemax.R
import com.maximillianleonov.cinemax.feature.home.presentation.navigation.HomeDestination

enum class BottomNavigationSection(
val route: String,
@StringRes val stringResourceId: Int,
@DrawableRes val drawableResourceId: Int
) {
Home(
route = Screen.Home.route,
route = HomeDestination.route,
stringResourceId = R.string.home,
drawableResourceId = R.drawable.ic_home
),
Search(
route = Screen.Search.route,
route = "search",
stringResourceId = R.string.search,
drawableResourceId = R.drawable.ic_search
),
Wishlist(
route = Screen.Wishlist.route,
route = "wishlist",
stringResourceId = R.string.wishlist,
drawableResourceId = R.drawable.ic_heart
),
Settings(
route = Screen.Settings.route,
route = "settings",
stringResourceId = R.string.settings,
drawableResourceId = R.drawable.ic_settings
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,28 @@ import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.maximillianleonov.cinemax.feature.home.presentation.HomeScreen
import com.maximillianleonov.cinemax.feature.home.presentation.navigation.HomeDestination
import com.maximillianleonov.cinemax.feature.home.presentation.navigation.homeGraph

@Suppress("ForbiddenComment")
@Composable
fun CinemaxNavHost(
navController: NavHostController,
innerPadding: PaddingValues,
modifier: Modifier = Modifier
modifier: Modifier = Modifier,
startDestination: String = HomeDestination.route
) {
NavHost(
modifier = modifier.padding(paddingValues = innerPadding),
navController = navController,
startDestination = Screen.Home.route
startDestination = startDestination
) {
composable(route = Screen.Home.route) { HomeScreen() }
composable(route = Screen.Search.route) { /* TODO: Not yet implemented. */ }
composable(route = Screen.Wishlist.route) { /* TODO: Not yet implemented. */ }
composable(route = Screen.Settings.route) { /* TODO: Not yet implemented. */ }
composable(route = Screen.List.route) { /* TODO: Not yet implemented. */ }
composable(route = Screen.Details.route) { /* TODO: Not yet implemented. */ }
homeGraph()

composable(route = "search") { /* TODO: Not yet implemented. */ }
composable(route = "wishlist") { /* TODO: Not yet implemented. */ }
composable(route = "settings") { /* TODO: Not yet implemented. */ }
composable(route = "list") { /* TODO: Not yet implemented. */ }
composable(route = "details") { /* TODO: Not yet implemented. */ }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright 2022 Maximillian Leonov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.maximillianleonov.cinemax.core.presentation.navigation

/**
* An interface for describing the Cinemax navigation destinations.
*/
interface CinemaxNavigationDestination {
/**
* Defines a specific route this destination belongs to.
* Route is a String that defines the path to your composable.
* You can think of it as an implicit deep link that leads to a specific destination.
* Each destination should have a unique route.
*/
val route: String

/**
* Defines a specific destination ID.
* This is needed when using nested graphs via the navigation DSL, to differentiate a specific
* destination's route from the route of the entire nested graph it belongs to.
*/
val destination: String
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ import androidx.compose.ui.Modifier
import com.maximillianleonov.cinemax.core.presentation.theme.CinemaxTheme

@Composable
fun HomeScreen() {
HomeContent()
fun HomeRoute(modifier: Modifier = Modifier) {
HomeScreen(modifier = modifier)
}

@Composable
private fun HomeContent(modifier: Modifier = Modifier) {
internal fun HomeScreen(modifier: Modifier = Modifier) {
LazyColumn(
modifier = modifier.fillMaxSize(),
verticalArrangement = Arrangement.spacedBy(CinemaxTheme.spacing.extraMedium),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@
* limitations under the License.
*/

package com.maximillianleonov.cinemax.presentation.navigation
package com.maximillianleonov.cinemax.feature.home.presentation.navigation

sealed class Screen(val route: String) {
object Home : Screen(route = "home")
object Search : Screen(route = "search")
object Wishlist : Screen(route = "wishlist")
object Settings : Screen(route = "settings")
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import com.maximillianleonov.cinemax.core.presentation.navigation.CinemaxNavigationDestination
import com.maximillianleonov.cinemax.feature.home.presentation.HomeRoute

object List : Screen(route = "list")
object Details : Screen(route = "details")
object HomeDestination : CinemaxNavigationDestination {
override val route = "home_route"
override val destination = "home_destination"
}

fun NavGraphBuilder.homeGraph() = composable(route = HomeDestination.route) { HomeRoute() }

0 comments on commit 3c9d530

Please sign in to comment.