@@ -36,6 +36,8 @@ import androidx.navigation.compose.composable
3636import androidx.navigation.compose.currentBackStackEntryAsState
3737import androidx.navigation.compose.rememberNavController
3838import androidx.navigation.toRoute
39+ import dev.chrisbanes.haze.hazeSource
40+ import dev.chrisbanes.haze.rememberHazeState
3941import kotlinx.coroutines.delay
4042import kotlinx.coroutines.launch
4143import kotlinx.serialization.Serializable
@@ -86,8 +88,9 @@ import to.bitkit.ui.screens.transfer.external.ExternalFeeCustomScreen
8688import to.bitkit.ui.screens.transfer.external.ExternalNodeViewModel
8789import to.bitkit.ui.screens.transfer.external.ExternalSuccessScreen
8890import to.bitkit.ui.screens.transfer.external.LnurlChannelScreen
89- import to.bitkit.ui.screens.wallets.HomeNav
90- import to.bitkit.ui.screens.wallets.HomeRoutes
91+ import to.bitkit.ui.screens.wallets.HomeScreen
92+ import to.bitkit.ui.screens.wallets.SavingsWalletScreen
93+ import to.bitkit.ui.screens.wallets.SpendingWalletScreen
9194import to.bitkit.ui.screens.wallets.activity.ActivityDetailScreen
9295import to.bitkit.ui.screens.wallets.activity.ActivityExploreScreen
9396import to.bitkit.ui.screens.wallets.activity.AllActivityScreen
@@ -167,6 +170,7 @@ import to.bitkit.ui.sheets.SendSheet
167170import to.bitkit.ui.sheets.UpdateSheet
168171import to.bitkit.ui.theme.TRANSITION_SHEET_MS
169172import to.bitkit.ui.utils.AutoReadClipboardHandler
173+ import to.bitkit.ui.utils.RequestNotificationPermissions
170174import to.bitkit.ui.utils.Transitions
171175import to.bitkit.ui.utils.composableWithDefaultTransitions
172176import to.bitkit.ui.utils.navigationWithDefaultTransitions
@@ -196,7 +200,6 @@ fun ContentView(
196200 modifier : Modifier = Modifier ,
197201) {
198202 val navController = rememberNavController()
199- val walletNavController = rememberNavController()
200203
201204 val drawerState = rememberDrawerState(initialValue = DrawerValue .Closed )
202205 val context = LocalContext .current
@@ -439,7 +442,6 @@ fun ContentView(
439442 Box (modifier = Modifier .fillMaxSize()) {
440443 RootNavHost (
441444 navController = navController,
442- walletNavController = walletNavController,
443445 drawerState = drawerState,
444446 walletViewModel = walletViewModel,
445447 appViewModel = appViewModel,
@@ -470,7 +472,7 @@ fun ContentView(
470472 DrawerMenu (
471473 drawerState = drawerState,
472474 rootNavController = navController,
473- walletNavController = walletNavController ,
475+ walletNavController = navController ,
474476 hasSeenWidgetsIntro = hasSeenWidgetsIntro,
475477 hasSeenShopIntro = hasSeenShopIntro,
476478 modifier = Modifier .align(Alignment .TopEnd ),
@@ -482,7 +484,6 @@ fun ContentView(
482484@Composable
483485private fun RootNavHost (
484486 navController : NavHostController ,
485- walletNavController : NavHostController ,
486487 drawerState : DrawerState ,
487488 walletViewModel : WalletViewModel ,
488489 appViewModel : AppViewModel ,
@@ -500,7 +501,6 @@ private fun RootNavHost(
500501 activityListViewModel = activityListViewModel,
501502 settingsViewModel = settingsViewModel,
502503 navController = navController,
503- walletNavController = walletNavController,
504504 drawerState = drawerState,
505505 )
506506 allActivity(
@@ -638,10 +638,7 @@ private fun RootNavHost(
638638 SettingUpScreen (
639639 viewModel = transferViewModel,
640640 onContinueClick = {
641- navController.navigateToHomeNested(
642- walletNavController = walletNavController,
643- nestedRoute = HomeRoutes .Home
644- )
641+ navController.navigateToHome()
645642 }
646643 )
647644 }
@@ -753,18 +750,80 @@ private fun NavGraphBuilder.home(
753750 activityListViewModel : ActivityListViewModel ,
754751 settingsViewModel : SettingsViewModel ,
755752 navController : NavHostController ,
756- walletNavController : NavHostController ,
757753 drawerState : DrawerState ,
758754) {
759755 composable<Routes .Home > {
760- HomeNav (
761- walletViewModel = walletViewModel,
762- appViewModel = appViewModel,
763- activityListViewModel = activityListViewModel,
764- settingsViewModel = settingsViewModel,
765- rootNavController = navController,
766- walletNavController = walletNavController,
767- drawerState = drawerState,
756+ val uiState by walletViewModel.uiState.collectAsStateWithLifecycle()
757+ val hazeState = rememberHazeState()
758+
759+ RequestNotificationPermissions (
760+ onPermissionChange = { granted ->
761+ settingsViewModel.setNotificationPreference(granted)
762+ }
763+ )
764+ Box (
765+ modifier = Modifier
766+ .fillMaxSize()
767+ .hazeSource(hazeState)
768+ ) {
769+ HomeScreen (
770+ mainUiState = uiState,
771+ drawerState = drawerState,
772+ rootNavController = navController,
773+ walletNavController = navController,
774+ settingsViewModel = settingsViewModel,
775+ walletViewModel = walletViewModel,
776+ appViewModel = appViewModel,
777+ activityListViewModel = activityListViewModel,
778+ )
779+ }
780+ }
781+ composable<Routes .Savings >(
782+ enterTransition = { Transitions .slideInHorizontally },
783+ exitTransition = { Transitions .slideOutHorizontally },
784+ ) {
785+ val hasSeenSpendingIntro by settingsViewModel.hasSeenSpendingIntro.collectAsStateWithLifecycle()
786+ val isGeoBlocked by appViewModel.isGeoBlocked.collectAsStateWithLifecycle()
787+ val onchainActivities by activityListViewModel.onchainActivities.collectAsStateWithLifecycle()
788+
789+ SavingsWalletScreen (
790+ isGeoBlocked = isGeoBlocked,
791+ onchainActivities = onchainActivities.orEmpty(),
792+ onAllActivityButtonClick = { navController.navigateToAllActivity() },
793+ onActivityItemClick = { navController.navigateToActivityItem(it) },
794+ onEmptyActivityRowClick = { appViewModel.showSheet(Sheet .Receive ) },
795+ onTransferToSpendingClick = {
796+ if (! hasSeenSpendingIntro) {
797+ navController.navigateToTransferSpendingIntro()
798+ } else {
799+ navController.navigateToTransferSpendingAmount()
800+ }
801+ },
802+ onBackClick = { navController.popBackStack() },
803+ )
804+ }
805+ composable<Routes .Spending >(
806+ enterTransition = { Transitions .slideInHorizontally },
807+ exitTransition = { Transitions .slideOutHorizontally },
808+ ) {
809+ val hasSeenSavingsIntro by settingsViewModel.hasSeenSavingsIntro.collectAsStateWithLifecycle()
810+ val uiState by walletViewModel.uiState.collectAsStateWithLifecycle()
811+ val lightningActivities by activityListViewModel.lightningActivities.collectAsStateWithLifecycle()
812+
813+ SpendingWalletScreen (
814+ uiState = uiState,
815+ lightningActivities = lightningActivities.orEmpty(),
816+ onAllActivityButtonClick = { navController.navigateToAllActivity() },
817+ onActivityItemClick = { navController.navigateToActivityItem(it) },
818+ onEmptyActivityRowClick = { appViewModel.showSheet(Sheet .Receive ) },
819+ onTransferToSavingsClick = {
820+ if (! hasSeenSavingsIntro) {
821+ navController.navigateToTransferSavingsIntro()
822+ } else {
823+ navController.navigateToTransferSavingsAvailability()
824+ }
825+ },
826+ onBackClick = { navController.popBackStack() },
768827 )
769828 }
770829}
@@ -1408,33 +1467,13 @@ fun NavController.navigateToHome() {
14081467 }
14091468}
14101469
1470+ @Deprecated(" Use navigateToHome() instead" , ReplaceWith (" navigateToHome()" ))
14111471fun NavController.navigateToHomeNested (
1412- walletNavController : NavController ? ,
1413- nestedRoute : Any? ,
1472+ @Suppress( " UNUSED_PARAMETER " ) walletNavController : NavController ? ,
1473+ @Suppress( " UNUSED_PARAMETER " ) nestedRoute : Any? ,
14141474) {
1415- // Handle nested navigation if provided
1416- walletNavController?.run {
1417- when (nestedRoute) {
1418- is HomeRoutes .Home -> {
1419- val popped = popBackStack<HomeRoutes .Home >(inclusive = false )
1420- if (! popped) {
1421- navigate(HomeRoutes .Home ) {
1422- popUpTo(graph.startDestinationId)
1423- launchSingleTop = true
1424- }
1425- }
1426- }
1427- }
1428- }
1429-
1430- // Handle root navigation
1431- val popped = popBackStack<Routes .Home >(inclusive = false )
1432- if (! popped) {
1433- navigate(Routes .Home ) {
1434- popUpTo(graph.startDestinationId)
1435- launchSingleTop = true
1436- }
1437- }
1475+ // walletNavController and nestedRoute are no longer needed
1476+ navigateToHome()
14381477}
14391478
14401479fun NavController.navigateToAllActivity () {
@@ -1605,6 +1644,12 @@ sealed interface Routes {
16051644 @Serializable
16061645 data object Home : Routes
16071646
1647+ @Serializable
1648+ data object Savings : Routes
1649+
1650+ @Serializable
1651+ data object Spending : Routes
1652+
16081653 @Serializable
16091654 data object Settings : Routes
16101655
0 commit comments