diff --git a/app/build.gradle b/app/build.gradle index cc02c7f9..bf271b0b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,8 +91,7 @@ dependencies { implementation 'androidx.activity:activity-compose:1.9.2' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.6" implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6" - // TODO: Needs migration to type-safe navigation in v2.8.x - implementation "androidx.navigation:navigation-compose:2.7.7" + implementation "androidx.navigation:navigation-compose:2.8.2" // Jetpack compose. implementation "androidx.compose.ui:ui" implementation "androidx.compose.ui:ui-tooling-preview" diff --git a/app/src/main/java/com/starry/greenstash/MainViewModel.kt b/app/src/main/java/com/starry/greenstash/MainViewModel.kt index f415b340..b1b7124d 100644 --- a/app/src/main/java/com/starry/greenstash/MainViewModel.kt +++ b/app/src/main/java/com/starry/greenstash/MainViewModel.kt @@ -40,8 +40,9 @@ import androidx.lifecycle.viewModelScope import com.starry.greenstash.database.goal.GoalDao import com.starry.greenstash.other.WelcomeDataStore import com.starry.greenstash.reminder.ReminderManager +import com.starry.greenstash.ui.navigation.NormalScreens import com.starry.greenstash.ui.navigation.DrawerScreens -import com.starry.greenstash.ui.navigation.Screens +import com.starry.greenstash.ui.navigation.Screen import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay @@ -66,9 +67,9 @@ class MainViewModel @Inject constructor( private val _isLoading: MutableState = mutableStateOf(true) val isLoading: State = _isLoading - private val _startDestination: MutableState = - mutableStateOf(Screens.WelcomeScreen.route) - val startDestination: State = _startDestination + private val _startDestination: MutableState = + mutableStateOf(NormalScreens.WelcomeScreen) + val startDestination: State = _startDestination companion object { // Must be same as the one in AndroidManifest.xml @@ -85,9 +86,9 @@ class MainViewModel @Inject constructor( viewModelScope.launch { welcomeDataStore.readOnBoardingState().collect { completed -> if (completed) { - _startDestination.value = DrawerScreens.Home.route + _startDestination.value = DrawerScreens.Home } else { - _startDestination.value = Screens.WelcomeScreen.route + _startDestination.value = NormalScreens.WelcomeScreen } delay(120) diff --git a/app/src/main/java/com/starry/greenstash/ui/navigation/DrawerScreens.kt b/app/src/main/java/com/starry/greenstash/ui/navigation/DrawerScreens.kt index 7ce7e06a..3517c3c8 100644 --- a/app/src/main/java/com/starry/greenstash/ui/navigation/DrawerScreens.kt +++ b/app/src/main/java/com/starry/greenstash/ui/navigation/DrawerScreens.kt @@ -26,23 +26,29 @@ package com.starry.greenstash.ui.navigation import com.starry.greenstash.R +import kotlinx.serialization.Serializable -sealed class DrawerScreens(val route: String, val nameResId: Int, val iconResId: Int) { +@Serializable +sealed class DrawerScreens(val nameResId: Int, val iconResId: Int) : Screen() { companion object { fun getAllItems() = listOf(Home, Archive, Backups, Settings) } - data object Home : DrawerScreens("home", R.string.drawer_home, R.drawable.ic_nav_home) + @Serializable + data object Home : DrawerScreens(R.string.drawer_home, R.drawable.ic_nav_home) + @Serializable data object Archive : - DrawerScreens("archive", R.string.drawer_archive, R.drawable.ic_nav_archive) + DrawerScreens(R.string.drawer_archive, R.drawable.ic_nav_archive) + @Serializable data object Backups : - DrawerScreens("backups", R.string.drawer_backup, R.drawable.ic_nav_backups) + DrawerScreens(R.string.drawer_backup, R.drawable.ic_nav_backups) + @Serializable data object Settings : - DrawerScreens("settings", R.string.drawer_settings, R.drawable.ic_nav_settings) + DrawerScreens(R.string.drawer_settings, R.drawable.ic_nav_settings) } diff --git a/app/src/main/java/com/starry/greenstash/ui/navigation/NavGraph.kt b/app/src/main/java/com/starry/greenstash/ui/navigation/NavGraph.kt index 66535de1..84564e57 100644 --- a/app/src/main/java/com/starry/greenstash/ui/navigation/NavGraph.kt +++ b/app/src/main/java/com/starry/greenstash/ui/navigation/NavGraph.kt @@ -30,10 +30,9 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavHostController -import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable -import androidx.navigation.navArgument +import androidx.navigation.toRoute import com.starry.greenstash.ui.screens.archive.composables.ArchiveScreen import com.starry.greenstash.ui.screens.backups.composables.BackupScreen import com.starry.greenstash.ui.screens.dwscreen.composables.DWScreen @@ -51,8 +50,9 @@ import com.starry.greenstash.ui.screens.welcome.composables.WelcomeScreen @Composable fun NavGraph( navController: NavHostController, - startDestination: String + startDestination: Screen ) { + NavHost( navController = navController, startDestination = startDestination, @@ -60,8 +60,7 @@ fun NavGraph( ) { /** Welcome Screen */ - composable( - route = Screens.WelcomeScreen.route, + composable( exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, ) { @@ -69,8 +68,7 @@ fun NavGraph( } /** Home Screen */ - composable( - route = DrawerScreens.Home.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, @@ -80,65 +78,44 @@ fun NavGraph( } /** Deposit Withdraw Screen */ - composable( - route = Screens.DWScreen.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, - popExitTransition = { popExitTransition() }, - arguments = listOf( - navArgument(DW_GOAL_ID_ARG_KEY) { - type = NavType.StringType - }, - ), + popExitTransition = { popExitTransition() } ) { backStackEntry -> - val goalId = backStackEntry.arguments!!.getString(DW_GOAL_ID_ARG_KEY)!! - val transactionType = - backStackEntry.arguments!!.getString(DW_TRANSACTION_TYPE_ARG_KEY)!! + val args = backStackEntry.toRoute() DWScreen( - goalId = goalId, - transactionTypeName = transactionType, + goalId = args.goalId, + transactionTypeName = args.transactionType, navController = navController ) } /** Goal Info Screen */ - composable( - route = Screens.GoalInfoScreen.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, - popExitTransition = { popExitTransition() }, - arguments = listOf( - navArgument(GOAL_INFO_ARG_KEY) { - type = NavType.StringType - }, - ), + popExitTransition = { popExitTransition() } ) { backStackEntry -> - val goalId = backStackEntry.arguments!!.getString(GOAL_INFO_ARG_KEY)!! - GoalInfoScreen(goalId = goalId, navController = navController) + val args = backStackEntry.toRoute() + GoalInfoScreen(goalId = args.goalId, navController = navController) } /** Input Screen */ - composable( - route = Screens.InputScreen.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, - popExitTransition = { popExitTransition() }, - arguments = listOf(navArgument(EDIT_GOAL_ARG_KEY) { - nullable = true - defaultValue = null - type = NavType.StringType - }) + popExitTransition = { popExitTransition() } ) { backStackEntry -> - val editGoalId = backStackEntry.arguments!!.getString(EDIT_GOAL_ARG_KEY) - InputScreen(editGoalId = editGoalId, navController = navController) + val args = backStackEntry.toRoute() + InputScreen(editGoalId = args.goalId, navController = navController) } /** Goal Achieved Screen */ - composable( - route = Screens.CongratsScreen.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, @@ -148,8 +125,7 @@ fun NavGraph( } /** Archive Screen */ - composable( - route = DrawerScreens.Archive.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, @@ -159,8 +135,7 @@ fun NavGraph( } /** Backup Screen */ - composable( - route = DrawerScreens.Backups.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, @@ -170,8 +145,7 @@ fun NavGraph( } /** Settings Screen */ - composable( - route = DrawerScreens.Settings.route, + composable( enterTransition = { enterTransition() }, exitTransition = { exitTransition() }, popEnterTransition = { popEnterTransition() }, @@ -181,8 +155,7 @@ fun NavGraph( } /** Goal Ui Settings Screen */ - composable( - route = Screens.GoalCardStyle.route, + composable( enterTransition = { enterTransition() }, popExitTransition = { popExitTransition() }, ) { @@ -190,8 +163,7 @@ fun NavGraph( } /** Open Source Licenses Screen */ - composable( - route = Screens.OSLScreen.route, + composable( enterTransition = { enterTransition() }, popExitTransition = { popExitTransition() }, ) { @@ -199,8 +171,7 @@ fun NavGraph( } /** About Screen */ - composable( - route = Screens.AboutScreen.route, + composable( enterTransition = { enterTransition() }, popExitTransition = { popExitTransition() }, ) { diff --git a/app/src/main/java/com/starry/greenstash/ui/navigation/NormalScreens.kt b/app/src/main/java/com/starry/greenstash/ui/navigation/NormalScreens.kt new file mode 100644 index 00000000..839a2f98 --- /dev/null +++ b/app/src/main/java/com/starry/greenstash/ui/navigation/NormalScreens.kt @@ -0,0 +1,61 @@ +/** + * MIT License + * + * Copyright (c) [2022 - Present] Stɑrry Shivɑm + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + + +package com.starry.greenstash.ui.navigation + +import kotlinx.serialization.Serializable + +sealed class NormalScreens : Screen() { + + @Serializable + data class DWScreen(val goalId: String, val transactionType: String) + + @Serializable + data class InputScreen(val goalId: String? = null) + + @Serializable + data class GoalInfoScreen(val goalId: String) + + @Serializable + data object AboutScreen + + @Serializable + data object OSLScreen + + @Serializable + data object GoalCardStyleScreen + + + // Goal Achieved Screen + @Serializable + data object CongratsScreen + + // Welcome / Onboarding Screen + @Serializable + data object WelcomeScreen : NormalScreens() +} + + diff --git a/app/src/main/java/com/starry/greenstash/ui/navigation/Screen.kt b/app/src/main/java/com/starry/greenstash/ui/navigation/Screen.kt new file mode 100644 index 00000000..3a4a2e8c --- /dev/null +++ b/app/src/main/java/com/starry/greenstash/ui/navigation/Screen.kt @@ -0,0 +1,4 @@ +package com.starry.greenstash.ui.navigation + + +open class Screen \ No newline at end of file diff --git a/app/src/main/java/com/starry/greenstash/ui/navigation/Screens.kt b/app/src/main/java/com/starry/greenstash/ui/navigation/Screens.kt deleted file mode 100644 index 1c135a47..00000000 --- a/app/src/main/java/com/starry/greenstash/ui/navigation/Screens.kt +++ /dev/null @@ -1,69 +0,0 @@ -/** - * MIT License - * - * Copyright (c) [2022 - Present] Stɑrry Shivɑm - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - - -package com.starry.greenstash.ui.navigation - -const val DW_GOAL_ID_ARG_KEY = "dwGoal" -const val DW_TRANSACTION_TYPE_ARG_KEY = "dwTransactionType" -const val EDIT_GOAL_ARG_KEY = "editGoal" -const val GOAL_INFO_ARG_KEY = "goalId" - -sealed class Screens(val route: String) { - - // Deposit / Withdraw Screens - - data object DWScreen : - Screens("deposit_withdraw_screen/{$DW_GOAL_ID_ARG_KEY}/{$DW_TRANSACTION_TYPE_ARG_KEY}") { - fun withGoalId(goalId: String, trasactionType: String): String { - return route.replace("{$DW_GOAL_ID_ARG_KEY}", goalId) - .replace("{$DW_TRANSACTION_TYPE_ARG_KEY}", trasactionType) - } - } - - // New Goal / Edit Goal Screen - data object InputScreen : Screens("input_screen?$EDIT_GOAL_ARG_KEY={$EDIT_GOAL_ARG_KEY}") { - fun withGoalToEdit(goalId: String): String { - return route.replace("{$EDIT_GOAL_ARG_KEY}", goalId) - } - } - - // Goal Info Screen - data object GoalInfoScreen : Screens("goal_info_screen/{$GOAL_INFO_ARG_KEY}") { - fun withGoalId(goalId: String): String { - return route.replace("{$GOAL_INFO_ARG_KEY}", goalId) - } - } - - // Settings Screens - data object GoalCardStyle : Screens("goal_card_style") - data object AboutScreen : Screens("about_screen") - data object OSLScreen : Screens("osl_screen") - - // Goal Achieved Screen - data object CongratsScreen : Screens("goal_achieved_screen") - - // Welcome / Onboarding Screen - data object WelcomeScreen : Screens("welcome_screen") -} \ No newline at end of file diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/dwscreen/composables/DWScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/dwscreen/composables/DWScreen.kt index 10e32bdb..06c962d3 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/dwscreen/composables/DWScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/dwscreen/composables/DWScreen.kt @@ -84,8 +84,8 @@ import com.maxkeppeler.sheets.date_time.models.DateTimeSelection import com.starry.greenstash.R import com.starry.greenstash.database.transaction.TransactionType import com.starry.greenstash.ui.common.DateTimeCard +import com.starry.greenstash.ui.navigation.NormalScreens import com.starry.greenstash.ui.navigation.DrawerScreens -import com.starry.greenstash.ui.navigation.Screens import com.starry.greenstash.ui.screens.dwscreen.DWViewModel import com.starry.greenstash.ui.theme.greenstashFont import com.starry.greenstash.utils.NumberUtils @@ -208,7 +208,7 @@ fun DWScreen(goalId: String, transactionTypeName: String, navController: NavCont showTransactionAddedAnim.value = true delay(1100) withContext(Dispatchers.Main) { - navController.navigate(Screens.CongratsScreen.route) + navController.navigate(NormalScreens.CongratsScreen) } } }, onComplete = { @@ -414,8 +414,8 @@ private fun navigateToHome( showTransactionAddedAnim.value = true delay(1100) withContext(Dispatchers.Main) { - navController.popBackStack(DrawerScreens.Home.route, true) - navController.navigate(DrawerScreens.Home.route) + navController.popBackStack(DrawerScreens.Home, true) + navController.navigate(DrawerScreens.Home) } } } diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/GoalLazyItem.kt b/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/GoalLazyItem.kt index 00ef6cc1..f3ca2d74 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/GoalLazyItem.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/GoalLazyItem.kt @@ -43,7 +43,7 @@ import com.starry.greenstash.MainActivity import com.starry.greenstash.R import com.starry.greenstash.database.core.GoalWithTransactions import com.starry.greenstash.database.transaction.TransactionType -import com.starry.greenstash.ui.navigation.Screens +import com.starry.greenstash.ui.navigation.NormalScreens import com.starry.greenstash.ui.screens.home.GoalCardStyle import com.starry.greenstash.ui.screens.home.HomeViewModel import com.starry.greenstash.utils.Constants @@ -107,9 +107,9 @@ fun GoalLazyColumnItem( } } else { navController.navigate( - Screens.DWScreen.withGoalId( + NormalScreens.DWScreen( goalId = item.goal.goalId.toString(), - trasactionType = TransactionType.Deposit.name + transactionType = TransactionType.Deposit.name ) ) } @@ -122,9 +122,9 @@ fun GoalLazyColumnItem( } } else { navController.navigate( - Screens.DWScreen.withGoalId( + NormalScreens.DWScreen( goalId = item.goal.goalId.toString(), - trasactionType = TransactionType.Withdraw.name + transactionType = TransactionType.Withdraw.name ) ) } @@ -132,7 +132,7 @@ fun GoalLazyColumnItem( onInfoClicked = { localView.weakHapticFeedback() navController.navigate( - Screens.GoalInfoScreen.withGoalId( + NormalScreens.GoalInfoScreen( goalId = item.goal.goalId.toString() ) ) @@ -140,7 +140,7 @@ fun GoalLazyColumnItem( onEditClicked = { localView.weakHapticFeedback() navController.navigate( - Screens.InputScreen.withGoalToEdit( + NormalScreens.InputScreen( goalId = item.goal.goalId.toString() ) ) @@ -191,9 +191,9 @@ fun GoalLazyColumnItem( } } else { navController.navigate( - Screens.DWScreen.withGoalId( + NormalScreens.DWScreen( goalId = item.goal.goalId.toString(), - trasactionType = TransactionType.Deposit.name + transactionType = TransactionType.Deposit.name ) ) } @@ -206,9 +206,9 @@ fun GoalLazyColumnItem( } } else { navController.navigate( - Screens.DWScreen.withGoalId( + NormalScreens.DWScreen( goalId = item.goal.goalId.toString(), - trasactionType = TransactionType.Withdraw.name + transactionType = TransactionType.Withdraw.name ) ) } @@ -216,7 +216,7 @@ fun GoalLazyColumnItem( onInfoClicked = { localView.weakHapticFeedback() navController.navigate( - Screens.GoalInfoScreen.withGoalId( + NormalScreens.GoalInfoScreen( goalId = item.goal.goalId.toString() ) ) @@ -224,7 +224,7 @@ fun GoalLazyColumnItem( onEditClicked = { localView.weakHapticFeedback() navController.navigate( - Screens.InputScreen.withGoalToEdit( + NormalScreens.InputScreen( goalId = item.goal.goalId.toString() ) ) diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeDrawer.kt b/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeDrawer.kt index 21a029e2..1f9e2cca 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeDrawer.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeDrawer.kt @@ -199,12 +199,14 @@ private fun DrawerItems( selected = item == selectedItem.value, onClick = { view.weakHapticFeedback() - selectedItem.value = item coroutineScope.launch { drawerState.close() - withContext(Dispatchers.Main) { - navController.navigate(item.route) + if (item != selectedItem.value) { + withContext(Dispatchers.Main) { + navController.navigate(item) + } } + selectedItem.value = item } }, modifier = Modifier diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeScreen.kt index d2bdfcc7..9b6a0c10 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/home/composables/HomeScreen.kt @@ -102,7 +102,7 @@ import com.psoffritti.taptargetcompose.TextDefinition import com.starry.greenstash.MainActivity import com.starry.greenstash.R import com.starry.greenstash.database.core.GoalWithTransactions -import com.starry.greenstash.ui.navigation.Screens +import com.starry.greenstash.ui.navigation.NormalScreens import com.starry.greenstash.ui.screens.home.FilterField import com.starry.greenstash.ui.screens.home.FilterSortType import com.starry.greenstash.ui.screens.home.HomeViewModel @@ -418,7 +418,7 @@ private fun HomeExtendedFAB( modifier = modifier.padding(end = 10.dp, bottom = 12.dp), onClick = { view.weakHapticFeedback() - navController.navigate(Screens.InputScreen.route) + navController.navigate(NormalScreens.InputScreen()) }, elevation = FloatingActionButtonDefaults.elevation(8.dp) ) { diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/input/composables/InputScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/input/composables/InputScreen.kt index 144aa0a7..6d04fdbd 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/input/composables/InputScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/input/composables/InputScreen.kt @@ -474,10 +474,10 @@ fun InputScreen(editGoalId: String?, navController: NavController) { delay(1050) withContext(Dispatchers.Main) { navController.popBackStack( - DrawerScreens.Home.route, + DrawerScreens.Home, true ) - navController.navigate(DrawerScreens.Home.route) + navController.navigate(DrawerScreens.Home) } } } diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/main/MainScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/main/MainScreen.kt index fcdb5a7b..d6573422 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/main/MainScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/main/MainScreen.kt @@ -40,8 +40,9 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.starry.greenstash.MainActivity import com.starry.greenstash.MainViewModel +import com.starry.greenstash.ui.navigation.NormalScreens import com.starry.greenstash.ui.navigation.NavGraph -import com.starry.greenstash.ui.navigation.Screens +import com.starry.greenstash.ui.navigation.Screen import com.starry.greenstash.ui.screens.other.AppLockedScreen import com.starry.greenstash.ui.screens.settings.ThemeMode import com.starry.greenstash.ui.theme.AdjustEdgeToEdge @@ -54,7 +55,7 @@ import com.starry.greenstash.ui.theme.AdjustEdgeToEdge fun MainScreen( activity: MainActivity, showAppContents: Boolean, - startDestination: String, + startDestination: Screen, currentThemeMode: ThemeMode, onAuthRequest: () -> Unit, ) { @@ -98,11 +99,11 @@ private fun HandleShortcutIntent(intent: Intent, navController: NavController) { if (data != null && data.scheme == MainViewModel.LAUNCHER_SHORTCUT_SCHEME) { val goalId = intent.getLongExtra(MainViewModel.LC_SHORTCUT_GOAL_ID, -100) if (goalId != -100L) { - navController.navigate(Screens.GoalInfoScreen.withGoalId(goalId.toString())) + navController.navigate(NormalScreens.GoalInfoScreen(goalId.toString())) return } if (intent.getBooleanExtra(MainViewModel.LC_SHORTCUT_NEW_GOAL, false)) { - navController.navigate(Screens.InputScreen.route) + navController.navigate(NormalScreens.InputScreen) } } } \ No newline at end of file diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/other/CongratsScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/other/CongratsScreen.kt index c3111a88..7482de91 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/other/CongratsScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/other/CongratsScreen.kt @@ -83,8 +83,8 @@ fun CongratsScreen(navController: NavController) { }) BackHandler { - navController.popBackStack(DrawerScreens.Home.route, true) - navController.navigate(DrawerScreens.Home.route) + navController.popBackStack(DrawerScreens.Home, true) + navController.navigate(DrawerScreens.Home) } Column( @@ -148,8 +148,8 @@ fun CongratsScreen(navController: NavController) { SlideInAnimatedContainer(initialDelay = 2000) { FilledTonalButton( onClick = { - navController.popBackStack(DrawerScreens.Home.route, true) - navController.navigate(DrawerScreens.Home.route) + navController.popBackStack(DrawerScreens.Home, true) + navController.navigate(DrawerScreens.Home) }, shape = RoundedCornerShape(12.dp), modifier = Modifier diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/settings/composables/SettingsScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/settings/composables/SettingsScreen.kt index 82b3a310..753819a1 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/settings/composables/SettingsScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/settings/composables/SettingsScreen.kt @@ -93,7 +93,7 @@ import com.starry.greenstash.MainActivity import com.starry.greenstash.R import com.starry.greenstash.ui.common.CurrencyPicker import com.starry.greenstash.ui.common.CurrencyPickerData -import com.starry.greenstash.ui.navigation.Screens +import com.starry.greenstash.ui.navigation.NormalScreens import com.starry.greenstash.ui.screens.home.GoalCardStyle import com.starry.greenstash.ui.screens.settings.DateStyle import com.starry.greenstash.ui.screens.settings.SettingsViewModel @@ -231,7 +231,7 @@ private fun DisplaySettings(viewModel: SettingsViewModel, navController: NavCont SettingsItem(title = stringResource(id = R.string.goal_card_setting), description = goalStyleValue, icon = Icons.Filled.Style, - onClick = { navController.navigate(Screens.GoalCardStyle.route) }) + onClick = { navController.navigate(NormalScreens.GoalCardStyleScreen) }) if (showThemeSheet.value) { ThemePickerDialog( @@ -553,11 +553,11 @@ private fun MiscSettings(navController: NavController) { SettingsItem(title = stringResource(id = R.string.license_setting), description = stringResource(id = R.string.license_setting_desc), icon = Icons.Filled.LocalPolice, - onClick = { navController.navigate(Screens.OSLScreen.route) }) + onClick = { navController.navigate(NormalScreens.OSLScreen) }) SettingsItem(title = stringResource(id = R.string.app_info_setting), description = stringResource(id = R.string.app_info_setting_desc), icon = Icons.Filled.Info, - onClick = { navController.navigate(Screens.AboutScreen.route) }) + onClick = { navController.navigate(NormalScreens.AboutScreen) }) } Spacer(modifier = Modifier.height(2.dp)) // Last item padding. } diff --git a/app/src/main/java/com/starry/greenstash/ui/screens/welcome/composables/WelcomeScreen.kt b/app/src/main/java/com/starry/greenstash/ui/screens/welcome/composables/WelcomeScreen.kt index 8a1327c1..97c10982 100644 --- a/app/src/main/java/com/starry/greenstash/ui/screens/welcome/composables/WelcomeScreen.kt +++ b/app/src/main/java/com/starry/greenstash/ui/screens/welcome/composables/WelcomeScreen.kt @@ -164,7 +164,7 @@ fun WelcomeScreen(navController: NavController) { view.weakHapticFeedback() viewModel.saveOnBoardingState(completed = true) navController.popBackStack() - navController.navigate(DrawerScreens.Home.route) + navController.navigate(DrawerScreens.Home) }, modifier = Modifier.width(245.dp), shape = RoundedCornerShape(16.dp)