11package to.bitkit.ui
22
3+ import android.content.Intent
34import androidx.compose.runtime.Composable
45import androidx.compose.runtime.CompositionLocalProvider
56import androidx.compose.runtime.DisposableEffect
@@ -12,6 +13,7 @@ import androidx.compose.runtime.remember
1213import androidx.compose.runtime.rememberCoroutineScope
1314import androidx.compose.runtime.setValue
1415import androidx.compose.ui.platform.LocalContext
16+ import androidx.core.net.toUri
1517import androidx.hilt.navigation.compose.hiltViewModel
1618import androidx.lifecycle.Lifecycle
1719import androidx.lifecycle.LifecycleEventObserver
@@ -29,13 +31,16 @@ import androidx.navigation.toRoute
2931import kotlinx.coroutines.delay
3032import kotlinx.coroutines.launch
3133import kotlinx.serialization.Serializable
34+ import to.bitkit.env.Env
3235import to.bitkit.models.NewTransactionSheetDetails
3336import to.bitkit.models.NodeLifecycleState
3437import to.bitkit.models.Toast
3538import to.bitkit.models.WidgetType
39+ import to.bitkit.ui.Routes.ExternalConnection
3640import to.bitkit.ui.components.AuthCheckScreen
3741import to.bitkit.ui.components.Sheet
3842import to.bitkit.ui.components.SheetHost
43+ import to.bitkit.ui.components.TimedSheetType
3944import to.bitkit.ui.onboarding.InitializingWalletView
4045import to.bitkit.ui.onboarding.WalletRestoreErrorView
4146import to.bitkit.ui.onboarding.WalletRestoreSuccessView
@@ -114,6 +119,8 @@ import to.bitkit.ui.settings.advanced.CoinSelectPreferenceScreen
114119import to.bitkit.ui.settings.advanced.ElectrumConfigScreen
115120import to.bitkit.ui.settings.advanced.RgsServerScreen
116121import to.bitkit.ui.settings.appStatus.AppStatusScreen
122+ import to.bitkit.ui.settings.backgroundPayments.BackgroundPaymentsIntroScreen
123+ import to.bitkit.ui.settings.backgroundPayments.BackgroundPaymentsSettings
117124import to.bitkit.ui.settings.backups.ResetAndRestoreScreen
118125import to.bitkit.ui.settings.general.DefaultUnitSettingsScreen
119126import to.bitkit.ui.settings.general.GeneralSettingsScreen
@@ -136,10 +143,14 @@ import to.bitkit.ui.settings.support.ReportIssueScreen
136143import to.bitkit.ui.settings.support.SupportScreen
137144import to.bitkit.ui.settings.transactionSpeed.CustomFeeSettingsScreen
138145import to.bitkit.ui.settings.transactionSpeed.TransactionSpeedSettingsScreen
146+ import to.bitkit.ui.sheets.BackgroundPaymentsIntroSheet
147+ import to.bitkit.ui.sheets.BackupRoute
139148import to.bitkit.ui.sheets.BackupSheet
140149import to.bitkit.ui.sheets.ForceTransferSheet
150+ import to.bitkit.ui.sheets.HighBalanceWarningSheet
141151import to.bitkit.ui.sheets.LnurlAuthSheet
142152import to.bitkit.ui.sheets.PinSheet
153+ import to.bitkit.ui.sheets.QuickPayIntroSheet
143154import to.bitkit.ui.sheets.SendSheet
144155import to.bitkit.ui.sheets.UpdateSheet
145156import to.bitkit.ui.theme.TRANSITION_SHEET_MS
@@ -320,7 +331,7 @@ fun ContentView(
320331 ) {
321332 AutoReadClipboardHandler ()
322333
323- val currentSheet by appViewModel.currentSheet
334+ val currentSheet by appViewModel.currentSheet.collectAsStateWithLifecycle()
324335 SheetHost (
325336 shouldExpand = currentSheet != null ,
326337 onDismiss = { appViewModel.hideSheet() },
@@ -340,7 +351,7 @@ fun ContentView(
340351 ReceiveSheet (
341352 walletState = walletUiState,
342353 navigateToExternalConnection = {
343- navController.navigate(Routes . ExternalConnection ())
354+ navController.navigate(ExternalConnection ())
344355 appViewModel.hideSheet()
345356 }
346357 )
@@ -349,10 +360,53 @@ fun ContentView(
349360 is Sheet .ActivityDateRangeSelector -> DateRangeSelectorSheet ()
350361 is Sheet .ActivityTagSelector -> TagSelectorSheet ()
351362 is Sheet .Pin -> PinSheet (sheet, appViewModel)
352- is Sheet .Backup -> BackupSheet (sheet, appViewModel)
363+ is Sheet .Backup -> BackupSheet (sheet, onDismiss = { appViewModel.hideSheet() } )
353364 is Sheet .LnurlAuth -> LnurlAuthSheet (sheet, appViewModel)
354- Sheet .Update -> UpdateSheet (onCancel = { appViewModel.hideSheet() })
355365 Sheet .ForceTransfer -> ForceTransferSheet (appViewModel, transferViewModel)
366+ is Sheet .TimedSheet -> {
367+ when (sheet.type) {
368+ TimedSheetType .APP_UPDATE -> {
369+ UpdateSheet (onCancel = { appViewModel.dismissTimedSheet() })
370+ }
371+
372+ TimedSheetType .BACKUP -> {
373+ BackupSheet (
374+ sheet = Sheet .Backup (BackupRoute .Intro ),
375+ onDismiss = { appViewModel.dismissTimedSheet() }
376+ )
377+ }
378+
379+ TimedSheetType .NOTIFICATIONS -> {
380+ BackgroundPaymentsIntroSheet (
381+ onContinue = {
382+ appViewModel.dismissTimedSheet(skipQueue = true )
383+ navController.navigate(Routes .BackgroundPaymentsSettings )
384+ settingsViewModel.setBgPaymentsIntroSeen(true )
385+ },
386+ )
387+ }
388+
389+ TimedSheetType .QUICK_PAY -> {
390+ QuickPayIntroSheet (
391+ onContinue = {
392+ appViewModel.dismissTimedSheet(skipQueue = true )
393+ navController.navigate(Routes .QuickPaySettings )
394+ },
395+ )
396+ }
397+
398+ TimedSheetType .HIGH_BALANCE -> {
399+ HighBalanceWarningSheet (
400+ understoodClick = { appViewModel.dismissTimedSheet() },
401+ learnMoreClick = {
402+ val intent = Intent (Intent .ACTION_VIEW , Env .STORING_BITCOINS_URL .toUri())
403+ context.startActivity(intent)
404+ appViewModel.dismissTimedSheet(skipQueue = true )
405+ }
406+ )
407+ }
408+ }
409+ }
356410 }
357411 }
358412 ) {
@@ -763,6 +817,22 @@ private fun NavGraphBuilder.generalSettings(navController: NavHostController) {
763817 composableWithDefaultTransitions<Routes .TagsSettings > {
764818 TagsSettingsScreen (navController)
765819 }
820+ composableWithDefaultTransitions<Routes .BackgroundPaymentsSettings > {
821+ BackgroundPaymentsSettings (
822+ onBack = { navController.popBackStack() },
823+ onClose = { navController.navigateToHome() },
824+ )
825+ }
826+
827+ composableWithDefaultTransitions<Routes .BackgroundPaymentsIntro > {
828+ BackgroundPaymentsIntroScreen (
829+ onBack = { navController.popBackStack() },
830+ onClose = { navController.navigateToHome() },
831+ onContinue = {
832+ navController.navigate(Routes .BackgroundPaymentsSettings )
833+ }
834+ )
835+ }
766836}
767837
768838private fun NavGraphBuilder.advancedSettings (navController : NavHostController ) {
@@ -1031,7 +1101,7 @@ private fun NavGraphBuilder.update() {
10311101
10321102private fun NavGraphBuilder.recoveryMode (
10331103 navController : NavHostController ,
1034- appViewModel : AppViewModel
1104+ appViewModel : AppViewModel ,
10351105) {
10361106 composableWithDefaultTransitions<Routes .RecoveryMode > {
10371107 RecoveryModeScreen (
@@ -1719,4 +1789,10 @@ sealed interface Routes {
17191789
17201790 @Serializable
17211791 data object RecoveryMnemonic : Routes
1792+
1793+ @Serializable
1794+ data object BackgroundPaymentsIntro : Routes
1795+
1796+ @Serializable
1797+ data object BackgroundPaymentsSettings : Routes
17221798}
0 commit comments