diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-03-06 10:36:30 -0600 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2024-03-06 14:18:57 -0300 |
commit | 621351c4c9a68e7b14e64e77b5717016be302aa2 (patch) | |
tree | d29d098a09b697988051ae04ba139346cc632597 /wallet/src/main/java/net | |
parent | 917a0175af8493b893486c0b6b2a001ce1b952c6 (diff) | |
download | taler-android-621351c4c9a68e7b14e64e77b5717016be302aa2.tar.gz taler-android-621351c4c9a68e7b14e64e77b5717016be302aa2.tar.bz2 taler-android-621351c4c9a68e7b14e64e77b5717016be302aa2.zip |
[wallet] Improve pending payments UX and error handling
Diffstat (limited to 'wallet/src/main/java/net')
4 files changed, 23 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) |