diff --git a/app/src/main/java/to/bitkit/models/Suggestion.kt b/app/src/main/java/to/bitkit/models/Suggestion.kt index d1ca822d6..54a9ce369 100644 --- a/app/src/main/java/to/bitkit/models/Suggestion.kt +++ b/app/src/main/java/to/bitkit/models/Suggestion.kt @@ -101,6 +101,13 @@ enum class Suggestion( icon = R.drawable.transfer, dismissible = false, ), + NOTIFICATIONS( + title = R.string.cards__notifications__title, + description = R.string.cards__notifications__description, + color = Colors.Purple24, + icon = R.drawable.bell, + dismissible = true, + ), } fun String.toSuggestionOrNull() = Suggestion.entries.firstOrNull { it.name == this } diff --git a/app/src/main/java/to/bitkit/ui/components/settings/SettingsSwitchRow.kt b/app/src/main/java/to/bitkit/ui/components/settings/SettingsSwitchRow.kt index 0034bfd47..ed1946ca9 100644 --- a/app/src/main/java/to/bitkit/ui/components/settings/SettingsSwitchRow.kt +++ b/app/src/main/java/to/bitkit/ui/components/settings/SettingsSwitchRow.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchColors import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -25,6 +26,7 @@ fun SettingsSwitchRow( isChecked: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier, + colors: SwitchColors = AppSwitchDefaults.colors, ) { Column( modifier = modifier.height(52.dp) @@ -42,7 +44,7 @@ fun SettingsSwitchRow( Switch( checked = isChecked, onCheckedChange = null, // handled by parent - colors = AppSwitchDefaults.colors, + colors = colors, ) } HorizontalDivider(color = Colors.White10) diff --git a/app/src/main/java/to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt b/app/src/main/java/to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt index 6c099c230..e22c605ff 100644 --- a/app/src/main/java/to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt @@ -21,11 +21,13 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.synonym.bitkitcore.BtBolt11InvoiceState import com.synonym.bitkitcore.BtOrderState @@ -50,12 +52,17 @@ import to.bitkit.ui.components.LightningChannel import to.bitkit.ui.components.PrimaryButton import to.bitkit.ui.components.SwipeToConfirm import to.bitkit.ui.components.VerticalSpacer +import to.bitkit.ui.components.settings.SettingsSwitchRow import to.bitkit.ui.scaffold.AppTopBar import to.bitkit.ui.scaffold.CloseNavIcon import to.bitkit.ui.scaffold.ScreenColumn +import to.bitkit.ui.theme.AppSwitchDefaults import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors +import to.bitkit.ui.utils.NotificationUtils +import to.bitkit.ui.utils.RequestNotificationPermissions import to.bitkit.ui.utils.withAccent +import to.bitkit.viewmodels.SettingsViewModel import to.bitkit.viewmodels.TransferViewModel @Composable @@ -66,11 +73,27 @@ fun SpendingConfirmScreen( onLearnMoreClick: () -> Unit = {}, onAdvancedClick: () -> Unit = {}, onConfirm: () -> Unit = {}, + settingsViewModel: SettingsViewModel = hiltViewModel(), ) { + val context = LocalContext.current + val state by viewModel.spendingUiState.collectAsStateWithLifecycle() - val order = state.order ?: return + + val order = state.order ?: run { + onCloseClick() + return + } val isAdvanced = state.isAdvanced + val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() + + RequestNotificationPermissions( + onPermissionChange = { granted -> + settingsViewModel.setNotificationPreference(granted) + }, + showPermissionDialog = false + ) + Content( onBackClick = onBackClick, onCloseClick = onCloseClick, @@ -80,6 +103,10 @@ fun SpendingConfirmScreen( onUseDefaultLspBalanceClick = { viewModel.onUseDefaultLspBalanceClick() }, onTransferToSpendingConfirm = { order -> viewModel.onTransferToSpendingConfirm(order) }, order = order, + hasNotificationPermission = notificationsGranted, + onSwitchClick = { + NotificationUtils.openNotificationSettings(context) + }, isAdvanced = isAdvanced ) } @@ -92,6 +119,8 @@ private fun Content( onAdvancedClick: () -> Unit, onConfirm: () -> Unit, onUseDefaultLspBalanceClick: () -> Unit, + onSwitchClick: () -> Unit, + hasNotificationPermission: Boolean, onTransferToSpendingConfirm: (IBtOrder) -> Unit, order: IBtOrder, isAdvanced: Boolean, @@ -174,9 +203,20 @@ private fun Content( showLabels = true, modifier = Modifier.testTag("SpendingConfirmChannel") ) + + VerticalSpacer(16.dp) } - VerticalSpacer(16.dp) + SettingsSwitchRow( + title = "Set up in background", + isChecked = hasNotificationPermission, + colors = AppSwitchDefaults.colorsPurple, + onClick = onSwitchClick, + modifier = Modifier.fillMaxWidth() + ) + + VerticalSpacer(31.dp) + Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { PrimaryButton( text = stringResource(R.string.common__learn_more), @@ -298,6 +338,8 @@ private fun Preview() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = true, isAdvanced = false ) } @@ -374,6 +416,8 @@ private fun Preview2() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = true, isAdvanced = true ) } @@ -450,6 +494,8 @@ private fun Preview3() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = false, isAdvanced = false ) } @@ -526,6 +572,8 @@ private fun Preview4() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = true, isAdvanced = true ) } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index e8c249df3..7006f8573 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -128,17 +128,17 @@ fun HomeScreen( activityListViewModel: ActivityListViewModel, homeViewModel: HomeViewModel = hiltViewModel(), ) { + val context = LocalContext.current val hasSeenTransferIntro by settingsViewModel.hasSeenTransferIntro.collectAsStateWithLifecycle() val hasSeenShopIntro by settingsViewModel.hasSeenShopIntro.collectAsStateWithLifecycle() val hasSeenProfileIntro by settingsViewModel.hasSeenProfileIntro.collectAsStateWithLifecycle() val hasSeenWidgetsIntro: Boolean by settingsViewModel.hasSeenWidgetsIntro.collectAsStateWithLifecycle() + val bgPaymentsIntroSeen: Boolean by settingsViewModel.bgPaymentsIntroSeen.collectAsStateWithLifecycle() val quickPayIntroSeen by settingsViewModel.quickPayIntroSeen.collectAsStateWithLifecycle() val latestActivities by activityListViewModel.latestActivities.collectAsStateWithLifecycle() val homeUiState by homeViewModel.uiState.collectAsStateWithLifecycle() - val context = LocalContext.current - LaunchedEffect(Unit) { appViewModel.checkTimedSheets() } @@ -239,6 +239,13 @@ fun HomeScreen( Suggestion.TRANSFER_CLOSING_CHANNEL -> Unit Suggestion.LIGHTNING_SETTING_UP -> rootNavController.navigate(Routes.SettingUp) Suggestion.LIGHTNING_READY -> Unit + Suggestion.NOTIFICATIONS -> { + if (bgPaymentsIntroSeen) { + rootNavController.navigate(Routes.BackgroundPaymentsSettings) + } else { + rootNavController.navigate(Routes.BackgroundPaymentsIntro) + } + } } }, onClickAddWidget = { diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index f6fc16cc5..3e0bbf52c 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -233,6 +233,7 @@ class HomeViewModel @Inject constructor( Suggestion.SUPPORT, Suggestion.INVITE, Suggestion.QUICK_PAY, + Suggestion.NOTIFICATIONS.takeIf { !settings.notificationsGranted }, Suggestion.SHOP, Suggestion.PROFILE, ) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt index 73d784281..805c70855 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt @@ -1,8 +1,6 @@ package to.bitkit.ui.screens.wallets.receive -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -12,11 +10,10 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.painterResource +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight @@ -24,6 +21,8 @@ import androidx.compose.ui.tooling.preview.Devices.NEXUS_5 import androidx.compose.ui.tooling.preview.Devices.PIXEL_TABLET import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.serialization.Serializable import to.bitkit.R import to.bitkit.models.PrimaryDisplay @@ -32,17 +31,22 @@ import to.bitkit.ui.components.BalanceHeaderView import to.bitkit.ui.components.BodyM import to.bitkit.ui.components.BottomSheetPreview import to.bitkit.ui.components.Caption13Up +import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.PrimaryButton import to.bitkit.ui.components.SecondaryButton import to.bitkit.ui.components.Title import to.bitkit.ui.components.VerticalSpacer +import to.bitkit.ui.components.settings.SettingsSwitchRow import to.bitkit.ui.currencyViewModel import to.bitkit.ui.scaffold.SheetTopBar import to.bitkit.ui.shared.modifiers.sheetHeight import to.bitkit.ui.shared.util.gradientBackground +import to.bitkit.ui.theme.AppSwitchDefaults import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors +import to.bitkit.ui.utils.NotificationUtils import to.bitkit.ui.utils.withAccent +import to.bitkit.viewmodels.SettingsViewModel // TODO pass these to nav? @Serializable @@ -57,15 +61,20 @@ data class CjitEntryDetails( @Composable fun ReceiveConfirmScreen( + settingsViewModel: SettingsViewModel = hiltViewModel(), entry: CjitEntryDetails, isAdditional: Boolean = false, onLearnMore: () -> Unit, onContinue: (String) -> Unit, onBack: () -> Unit, ) { + val context = LocalContext.current + val currency = currencyViewModel ?: return val currencies = LocalCurrencies.current + val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() + val networkFeeFormatted = remember(entry.networkFeeSat) { currency.convert(entry.networkFeeSat) ?.let { converted -> "${converted.symbol}${converted.formatted}" } @@ -100,6 +109,10 @@ fun ReceiveConfirmScreen( receiveAmountFormatted = receiveAmountFormatted, onLearnMoreClick = onLearnMore, isAdditional = isAdditional, + onSystemSettingsClick = { + NotificationUtils.openNotificationSettings(context) + }, + hasNotificationPermission = notificationsGranted, onContinueClick = { onContinue(entry.invoice) }, onBackClick = onBack, ) @@ -112,6 +125,8 @@ private fun Content( networkFeeFormatted: String, serviceFeeFormatted: String, receiveAmountFormatted: String, + onSystemSettingsClick: () -> Unit, + hasNotificationPermission: Boolean, onLearnMoreClick: () -> Unit, onContinueClick: () -> Unit, onBackClick: () -> Unit, @@ -124,63 +139,62 @@ private fun Content( .navigationBarsPadding() ) { SheetTopBar(stringResource(R.string.wallet__receive_bitcoin), onBack = onBackClick) - Spacer(Modifier.height(24.dp)) - - Box( - modifier = Modifier.fillMaxWidth() + VerticalSpacer(24.dp) + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) ) { - Image( - painter = painterResource(R.drawable.lightning), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier - .padding(bottom = 150.dp) - .fillMaxWidth() - .align(Alignment.BottomCenter) + BalanceHeaderView( + sats = receiveSats, + modifier = Modifier.fillMaxWidth() + ) + VerticalSpacer(24.dp) + val text = when (isAdditional) { + true -> stringResource(R.string.wallet__receive_connect_additional) + else -> stringResource(R.string.wallet__receive_connect_initial) + } + BodyM( + text = text + .replace("{networkFee}", networkFeeFormatted) + .replace("{serviceFee}", serviceFeeFormatted) + .withAccent( + defaultColor = Colors.White64, + accentStyle = SpanStyle(color = Colors.White, fontWeight = FontWeight.Bold) + ) + ) + VerticalSpacer(32.dp) + Column { + Caption13Up(text = stringResource(R.string.wallet__receive_will), color = Colors.White64) + VerticalSpacer(4.dp) + Title(text = receiveAmountFormatted) + } + + FillHeight() + + SettingsSwitchRow( + title = "Set up in background", + isChecked = hasNotificationPermission, + colors = AppSwitchDefaults.colorsPurple, + onClick = onSystemSettingsClick, + modifier = Modifier.fillMaxWidth() ) - Column( - modifier = Modifier.padding(horizontal = 16.dp) - ) { - BalanceHeaderView( - sats = receiveSats, - modifier = Modifier.fillMaxWidth() + VerticalSpacer(22.dp) + + Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { + SecondaryButton( + text = stringResource(R.string.common__learn_more), + onClick = onLearnMoreClick, + modifier = Modifier.weight(1f) ) - Spacer(modifier = Modifier.height(24.dp)) - val text = when (isAdditional) { - true -> stringResource(R.string.wallet__receive_connect_additional) - else -> stringResource(R.string.wallet__receive_connect_initial) - } - BodyM( - text = text - .replace("{networkFee}", networkFeeFormatted) - .replace("{serviceFee}", serviceFeeFormatted) - .withAccent( - defaultColor = Colors.White64, - accentStyle = SpanStyle(color = Colors.White, fontWeight = FontWeight.Bold) - ) + PrimaryButton( + text = stringResource(R.string.common__continue), + onClick = onContinueClick, + modifier = Modifier.weight(1f) ) - Spacer(modifier = Modifier.height(32.dp)) - Column { - Caption13Up(text = stringResource(R.string.wallet__receive_will), color = Colors.White64) - Spacer(Modifier.height(4.dp)) - Title(text = receiveAmountFormatted) - } - Spacer(modifier = Modifier.weight(1f)) - Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { - SecondaryButton( - text = stringResource(R.string.common__learn_more), - onClick = onLearnMoreClick, - modifier = Modifier.weight(1f) - ) - PrimaryButton( - text = stringResource(R.string.common__continue), - onClick = onContinueClick, - modifier = Modifier.weight(1f) - ) - } - VerticalSpacer(16.dp) } + VerticalSpacer(16.dp) } } } @@ -199,6 +213,8 @@ private fun Preview() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = true, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } @@ -219,6 +235,8 @@ private fun PreviewAdditional() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = true, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } @@ -239,6 +257,8 @@ private fun PreviewSmall() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = false, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } @@ -251,7 +271,7 @@ private fun PreviewTablet() { AppThemeSurface { BottomSheetPreview { Content( - receiveSats = 12500L, + receiveSats = 1250L, isAdditional = true, networkFeeFormatted = "$0.50", serviceFeeFormatted = "$1.00", @@ -259,6 +279,8 @@ private fun PreviewTablet() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = true, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt index 7f9cfe3e0..3577ade22 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt @@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -13,18 +15,25 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel import to.bitkit.R import to.bitkit.ui.components.BodyM import to.bitkit.ui.components.BodyMB import to.bitkit.ui.components.BottomSheetPreview import to.bitkit.ui.components.ChannelStatusUi +import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.LightningChannel import to.bitkit.ui.components.PrimaryButton +import to.bitkit.ui.components.VerticalSpacer +import to.bitkit.ui.components.settings.SettingsSwitchRow import to.bitkit.ui.scaffold.SheetTopBar import to.bitkit.ui.shared.modifiers.sheetHeight import to.bitkit.ui.shared.util.gradientBackground +import to.bitkit.ui.theme.AppSwitchDefaults import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors +import to.bitkit.ui.utils.RequestNotificationPermissions +import to.bitkit.viewmodels.SettingsViewModel import kotlin.math.round @Composable @@ -32,6 +41,37 @@ fun ReceiveLiquidityScreen( entry: CjitEntryDetails, onContinue: () -> Unit, onBack: () -> Unit, + onSwitchClick: () -> Unit, + hasNotificationPermission: Boolean, + modifier: Modifier = Modifier, + isAdditional: Boolean = false, + settingsViewModel: SettingsViewModel = hiltViewModel(), +) { + RequestNotificationPermissions( + onPermissionChange = { granted -> + settingsViewModel.setNotificationPreference(granted) + }, + showPermissionDialog = false + ) + + Content( + entry = entry, + onContinue = onContinue, + onBack = onBack, + onSwitchClick = onSwitchClick, + hasNotificationPermission = hasNotificationPermission, + modifier = modifier, + isAdditional = isAdditional + ) +} + +@Composable +private fun Content( + entry: CjitEntryDetails, + onContinue: () -> Unit, + onBack: () -> Unit, + onSwitchClick: () -> Unit, + hasNotificationPermission: Boolean, modifier: Modifier = Modifier, isAdditional: Boolean = false, ) { @@ -57,7 +97,10 @@ fun ReceiveLiquidityScreen( Spacer(Modifier.height(24.dp)) Column( - modifier = Modifier.padding(horizontal = 16.dp) + modifier = Modifier + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()) + .weight(1f) ) { BodyM( text = stringResource( @@ -66,7 +109,7 @@ fun ReceiveLiquidityScreen( color = Colors.White64 ) - Spacer(modifier = Modifier.weight(1f)) + VerticalSpacer(32.dp) BodyMB( text = stringResource( @@ -84,6 +127,26 @@ fun ReceiveLiquidityScreen( ) Spacer(modifier = Modifier.height(32.dp)) + + FillHeight() + + BodyM( + text = "Enable background setup to safely exit Bitkit while your balance is being configured.", + color = Colors.White64 + ) + + VerticalSpacer(15.dp) + + SettingsSwitchRow( + title = "Set up in background", + isChecked = hasNotificationPermission, + colors = AppSwitchDefaults.colorsPurple, + onClick = onSwitchClick, + modifier = Modifier.fillMaxWidth() + ) + + VerticalSpacer(22.dp) + PrimaryButton( text = stringResource(R.string.common__understood), onClick = onContinue, @@ -99,7 +162,7 @@ fun ReceiveLiquidityScreen( private fun Preview() { AppThemeSurface { BottomSheetPreview { - ReceiveLiquidityScreen( + Content( entry = CjitEntryDetails( channelSizeSat = 200_000L, receiveAmountSats = 50_000L, @@ -111,6 +174,8 @@ private fun Preview() { isAdditional = false, onContinue = {}, onBack = {}, + onSwitchClick = {}, + hasNotificationPermission = true, modifier = Modifier.sheetHeight(), ) } @@ -122,7 +187,7 @@ private fun Preview() { private fun Preview2() { AppThemeSurface { BottomSheetPreview { - ReceiveLiquidityScreen( + Content( entry = CjitEntryDetails( channelSizeSat = 200_000L, receiveAmountSats = 50_000L, @@ -134,6 +199,8 @@ private fun Preview2() { isAdditional = true, onContinue = {}, onBack = {}, + onSwitchClick = {}, + hasNotificationPermission = false, modifier = Modifier.sheetHeight(), ) } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveSheet.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveSheet.kt index 01c79f19a..342cddafb 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveSheet.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveSheet.kt @@ -9,6 +9,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -18,10 +19,12 @@ import kotlinx.serialization.Serializable import to.bitkit.repositories.LightningState import to.bitkit.ui.screens.wallets.send.AddTagScreen import to.bitkit.ui.shared.modifiers.sheetHeight +import to.bitkit.ui.utils.NotificationUtils import to.bitkit.ui.utils.composableWithDefaultTransitions import to.bitkit.ui.walletViewModel import to.bitkit.viewmodels.AmountInputViewModel import to.bitkit.viewmodels.MainUiState +import to.bitkit.viewmodels.SettingsViewModel import to.bitkit.viewmodels.WalletViewModelEffects @Composable @@ -29,6 +32,7 @@ fun ReceiveSheet( navigateToExternalConnection: () -> Unit, walletState: MainUiState, editInvoiceAmountViewModel: AmountInputViewModel = hiltViewModel(), + settingsViewModel: SettingsViewModel = hiltViewModel(), ) { val wallet = requireNotNull(walletViewModel) val navController = rememberNavController() @@ -138,20 +142,34 @@ fun ReceiveSheet( } composableWithDefaultTransitions { cjitEntryDetails.value?.let { entryDetails -> + val context = LocalContext.current + val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() + ReceiveLiquidityScreen( entry = entryDetails, onContinue = { navController.popBackStack() }, onBack = { navController.popBackStack() }, + hasNotificationPermission = notificationsGranted, + onSwitchClick = { + NotificationUtils.openNotificationSettings(context) + }, ) } } composableWithDefaultTransitions { cjitEntryDetails.value?.let { entryDetails -> + val context = LocalContext.current + val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() + ReceiveLiquidityScreen( entry = entryDetails, onContinue = { navController.popBackStack() }, isAdditional = true, onBack = { navController.popBackStack() }, + hasNotificationPermission = notificationsGranted, + onSwitchClick = { + NotificationUtils.openNotificationSettings(context) + }, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4b1147f06..e0752b9d8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -32,6 +32,8 @@ Buy some bitcoin Failed Please try again + Get paid + When Bitkit is closed Suggestions Advanced Continue @@ -1121,4 +1123,4 @@ Current average fee Next block inclusion Couldn\'t get current fee weather - \ No newline at end of file +