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