11package to.bitkit.ui
22
33import android.content.Intent
4+ import androidx.compose.foundation.layout.Box
5+ import androidx.compose.foundation.layout.fillMaxSize
6+ import androidx.compose.material3.DrawerValue
7+ import androidx.compose.material3.rememberDrawerState
48import androidx.compose.runtime.Composable
59import androidx.compose.runtime.CompositionLocalProvider
610import androidx.compose.runtime.DisposableEffect
@@ -12,6 +16,7 @@ import androidx.compose.runtime.mutableStateOf
1216import androidx.compose.runtime.remember
1317import androidx.compose.runtime.rememberCoroutineScope
1418import androidx.compose.runtime.setValue
19+ import androidx.compose.ui.Modifier
1520import androidx.compose.ui.platform.LocalContext
1621import androidx.core.net.toUri
1722import androidx.hilt.navigation.compose.hiltViewModel
@@ -38,6 +43,7 @@ import to.bitkit.models.Toast
3843import to.bitkit.models.WidgetType
3944import to.bitkit.ui.Routes.ExternalConnection
4045import to.bitkit.ui.components.AuthCheckScreen
46+ import to.bitkit.ui.components.DrawerMenu
4147import to.bitkit.ui.components.Sheet
4248import to.bitkit.ui.components.SheetHost
4349import to.bitkit.ui.components.TimedSheetType
@@ -183,7 +189,7 @@ fun ContentView(
183189 backupsViewModel : BackupsViewModel ,
184190) {
185191 val navController = rememberNavController()
186- val drawerState = androidx.compose.material3. rememberDrawerState(initialValue = androidx.compose.material3. DrawerValue .Closed )
192+ val drawerState = rememberDrawerState(initialValue = DrawerValue .Closed )
187193 val context = LocalContext .current
188194 val lifecycle = LocalLifecycleOwner .current.lifecycle
189195
@@ -344,95 +350,112 @@ fun ContentView(
344350 ) {
345351 AutoReadClipboardHandler ()
346352
347- val currentSheet by appViewModel.currentSheet.collectAsStateWithLifecycle()
348- SheetHost (
349- shouldExpand = currentSheet != null ,
350- onDismiss = { appViewModel.hideSheet() },
351- sheets = {
352- when (val sheet = currentSheet) {
353- null -> Unit
354- is Sheet .Send -> {
355- SendSheet (
356- appViewModel = appViewModel,
357- walletViewModel = walletViewModel,
358- startDestination = sheet.route,
359- )
360- }
361-
362- is Sheet .Receive -> {
363- val walletUiState by walletViewModel.uiState.collectAsState()
364- ReceiveSheet (
365- walletState = walletUiState,
366- navigateToExternalConnection = {
367- navController.navigate(ExternalConnection ())
368- appViewModel.hideSheet()
369- }
370- )
371- }
372-
373- is Sheet .ActivityDateRangeSelector -> DateRangeSelectorSheet ()
374- is Sheet .ActivityTagSelector -> TagSelectorSheet ()
375- is Sheet .Pin -> PinSheet (sheet, appViewModel)
376- is Sheet .Backup -> BackupSheet (sheet, onDismiss = { appViewModel.hideSheet() })
377- is Sheet .LnurlAuth -> LnurlAuthSheet (sheet, appViewModel)
378- Sheet .ForceTransfer -> ForceTransferSheet (appViewModel, transferViewModel)
379- is Sheet .Gift -> GiftSheet (sheet, appViewModel)
380- is Sheet .TimedSheet -> {
381- when (sheet.type) {
382- TimedSheetType .APP_UPDATE -> {
383- UpdateSheet (onCancel = { appViewModel.dismissTimedSheet() })
384- }
385-
386- TimedSheetType .BACKUP -> {
387- BackupSheet (
388- sheet = Sheet .Backup (BackupRoute .Intro ),
389- onDismiss = { appViewModel.dismissTimedSheet() }
390- )
391- }
353+ val hasSeenWidgetsIntro by settingsViewModel.hasSeenWidgetsIntro.collectAsStateWithLifecycle()
354+ val hasSeenShopIntro by settingsViewModel.hasSeenShopIntro.collectAsStateWithLifecycle()
392355
393- TimedSheetType .NOTIFICATIONS -> {
394- BackgroundPaymentsIntroSheet (
395- onContinue = {
396- appViewModel.dismissTimedSheet(skipQueue = true )
397- navController.navigate(Routes .BackgroundPaymentsSettings )
398- settingsViewModel.setBgPaymentsIntroSeen(true )
399- },
400- )
401- }
356+ val currentSheet by appViewModel.currentSheet.collectAsStateWithLifecycle()
357+ Box (
358+ modifier = Modifier .fillMaxSize()
359+ ) {
360+ SheetHost (
361+ shouldExpand = currentSheet != null ,
362+ onDismiss = { appViewModel.hideSheet() },
363+ sheets = {
364+ when (val sheet = currentSheet) {
365+ null -> Unit
366+ is Sheet .Send -> {
367+ SendSheet (
368+ appViewModel = appViewModel,
369+ walletViewModel = walletViewModel,
370+ startDestination = sheet.route,
371+ )
372+ }
402373
403- TimedSheetType .QUICK_PAY -> {
404- QuickPayIntroSheet (
405- onContinue = {
406- appViewModel.dismissTimedSheet(skipQueue = true )
407- navController.navigate(Routes .QuickPaySettings )
408- },
409- )
410- }
374+ is Sheet .Receive -> {
375+ val walletUiState by walletViewModel.uiState.collectAsState()
376+ ReceiveSheet (
377+ walletState = walletUiState,
378+ navigateToExternalConnection = {
379+ navController.navigate(ExternalConnection ())
380+ appViewModel.hideSheet()
381+ }
382+ )
383+ }
411384
412- TimedSheetType .HIGH_BALANCE -> {
413- HighBalanceWarningSheet (
414- understoodClick = { appViewModel.dismissTimedSheet() },
415- learnMoreClick = {
416- val intent = Intent (Intent .ACTION_VIEW , Env .STORING_BITCOINS_URL .toUri())
417- context.startActivity(intent)
418- appViewModel.dismissTimedSheet(skipQueue = true )
419- }
420- )
385+ is Sheet .ActivityDateRangeSelector -> DateRangeSelectorSheet ()
386+ is Sheet .ActivityTagSelector -> TagSelectorSheet ()
387+ is Sheet .Pin -> PinSheet (sheet, appViewModel)
388+ is Sheet .Backup -> BackupSheet (sheet, onDismiss = { appViewModel.hideSheet() })
389+ is Sheet .LnurlAuth -> LnurlAuthSheet (sheet, appViewModel)
390+ Sheet .ForceTransfer -> ForceTransferSheet (appViewModel, transferViewModel)
391+ is Sheet .Gift -> GiftSheet (sheet, appViewModel)
392+ is Sheet .TimedSheet -> {
393+ when (sheet.type) {
394+ TimedSheetType .APP_UPDATE -> {
395+ UpdateSheet (onCancel = { appViewModel.dismissTimedSheet() })
396+ }
397+
398+ TimedSheetType .BACKUP -> {
399+ BackupSheet (
400+ sheet = Sheet .Backup (BackupRoute .Intro ),
401+ onDismiss = { appViewModel.dismissTimedSheet() }
402+ )
403+ }
404+
405+ TimedSheetType .NOTIFICATIONS -> {
406+ BackgroundPaymentsIntroSheet (
407+ onContinue = {
408+ appViewModel.dismissTimedSheet(skipQueue = true )
409+ navController.navigate(Routes .BackgroundPaymentsSettings )
410+ settingsViewModel.setBgPaymentsIntroSeen(true )
411+ },
412+ )
413+ }
414+
415+ TimedSheetType .QUICK_PAY -> {
416+ QuickPayIntroSheet (
417+ onContinue = {
418+ appViewModel.dismissTimedSheet(skipQueue = true )
419+ navController.navigate(Routes .QuickPaySettings )
420+ },
421+ )
422+ }
423+
424+ TimedSheetType .HIGH_BALANCE -> {
425+ HighBalanceWarningSheet (
426+ understoodClick = { appViewModel.dismissTimedSheet() },
427+ learnMoreClick = {
428+ val intent =
429+ Intent (Intent .ACTION_VIEW , Env .STORING_BITCOINS_URL .toUri())
430+ context.startActivity(intent)
431+ appViewModel.dismissTimedSheet(skipQueue = true )
432+ }
433+ )
434+ }
421435 }
422436 }
423437 }
424438 }
439+ ) {
440+ RootNavHost (
441+ navController = navController,
442+ drawerState = drawerState,
443+ walletViewModel = walletViewModel,
444+ appViewModel = appViewModel,
445+ activityListViewModel = activityListViewModel,
446+ settingsViewModel = settingsViewModel,
447+ currencyViewModel = currencyViewModel,
448+ transferViewModel = transferViewModel,
449+ )
425450 }
426- ) {
427- RootNavHost (
428- navController = navController,
451+
452+ DrawerMenu (
429453 drawerState = drawerState,
430- walletViewModel = walletViewModel,
431- appViewModel = appViewModel,
432- activityListViewModel = activityListViewModel,
433- settingsViewModel = settingsViewModel,
434- currencyViewModel = currencyViewModel,
435- transferViewModel = transferViewModel,
454+ walletNavController = null ,
455+ rootNavController = navController,
456+ hasSeenWidgetsIntro = hasSeenWidgetsIntro,
457+ hasSeenShopIntro = hasSeenShopIntro,
458+ modifier = androidx.compose.ui.Modifier .align(androidx.compose.ui.Alignment .TopEnd ),
436459 )
437460 }
438461 }
0 commit comments