diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-05-29 13:58:08 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2024-05-29 14:05:33 -0600 |
commit | c78239399c89cdf9ccb87f9f97a15e0806fb1003 (patch) | |
tree | 74c501499ee6051d541ac3736a9c7f53191b38bf | |
parent | 79f3a999da50e87687132d057d7c635285f4c4ae (diff) | |
download | taler-android-c78239399c89cdf9ccb87f9f97a15e0806fb1003.tar.gz taler-android-c78239399c89cdf9ccb87f9f97a15e0806fb1003.zip |
[wallet] Skip template form if only one currency is usabledev/ivan-avalos/checktemplate
bug 0008854
4 files changed, 20 insertions, 9 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt index 4d96566a..d7441837 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt | |||
@@ -47,7 +47,9 @@ fun PayTemplateComposable( | |||
47 | PayTemplateError(stringResource(R.string.payment_balance_insufficient)) | 47 | PayTemplateError(stringResource(R.string.payment_balance_insufficient)) |
48 | } else when (val p = payStatus) { | 48 | } else when (val p = payStatus) { |
49 | is PayStatus.Checked -> { | 49 | is PayStatus.Checked -> { |
50 | val usableCurrencies = currencies.intersect(p.supportedCurrencies.toSet()).toList() | 50 | val usableCurrencies = currencies |
51 | .intersect(p.supportedCurrencies.toSet()) | ||
52 | .toList() | ||
51 | if (usableCurrencies.isEmpty()) { | 53 | if (usableCurrencies.isEmpty()) { |
52 | // If user doesn't have any supported currency, they can't pay either | 54 | // If user doesn't have any supported currency, they can't pay either |
53 | PayTemplateError(stringResource(R.string.payment_balance_insufficient)) | 55 | PayTemplateError(stringResource(R.string.payment_balance_insufficient)) |
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt index df9153f9..4c3f0a54 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt | |||
@@ -103,11 +103,14 @@ class WalletTemplateDetails( | |||
103 | 103 | ||
104 | fun isAmountEditable() = templateContract.amount == null | 104 | fun isAmountEditable() = templateContract.amount == null |
105 | 105 | ||
106 | fun isCurrencyEditable() = requiredCurrency == null && templateContract.currency == null | 106 | fun isCurrencyEditable(usableCurrencies: List<String>) = isAmountEditable() |
107 | && requiredCurrency == null | ||
108 | && templateContract.currency == null | ||
109 | && usableCurrencies.size > 1 | ||
107 | 110 | ||
108 | fun isTemplateEditable() = isSummaryEditable() | 111 | fun isTemplateEditable(usableCurrencies: List<String>) = isSummaryEditable() |
109 | || isAmountEditable() | 112 | || isAmountEditable() |
110 | || isCurrencyEditable() | 113 | || isCurrencyEditable(usableCurrencies) |
111 | 114 | ||
112 | // NOTE: it is important to nullify non-editable values! | 115 | // NOTE: it is important to nullify non-editable values! |
113 | fun toTemplateParams() = TemplateParams( | 116 | fun toTemplateParams() = TemplateParams( |
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt index d2125404..51c0bc02 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt | |||
@@ -38,6 +38,7 @@ class PayTemplateFragment : Fragment() { | |||
38 | private val model: MainViewModel by activityViewModels() | 38 | private val model: MainViewModel by activityViewModels() |
39 | private lateinit var uriString: String | 39 | private lateinit var uriString: String |
40 | private lateinit var uri: Uri | 40 | private lateinit var uri: Uri |
41 | private val currencies by lazy { model.getCurrencies() } | ||
41 | 42 | ||
42 | override fun onCreateView( | 43 | override fun onCreateView( |
43 | inflater: LayoutInflater, | 44 | inflater: LayoutInflater, |
@@ -54,7 +55,7 @@ class PayTemplateFragment : Fragment() { | |||
54 | val payStatus = payStatusFlow.collectAsStateLifecycleAware(initial = PayStatus.None) | 55 | val payStatus = payStatusFlow.collectAsStateLifecycleAware(initial = PayStatus.None) |
55 | TalerSurface { | 56 | TalerSurface { |
56 | PayTemplateComposable( | 57 | PayTemplateComposable( |
57 | currencies = model.getCurrencies(), | 58 | currencies = currencies, |
58 | payStatus = payStatus.value, | 59 | payStatus = payStatus.value, |
59 | onCreateAmount = model::createAmount, | 60 | onCreateAmount = model::createAmount, |
60 | onSubmit = this@PayTemplateFragment::createOrder, | 61 | onSubmit = this@PayTemplateFragment::createOrder, |
@@ -79,8 +80,13 @@ class PayTemplateFragment : Fragment() { | |||
79 | showError(payStatus.error) | 80 | showError(payStatus.error) |
80 | } | 81 | } |
81 | 82 | ||
82 | is PayStatus.Checked -> if (!payStatus.details.isTemplateEditable()) { | 83 | is PayStatus.Checked -> { |
83 | createOrder(payStatus.details.toTemplateParams()) | 84 | val usableCurrencies = currencies |
85 | .intersect(payStatus.supportedCurrencies.toSet()) | ||
86 | .toList() | ||
87 | if (!payStatus.details.isTemplateEditable(usableCurrencies)) { | ||
88 | createOrder(payStatus.details.toTemplateParams()) | ||
89 | } | ||
84 | } | 90 | } |
85 | 91 | ||
86 | else -> {} | 92 | else -> {} |
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt index e8926a7e..2febfbb4 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt | |||
@@ -93,7 +93,7 @@ fun PayTemplateOrderComposable( | |||
93 | amount = amount, | 93 | amount = amount, |
94 | currency = currency, | 94 | currency = currency, |
95 | currencies = usableCurrencies, | 95 | currencies = usableCurrencies, |
96 | readOnlyCurrency = !templateDetails.isCurrencyEditable(), | 96 | readOnlyCurrency = !templateDetails.isCurrencyEditable(usableCurrencies), |
97 | readOnlyAmount = !templateDetails.isAmountEditable(), | 97 | readOnlyAmount = !templateDetails.isAmountEditable(), |
98 | onAmountChosen = { a, c -> | 98 | onAmountChosen = { a, c -> |
99 | amount = a | 99 | amount = a |
@@ -103,7 +103,7 @@ fun PayTemplateOrderComposable( | |||
103 | 103 | ||
104 | Button( | 104 | Button( |
105 | modifier = Modifier.padding(16.dp), | 105 | modifier = Modifier.padding(16.dp), |
106 | enabled = !templateDetails.isSummaryEditable() || !summary.isNullOrBlank(), | 106 | enabled = !templateDetails.isSummaryEditable() || summary.isNotBlank(), |
107 | onClick = { | 107 | onClick = { |
108 | when (val res = onCreateAmount(amount, currency)) { | 108 | when (val res = onCreateAmount(amount, currency)) { |
109 | is AmountResult.InsufficientBalance -> onError(R.string.payment_balance_insufficient) | 109 | is AmountResult.InsufficientBalance -> onError(R.string.payment_balance_insufficient) |