@@ -21,11 +21,13 @@ import androidx.compose.runtime.setValue
2121import androidx.compose.ui.Alignment
2222import androidx.compose.ui.Modifier
2323import androidx.compose.ui.layout.ContentScale
24+ import androidx.compose.ui.platform.LocalContext
2425import androidx.compose.ui.platform.testTag
2526import androidx.compose.ui.res.painterResource
2627import androidx.compose.ui.res.stringResource
2728import androidx.compose.ui.tooling.preview.Preview
2829import androidx.compose.ui.unit.dp
30+ import androidx.hilt.navigation.compose.hiltViewModel
2931import androidx.lifecycle.compose.collectAsStateWithLifecycle
3032import com.synonym.bitkitcore.BtBolt11InvoiceState
3133import com.synonym.bitkitcore.BtOrderState
@@ -50,12 +52,17 @@ import to.bitkit.ui.components.LightningChannel
5052import to.bitkit.ui.components.PrimaryButton
5153import to.bitkit.ui.components.SwipeToConfirm
5254import to.bitkit.ui.components.VerticalSpacer
55+ import to.bitkit.ui.components.settings.SettingsSwitchRow
5356import to.bitkit.ui.scaffold.AppTopBar
5457import to.bitkit.ui.scaffold.CloseNavIcon
5558import to.bitkit.ui.scaffold.ScreenColumn
59+ import to.bitkit.ui.theme.AppSwitchDefaults
5660import to.bitkit.ui.theme.AppThemeSurface
5761import to.bitkit.ui.theme.Colors
62+ import to.bitkit.ui.utils.NotificationUtils
63+ import to.bitkit.ui.utils.RequestNotificationPermissions
5864import to.bitkit.ui.utils.withAccent
65+ import to.bitkit.viewmodels.SettingsViewModel
5966import to.bitkit.viewmodels.TransferViewModel
6067
6168@Composable
@@ -66,11 +73,27 @@ fun SpendingConfirmScreen(
6673 onLearnMoreClick : () -> Unit = {},
6774 onAdvancedClick : () -> Unit = {},
6875 onConfirm : () -> Unit = {},
76+ settingsViewModel : SettingsViewModel = hiltViewModel(),
6977) {
78+ val context = LocalContext .current
79+
7080 val state by viewModel.spendingUiState.collectAsStateWithLifecycle()
71- val order = state.order ? : return
81+
82+ val order = state.order ? : run {
83+ onCloseClick()
84+ return
85+ }
7286 val isAdvanced = state.isAdvanced
7387
88+ val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle()
89+
90+ RequestNotificationPermissions (
91+ onPermissionChange = { granted ->
92+ settingsViewModel.setNotificationPreference(granted)
93+ },
94+ showPermissionDialog = false
95+ )
96+
7497 Content (
7598 onBackClick = onBackClick,
7699 onCloseClick = onCloseClick,
@@ -80,6 +103,10 @@ fun SpendingConfirmScreen(
80103 onUseDefaultLspBalanceClick = { viewModel.onUseDefaultLspBalanceClick() },
81104 onTransferToSpendingConfirm = { order -> viewModel.onTransferToSpendingConfirm(order) },
82105 order = order,
106+ hasNotificationPermission = notificationsGranted,
107+ onSwitchClick = {
108+ NotificationUtils .openNotificationSettings(context)
109+ },
83110 isAdvanced = isAdvanced
84111 )
85112}
@@ -92,6 +119,8 @@ private fun Content(
92119 onAdvancedClick : () -> Unit ,
93120 onConfirm : () -> Unit ,
94121 onUseDefaultLspBalanceClick : () -> Unit ,
122+ onSwitchClick : () -> Unit ,
123+ hasNotificationPermission : Boolean ,
95124 onTransferToSpendingConfirm : (IBtOrder ) -> Unit ,
96125 order : IBtOrder ,
97126 isAdvanced : Boolean ,
@@ -174,9 +203,20 @@ private fun Content(
174203 showLabels = true ,
175204 modifier = Modifier .testTag(" SpendingConfirmChannel" )
176205 )
206+
207+ VerticalSpacer (16 .dp)
177208 }
178209
179- VerticalSpacer (16 .dp)
210+ SettingsSwitchRow (
211+ title = " Set up in background" ,
212+ isChecked = hasNotificationPermission,
213+ colors = AppSwitchDefaults .colorsPurple,
214+ onClick = onSwitchClick,
215+ modifier = Modifier .fillMaxWidth()
216+ )
217+
218+ VerticalSpacer (31 .dp)
219+
180220 Row (horizontalArrangement = Arrangement .spacedBy(16 .dp)) {
181221 PrimaryButton (
182222 text = stringResource(R .string.common__learn_more),
@@ -298,6 +338,8 @@ private fun Preview() {
298338 updatedAt = " 2025-07-28T08:29:03Z" ,
299339 createdAt = " 2025-07-28T08:29:03Z"
300340 ),
341+ onSwitchClick = {},
342+ hasNotificationPermission = true ,
301343 isAdvanced = false
302344 )
303345 }
@@ -374,6 +416,8 @@ private fun Preview2() {
374416 updatedAt = " 2025-07-28T08:29:03Z" ,
375417 createdAt = " 2025-07-28T08:29:03Z"
376418 ),
419+ onSwitchClick = {},
420+ hasNotificationPermission = true ,
377421 isAdvanced = true
378422 )
379423 }
@@ -450,6 +494,8 @@ private fun Preview3() {
450494 updatedAt = " 2025-07-28T08:29:03Z" ,
451495 createdAt = " 2025-07-28T08:29:03Z"
452496 ),
497+ onSwitchClick = {},
498+ hasNotificationPermission = false ,
453499 isAdvanced = false
454500 )
455501 }
@@ -526,6 +572,8 @@ private fun Preview4() {
526572 updatedAt = " 2025-07-28T08:29:03Z" ,
527573 createdAt = " 2025-07-28T08:29:03Z"
528574 ),
575+ onSwitchClick = {},
576+ hasNotificationPermission = true ,
529577 isAdvanced = true
530578 )
531579 }
0 commit comments