@@ -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,7 +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
91+ import to.bitkit.ui.screens.wallets.HomeScreen
92+ import to.bitkit.ui.screens.wallets.SavingsWalletScreen
93+ import to.bitkit.ui.screens.wallets.SpendingWalletScreen
9094import to.bitkit.ui.screens.wallets.activity.ActivityDetailScreen
9195import to.bitkit.ui.screens.wallets.activity.ActivityExploreScreen
9296import to.bitkit.ui.screens.wallets.activity.AllActivityScreen
@@ -166,6 +170,7 @@ import to.bitkit.ui.sheets.SendSheet
166170import to.bitkit.ui.sheets.UpdateSheet
167171import to.bitkit.ui.theme.TRANSITION_SHEET_MS
168172import to.bitkit.ui.utils.AutoReadClipboardHandler
173+ import to.bitkit.ui.utils.RequestNotificationPermissions
169174import to.bitkit.ui.utils.Transitions
170175import to.bitkit.ui.utils.composableWithDefaultTransitions
171176import to.bitkit.ui.utils.navigationWithDefaultTransitions
@@ -195,6 +200,7 @@ fun ContentView(
195200 modifier : Modifier = Modifier ,
196201) {
197202 val navController = rememberNavController()
203+
198204 val drawerState = rememberDrawerState(initialValue = DrawerValue .Closed )
199205 val context = LocalContext .current
200206 val lifecycle = LocalLifecycleOwner .current.lifecycle
@@ -494,7 +500,7 @@ private fun RootNavHost(
494500 activityListViewModel = activityListViewModel,
495501 settingsViewModel = settingsViewModel,
496502 navController = navController,
497- drawerState = drawerState
503+ drawerState = drawerState,
498504 )
499505 allActivity(
500506 activityListViewModel = activityListViewModel,
@@ -541,6 +547,7 @@ private fun RootNavHost(
541547 navController.navigateToTransferFunding()
542548 settingsViewModel.setHasSeenTransferIntro(true )
543549 },
550+ onBackClick = {},
544551 )
545552 }
546553 composableWithDefaultTransitions<Routes .SavingsIntro > {
@@ -630,7 +637,9 @@ private fun RootNavHost(
630637 composableWithDefaultTransitions<Routes .SettingUp > {
631638 SettingUpScreen (
632639 viewModel = transferViewModel,
633- onContinueClick = { navController.popBackStack<Routes .TransferRoot >(inclusive = true ) },
640+ onContinueClick = {
641+ navController.navigateToHome()
642+ }
634643 )
635644 }
636645 composableWithDefaultTransitions<Routes .Funding > {
@@ -744,13 +753,77 @@ private fun NavGraphBuilder.home(
744753 drawerState : DrawerState ,
745754) {
746755 composable<Routes .Home > {
747- HomeNav (
748- walletViewModel = walletViewModel,
749- appViewModel = appViewModel,
750- activityListViewModel = activityListViewModel,
751- settingsViewModel = settingsViewModel,
752- rootNavController = navController,
753- 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() },
754827 )
755828 }
756829}
@@ -818,7 +891,8 @@ private fun NavGraphBuilder.profile(
818891 onContinue = {
819892 settingsViewModel.setHasSeenProfileIntro(true )
820893 navController.navigate(Routes .CreateProfile )
821- }
894+ },
895+ onBackClick = { navController.popBackStack() }
822896 )
823897 }
824898 composableWithDefaultTransitions<Routes .CreateProfile > {
@@ -838,6 +912,9 @@ private fun NavGraphBuilder.shop(
838912 onContinue = {
839913 settingsViewModel.setHasSeenShopIntro(true )
840914 navController.navigate(Routes .ShopDiscover )
915+ },
916+ onBackClick = {
917+ navController.popBackStack()
841918 }
842919 )
843920 }
@@ -1228,7 +1305,8 @@ private fun NavGraphBuilder.widgets(
12281305 onContinue = {
12291306 settingsViewModel.setHasSeenWidgetsIntro(true )
12301307 navController.navigate(Routes .AddWidget )
1231- }
1308+ },
1309+ onBackClick = {},
12321310 )
12331311 }
12341312 composableWithDefaultTransitions<Routes .AddWidget > {
@@ -1244,6 +1322,7 @@ private fun NavGraphBuilder.widgets(
12441322 }
12451323 },
12461324 fiatSymbol = LocalCurrencies .current.currencySymbol,
1325+ onBackCLick = { navController.popBackStack() }
12471326 )
12481327 }
12491328 composableWithDefaultTransitions<Routes .CalculatorPreview > {
@@ -1558,6 +1637,12 @@ sealed interface Routes {
15581637 @Serializable
15591638 data object Home : Routes
15601639
1640+ @Serializable
1641+ data object Savings : Routes
1642+
1643+ @Serializable
1644+ data object Spending : Routes
1645+
15611646 @Serializable
15621647 data object Settings : Routes
15631648
0 commit comments