Skip to content

Commit e64d801

Browse files
authored
Merge pull request #361 from synonymdev/fix/send-scan-back-nav
fix(send): amount screen bugs
2 parents c545630 + 5c2d8a1 commit e64d801

File tree

6 files changed

+49
-36
lines changed

6 files changed

+49
-36
lines changed

app/src/main/java/to/bitkit/data/SettingsStore.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ data class SettingsData(
8989
val isBiometricEnabled: Boolean = false,
9090
val isPinOnIdleEnabled: Boolean = false,
9191
val isPinForPaymentsEnabled: Boolean = false,
92-
val isDevModeEnabled: Boolean = Env.network != Network.BITCOIN,
92+
@Suppress("KotlinConstantConditions", "SimplifyBooleanWithConstants")
93+
val isDevModeEnabled: Boolean = !Env.isE2eTest && Env.network != Network.BITCOIN,
9394
val showWidgets: Boolean = true,
9495
val showWidgetTitles: Boolean = false,
9596
val lastUsedTags: List<String> = emptyList(),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ fun MoneyAmount(
230230
horizontalAlignment = Alignment.Start
231231
) {
232232
if (showSecondaryField) {
233-
MoneySSB(sats = satoshis, unit = unit.not(), color = Colors.White64)
233+
MoneySSB(sats = satoshis, unit = unit.not(), color = Colors.White64, showSymbol = true)
234234

235235
Spacer(modifier = Modifier.height(12.dp))
236236
}

app/src/main/java/to/bitkit/ui/screens/wallets/send/SendAmountScreen.kt

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@ package to.bitkit.ui.screens.wallets.send
33
import androidx.compose.foundation.layout.BoxWithConstraints
44
import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.Row
6-
import androidx.compose.foundation.layout.Spacer
76
import androidx.compose.foundation.layout.fillMaxSize
87
import androidx.compose.foundation.layout.fillMaxWidth
98
import androidx.compose.foundation.layout.height
109
import androidx.compose.foundation.layout.navigationBarsPadding
1110
import androidx.compose.foundation.layout.padding
12-
import androidx.compose.foundation.layout.sizeIn
1311
import androidx.compose.material3.HorizontalDivider
1412
import androidx.compose.runtime.Composable
1513
import androidx.compose.runtime.getValue
@@ -69,6 +67,7 @@ import to.bitkit.viewmodels.SendUiState
6967
fun SendAmountScreen(
7068
uiState: SendUiState,
7169
walletUiState: MainUiState,
70+
canGoBack: Boolean,
7271
currencyUiState: CurrencyUiState = LocalCurrencies.current,
7372
onBack: () -> Unit,
7473
onEvent: (SendEvent) -> Unit,
@@ -101,8 +100,10 @@ fun SendAmountScreen(
101100
displayUnit = currencyUiState.displayUnit,
102101
onInputChanged = { input = it },
103102
onEvent = onEvent,
103+
canGoBack = canGoBack,
104104
onBack = onBack,
105105
onClickMax = { maxSats ->
106+
// TODO port the RN sendMax logic if still needed
106107
if (uiState.payMethod == SendMethod.LIGHTNING && uiState.lnurl == null) {
107108
app?.toast(
108109
type = Toast.ToastType.WARNING,
@@ -112,6 +113,7 @@ fun SendAmountScreen(
112113
}
113114
overrideSats = maxSats
114115
},
116+
onClickAmount = { currencyVM.togglePrimaryDisplay() },
115117
)
116118
}
117119

@@ -127,8 +129,10 @@ fun SendAmountContent(
127129
currencyUiState: CurrencyUiState,
128130
onInputChanged: (String) -> Unit,
129131
onEvent: (SendEvent) -> Unit,
132+
canGoBack: Boolean = true,
130133
onBack: () -> Unit,
131134
onClickMax: (Long) -> Unit = {},
135+
onClickAmount: () -> Unit = {},
132136
) {
133137
Column(
134138
modifier = modifier
@@ -143,10 +147,13 @@ fun SendAmountContent(
143147
else -> R.string.wallet__send_amount
144148
}
145149

146-
SheetTopBar(stringResource(titleRes)) {
147-
onEvent(SendEvent.AmountReset)
148-
onBack()
149-
}
150+
SheetTopBar(
151+
titleText = stringResource(titleRes),
152+
onBack = {
153+
onEvent(SendEvent.AmountReset)
154+
onBack()
155+
}.takeIf { canGoBack },
156+
)
150157

151158
when (walletUiState.nodeLifecycleState) {
152159
is NodeLifecycleState.Running -> {
@@ -160,6 +167,7 @@ fun SendAmountContent(
160167
primaryDisplay = primaryDisplay,
161168
onEvent = onEvent,
162169
onClickMax = onClickMax,
170+
onClickAmount = onClickAmount,
163171
)
164172
}
165173

@@ -186,6 +194,7 @@ private fun SendAmountNodeRunning(
186194
onInputChanged: (String) -> Unit,
187195
onEvent: (SendEvent) -> Unit,
188196
onClickMax: (Long) -> Unit,
197+
onClickAmount: () -> Unit,
189198
) {
190199
BoxWithConstraints {
191200
val maxHeight = this.maxHeight
@@ -200,14 +209,15 @@ private fun SendAmountNodeRunning(
200209
Column(
201210
modifier = Modifier.padding(horizontal = 16.dp)
202211
) {
203-
Spacer(Modifier.height(16.dp))
212+
VerticalSpacer(16.dp)
204213

205214
NumberPadTextField(
206215
input = input,
207216
displayUnit = displayUnit,
208217
primaryDisplay = primaryDisplay,
209218
modifier = Modifier
210219
.fillMaxWidth()
220+
.clickableAlpha(onClick = onClickAmount)
211221
.testTag("SendNumberField")
212222
)
213223

@@ -226,10 +236,7 @@ private fun SendAmountNodeRunning(
226236
) {
227237
Column(
228238
modifier = Modifier
229-
.clickableAlpha {
230-
// TODO port the RN sendMax logic
231-
onClickMax(availableAmount)
232-
}
239+
.clickableAlpha { onClickMax(availableAmount) }
233240
.testTag("AvailableAmount")
234241
) {
235242
Text13Up(
@@ -284,12 +291,6 @@ private fun SendAmountNodeRunning(
284291
.testTag("SendAmountNumberPad")
285292
)
286293

287-
Spacer(
288-
modifier = Modifier
289-
.weight(1f)
290-
.sizeIn(minHeight = 16.dp, maxHeight = 41.dp)
291-
)
292-
293294
PrimaryButton(
294295
text = stringResource(R.string.common__continue),
295296
enabled = uiState.isAmountInputValid,
@@ -330,23 +331,23 @@ private fun PaymentMethodButton(
330331
)
331332
}
332333

333-
@Preview(showSystemUi = true, name = "Running - Lightning")
334+
@Preview(showSystemUi = true)
334335
@Composable
335-
private fun PreviewRunningLightning() {
336+
private fun PreviewLightningNoAmount() {
336337
AppThemeSurface {
337338
BottomSheetPreview {
338339
SendAmountContent(
339340
uiState = SendUiState(
340341
payMethod = SendMethod.LIGHTNING,
341-
amountInput = "100",
342-
isAmountInputValid = true,
342+
amountInput = "0",
343+
isAmountInputValid = false,
343344
isUnified = false
344345
),
345346
balances = BalanceState(totalSats = 150u, totalOnchainSats = 50u, maxSendLightningSats = 100u),
346347
walletUiState = MainUiState(nodeLifecycleState = NodeLifecycleState.Running),
347348
onBack = {},
348349
onEvent = {},
349-
input = "100",
350+
input = "0",
350351
displayUnit = BitcoinDisplayUnit.MODERN,
351352
primaryDisplay = PrimaryDisplay.FIAT,
352353
currencyUiState = CurrencyUiState(),
@@ -357,9 +358,9 @@ private fun PreviewRunningLightning() {
357358
}
358359
}
359360

360-
@Preview(showSystemUi = true, name = "Running - Unified")
361+
@Preview(showSystemUi = true)
361362
@Composable
362-
private fun PreviewRunningUnified() {
363+
private fun PreviewUnified() {
363364
AppThemeSurface {
364365
BottomSheetPreview {
365366
SendAmountContent(
@@ -384,9 +385,9 @@ private fun PreviewRunningUnified() {
384385
}
385386
}
386387

387-
@Preview(showSystemUi = true, name = "Running - Onchain")
388+
@Preview(showSystemUi = true)
388389
@Composable
389-
private fun PreviewRunningOnchain() {
390+
private fun PreviewOnchain() {
390391
AppThemeSurface {
391392
BottomSheetPreview {
392393
SendAmountContent(
@@ -411,15 +412,14 @@ private fun PreviewRunningOnchain() {
411412
}
412413
}
413414

414-
@Preview(showSystemUi = true, name = "Initializing")
415+
@Preview(showSystemUi = true)
415416
@Composable
416417
private fun PreviewInitializing() {
417418
AppThemeSurface {
418419
BottomSheetPreview {
419420
SendAmountContent(
420421
uiState = SendUiState(
421422
payMethod = SendMethod.LIGHTNING,
422-
amountInput = "100"
423423
),
424424
walletUiState = MainUiState(nodeLifecycleState = NodeLifecycleState.Initializing),
425425
balances = BalanceState(totalSats = 150u, totalOnchainSats = 50u, maxSendLightningSats = 100u),
@@ -509,7 +509,7 @@ private fun PreviewLnurlPay() {
509509
}
510510
}
511511

512-
@Preview(showSystemUi = true, name = "Running - Short screen", device = NEXUS_5)
512+
@Preview(showSystemUi = true, device = NEXUS_5)
513513
@Composable
514514
private fun PreviewSmallScreen() {
515515
AppThemeSurface {
@@ -519,7 +519,6 @@ private fun PreviewSmallScreen() {
519519
payMethod = SendMethod.LIGHTNING,
520520
amountInput = "100",
521521
isAmountInputValid = true,
522-
isUnified = false
523522
),
524523
balances = BalanceState(totalSats = 150u, totalOnchainSats = 50u, maxSendLightningSats = 100u),
525524
walletUiState = MainUiState(nodeLifecycleState = NodeLifecycleState.Running),

app/src/main/java/to/bitkit/ui/screens/wallets/send/SendConfirmScreen.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ import java.time.Instant
8787
fun SendConfirmScreen(
8888
savedStateHandle: SavedStateHandle,
8989
uiState: SendUiState,
90+
canGoBack: Boolean,
9091
onBack: () -> Unit,
9192
onEvent: (SendEvent) -> Unit,
9293
onClickAddTag: () -> Unit,
@@ -133,6 +134,7 @@ fun SendConfirmScreen(
133134
uiState = uiState,
134135
isLoading = isLoading,
135136
showBiometrics = showBiometrics,
137+
canGoBack = canGoBack,
136138
onBack = onBack,
137139
onEvent = onEvent,
138140
onClickAddTag = onClickAddTag,
@@ -163,6 +165,7 @@ private fun Content(
163165
isLoading: Boolean,
164166
showBiometrics: Boolean,
165167
modifier: Modifier = Modifier,
168+
canGoBack: Boolean = true,
166169
onBack: () -> Unit = {},
167170
onEvent: (SendEvent) -> Unit = {},
168171
onClickAddTag: () -> Unit = {},
@@ -185,7 +188,7 @@ private fun Content(
185188
isLnurlPay -> stringResource(R.string.wallet__lnurl_p_title)
186189
else -> stringResource(R.string.wallet__send_review)
187190
},
188-
onBack = onBack,
191+
onBack = onBack.takeIf { canGoBack },
189192
)
190193

191194
Spacer(Modifier.height(16.dp))

app/src/main/java/to/bitkit/ui/settings/BackupSettingsScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ private fun BackupSettingsScreenContent(
124124
color = Colors.White64,
125125
)
126126
FillWidth()
127-
@Suppress("SimplifyBooleanWithConstants", "KotlinConstantConditions")
127+
@Suppress("KotlinConstantConditions", "SimplifyBooleanWithConstants")
128128
if (Env.isE2eTest && allSynced) {
129129
Icon(
130130
painter = painterResource(R.drawable.ic_check_circle),

app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ fun SendSheet(
112112
SendAmountScreen(
113113
uiState = uiState,
114114
walletUiState = walletUiState,
115-
onBack = { navController.popBackStack() },
115+
canGoBack = startDestination != SendRoute.Amount,
116+
onBack = {
117+
if (!navController.popBackStack()) {
118+
appViewModel.hideSheet()
119+
}
120+
},
116121
onEvent = { appViewModel.setSendEvent(it) }
117122
)
118123
}
@@ -162,7 +167,12 @@ fun SendSheet(
162167
SendConfirmScreen(
163168
savedStateHandle = it.savedStateHandle,
164169
uiState = uiState,
165-
onBack = { navController.popBackStack() },
170+
canGoBack = startDestination != SendRoute.Confirm,
171+
onBack = {
172+
if (!navController.popBackStack()) {
173+
appViewModel.hideSheet()
174+
}
175+
},
166176
onEvent = { e -> appViewModel.setSendEvent(e) },
167177
onClickAddTag = { navController.navigate(SendRoute.AddTag) },
168178
onClickTag = { tag -> appViewModel.removeTag(tag) },

0 commit comments

Comments
 (0)