Skip to content

Commit

Permalink
[feat] #1 main-navigator
Browse files Browse the repository at this point in the history
  • Loading branch information
Sangwook123 committed Apr 3, 2024
1 parent 5593590 commit c45d733
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 0 deletions.
43 changes: 43 additions & 0 deletions feature/main/src/main/java/org/sopt/main/navigator/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.sopt.main.navigator

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import dagger.hilt.android.AndroidEntryPoint
import org.sopt.designsystem.ui.theme.NOWSOPTAndroidTheme

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
NOWSOPTAndroidTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
MainScreen(
modifier = Modifier
.fillMaxSize()
)
}
}
}
}
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
NOWSOPTAndroidTheme {
MainScreen()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.sopt.main.navigator

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.navigation.NavDestination
import androidx.navigation.NavHostController
import androidx.navigation.NavOptions
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import org.sopt.main.home.navigation.navigateHome
import org.sopt.main.login.navigation.LoginRoute
import org.sopt.main.login.navigation.navigateLogin
import org.sopt.main.model.User
import org.sopt.main.signup.navigation.navigateSignup

class MainNavigator(
val navController: NavHostController
) {
private val currentDestination: NavDestination?
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination

val startDestination = LoginRoute.route

fun navigateLogin(user: User) {
navController.navigateLogin(user)
}

fun navigateSignup() {
navController.navigateSignup()
}

fun navigateHome(user: User) {
navController.navigateHome(user)
}

fun popBackStackIfNotHome() {
if (!isSameCurrentDestination(LoginRoute.route)) {
navController.popBackStack()
}
}

private fun isSameCurrentDestination(route: String) =
navController.currentDestination?.route == route
}

@Composable
fun rememberMainNavigator(
navController: NavHostController = rememberNavController(),
): MainNavigator = remember(navController) {
MainNavigator(navController)
}
47 changes: 47 additions & 0 deletions feature/main/src/main/java/org/sopt/main/navigator/MainScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.sopt.main.navigator

import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController
import org.sopt.main.home.navigation.homeNavGraph
import org.sopt.main.login.navigation.loginNavGraph
import org.sopt.main.signup.navigation.signupNavGraph

@Composable
fun MainScreen(
modifier: Modifier = Modifier,
navigator: MainNavigator = rememberMainNavigator(),
) {
val context = LocalContext.current

Scaffold(
modifier = modifier,
content = { it ->
val padding = it
NavHost(
navController = navigator.navController,
startDestination = navigator.startDestination,
) {
loginNavGraph(
navController = navigator.navController,
popBackStack = navigator::popBackStackIfNotHome,
navigateSignup = navigator::navigateSignup,
navigateHome = navigator::navigateHome
)

signupNavGraph(
popBackStack = navigator::popBackStackIfNotHome,
navigateLogin = navigator::navigateLogin
)

homeNavGraph(
navController = navigator.navController,
popBackStack = navigator::popBackStackIfNotHome,
)
}
}
)
}

0 comments on commit c45d733

Please sign in to comment.