From 6a5be27d0e7129aab0aaa5853ef2b8fd09b06ef2 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 5 Oct 2025 08:29:24 -0300 Subject: [PATCH 01/25] chore: colors parameter --- .../to/bitkit/ui/components/settings/SettingsSwitchRow.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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..d0601f8f3 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 @@ -23,8 +24,9 @@ import to.bitkit.ui.theme.Colors fun SettingsSwitchRow( title: String, isChecked: Boolean, - onClick: () -> Unit, modifier: Modifier = Modifier, + colors: SwitchColors = AppSwitchDefaults.colors, + onClick: () -> Unit, ) { 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) From 78d2a904060d16978240b0ec29367ab5ff9c29c3 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 5 Oct 2025 08:31:44 -0300 Subject: [PATCH 02/25] chore: remove background image --- .../ui/screens/wallets/receive/ReceiveConfirmScreen.kt | 10 ---------- 1 file changed, 10 deletions(-) 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..6561d2e5c 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 @@ -129,16 +129,6 @@ private fun Content( Box( modifier = Modifier.fillMaxWidth() ) { - Image( - painter = painterResource(R.drawable.lightning), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier - .padding(bottom = 150.dp) - .fillMaxWidth() - .align(Alignment.BottomCenter) - ) - Column( modifier = Modifier.padding(horizontal = 16.dp) ) { From 90d73286558b1de753987387a72cf1ec8c68a5b8 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 5 Oct 2025 08:44:24 -0300 Subject: [PATCH 03/25] feat: implement in receive content screen --- .../wallets/receive/ReceiveConfirmScreen.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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 6561d2e5c..7dc6ffc58 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 @@ -12,10 +12,12 @@ 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.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle @@ -24,6 +26,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 @@ -36,13 +40,17 @@ 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 +65,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 +113,10 @@ fun ReceiveConfirmScreen( receiveAmountFormatted = receiveAmountFormatted, onLearnMoreClick = onLearnMore, isAdditional = isAdditional, + onSystemSettingsClick = { + NotificationUtils.openNotificationSettings(context) + }, + hasNotificationPermission = notificationsGranted, onContinueClick = { onContinue(entry.invoice) }, onBackClick = onBack, ) @@ -112,6 +129,8 @@ private fun Content( networkFeeFormatted: String, serviceFeeFormatted: String, receiveAmountFormatted: String, + onSystemSettingsClick: () -> Unit, + hasNotificationPermission: Boolean, onLearnMoreClick: () -> Unit, onContinueClick: () -> Unit, onBackClick: () -> Unit, @@ -156,7 +175,17 @@ private fun Content( Spacer(Modifier.height(4.dp)) Title(text = receiveAmountFormatted) } + Spacer(modifier = Modifier.weight(1f)) + + SettingsSwitchRow( + title = "Setup in background", + isChecked = hasNotificationPermission, + colors = AppSwitchDefaults.colorsPurple, + onClick = onSystemSettingsClick, + modifier = Modifier.fillMaxWidth() + ) + Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { SecondaryButton( text = stringResource(R.string.common__learn_more), @@ -189,6 +218,8 @@ private fun Preview() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = true, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } @@ -209,6 +240,8 @@ private fun PreviewAdditional() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = true, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } @@ -229,6 +262,8 @@ private fun PreviewSmall() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = false, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } @@ -249,6 +284,8 @@ private fun PreviewTablet() { onLearnMoreClick = {}, onContinueClick = {}, onBackClick = {}, + hasNotificationPermission = true, + onSystemSettingsClick = {}, modifier = Modifier.sheetHeight(), ) } From 6a0755912092a7fc5f9357ad8a8d85ada809b930 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 5 Oct 2025 08:46:54 -0300 Subject: [PATCH 04/25] chore: remove box --- .../wallets/receive/ReceiveConfirmScreen.kt | 104 ++++++++---------- 1 file changed, 48 insertions(+), 56 deletions(-) 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 7dc6ffc58..cde88bba2 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 @@ -14,11 +12,8 @@ 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.platform.LocalContext -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight @@ -144,62 +139,59 @@ private fun Content( ) { SheetTopBar(stringResource(R.string.wallet__receive_bitcoin), onBack = onBackClick) Spacer(Modifier.height(24.dp)) - - Box( - modifier = Modifier.fillMaxWidth() + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) ) { - Column( - modifier = Modifier.padding(horizontal = 16.dp) - ) { - BalanceHeaderView( - sats = receiveSats, - modifier = Modifier.fillMaxWidth() - ) - 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) - ) - ) - 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) - } + BalanceHeaderView( + sats = receiveSats, + modifier = Modifier.fillMaxWidth() + ) + 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) + ) + ) + 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)) + Spacer(modifier = Modifier.weight(1f)) - SettingsSwitchRow( - title = "Setup in background", - isChecked = hasNotificationPermission, - colors = AppSwitchDefaults.colorsPurple, - onClick = onSystemSettingsClick, - modifier = Modifier.fillMaxWidth() - ) + SettingsSwitchRow( + title = "Setup in background", + isChecked = hasNotificationPermission, + colors = AppSwitchDefaults.colorsPurple, + onClick = onSystemSettingsClick, + modifier = Modifier.fillMaxWidth() + ) - 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) + 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) } } } From c0a9766b5b916380ef6d8de2f5d232b68ec4ccf6 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 5 Oct 2025 08:58:10 -0300 Subject: [PATCH 05/25] chore: spacer components --- .../screens/wallets/receive/ReceiveConfirmScreen.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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 cde88bba2..ad6dd60bc 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 @@ -31,6 +31,7 @@ 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 @@ -138,7 +139,7 @@ private fun Content( .navigationBarsPadding() ) { SheetTopBar(stringResource(R.string.wallet__receive_bitcoin), onBack = onBackClick) - Spacer(Modifier.height(24.dp)) + VerticalSpacer(24.dp) Column( modifier = Modifier .fillMaxWidth() @@ -148,7 +149,7 @@ private fun Content( sats = receiveSats, modifier = Modifier.fillMaxWidth() ) - Spacer(modifier = Modifier.height(24.dp)) + VerticalSpacer(24.dp) val text = when (isAdditional) { true -> stringResource(R.string.wallet__receive_connect_additional) else -> stringResource(R.string.wallet__receive_connect_initial) @@ -162,14 +163,14 @@ private fun Content( accentStyle = SpanStyle(color = Colors.White, fontWeight = FontWeight.Bold) ) ) - Spacer(modifier = Modifier.height(32.dp)) + VerticalSpacer(32.dp) Column { Caption13Up(text = stringResource(R.string.wallet__receive_will), color = Colors.White64) - Spacer(Modifier.height(4.dp)) + VerticalSpacer(4.dp) Title(text = receiveAmountFormatted) } - Spacer(modifier = Modifier.weight(1f)) + FillHeight() SettingsSwitchRow( title = "Setup in background", From f15fc1ed72b823d324b2cf22645ecfbdf7673339 Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Sun, 5 Oct 2025 09:35:47 -0300 Subject: [PATCH 06/25] feat: implement in ReceiveLiquidityScreen --- .../wallets/receive/ReceiveLiquidityScreen.kt | 32 ++++++++++++++++++- .../screens/wallets/receive/ReceiveSheet.kt | 18 +++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) 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..3b7114ddd 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 @@ -18,11 +18,15 @@ 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 kotlin.math.round @@ -32,6 +36,8 @@ fun ReceiveLiquidityScreen( entry: CjitEntryDetails, onContinue: () -> Unit, onBack: () -> Unit, + onSwitchClick: () -> Unit, + hasNotificationPermission: Boolean, modifier: Modifier = Modifier, isAdditional: Boolean = false, ) { @@ -66,7 +72,7 @@ fun ReceiveLiquidityScreen( color = Colors.White64 ) - Spacer(modifier = Modifier.weight(1f)) + VerticalSpacer(32.dp) BodyMB( text = stringResource( @@ -84,6 +90,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 = "Setup in background", + isChecked = hasNotificationPermission, + colors = AppSwitchDefaults.colorsPurple, + onClick = onSwitchClick, + modifier = Modifier.fillMaxWidth() + ) + + VerticalSpacer(22.dp) + PrimaryButton( text = stringResource(R.string.common__understood), onClick = onContinue, @@ -111,6 +137,8 @@ private fun Preview() { isAdditional = false, onContinue = {}, onBack = {}, + onSwitchClick = {}, + hasNotificationPermission = true, modifier = Modifier.sheetHeight(), ) } @@ -134,6 +162,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) + }, ) } } From e9ebea6793065eff27c59dc0b95599da76527dcf Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Sun, 5 Oct 2025 09:48:28 -0300 Subject: [PATCH 07/25] feat: implement in SpendingConfirmScreen --- .../screens/transfer/SpendingConfirmScreen.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) 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..abffdf4b9 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,16 @@ 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.withAccent +import to.bitkit.viewmodels.SettingsViewModel import to.bitkit.viewmodels.TransferViewModel @Composable @@ -66,11 +72,16 @@ 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 isAdvanced = state.isAdvanced + val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() + Content( onBackClick = onBackClick, onCloseClick = onCloseClick, @@ -80,6 +91,10 @@ fun SpendingConfirmScreen( onUseDefaultLspBalanceClick = { viewModel.onUseDefaultLspBalanceClick() }, onTransferToSpendingConfirm = { order -> viewModel.onTransferToSpendingConfirm(order) }, order = order, + hasNotificationPermission = notificationsGranted, + onSwitchClick = { + NotificationUtils.openNotificationSettings(context) + }, isAdvanced = isAdvanced ) } @@ -92,6 +107,8 @@ private fun Content( onAdvancedClick: () -> Unit, onConfirm: () -> Unit, onUseDefaultLspBalanceClick: () -> Unit, + onSwitchClick: () -> Unit, + hasNotificationPermission: Boolean, onTransferToSpendingConfirm: (IBtOrder) -> Unit, order: IBtOrder, isAdvanced: Boolean, @@ -177,6 +194,17 @@ private fun Content( } VerticalSpacer(16.dp) + + SettingsSwitchRow( + title = "Setup 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 +326,8 @@ private fun Preview() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = true, isAdvanced = false ) } @@ -374,6 +404,8 @@ private fun Preview2() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = true, isAdvanced = true ) } @@ -450,6 +482,8 @@ private fun Preview3() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = false, isAdvanced = false ) } @@ -526,6 +560,8 @@ private fun Preview4() { updatedAt = "2025-07-28T08:29:03Z", createdAt = "2025-07-28T08:29:03Z" ), + onSwitchClick = {}, + hasNotificationPermission = true, isAdvanced = true ) } From 202ff74bc046a5ac7d754a1bccef7a3880bd917f Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Sun, 5 Oct 2025 10:06:04 -0300 Subject: [PATCH 08/25] feat: notifications card --- app/src/main/java/to/bitkit/models/Suggestion.kt | 7 +++++++ .../java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 12 ++++++++++-- .../to/bitkit/ui/screens/wallets/HomeViewModel.kt | 1 + app/src/main/res/values/strings.xml | 4 +++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/models/Suggestion.kt b/app/src/main/java/to/bitkit/models/Suggestion.kt index d1ca822d6..7d9a5fbe2 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.Blue24, + 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/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index b0dd57022..e01a10af4 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 @@ -111,7 +111,7 @@ import to.bitkit.ui.shared.util.shareText import to.bitkit.ui.sheets.BackgroundPaymentsIntroSheet import to.bitkit.ui.sheets.BackupRoute import to.bitkit.ui.sheets.HighBalanceWarningSheet -import to.bitkit.ui.sheets.PinRoute +import to.bitkit.ui.sheets.PinRoute.Prompt import to.bitkit.ui.sheets.QuickPayIntroSheet import to.bitkit.ui.sheets.UpdateSheet import to.bitkit.ui.theme.AppThemeSurface @@ -140,6 +140,7 @@ fun HomeScreen( 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() @@ -216,7 +217,7 @@ fun HomeScreen( } Suggestion.SECURE -> { - appViewModel.showSheet(Sheet.Pin(PinRoute.Prompt(showLaterButton = true))) + appViewModel.showSheet(Sheet.Pin(Prompt(showLaterButton = true))) } Suggestion.SUPPORT -> { @@ -260,6 +261,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.BackgroundPaymentsInto) + } + } } }, 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 f108d084b..e4196e59a 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 @@ -403,6 +403,7 @@ class HomeViewModel @Inject constructor( Suggestion.SUPPORT, Suggestion.INVITE, Suggestion.QUICK_PAY, + Suggestion.NOTIFICATIONS, Suggestion.SHOP, Suggestion.PROFILE, ) 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 + From c749118edc52e8fbfa946b1fc74e64749e66c51a Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Sun, 5 Oct 2025 11:07:33 -0300 Subject: [PATCH 09/25] feat: notifications card --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e4196e59a..d6e843b4e 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 @@ -405,7 +405,7 @@ class HomeViewModel @Inject constructor( Suggestion.QUICK_PAY, Suggestion.NOTIFICATIONS, Suggestion.SHOP, - Suggestion.PROFILE, + Suggestion.PROFILE.takeIf { !settings.notificationsGranted }, ) } From 38589abe4ca31ed483f43dbb4cfa42febc8d2cc4 Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Mon, 6 Oct 2025 06:30:42 -0300 Subject: [PATCH 10/25] chore: lint --- .../java/to/bitkit/ui/components/settings/SettingsSwitchRow.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d0601f8f3..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 @@ -24,9 +24,9 @@ import to.bitkit.ui.theme.Colors fun SettingsSwitchRow( title: String, isChecked: Boolean, + onClick: () -> Unit, modifier: Modifier = Modifier, colors: SwitchColors = AppSwitchDefaults.colors, - onClick: () -> Unit, ) { Column( modifier = modifier.height(52.dp) From 127e36107804be3bedc0f12332c4ec8887ded28f Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Mon, 6 Oct 2025 06:57:21 -0300 Subject: [PATCH 11/25] chore: lint --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e01a10af4..53d2a5420 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 @@ -111,7 +111,7 @@ import to.bitkit.ui.shared.util.shareText import to.bitkit.ui.sheets.BackgroundPaymentsIntroSheet import to.bitkit.ui.sheets.BackupRoute import to.bitkit.ui.sheets.HighBalanceWarningSheet -import to.bitkit.ui.sheets.PinRoute.Prompt +import to.bitkit.ui.sheets.PinRoute import to.bitkit.ui.sheets.QuickPayIntroSheet import to.bitkit.ui.sheets.UpdateSheet import to.bitkit.ui.theme.AppThemeSurface @@ -217,7 +217,7 @@ fun HomeScreen( } Suggestion.SECURE -> { - appViewModel.showSheet(Sheet.Pin(Prompt(showLaterButton = true))) + appViewModel.showSheet(Sheet.Pin(PinRoute.Prompt(showLaterButton = true))) } Suggestion.SUPPORT -> { From fe56b85056d60674a21cdae41b0ebf484fd7c824 Mon Sep 17 00:00:00 2001 From: Joao Victor Sena Date: Mon, 6 Oct 2025 06:59:48 -0300 Subject: [PATCH 12/25] fix: route name --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 53d2a5420..75866c7e7 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 @@ -265,7 +265,7 @@ fun HomeScreen( if (bgPaymentsIntroSeen) { rootNavController.navigate(Routes.BackgroundPaymentsSettings) } else { - rootNavController.navigate(Routes.BackgroundPaymentsInto) + rootNavController.navigate(Routes.BackgroundPaymentsIntro) } } } From 066f21d7be0176c33041395dbf8c66af1d992037 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 8 Oct 2025 10:34:10 -0300 Subject: [PATCH 13/25] fix: suggestion card color --- app/src/main/java/to/bitkit/models/Suggestion.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/models/Suggestion.kt b/app/src/main/java/to/bitkit/models/Suggestion.kt index 7d9a5fbe2..54a9ce369 100644 --- a/app/src/main/java/to/bitkit/models/Suggestion.kt +++ b/app/src/main/java/to/bitkit/models/Suggestion.kt @@ -104,7 +104,7 @@ enum class Suggestion( NOTIFICATIONS( title = R.string.cards__notifications__title, description = R.string.cards__notifications__description, - color = Colors.Blue24, + color = Colors.Purple24, icon = R.drawable.bell, dismissible = true, ), From 2ab7848c29dadd6af6fd2a52348e0996350cc577 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 8 Oct 2025 11:31:22 -0300 Subject: [PATCH 14/25] fix: call RequestNotificationPermissions in liquidity screen --- .../screens/transfer/SpendingConfirmScreen.kt | 5 +++ .../to/bitkit/ui/screens/wallets/HomeNav.kt | 5 --- .../wallets/receive/ReceiveLiquidityScreen.kt | 34 +++++++++++++++++-- 3 files changed, 37 insertions(+), 7 deletions(-) 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 abffdf4b9..d1210165c 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 @@ -60,6 +60,7 @@ 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 @@ -82,6 +83,10 @@ fun SpendingConfirmScreen( val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() + RequestNotificationPermissions(showPermissionDialog = false) { granted -> + settingsViewModel.setNotificationPreference(granted) + } + Content( onBackClick = onBackClick, onCloseClick = onCloseClick, diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt index e4dd9e601..b7cebbaa2 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt @@ -28,7 +28,6 @@ import to.bitkit.ui.navigateToTransferSavingsIntro import to.bitkit.ui.navigateToTransferSpendingAmount import to.bitkit.ui.navigateToTransferSpendingIntro import to.bitkit.ui.screens.wallets.activity.AllActivityScreen -import to.bitkit.ui.utils.RequestNotificationPermissions import to.bitkit.ui.utils.Transitions import to.bitkit.viewmodels.ActivityListViewModel import to.bitkit.viewmodels.AppViewModel @@ -50,10 +49,6 @@ fun HomeNav( val hasSeenShopIntro: Boolean by settingsViewModel.hasSeenShopIntro.collectAsStateWithLifecycle() val hazeState = rememberHazeState() - RequestNotificationPermissions { granted -> - settingsViewModel.setNotificationPreference(granted) - } - Box( modifier = Modifier.fillMaxSize() ) { 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 3b7114ddd..f86a1e4fc 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 @@ -13,6 +13,7 @@ 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 @@ -29,6 +30,8 @@ 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 @@ -40,6 +43,33 @@ fun ReceiveLiquidityScreen( hasNotificationPermission: Boolean, modifier: Modifier = Modifier, isAdditional: Boolean = false, + settingsViewModel: SettingsViewModel = hiltViewModel() +) { + + RequestNotificationPermissions(showPermissionDialog = false) { granted -> + settingsViewModel.setNotificationPreference(granted) + } + + 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, ) { val channelSize = entry.channelSizeSat val localBalance = entry.receiveAmountSats - entry.feeSat @@ -125,7 +155,7 @@ fun ReceiveLiquidityScreen( private fun Preview() { AppThemeSurface { BottomSheetPreview { - ReceiveLiquidityScreen( + Content( entry = CjitEntryDetails( channelSizeSat = 200_000L, receiveAmountSats = 50_000L, @@ -150,7 +180,7 @@ private fun Preview() { private fun Preview2() { AppThemeSurface { BottomSheetPreview { - ReceiveLiquidityScreen( + Content( entry = CjitEntryDetails( channelSizeSat = 200_000L, receiveAmountSats = 50_000L, From ad8715117aae3118a9ceb9d7b3e158503e335c20 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 8 Oct 2025 14:10:35 -0300 Subject: [PATCH 15/25] fix: notifications card visibility --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 +++++ .../main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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 97da8d083..85bed0973 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 @@ -120,6 +120,7 @@ import to.bitkit.ui.sheets.QuickPayIntroSheet import to.bitkit.ui.sheets.UpdateSheet import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors +import to.bitkit.ui.utils.RequestNotificationPermissions import to.bitkit.ui.utils.withAccent import to.bitkit.viewmodels.ActivityListViewModel import to.bitkit.viewmodels.AppViewModel @@ -151,6 +152,10 @@ fun HomeScreen( val homeUiState by homeViewModel.uiState.collectAsStateWithLifecycle() + RequestNotificationPermissions { granted -> + settingsViewModel.setNotificationPreference(granted) + } + LaunchedEffect(Unit) { homeViewModel.checkTimedSheets() } 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 5592ff7f0..4ecc2694d 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 @@ -450,9 +450,9 @@ class HomeViewModel @Inject constructor( Suggestion.SUPPORT, Suggestion.INVITE, Suggestion.QUICK_PAY, - Suggestion.NOTIFICATIONS, + Suggestion.NOTIFICATIONS.takeIf { !settings.notificationsGranted }, Suggestion.SHOP, - Suggestion.PROFILE.takeIf { !settings.notificationsGranted }, + Suggestion.PROFILE, ) } From 8202b81f844aa00ef0d04d51d42eda2a5c8108a6 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 8 Oct 2025 14:42:52 -0300 Subject: [PATCH 16/25] fix: handle lost state --- .../to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 d1210165c..fd1a2c67a 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 @@ -78,7 +78,11 @@ fun SpendingConfirmScreen( 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() From 70cd0fc59cca41c79353fb6d63fb4d569123c354 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 8 Oct 2025 15:12:30 -0300 Subject: [PATCH 17/25] chore: remove imports --- .../ui/screens/wallets/receive/ReceiveLiquidityScreen.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 f86a1e4fc..f6f17f8fb 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 @@ -93,7 +95,9 @@ private fun Content( Spacer(Modifier.height(24.dp)) Column( - modifier = Modifier.padding(horizontal = 16.dp) + modifier = Modifier + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()) ) { BodyM( text = stringResource( From 0c5a6a4b2d73e81c11080824e271f2c2a32b041f Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 13 Oct 2025 09:59:16 -0400 Subject: [PATCH 18/25] fix: solve conflicts --- .../bitkit/ui/screens/transfer/SpendingConfirmScreen.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 fd1a2c67a..ec0159db1 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 @@ -87,9 +87,11 @@ fun SpendingConfirmScreen( val notificationsGranted by settingsViewModel.notificationsGranted.collectAsStateWithLifecycle() - RequestNotificationPermissions(showPermissionDialog = false) { granted -> - settingsViewModel.setNotificationPreference(granted) - } + RequestNotificationPermissions( + onPermissionChange = { granted -> + settingsViewModel.setNotificationPreference(granted) + }, + showPermissionDialog = false) Content( onBackClick = onBackClick, From 1ef11ada56d5ef3d715fe70225ab178aaea7ff5b Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 13 Oct 2025 10:00:09 -0400 Subject: [PATCH 19/25] fix: solve conflicts --- .../ui/screens/transfer/SpendingConfirmScreen.kt | 3 ++- .../screens/wallets/receive/ReceiveLiquidityScreen.kt | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) 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 ec0159db1..b03dd2cdb 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 @@ -91,7 +91,8 @@ fun SpendingConfirmScreen( onPermissionChange = { granted -> settingsViewModel.setNotificationPreference(granted) }, - showPermissionDialog = false) + showPermissionDialog = false + ) Content( onBackClick = onBackClick, 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 f6f17f8fb..014fc1194 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 @@ -45,12 +45,15 @@ fun ReceiveLiquidityScreen( hasNotificationPermission: Boolean, modifier: Modifier = Modifier, isAdditional: Boolean = false, - settingsViewModel: SettingsViewModel = hiltViewModel() + settingsViewModel: SettingsViewModel = hiltViewModel(), ) { - RequestNotificationPermissions(showPermissionDialog = false) { granted -> - settingsViewModel.setNotificationPreference(granted) - } + RequestNotificationPermissions( + onPermissionChange = { granted -> + settingsViewModel.setNotificationPreference(granted) + }, + showPermissionDialog = false + ) Content( entry = entry, From 71e4e3569ac9c1e21f16a39b5b558f2a5880b19c Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 13 Oct 2025 10:05:16 -0400 Subject: [PATCH 20/25] chore: lint --- .../bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt | 1 - 1 file changed, 1 deletion(-) 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 014fc1194..0d47f6c85 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 @@ -47,7 +47,6 @@ fun ReceiveLiquidityScreen( isAdditional: Boolean = false, settingsViewModel: SettingsViewModel = hiltViewModel(), ) { - RequestNotificationPermissions( onPermissionChange = { granted -> settingsViewModel.setNotificationPreference(granted) From bfe9fd3155a481ffa149f70c8fdc19849cd555fa Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 15 Oct 2025 10:55:40 -0400 Subject: [PATCH 21/25] fix: padding --- .../bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt | 2 ++ 1 file changed, 2 insertions(+) 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 ad6dd60bc..8b6daf3f8 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 @@ -180,6 +180,8 @@ private fun Content( modifier = Modifier.fillMaxWidth() ) + VerticalSpacer(22.dp) + Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { SecondaryButton( text = stringResource(R.string.common__learn_more), From ab27286cc432b58d30654a487fdf84ca34457fc3 Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Wed, 15 Oct 2025 22:02:11 +0200 Subject: [PATCH 22/25] fix: ReceiveLiquidityScreen scrollable height --- .../bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt | 1 + 1 file changed, 1 insertion(+) 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 0d47f6c85..10f02eee2 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 @@ -100,6 +100,7 @@ private fun Content( modifier = Modifier .padding(horizontal = 16.dp) .verticalScroll(rememberScrollState()) + .weight(1f) ) { BodyM( text = stringResource( From 17c5fdf3968c6bbef90fa8622719f11b06be0380 Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Wed, 15 Oct 2025 22:04:47 +0200 Subject: [PATCH 23/25] fix: set up in background text --- .../java/to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt | 2 +- .../bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt | 2 +- .../bitkit/ui/screens/wallets/receive/ReceiveLiquidityScreen.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 b03dd2cdb..2cec06143 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 @@ -208,7 +208,7 @@ private fun Content( VerticalSpacer(16.dp) SettingsSwitchRow( - title = "Setup in background", + title = "Set up in background", isChecked = hasNotificationPermission, colors = AppSwitchDefaults.colorsPurple, onClick = onSwitchClick, 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 8b6daf3f8..d91154d21 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 @@ -173,7 +173,7 @@ private fun Content( FillHeight() SettingsSwitchRow( - title = "Setup in background", + title = "Set up in background", isChecked = hasNotificationPermission, colors = AppSwitchDefaults.colorsPurple, onClick = onSystemSettingsClick, 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 10f02eee2..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 @@ -138,7 +138,7 @@ private fun Content( VerticalSpacer(15.dp) SettingsSwitchRow( - title = "Setup in background", + title = "Set up in background", isChecked = hasNotificationPermission, colors = AppSwitchDefaults.colorsPurple, onClick = onSwitchClick, From 95a0a7e07e9226467d19c1bf39d3862f122bba96 Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Wed, 15 Oct 2025 22:07:55 +0200 Subject: [PATCH 24/25] fix: setup switch spacing on spending confirm screen --- .../to/bitkit/ui/screens/transfer/SpendingConfirmScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 2cec06143..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 @@ -203,9 +203,9 @@ private fun Content( showLabels = true, modifier = Modifier.testTag("SpendingConfirmChannel") ) - } - VerticalSpacer(16.dp) + VerticalSpacer(16.dp) + } SettingsSwitchRow( title = "Set up in background", From 5d8516d68f94a4b274bbf38fd1b5844d820cb8a9 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 16 Oct 2025 10:13:49 -0400 Subject: [PATCH 25/25] chore: preview --- .../bitkit/ui/screens/wallets/receive/ReceiveConfirmScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d91154d21..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 @@ -271,7 +271,7 @@ private fun PreviewTablet() { AppThemeSurface { BottomSheetPreview { Content( - receiveSats = 12500L, + receiveSats = 1250L, isAdditional = true, networkFeeFormatted = "$0.50", serviceFeeFormatted = "$1.00",