[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] 08/08: [wallet] Improve pending payments UX and er
From: |
gnunet |
Subject: |
[taler-taler-android] 08/08: [wallet] Improve pending payments UX and error handling |
Date: |
Wed, 06 Mar 2024 18:38:10 +0100 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a commit to branch master
in repository taler-android.
commit 621351c4c9a68e7b14e64e77b5717016be302aa2
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Wed Mar 6 10:36:30 2024 -0600
[wallet] Improve pending payments UX and error handling
---
.../net/taler/wallet/payment/PayTemplateComposable.kt | 11 +++++++++--
.../net/taler/wallet/payment/PayTemplateFragment.kt | 10 ++--------
.../java/net/taler/wallet/payment/PaymentManager.kt | 7 +++----
.../net/taler/wallet/payment/PromptPaymentFragment.kt | 18 +++++++++---------
wallet/src/main/res/values/strings.xml | 1 +
5 files changed, 24 insertions(+), 23 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 e2a8a64..b6c2fb1 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt
@@ -57,7 +57,7 @@ fun PayTemplateComposable(
PayTemplateError(stringResource(R.string.receive_amount_invalid))
} else if (currencies.isEmpty()) {
PayTemplateError(stringResource(R.string.payment_balance_insufficient))
- } else when (payStatus) {
+ } else when (val p = payStatus) {
is PayStatus.None -> PayTemplateOrderComposable(
currencies = currencies,
defaultSummary = defaultSummary,
@@ -70,7 +70,14 @@ fun PayTemplateComposable(
is PayStatus.Loading -> PayTemplateLoading()
is PayStatus.AlreadyPaid ->
PayTemplateError(stringResource(R.string.payment_already_paid))
is PayStatus.InsufficientBalance ->
PayTemplateError(stringResource(R.string.payment_balance_insufficient))
- is PayStatus.Error -> {} // handled in fragment will show bottom sheet
FIXME white page?
+ is PayStatus.Pending -> {
+ val error = p.error
+ PayTemplateError(if (error != null) {
+ stringResource(R.string.payment_error, error.userFacingMsg)
+ } else {
+ stringResource(R.string.payment_template_error)
+ })
+ }
is PayStatus.Prepared -> {} // handled in fragment, will redirect
is PayStatus.Success -> {} // handled by other UI flow, no need for
content here
}
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 9712254..4eb2c11 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt
@@ -84,14 +84,8 @@ class PayTemplateFragment : Fragment() {
findNavController().navigate(R.id.action_promptPayTemplate_to_promptPayment)
}
- is PayStatus.Error -> if (payStatus.error != null) {
- if (model.devMode.value == true) {
- showError(payStatus.error)
- } else {
- showError(R.string.payment_error,
payStatus.error.userFacingMsg)
- }
- } else {
- showError(getString(R.string.payment_template_error))
+ is PayStatus.Pending -> if (payStatus.error != null &&
model.devMode.value == true) {
+ showError(payStatus.error)
}
else -> {}
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
index 804c6a0..35cd9e6 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -55,7 +55,7 @@ sealed class PayStatus {
val transactionId: String,
) : PayStatus()
- data class Error(
+ data class Pending(
val transactionId: String? = null,
val error: TalerErrorInfo? = null,
) : PayStatus()
@@ -105,8 +105,7 @@ class PaymentManager(
transactionId = response.transactionId,
currency = currency,
)
- // TODO: is pending == error always?
- is ConfirmPayResult.Pending -> PayStatus.Error(
+ is ConfirmPayResult.Pending -> PayStatus.Pending(
transactionId = response.transactionId,
error = response.lastError,
)
@@ -146,7 +145,7 @@ class PaymentManager(
private fun handleError(operation: String, error: TalerErrorInfo) {
Log.e(TAG, "got $operation error result $error")
- mPayStatus.value = PayStatus.Error(error = error)
+ mPayStatus.value = PayStatus.Pending(error = error)
}
}
diff --git
a/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
b/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
index 656ca08..31c26a0 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
@@ -131,14 +131,14 @@ class PromptPaymentFragment : Fragment(),
ProductImageClickListener {
navigateToTransaction(payStatus.transactionId)
Snackbar.make(requireView(), R.string.payment_already_paid,
LENGTH_LONG).show()
}
- is PayStatus.Error -> {
+ is PayStatus.Pending -> {
showLoading(false)
- if (payStatus.error != null) {
- if (model.devMode.value == true) {
- showError(payStatus.error)
- }
- ui.details.errorView.text =
getString(R.string.payment_error, payStatus.error.userFacingMsg)
- ui.details.errorView.fadeIn()
+ paymentManager.resetPayStatus()
+ navigateToTransaction(payStatus.transactionId)
+ if (payStatus.error != null && model.devMode.value == true) {
+ showError(payStatus.error)
+ } else {
+ showError(getString(R.string.payment_pending))
}
}
is PayStatus.None -> {
@@ -174,9 +174,9 @@ class PromptPaymentFragment : Fragment(),
ProductImageClickListener {
f.show(parentFragmentManager, "image")
}
- private fun navigateToTransaction(id: String) {
+ private fun navigateToTransaction(id: String?) {
lifecycleScope.launch {
- if (transactionManager.selectTransaction(id)) {
+ if (id != null && transactionManager.selectTransaction(id)) {
findNavController().navigate(R.id.action_promptPayment_to_nav_transactions_detail_payment)
} else {
findNavController().navigate(R.id.action_promptPayment_to_nav_main)
diff --git a/wallet/src/main/res/values/strings.xml
b/wallet/src/main/res/values/strings.xml
index 829061d..48ec647 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -132,6 +132,7 @@ GNU Taler is immune against many types of fraud, such as
phishing of credit card
<string name="payment_label_amount_total">Total Amount:</string>
<string name="payment_label_order_summary">Purchase</string>
<string name="payment_error">Error: %s</string>
+ <string name="payment_pending">Payment not completed, it will be
retried</string>
<string name="payment_balance_insufficient">Balance insufficient!</string>
<string name="payment_aborted">Aborted</string>
<string name="payment_failed">Failed</string>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-android] branch master updated (b490d94 -> 621351c), gnunet, 2024/03/06
- [taler-taler-android] 04/08: [wallet] Fix label of invoiced amount in peer pull credit tx, gnunet, 2024/03/06
- [taler-taler-android] 02/08: [wallet] Don't show JSON errors to non-devs, gnunet, 2024/03/06
- [taler-taler-android] 05/08: [wallet] Fix NullPointerException in base64 decoding of product image, gnunet, 2024/03/06
- [taler-taler-android] 03/08: [wallet] Fix serialization error of "pending" payments, gnunet, 2024/03/06
- [taler-taler-android] 07/08: [wallet] Add refresh-expired minor state, gnunet, 2024/03/06
- [taler-taler-android] 08/08: [wallet] Improve pending payments UX and error handling,
gnunet <=
- [taler-taler-android] 01/08: [wallet] More logical order of amounts, gnunet, 2024/03/06
- [taler-taler-android] 06/08: [wallet] Generalize some string resources, gnunet, 2024/03/06