Skip to content

Commit d460517

Browse files
authored
Merge pull request #885 from synonymdev/feat/funding-screen-v60
feat: update funding screen to match v60 design
2 parents 9770509 + 4a7b5ee commit d460517

23 files changed

Lines changed: 76 additions & 65 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Fixed
11-
- Polish Primary, Secondary, and Tertiary buttons to match Figma design specs #887
11+
- Retouch Primary, Secondary, and Tertiary buttons styling #887
1212
- Avoid msat truncation when paying invoices and LNURL callbacks #879
1313
- Fix ANR on RGS server settings screen caused by catastrophic regex backtracking #880
1414
- Fix crash when returning app to foreground on Receive screen #875
@@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2424
- Mnemonic warning text transitions on reveal #857
2525

2626
### Changed
27+
- Update funding screen: replace Advanced with Manual Setup, fix Use Other Wallet navigation to open amount entry, and add Fund Wallet button to no-funds dialog #885
2728
- Updated design of the success screen in the manual channel setup flow #883
2829
- Unified send flow with payment method switcher, details toggle, Lightning support for BIP21 payments, and improved fee rate defaults #863
2930
- Settings redesigned with tabbed navigation (General/Security/Advanced) with swipe support #857

app/src/main/java/to/bitkit/ui/ContentView.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ import to.bitkit.ui.screens.wallets.activity.ActivityExploreScreen
100100
import to.bitkit.ui.screens.wallets.activity.AllActivityScreen
101101
import to.bitkit.ui.screens.wallets.activity.DateRangeSelectorSheet
102102
import to.bitkit.ui.screens.wallets.activity.TagSelectorSheet
103+
import to.bitkit.ui.screens.wallets.receive.ReceiveRoute
103104
import to.bitkit.ui.screens.wallets.receive.ReceiveSheet
104105
import to.bitkit.ui.screens.wallets.suggestion.BuyIntroScreen
105106
import to.bitkit.ui.screens.widgets.AddWidgetsScreen
@@ -381,6 +382,7 @@ fun ContentView(
381382
is Sheet.Receive -> {
382383
val walletState by walletViewModel.walletState.collectAsStateWithLifecycle()
383384
ReceiveSheet(
385+
startRoute = sheet.route,
384386
walletState = walletState,
385387
navigateToExternalConnection = {
386388
navController.navigateTo(ExternalConnection())
@@ -475,7 +477,7 @@ fun ContentView(
475477
if (showTabBar) {
476478
TabBar(
477479
onSendClick = { appViewModel.showSheet(Sheet.Send()) },
478-
onReceiveClick = { appViewModel.showSheet(Sheet.Receive) },
480+
onReceiveClick = { appViewModel.showSheet(Sheet.Receive()) },
479481
onScanClick = { appViewModel.showScannerSheet() },
480482
)
481483
}
@@ -664,13 +666,12 @@ private fun RootNavHost(
664666
},
665667
onFund = {
666668
scope.launch {
667-
// TODO show receive sheet -> ReceiveAmount
668669
navController.navigateToHome()
669670
delay(500) // Wait for nav to actually finish
670-
appViewModel.showSheet(Sheet.Receive)
671+
appViewModel.showSheet(Sheet.Receive(route = ReceiveRoute.Amount))
671672
}
672673
},
673-
onAdvanced = { navController.navigateTo(Routes.FundingAdvanced) },
674+
onManual = { navController.navigateTo(Routes.ExternalNav) },
674675
onBackClick = { navController.popBackStack() },
675676
isGeoBlocked = isGeoBlocked,
676677
)
@@ -792,7 +793,7 @@ private fun NavGraphBuilder.home(
792793
onchainActivities = onchainActivities ?: persistentListOf(),
793794
onAllActivityButtonClick = { navController.navigateToAllActivity(activityListViewModel::clearFilters) },
794795
onActivityItemClick = { navController.navigateToActivityItem(it) },
795-
onEmptyActivityRowClick = { appViewModel.showSheet(Sheet.Receive) },
796+
onEmptyActivityRowClick = { appViewModel.showSheet(Sheet.Receive()) },
796797
onTransferToSpendingClick = {
797798
if (!hasSeenSpendingIntro) {
798799
navController.navigateToTransferSpendingIntro()
@@ -814,7 +815,7 @@ private fun NavGraphBuilder.home(
814815
lightningActivities = lightningActivities ?: persistentListOf(),
815816
onAllActivityButtonClick = { navController.navigateToAllActivity(activityListViewModel::clearFilters) },
816817
onActivityItemClick = { navController.navigateToActivityItem(it) },
817-
onEmptyActivityRowClick = { appViewModel.showSheet(Sheet.Receive) },
818+
onEmptyActivityRowClick = { appViewModel.showSheet(Sheet.Receive()) },
818819
onTransferToSavingsClick = {
819820
if (!hasSeenSavingsIntro) {
820821
navController.navigateToTransferSavingsIntro()

app/src/main/java/to/bitkit/ui/components/SheetHost.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.compose.ui.graphics.Color
2424
import androidx.compose.ui.unit.dp
2525
import kotlinx.coroutines.launch
2626
import to.bitkit.ui.shared.modifiers.clickableAlpha
27+
import to.bitkit.ui.screens.wallets.receive.ReceiveRoute
2728
import to.bitkit.ui.sheets.BackupRoute
2829
import to.bitkit.ui.sheets.PinRoute
2930
import to.bitkit.ui.sheets.SendRoute
@@ -37,7 +38,7 @@ private val sheetContainerColor = Color(0xFF141414) // Equivalent to White08 on
3738
@Stable
3839
sealed interface Sheet {
3940
data class Send(val route: SendRoute = SendRoute.Recipient) : Sheet
40-
data object Receive : Sheet
41+
data class Receive(val route: ReceiveRoute = ReceiveRoute.QR) : Sheet
4142
data class Pin(val route: PinRoute = PinRoute.Prompt()) : Sheet
4243
data object ChangePin : Sheet
4344
data object DisablePin : Sheet

app/src/main/java/to/bitkit/ui/scaffold/AppAlertDialog.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.compose.material3.MaterialTheme
77
import androidx.compose.material3.TextButton
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.graphics.Color
1011
import androidx.compose.ui.platform.testTag
1112
import androidx.compose.ui.res.stringResource
1213
import androidx.compose.ui.semantics.semantics
@@ -30,6 +31,8 @@ fun AppAlertDialog(
3031
modifier: Modifier = Modifier,
3132
confirmText: String = stringResource(R.string.common__ok),
3233
dismissText: String = stringResource(R.string.common__dialog_cancel),
34+
confirmTextColor: Color = Color.Unspecified,
35+
dismissTextColor: Color = Colors.White64,
3336
onDismissRequest: () -> Unit = onDismiss,
3437
properties: DialogProperties = DialogProperties(
3538
dismissOnClickOutside = false,
@@ -43,6 +46,8 @@ fun AppAlertDialog(
4346
modifier = modifier,
4447
confirmText = confirmText,
4548
dismissText = dismissText,
49+
confirmTextColor = confirmTextColor,
50+
dismissTextColor = dismissTextColor,
4651
onDismissRequest = onDismissRequest,
4752
properties = properties,
4853
textContent = { BodyM(text = text, color = Colors.White64) },
@@ -57,6 +62,8 @@ fun AppAlertDialog(
5762
modifier: Modifier = Modifier,
5863
confirmText: String = stringResource(R.string.common__ok),
5964
dismissText: String = stringResource(R.string.common__dialog_cancel),
65+
confirmTextColor: Color = Color.Unspecified,
66+
dismissTextColor: Color = Colors.White64,
6067
onDismissRequest: () -> Unit = onDismiss,
6168
properties: DialogProperties = DialogProperties(
6269
dismissOnClickOutside = false,
@@ -71,15 +78,15 @@ fun AppAlertDialog(
7178
onClick = rememberDebouncedClick(onClick = onConfirm),
7279
modifier = Modifier.testTag("DialogConfirm")
7380
) {
74-
BodyMSB(text = confirmText)
81+
BodyMSB(text = confirmText, color = confirmTextColor)
7582
}
7683
},
7784
dismissButton = {
7885
TextButton(
7986
onClick = rememberDebouncedClick(onClick = onDismiss),
8087
modifier = Modifier.testTag("DialogCancel")
8188
) {
82-
BodyMSB(text = dismissText, color = Colors.White64)
89+
BodyMSB(text = dismissText, color = dismissTextColor)
8390
}
8491
},
8592
title = { Title(text = title) },

app/src/main/java/to/bitkit/ui/screens/transfer/FundingScreen.kt

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ import androidx.compose.foundation.layout.Spacer
77
import androidx.compose.foundation.layout.fillMaxWidth
88
import androidx.compose.foundation.layout.height
99
import androidx.compose.foundation.layout.padding
10-
import androidx.compose.material3.AlertDialog
11-
import androidx.compose.material3.MaterialTheme
12-
import androidx.compose.material3.TextButton
1310
import androidx.compose.runtime.Composable
1411
import androidx.compose.runtime.getValue
1512
import androidx.compose.runtime.mutableStateOf
@@ -24,9 +21,9 @@ import to.bitkit.R
2421
import to.bitkit.env.Defaults
2522
import to.bitkit.ui.LocalBalances
2623
import to.bitkit.ui.components.BodyM
27-
import to.bitkit.ui.components.BodyMB
2824
import to.bitkit.ui.components.Display
2925
import to.bitkit.ui.components.RectangleButton
26+
import to.bitkit.ui.scaffold.AppAlertDialog
3027
import to.bitkit.ui.scaffold.AppTopBar
3128
import to.bitkit.ui.scaffold.DrawerNavIcon
3229
import to.bitkit.ui.scaffold.ScreenColumn
@@ -40,7 +37,7 @@ fun FundingScreen(
4037
isGeoBlocked: Boolean,
4138
onTransfer: () -> Unit = {},
4239
onFund: () -> Unit = {},
43-
onAdvanced: () -> Unit = {},
40+
onManual: () -> Unit = {},
4441
onBackClick: () -> Unit = {},
4542
) {
4643
val balances = LocalBalances.current
@@ -106,29 +103,26 @@ fun FundingScreen(
106103
modifier = Modifier.testTag("FundReceive")
107104
)
108105
RectangleButton(
109-
label = stringResource(R.string.lightning__funding__button3),
110-
icon = R.drawable.ic_share_purple,
106+
label = stringResource(R.string.lightning__funding_advanced__button2),
107+
icon = R.drawable.ic_pencil_full,
111108
iconTint = Colors.Purple,
112-
onClick = onAdvanced,
113-
modifier = Modifier.testTag("FundCustom")
109+
iconSize = 13.37.dp,
110+
onClick = onManual,
111+
modifier = Modifier.testTag("FundManual")
114112
)
115113
}
116114
}
117115
if (showNoFundsAlert) {
118-
AlertDialog(
119-
onDismissRequest = { showNoFundsAlert = false },
120-
confirmButton = {
121-
TextButton(onClick = { showNoFundsAlert = false }) {
122-
BodyM(text = stringResource(R.string.common__ok), color = Colors.Purple)
123-
}
116+
AppAlertDialog(
117+
title = stringResource(R.string.lightning__no_funds__title),
118+
text = stringResource(R.string.lightning__no_funds__description),
119+
confirmText = stringResource(R.string.lightning__no_funds__fund_wallet),
120+
confirmTextColor = Colors.Purple,
121+
onConfirm = {
122+
showNoFundsAlert = false
123+
onFund()
124124
},
125-
title = {
126-
BodyMB(text = stringResource(R.string.lightning__no_funds__title))
127-
},
128-
text = {
129-
BodyM(text = stringResource(R.string.lightning__no_funds__description))
130-
},
131-
shape = MaterialTheme.shapes.small,
125+
onDismiss = { showNoFundsAlert = false },
132126
)
133127
}
134128
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fun AllActivityScreen(
7070
onTagClick = { app.showSheet(Sheet.ActivityTagSelector) },
7171
onDateRangeClick = { app.showSheet(Sheet.ActivityDateRangeSelector) },
7272
onActivityItemClick = onActivityItemClick,
73-
onEmptyActivityRowClick = { app.showSheet(Sheet.Receive) },
73+
onEmptyActivityRowClick = { app.showSheet(Sheet.Receive()) },
7474
)
7575
}
7676

app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveSheet.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import to.bitkit.viewmodels.SettingsViewModel
3131
fun ReceiveSheet(
3232
navigateToExternalConnection: () -> Unit,
3333
walletState: WalletState,
34+
startRoute: ReceiveRoute = ReceiveRoute.QR,
3435
editInvoiceAmountViewModel: AmountInputViewModel = hiltViewModel(),
3536
settingsViewModel: SettingsViewModel = hiltViewModel(),
3637
) {
@@ -49,6 +50,12 @@ fun ReceiveSheet(
4950
wallet.refreshReceiveState()
5051
}
5152

53+
LaunchedEffect(startRoute) {
54+
if (startRoute != ReceiveRoute.QR) {
55+
navController.navigateTo(startRoute)
56+
}
57+
}
58+
5259
Column(
5360
modifier = Modifier
5461
.fillMaxWidth()

app/src/main/res/values-ar/strings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,8 @@
147147
<string name="lightning__force_title">تحويل\n&lt;accent&gt;إجباري&lt;/accent&gt;</string>
148148
<string name="lightning__funding__button1">تحويل من المدخرات</string>
149149
<string name="lightning__funding__button2">استخدم محفظة أخرى</string>
150-
<string name="lightning__funding__button3">متقدم</string>
151150
<string name="lightning__funding__nav_title">رصيد الإنفاق</string>
152-
<string name="lightning__funding__text">يمكنك استخدام مدخرات Bitkit أو إرسال Bitcoin من محفظة مختلفة.</string>
151+
<string name="lightning__funding__text">أسهل خيار هو استخدام مدخرات Bitkit الخاصة بك أو إرسال بيتكوين من محفظة مختلفة.</string>
153152
<string name="lightning__funding__text_blocked">لا يوفر Bitkit حاليًا خدمات Lightning في بلدك، لكن يمكنك الاتصال بعقد أخرى مباشرة.</string>
154153
<string name="lightning__funding__text_blocked_cjit">لا يوفر Bitkit حاليًا خدمات Lightning في بلدك، لكن يمكنك الاتصال بعقد أخرى مباشرة.</string>
155154
<string name="lightning__funding__title">موّل &lt;accent&gt;رصيد الإنفاق&lt;/accent&gt;</string>
@@ -170,6 +169,7 @@
170169
<string name="lightning__next_outbound_htlc_limit">حد HTLC الصادر التالي</string>
171170
<string name="lightning__next_outbound_htlc_min">الحد الأدنى لـ HTLC الصادر التالي</string>
172171
<string name="lightning__no_funds__description">قبل أن تتمكن من تحويل الأموال من رصيد مدخراتك، تحتاج إلى إرسال Bitcoin إلى محفظة Bitkit الخاصة بك.</string>
172+
<string name="lightning__no_funds__fund_wallet">تمويل المحفظة</string>
173173
<string name="lightning__no_funds__title">لا توجد أموال متاحة</string>
174174
<string name="lightning__node_id">معرّف عقدة LDK</string>
175175
<string name="lightning__node_info">عقدة Lightning</string>

app/src/main/res/values-b+es+419/strings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,8 @@
147147
<string name="lightning__force_title">Forzar\n&lt;accent&gt;Transferencia&lt;/accent&gt;</string>
148148
<string name="lightning__funding__button1">Transferir desde Ahorros</string>
149149
<string name="lightning__funding__button2">Usar Otra Billetera</string>
150-
<string name="lightning__funding__button3">Avanzado</string>
151150
<string name="lightning__funding__nav_title">Saldo de gastos</string>
152-
<string name="lightning__funding__text">Puedes usar tu balance de ahorros en Bitkit o enviar fondos desde otra cartera.</string>
151+
<string name="lightning__funding__text">La forma más fácil es usar tus ahorros de Bitkit o enviar bitcoin desde una billetera diferente.</string>
153152
<string name="lightning__funding__text_blocked">Bitkit no tiene soporte Lightning en tu región, pero puedes usar nodos externos manualmente.</string>
154153
<string name="lightning__funding__text_blocked_cjit">Bitkit no tiene soporte Lightning en tu región, pero puedes usar nodos externos manualmente.</string>
155154
<string name="lightning__funding__title">Fondee su &lt;accent&gt;saldo de gastos&lt;/accent&gt;</string>
@@ -170,6 +169,7 @@
170169
<string name="lightning__next_outbound_htlc_limit">Límite del próximo HTLC saliente</string>
171170
<string name="lightning__next_outbound_htlc_min">Mínimo del próximo HTLC saliente</string>
172171
<string name="lightning__no_funds__description">Para transferir fondos a su saldo de ahorros, primero tiene que enviar bitcoin a su billetera Bitkit.</string>
172+
<string name="lightning__no_funds__fund_wallet">Financiar billetera</string>
173173
<string name="lightning__no_funds__title">Sin fondos disponibles</string>
174174
<string name="lightning__node_id">ID del nodo LDK</string>
175175
<string name="lightning__node_info">Nodo Lightning</string>

app/src/main/res/values-ca/strings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,8 @@
147147
<string name="lightning__force_title">Forçar\n&lt;accent&gt;transferència&lt;/accent&gt;</string>
148148
<string name="lightning__funding__button1">Transferir des d\'estalvis</string>
149149
<string name="lightning__funding__button2">Utilitza un altre moneder</string>
150-
<string name="lightning__funding__button3">Avançat</string>
151150
<string name="lightning__funding__nav_title">Balanç de despesa</string>
152-
<string name="lightning__funding__text">Pots utilitzar els teus estalvis de Bitkit o enviar bitcoin des d\'una altra cartera.</string>
151+
<string name="lightning__funding__text">La forma més fàcil és utilitzar els teus estalvis de Bitkit o enviar bitcoin des d\'una altra cartera.</string>
153152
<string name="lightning__funding__text_blocked">Bitkit no ofereix serveis Lightning al teu país, però encara pots connectar-te a altres nodes directament.</string>
154153
<string name="lightning__funding__text_blocked_cjit">Bitkit no ofereix serveis Lightning al teu país, però encara pots connectar-te a altres nodes directament.</string>
155154
<string name="lightning__funding__title">Finança el teu &lt;accent&gt;saldo de despesa&lt;/accent&gt;</string>
@@ -170,6 +169,7 @@
170169
<string name="lightning__next_outbound_htlc_limit">Límit del pròxim HTLC de sortida</string>
171170
<string name="lightning__next_outbound_htlc_min">Mínim del pròxim HTLC de sortida</string>
172171
<string name="lightning__no_funds__description">Abans de poder transferir fons del teu saldo d\'estalvis, has d\'enviar bitcoin a la teva cartera Bitkit.</string>
172+
<string name="lightning__no_funds__fund_wallet">Finançar cartera</string>
173173
<string name="lightning__no_funds__title">No hi ha fons disponibles</string>
174174
<string name="lightning__node_id">ID de Node LDK</string>
175175
<string name="lightning__node_info">Node de Lightning</string>

0 commit comments

Comments
 (0)