taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 9a52983f5403b0878ec5073ef135846bf69c3845
parent ad65cd02bfbd7141d38d313f967c43cad3f655f3
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed,  3 Dec 2025 21:38:04 +0100

[wallet] further withdrawal flow improvements

Diffstat:
Mwallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt | 6++----
Mwallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt | 42+++++++-----------------------------------
2 files changed, 9 insertions(+), 39 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt @@ -102,8 +102,8 @@ class PromptWithdrawFragment: Fragment() { val devMode by model.devMode.observeAsState() if (scopes.isEmpty()) EmptyComposable() - val initialScope = status.defaultInputScope ?: scope ?: scopes.first() - val initialAmount = status.defaultInputAmount ?: Amount.zero(initialScope.currency) + val initialScope = status.selectedScope ?: scope ?: scopes.first() + val initialAmount = status.selectedAmount ?: Amount.zero(initialScope.currency) LaunchedEffect(status.status) { if (status.status == None) { @@ -140,8 +140,6 @@ class PromptWithdrawFragment: Fragment() { Confirming, AlreadyConfirmed -> LoadingScreen() None, Loading, Error, InfoReceived, TosReviewRequired, Updating -> { - val initialScope = s.defaultInputScope ?: scope ?: scopes.first() - val initialAmount = s.defaultInputAmount ?: Amount.zero(initialScope.currency) WithdrawalShowInfo( status = s, devMode = devMode ?: false, diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt @@ -18,12 +18,10 @@ package net.taler.wallet.withdraw import android.util.Log import androidx.annotation.UiThread -import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.updateAndGet import kotlinx.coroutines.launch @@ -67,11 +65,6 @@ data class WithdrawStatus( val uriInfo: WithdrawalDetailsForUri? = null, val amountInfo: WithdrawalDetailsForAmount? = null, - // calculated input defaults (based on uriInfo or exchangeBaseUrl) - val defaultInputAmount: Amount? = null, - val defaultInputScope: ScopeInfo? = null, - val defaultInputSpec: CurrencySpecification? = null, - // calculated selections (based on amountInfo) val selectedAmount: Amount? = null, val selectedScope: ScopeInfo? = null, @@ -311,7 +304,7 @@ class WithdrawManager( ?: error("transaction ${details.transactionId} not found") val status = _withdrawStatus.updateAndGet { value -> - updateInputDefaults( + updateSelections( value.copy( status = if (tx.txState.major == TransactionMajorState.Dialog) { InfoReceived @@ -369,7 +362,7 @@ class WithdrawManager( ?: exchange.currency?.let { Amount.zero(it)} if (amount != null) { _withdrawStatus.update { value -> - updateInputDefaults(value.copy( + updateSelections(value.copy( exchangeBaseUrl = exchangeBaseUrl)) } @@ -418,35 +411,14 @@ class WithdrawManager( } } - private suspend fun updateInputDefaults( - status: WithdrawStatus, - ): WithdrawStatus { - val defaultAmount = status.uriInfo?.amount - - val defaultScope = status.exchangeBaseUrl?.let { url -> - exchangeManager.findExchangeByUrl(url)?.scopeInfo - } ?: status.uriInfo?.defaultExchangeBaseUrl?.let { url -> - exchangeManager.findExchangeByUrl(url)?.scopeInfo - } - - val defaultSpec = defaultScope?.let { scope -> - exchangeManager.getSpecForScopeInfo(scope) - } ?: defaultAmount?.currency?.let { currency -> - exchangeManager.getSpecForCurrency(currency) - } - - return status.copy( - defaultInputAmount = defaultAmount, - defaultInputScope = defaultScope, - defaultInputSpec = defaultSpec, - ) - } - - private fun updateSelections( + private suspend fun updateSelections( status: WithdrawStatus, ): WithdrawStatus { - val selectedAmount = status.amountInfo?.amountRaw + val selectedAmount = status.amountInfo?.amountRaw ?: status.uriInfo?.amount val selectedScope = status.amountInfo?.scopeInfo + ?: status.uriInfo?.defaultExchangeBaseUrl?.let { url -> + exchangeManager.findExchangeByUrl(url)?.scopeInfo + } val selectedSpec = selectedScope?.let { scope -> exchangeManager.getSpecForScopeInfo(scope) } ?: selectedAmount?.currency?.let { currency ->