commit 2ee27388aa2520c1625df3f20e2aecc0bad680b4 parent 072a442328104377688eebaf4c7d7700696514e5 Author: Iván Ávalos <avalos@disroot.org> Date: Sun, 26 Jul 2026 22:35:57 +0200 [wallet] fix withdrawal crashes and UI issues Diffstat:
8 files changed, 38 insertions(+), 17 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/compose/ErrorComposable.kt b/wallet/src/main/java/net/taler/wallet/compose/ErrorComposable.kt @@ -56,13 +56,14 @@ fun ErrorComposable( error: TalerErrorInfo, modifier: Modifier = Modifier, devMode: Boolean, + scrollable: Boolean = true, onClose: (() -> Unit)? = null, ) { val scrollState = rememberScrollState() Column( modifier = modifier .fillMaxWidth() - .verticalScroll(scrollState) + .then(if (scrollable) Modifier.verticalScroll(scrollState) else Modifier) .padding(16.dp), horizontalAlignment = CenterHorizontally, verticalArrangement = Arrangement.Top, diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositAmountComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/DepositAmountComposable.kt @@ -101,8 +101,9 @@ fun DepositAmountComposable( ErrorComposable( error = TalerErrorInfo.makeCustomError( stringResource(R.string.send_deposits_no_currencies_error)), - modifier = Modifier.fillMaxSize(), + modifier = Modifier.fillMaxWidth(), devMode = false, + scrollable = false, onClose = onClose, ) return diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositScreen.kt b/wallet/src/main/java/net/taler/wallet/deposit/DepositScreen.kt @@ -19,8 +19,6 @@ package net.taler.wallet.deposit import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -107,8 +105,8 @@ fun DepositScreen( devMode = devMode, modifier = Modifier .fillMaxSize() - .padding(paddingValues) - .verticalScroll(rememberScrollState()), + .padding(paddingValues), + scrollable = true, onClose = onNavigateBack, ) diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt @@ -156,9 +156,12 @@ fun OutgoingPullComposable( } if (state is OutgoingError) { - ErrorComposable(state.info, - modifier = Modifier.fillMaxSize(), - devMode = devMode) + ErrorComposable( + error = state.info, + modifier = Modifier.fillMaxWidth(), + devMode = devMode, + scrollable = false, + ) return@Column } diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt @@ -217,9 +217,12 @@ fun OutgoingPushIntroComposable( ) if (state is OutgoingError) { - ErrorComposable(state.info, - modifier = Modifier.fillMaxSize(), - devMode = devMode) + ErrorComposable( + error = state.info, + modifier = Modifier.fillMaxWidth(), + devMode = devMode, + scrollable = false, + ) return@Column } diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawScreen.kt b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawScreen.kt @@ -170,6 +170,9 @@ fun PromptWithdrawScreen( status.selectedScope?.let { model.selectScope(it) } withdrawManager.acceptWithdrawal(age) }, + onReset = { + withdrawManager.resetWithdrawal() + } ) } } diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt b/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt @@ -115,8 +115,12 @@ fun TransactionWithdrawalComposable( selectedOption?.let { onSelectOption(it) } } - val showAccountChooser = accounts != null && accounts.size > 1 - val showOptionChooser = selectedAccount != null && selectedAccount.transferOptions.size > 1 + val showAccountChooser = accounts != null + && accounts.size > 1 + && t.txState.minor == TransactionMinorState.ExchangeWaitReserve + val showOptionChooser = selectedAccount != null + && selectedAccount.transferOptions.size > 1 + && t.txState.minor == TransactionMinorState.ExchangeWaitReserve if (showAccountChooser) { TransferAccountChooser( diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawalShowInfo.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawalShowInfo.kt @@ -84,6 +84,7 @@ fun WithdrawalShowInfo( onSelectExchange: () -> Unit, onTosReview: () -> Unit, onConfirm: (age: Int?) -> Unit, + onReset: () -> Unit, modifier: Modifier = Modifier, ) { val maxAmount = status.uriInfo?.maxAmount @@ -179,9 +180,13 @@ fun WithdrawalShowInfo( LoadingScreen(Modifier.weight(1f)) return } else if (status.status == Error && status.error != null) { - ErrorComposable(status.error, - modifier = Modifier.fillMaxSize(), - devMode = devMode) + ErrorComposable( + error = status.error, + modifier = Modifier.fillMaxWidth(), + devMode = devMode, + onClose = onReset, + scrollable = false, + ) return } else if (status.isCashAcceptor) { WarningLabel( @@ -420,6 +425,7 @@ fun WithdrawalShowInfoUpdatingPreview() { onSelectExchange = {}, onSelectAmount = { _, _ -> }, onTosReview = {}, + onReset = {}, onConfirm = {}, ) } @@ -445,6 +451,7 @@ fun WithdrawalShowInfoTosReviewPreview() { onSelectExchange = {}, onSelectAmount = { _, _ -> }, onTosReview = {}, + onReset = {}, onConfirm = {}, ) } @@ -470,6 +477,7 @@ fun WithdrawalShowInfoErrorPreview() { onSelectExchange = {}, onSelectAmount = { _, _ -> }, onTosReview = {}, + onReset = {}, onConfirm = {}, ) }