From 6622f7d7cf6a309af085a2fd1dea21c5ee6826d5 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 17 Jan 2023 12:19:39 -0300 Subject: [wallet] Clean up KYC handling a bit #0007566 --- wallet/src/main/java/net/taler/wallet/Utils.kt | 12 +++++++++++ .../wallet/transactions/TransactionAdapter.kt | 16 ++++++--------- .../transactions/TransactionWithdrawalFragment.kt | 23 ++++++++++------------ .../wallet/transactions/TransactionsFragment.kt | 11 ++++------- .../net/taler/wallet/withdraw/WithdrawManager.kt | 2 ++ 5 files changed, 34 insertions(+), 30 deletions(-) (limited to 'wallet/src/main/java/net/taler') diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt b/wallet/src/main/java/net/taler/wallet/Utils.kt index 7edc694..d5abca2 100644 --- a/wallet/src/main/java/net/taler/wallet/Utils.kt +++ b/wallet/src/main/java/net/taler/wallet/Utils.kt @@ -31,6 +31,9 @@ import androidx.annotation.RequiresApi import androidx.core.content.getSystemService import net.taler.common.Amount import net.taler.common.AmountParserException +import net.taler.wallet.backend.TalerErrorInfo +import net.taler.wallet.transactions.Transaction +import net.taler.wallet.withdraw.ERROR_KYC const val CURRENCY_BTC = "BITCOINBTC" @@ -96,3 +99,12 @@ fun getAmount(currency: String, text: String): Amount? { null } } + +fun Transaction.handleKyc(notRequired: () -> T, required: (TalerErrorInfo) -> T): T { + return error?.let { error -> + when (error.code) { + ERROR_KYC -> required(error) + else -> notRequired() + } + } ?: notRequired() +} diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt index c4ec060..fa30f5c 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt @@ -36,6 +36,7 @@ import com.google.android.material.button.MaterialButton import net.taler.common.exhaustive import net.taler.common.toRelativeTime import net.taler.wallet.R +import net.taler.wallet.handleKyc import net.taler.wallet.transactions.TransactionAdapter.TransactionViewHolder internal class TransactionAdapter( @@ -127,16 +128,11 @@ internal class TransactionAdapter( } private fun bindActionButton(transaction: Transaction) { - actionButton.setOnClickListener { listener.onActionButtonClicked(transaction) } - actionButton.visibility = transaction.error?.let { error -> - when (error.code) { - 7025 -> { // KYC - actionButton.setText(R.string.transaction_action_kyc) - VISIBLE - } - else -> GONE - } - } ?: GONE + actionButton.visibility = transaction.handleKyc({ GONE }) { + actionButton.setOnClickListener { listener.onActionButtonClicked(transaction) } + actionButton.setText(R.string.transaction_action_kyc) + VISIBLE + } } private fun bindAmount(transaction: Transaction) { 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 feea5ba..31c70b5 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt @@ -33,6 +33,7 @@ import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.cleanExchange import net.taler.wallet.databinding.FragmentTransactionWithdrawalBinding +import net.taler.wallet.handleKyc import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi import net.taler.wallet.withdraw.createManualTransferRequired @@ -104,25 +105,21 @@ class TransactionWithdrawalFragment : TransactionDetailFragment() { ) withdrawManager.viewManualWithdrawal(status) findNavController().navigate( - R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success) + R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success + ) } } else ui.confirmWithdrawalButton.visibility = GONE } else ui.confirmWithdrawalButton.visibility = GONE } private fun setupActionButton(t: TransactionWithdrawal) { - ui.actionButton.visibility = t.error?.let { error -> - when (error.code) { - 7025 -> { // KYC - ui.actionButton.setText(R.string.transaction_action_kyc) - val i = Intent(ACTION_VIEW).apply { - data = Uri.parse(error.kycUrl) - } - ui.actionButton.setOnClickListener { startActivitySafe(i) } - VISIBLE - } - else -> GONE + ui.actionButton.visibility = t.handleKyc({ GONE }) { + ui.actionButton.setText(R.string.transaction_action_kyc) + val i = Intent(ACTION_VIEW).apply { + data = Uri.parse(it.kycUrl) } - } ?: GONE + ui.actionButton.setOnClickListener { startActivitySafe(i) } + VISIBLE + } } } 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 f8c1047..20da36b 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt @@ -45,6 +45,7 @@ import net.taler.common.startActivitySafe import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.databinding.FragmentTransactionsBinding +import net.taler.wallet.handleKyc interface OnTransactionClickListener { fun onTransactionClicked(transaction: Transaction) @@ -182,13 +183,9 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. } override fun onActionButtonClicked(transaction: Transaction) { - transaction.error?.let {error -> - when (error.code) { - 7025 -> { // KYC - val i = Intent(Intent.ACTION_VIEW, Uri.parse(error.kycUrl)) - startActivitySafe(i) - } - } + transaction.handleKyc({ error("Unhandled Action Button Event") }) { + val i = Intent(Intent.ACTION_VIEW, Uri.parse(it.kycUrl)) + startActivitySafe(i) } } diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt index 1698a10..326c9d8 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt @@ -35,6 +35,8 @@ import net.taler.wallet.exchanges.ExchangeFees import net.taler.wallet.exchanges.ExchangeItem import net.taler.wallet.withdraw.WithdrawStatus.ReceivedDetails +const val ERROR_KYC = 7025 + sealed class WithdrawStatus { data class Loading(val talerWithdrawUri: String? = null) : WithdrawStatus() data class NeedsExchange(val exchangeSelection: Event) : WithdrawStatus() -- cgit v1.2.3