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:
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 ->