From 8372c75bbb59c295f25c830fbdc08006e97c2e4c Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Wed, 1 Nov 2023 17:52:26 -0600 Subject: [wallet] Upgrade KYC to new API --- wallet/src/main/java/net/taler/wallet/Utils.kt | 11 -------- .../wallet/transactions/ActionButtonComposable.kt | 29 ++++++++-------------- .../transactions/TransactionWithdrawalFragment.kt | 8 +++--- .../net/taler/wallet/transactions/Transactions.kt | 1 + .../wallet/transactions/TransactionsFragment.kt | 24 ++---------------- 5 files changed, 17 insertions(+), 56 deletions(-) diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt b/wallet/src/main/java/net/taler/wallet/Utils.kt index d1cdf8c..8b34531 100644 --- a/wallet/src/main/java/net/taler/wallet/Utils.kt +++ b/wallet/src/main/java/net/taler/wallet/Utils.kt @@ -40,9 +40,7 @@ import net.taler.common.Amount import net.taler.common.AmountParserException import net.taler.common.showError import net.taler.common.startActivitySafe -import net.taler.wallet.backend.TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED import net.taler.wallet.backend.TalerErrorInfo -import net.taler.wallet.transactions.Transaction const val CURRENCY_BTC = "BITCOINBTC" @@ -115,15 +113,6 @@ fun Context.getAttrColor(attr: Int): Int { return value.data } -fun Transaction.handleKyc(notRequired: () -> T, required: (TalerErrorInfo) -> T): T { - return error?.let { error -> - when (error.code) { - WALLET_WITHDRAWAL_KYC_REQUIRED -> required(error) - else -> notRequired() - } - } ?: notRequired() -} - fun launchInAppBrowser(context: Context, url: String) { val builder = CustomTabsIntent.Builder() val intent = builder.build().intent diff --git a/wallet/src/main/java/net/taler/wallet/transactions/ActionButtonComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/ActionButtonComposable.kt index d4c12aa..778b985 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/ActionButtonComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/ActionButtonComposable.kt @@ -28,9 +28,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import net.taler.wallet.R -import net.taler.wallet.backend.TalerErrorCode +import net.taler.wallet.transactions.TransactionMajorState.Pending +import net.taler.wallet.transactions.TransactionMinorState.BankConfirmTransfer +import net.taler.wallet.transactions.TransactionMinorState.KycRequired import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer -import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi interface ActionListener { enum class Type { @@ -48,25 +49,15 @@ fun ActionButton( tx: TransactionWithdrawal, listener: ActionListener, ) { - if (tx.error != null) { - // There is an error! - when (tx.error.code) { - TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED -> { - KycButton(modifier, tx, listener) - } + // TODO: translate manual transfer to DD37 equivalent + if (tx.error == null && !tx.confirmed && tx.withdrawalDetails is ManualTransfer) { + ConfirmManualButton(modifier, tx, listener) + } else if (tx.txState.major == Pending) { + when (tx.txState.minor) { + KycRequired -> KycButton(modifier, tx, listener) + BankConfirmTransfer -> ConfirmBankButton(modifier, tx, listener) else -> {} } - } else if (!tx.confirmed) { - // There is a transaction! - if (tx.withdrawalDetails is TalerBankIntegrationApi && - tx.withdrawalDetails.bankConfirmationUrl != null - ) { - // The transaction can be completed with a link! - ConfirmBankButton(modifier, tx, listener) - } else if (tx.withdrawalDetails is ManualTransfer) { - // The transaction must be completed manually! - ConfirmManualButton(modifier, tx, listener) - } } } diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt index 52bd998..0cd6d60 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt @@ -28,7 +28,6 @@ import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.compose.TalerSurface import net.taler.wallet.launchInAppBrowser -import net.taler.wallet.showError import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi import net.taler.wallet.withdraw.TransactionWithdrawalComposable @@ -61,9 +60,10 @@ class TransactionWithdrawalFragment : TransactionDetailFragment(), ActionListene override fun onActionButtonClicked(tx: Transaction, type: ActionListener.Type) { when (type) { ActionListener.Type.COMPLETE_KYC -> { - tx.error?.getStringExtra("kycUrl")?.let { kycUrl -> - launchInAppBrowser(requireContext(), kycUrl) - } ?: tx.error?.let { showError(it) } + if (tx !is TransactionWithdrawal) return + tx.kycUrl?.let { + launchInAppBrowser(requireContext(), it) + } } ActionListener.Type.CONFIRM_WITH_BANK -> { diff --git a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt index 6b1d135..e7f17c0 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt @@ -155,6 +155,7 @@ class TransactionWithdrawal( override val timestamp: Timestamp, override val txState: TransactionState, override val txActions: List, + val kycUrl: String? = null, val exchangeBaseUrl: String, val withdrawalDetails: WithdrawalDetails, override val error: TalerErrorInfo? = null, diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt index 032f2de..2f00bf8 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt @@ -44,13 +44,12 @@ import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.TAG import net.taler.wallet.databinding.FragmentTransactionsBinding -import net.taler.wallet.handleKyc -import net.taler.wallet.launchInAppBrowser import net.taler.wallet.showError +import net.taler.wallet.transactions.TransactionMajorState.* +import net.taler.wallet.transactions.TransactionMinorState.* interface OnTransactionClickListener { fun onTransactionClicked(transaction: Transaction) - fun onActionButtonClicked(transaction: Transaction) } class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.Callback { @@ -183,25 +182,6 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. } } - override fun onActionButtonClicked(transaction: Transaction) { - if (transaction.error != null) { - transaction.handleKyc({ error("Unhandled Action Button Event") }) { error -> - error.getStringExtra("kycUrl")?.let { - launchInAppBrowser(requireContext(), it) - } - } - } else if (transaction is TransactionWithdrawal && !transaction.confirmed) { - if (transaction.withdrawalDetails is WithdrawalDetails.TalerBankIntegrationApi && - transaction.withdrawalDetails.bankConfirmationUrl != null - ) { - launchInAppBrowser( - context = requireContext(), - url = transaction.withdrawalDetails.bankConfirmationUrl, - ) - } - } - } - private fun onTransactionsResult(result: TransactionsResult) = when (result) { is TransactionsResult.Error -> { ui.list.fadeOut() -- cgit v1.2.3