aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2024-05-29 13:58:08 -0600
committerIván Ávalos <avalos@disroot.org>2024-05-29 14:05:33 -0600
commitc78239399c89cdf9ccb87f9f97a15e0806fb1003 (patch)
tree74c501499ee6051d541ac3736a9c7f53191b38bf
parent79f3a999da50e87687132d057d7c635285f4c4ae (diff)
downloadtaler-android-c78239399c89cdf9ccb87f9f97a15e0806fb1003.tar.gz
taler-android-c78239399c89cdf9ccb87f9f97a15e0806fb1003.zip
[wallet] Skip template form if only one currency is usabledev/ivan-avalos/checktemplate
bug 0008854
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PayTemplateDetails.kt9
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt12
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt4
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)