Skip to content

Commit

Permalink
🔀 :: (#521) compose destination 적용
Browse files Browse the repository at this point in the history
🔀 :: (#521) compose destination 적용
  • Loading branch information
JunJaBoy authored Oct 13, 2023
2 parents 4db6a91 + b6b5622 commit 897316e
Show file tree
Hide file tree
Showing 36 changed files with 205 additions and 717 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -187,3 +187,4 @@ fabric.properties
!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,kotlin
feature/build
12 changes: 12 additions & 0 deletions app/src/main/java/team/aliens/dms_android/app/DmsNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import androidx.compose.ui.Modifier
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.animations.rememberAnimatedNavHostEngine
import com.ramcosta.composedestinations.navigation.dependency
import com.ramcosta.composedestinations.utils.navGraph
import team.aliens.dms_android.app.navigation.DmsNavGraph
import team.aliens.dms_android.app.navigation.DmsNavigator

@OptIn(ExperimentalAnimationApi::class, ExperimentalMaterialNavigationApi::class)
@Composable
Expand All @@ -15,10 +18,19 @@ fun DmsNavHost(
autoSignIn: Boolean,
) {
val engine = rememberAnimatedNavHostEngine()
val navController = engine.rememberNavController()

DestinationsNavHost(
modifier = modifier,
engine = engine,
navGraph = DmsNavGraph.root(autoSignIn = autoSignIn),
dependenciesContainerBuilder = {
dependency(
DmsNavigator(
navGraph = navBackStackEntry.navGraph(),
navController = navController,
)
)
},
)
}
22 changes: 15 additions & 7 deletions app/src/main/java/team/aliens/dms_android/app/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import dagger.hilt.android.AndroidEntryPoint
import team.aliens.dms_android.design_system.toast.ToastLayout
import team.aliens.dms_android.design_system.toast.rememberToastState

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
Expand All @@ -20,14 +22,20 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
val autoSignIn by viewModel.autoSignInAvailable.collectAsStateWithLifecycle()
val toast = rememberToastState()

if (autoSignIn != null) {
DmsApp(
modifier = Modifier.fillMaxSize(),
autoSignIn = autoSignIn!!,
)
} else {
Text(text = "LOADING, SPLASH")
ToastLayout(
modifier = Modifier.fillMaxSize(),
toastState = toast,
) {
if (autoSignIn != null) {
DmsApp(
modifier = Modifier.fillMaxSize(),
autoSignIn = autoSignIn!!,
)
} else {
Text(text = "LOADING, SPLASH")
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package team.aliens.dms_android.app.di.navigation

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import team.aliens.dms_android.feature.NavGraph
import team.aliens.dms_android.feature.NavGraphs
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object NavGraphModule {

@Provides
@Singleton
@RootNavGraph
fun provideRootNavGraph(): NavGraph = NavGraphs.root
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package team.aliens.dms_android.app.di.navigation

import javax.inject.Qualifier

@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.BINARY)
annotation class RootNavGraph
145 changes: 104 additions & 41 deletions app/src/main/java/team/aliens/dms_android/app/navigation/DmsNavigator.kt
Original file line number Diff line number Diff line change
@@ -1,122 +1,185 @@
package team.aliens.dms_android.app.navigation

import androidx.navigation.NavHostController
import com.ramcosta.composedestinations.dynamic.within
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.navigation.popUpTo
import com.ramcosta.composedestinations.spec.NavGraphSpec
import team.aliens.dms_android.app.navigation.authorized.AuthorizedNavGraph
import team.aliens.dms_android.app.navigation.authorized.AuthorizedNavigator
import team.aliens.dms_android.app.navigation.unauthorized.UnauthorizedNavGraph
import team.aliens.dms_android.app.navigation.unauthorized.UnauthorizedNavigator
import team.aliens.dms_android.feature._legacy.util.SelectImageType
import team.aliens.dms_android.feature.destinations.AnnouncementListScreenDestination
import team.aliens.dms_android.feature.destinations.ApplicationScreenDestination
import team.aliens.dms_android.feature.destinations.EditPasswordSetPasswordScreenDestination
import team.aliens.dms_android.feature.destinations.EditProfileImageScreenDestination
import team.aliens.dms_android.feature.destinations.EnterEmailScreenDestination
import team.aliens.dms_android.feature.destinations.EnterSchoolVerificationQuestionScreenDestination
import team.aliens.dms_android.feature.destinations.FindIdScreenDestination
import team.aliens.dms_android.feature.destinations.HomeScreenDestination
import team.aliens.dms_android.feature.destinations.MyPageScreenDestination
import team.aliens.dms_android.feature.destinations.NoticeDetailsScreenDestination
import team.aliens.dms_android.feature.destinations.NotificationBoxScreenDestination
import team.aliens.dms_android.feature.destinations.PointHistoryScreenDestination
import team.aliens.dms_android.feature.destinations.RemainsApplicationScreenDestination
import team.aliens.dms_android.feature.destinations.ResetPasswordEnterEmailVerificationCodeScreenDestination
import team.aliens.dms_android.feature.destinations.ResetPasswordSetPasswordScreenDestination
import team.aliens.dms_android.feature.destinations.SetIdScreenDestination
import team.aliens.dms_android.feature.destinations.SetProfileImageScreenDestination
import team.aliens.dms_android.feature.destinations.SignInScreenDestination
import team.aliens.dms_android.feature.destinations.SignUpEnterEmailVerificationCodeScreenDestination
import team.aliens.dms_android.feature.destinations.SignUpSetPasswordScreenDestination
import team.aliens.dms_android.feature.destinations.StudyRoomDetailsScreenDestination
import team.aliens.dms_android.feature.destinations.StudyRoomListScreenDestination
import team.aliens.dms_android.feature.destinations.TermsScreenDestination
import team.aliens.dms_android.feature.editpassword.navigation.EditPasswordNavGraph
import team.aliens.dms_android.feature.resetpassword.navigation.ResetPasswordNavGraph
import team.aliens.dms_android.feature.signup.navigation.SignUpNavGraph
import java.util.UUID
import javax.inject.Inject

interface DmsNavigator : AuthorizedNavigator, UnauthorizedNavigator

class DmsNavigatorImpl @Inject constructor() : DmsNavigator {
override fun openSetPassword() {
TODO("Not yet implemented")
class DmsNavigator(
private val navGraph: NavGraphSpec,
private val navController: NavHostController,
) : AuthorizedNavigator,
UnauthorizedNavigator {
override fun openEditPasswordSetPasswordNav() {
navController.navigate(EditPasswordSetPasswordScreenDestination within navGraph)
}

override fun openSignIn() {
TODO("Not yet implemented")
navController.navigate(SignInScreenDestination within navGraph)
}

override fun popBackStack() {
TODO("Not yet implemented")
navController.popBackStack()
}

override fun navigateUp() {
navController.navigateUp()
}

override fun openHome() {
TODO("Not yet implemented")
navController.navigate(HomeScreenDestination within navGraph)
}

override fun openApplication() {
TODO("Not yet implemented")
navController.navigate(ApplicationScreenDestination within navGraph)
}

override fun openAnnouncementList() {
TODO("Not yet implemented")
navController.navigate(AnnouncementListScreenDestination within navGraph)
}

override fun openMyPage() {
TODO("Not yet implemented")
navController.navigate(MyPageScreenDestination within navGraph)
}

override fun openNoticeDetails(noticeId: UUID) {
TODO("Not yet implemented")
navController.navigate(NoticeDetailsScreenDestination(noticeId = noticeId) within navGraph)
}

override fun openStudyRoomList() {
TODO("Not yet implemented")
navController.navigate(StudyRoomListScreenDestination within navGraph)
}

override fun openRemainsApplication() {
TODO("Not yet implemented")
navController.navigate(RemainsApplicationScreenDestination within navGraph)
}

override fun openNotificationBox() {
TODO("Not yet implemented")
navController.navigate(NotificationBoxScreenDestination within navGraph)
}

override fun openPointHistory() {
TODO("Not yet implemented")
navController.navigate(PointHistoryScreenDestination within navGraph)
}

override fun openEditPassword() {
TODO("Not yet implemented")
override fun openEditPasswordNav() {
navController.navigate(EditPasswordNavGraph) {
restoreState = true
launchSingleTop = true
}
}

override fun switchNavGraphRoot() {
TODO("Not yet implemented")
override fun openEditProfileImage(selectImageType: SelectImageType) {
// TODO
navController.navigate(EditProfileImageScreenDestination(selectImageType) within navGraph)
}

override fun openResetPasswordEnterEmailVerificationCode() {
TODO("Not yet implemented")
navController.navigate(ResetPasswordEnterEmailVerificationCodeScreenDestination within navGraph)
}

override fun openResetPasswordSetPassword() {
TODO("Not yet implemented")
navController.navigate(ResetPasswordSetPasswordScreenDestination)
}

override fun openMain() {
TODO("Not yet implemented")
override fun openAuthorizedNav() {
navController.navigate(AuthorizedNavGraph) {
popUpTo(UnauthorizedNavGraph) {
inclusive = true
}
}
}

override fun openSignUp() {
TODO("Not yet implemented")
override fun openUnauthorizedNav() {
navController.navigate(UnauthorizedNavGraph) {
popUpTo(AuthorizedNavGraph) {
inclusive = true
}
}
}

override fun openSignUpNav() {
navController.navigate(SignUpNavGraph)
}

override fun openFindId() {
TODO("Not yet implemented")
navController.navigate(FindIdScreenDestination within navGraph)
}

override fun openResetPassword() {
TODO("Not yet implemented")
override fun openResetPasswordNav() {
navController.navigate(ResetPasswordNavGraph)
}

override fun openEnterSchoolVerificationQuestion() {
TODO("Not yet implemented")
navController.navigate(EnterSchoolVerificationQuestionScreenDestination within navGraph)
}

override fun openEnterEmail(clearStack: Boolean) {
TODO("Not yet implemented")
navController.navigate(EnterEmailScreenDestination within navGraph)
}

override fun openSignUpEnterEmailVerificationCode() {
TODO("Not yet implemented")
navController.navigate(SignUpEnterEmailVerificationCodeScreenDestination within navGraph)
}

override fun openSetId() {
TODO("Not yet implemented")
navController.navigate(SetIdScreenDestination within navGraph)
}

override fun openSignUpSetPassword() {
TODO("Not yet implemented")
navController.navigate(SignUpSetPasswordScreenDestination within navGraph)
}

override fun openSetProfileImage() {
TODO("Not yet implemented")
navController.navigate(SetProfileImageScreenDestination within navGraph)
}

override fun openTerms() {
TODO("Not yet implemented")
}

override fun openStudyRoomDetails(studyRoomId: UUID, timeslot: UUID) {
TODO("Not yet implemented")
navController.navigate(TermsScreenDestination within navGraph)
}

override fun openStudyRoomDetails(
studyRoomId: UUID,
timeslot: UUID,
) {
navController.navigate(
StudyRoomDetailsScreenDestination(
studyRoomId = studyRoomId,
timeslot = timeslot,
) within navGraph,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ fun rememberToastState(): ToastState {
}

@Composable
fun DormToastLayout(
fun ToastLayout(
modifier: Modifier = Modifier,
toastState: ToastState,
toastHost: @Composable (ToastState) -> Unit = { DormToastHost(it) },
Expand Down
5 changes: 1 addition & 4 deletions feature/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
build/
build/**/main/
build/**/main/**/*.kt
build/**/main/**/*.java
feature/build

This file was deleted.

Loading

0 comments on commit 897316e

Please sign in to comment.