taler-android

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

commit b21e679983d97fb01c652b6195c22885d70a8518
parent 130d74ecb9fbe9e406811663f30fcc9d9f9d26cf
Author: Iván Ávalos <avalos@disroot.org>
Date:   Mon, 20 May 2024 14:07:26 -0600

[wallet] Template contract refactoring and additional checks

bug 0008854

Diffstat:
Mwallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt | 24+++++++++++++++++++++++-
Mwallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt | 20+++++++-------------
2 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt @@ -97,7 +97,29 @@ class WalletTemplateDetails( */ @SerialName("required_currency") val requiredCurrency: String? = null, -) +) { + val defaultSummary get() = editableDefaults?.summary ?: templateContract.summary + + val defaultAmount get() = editableDefaults?.amount?.let { + if (it.contains(':')) { + // Amount + Amount.fromJSONString(it).amountStr + } else { + // *or* a plain currency string + Amount.zero(it).amountStr + } + } ?: templateContract.amount?.amountStr + + val defaultCurrency get() = requiredCurrency + ?: editableDefaults?.currency + ?: templateContract.currency + + fun isSummaryEditable() = editableDefaults?.summary != null + + fun isAmountEditable() = editableDefaults?.amount != null + + fun isCurrencyEditable() = requiredCurrency == null && editableDefaults?.currency != null +} @Serializable data class TemplateParams( diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt @@ -49,15 +49,9 @@ fun PayTemplateOrderComposable( onError: (msgRes: Int) -> Unit, onSubmit: (params: TemplateParams) -> Unit, ) { - val defaultSummary = templateDetails.editableDefaults?.summary - ?: templateDetails.templateContract.summary - // TODO: also handle “plain currency string” - val defaultAmount = templateDetails.editableDefaults?.amount?.let { - Amount.fromJSONString(it).amountStr - } ?: templateDetails.templateContract.amount?.amountStr - // TODO: also take into account `requiredCurrency' - val defaultCurrency = templateDetails.editableDefaults?.currency - ?: templateDetails.templateContract.currency + val defaultSummary = templateDetails.defaultSummary + val defaultAmount = templateDetails.defaultAmount + val defaultCurrency = templateDetails.defaultCurrency var summary by remember { mutableStateOf(defaultSummary) } var currency by remember { mutableStateOf(defaultCurrency ?: currencies[0]) } @@ -72,7 +66,7 @@ fun PayTemplateOrderComposable( isError = summary.isNullOrBlank(), onValueChange = { summary = it }, singleLine = true, - readOnly = templateDetails.editableDefaults?.summary == null, + readOnly = !templateDetails.isSummaryEditable(), label = { Text(stringResource(R.string.withdraw_manual_ready_subject)) }, ) @@ -83,8 +77,8 @@ fun PayTemplateOrderComposable( amount = amount, currency = currency, currencies = currencies, - readOnlyCurrency = templateDetails.editableDefaults?.currency == null, - readOnlyAmount = templateDetails.editableDefaults?.amount == null, + readOnlyCurrency = !templateDetails.isCurrencyEditable(), + readOnlyAmount = !templateDetails.isAmountEditable(), onAmountChosen = { a, c -> amount = a currency = c @@ -93,7 +87,7 @@ fun PayTemplateOrderComposable( Button( modifier = Modifier.padding(16.dp), - enabled = templateDetails.editableDefaults?.summary == null || !summary.isNullOrBlank(), + enabled = !templateDetails.isSummaryEditable() || !summary.isNullOrBlank(), onClick = { when (val res = onCreateAmount(amount, currency)) { is AmountResult.InsufficientBalance -> onError(R.string.payment_balance_insufficient)