taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 6622f7d7cf6a309af085a2fd1dea21c5ee6826d5
parent 9049e305ac376d7e04b8190c9f65f6efe24562b1
Author: Torsten Grote <t@grobox.de>
Date:   Tue, 17 Jan 2023 12:19:39 -0300

[wallet] Clean up KYC handling a bit

#0007566

Diffstat:
Mwallet/src/main/java/net/taler/wallet/Utils.kt | 12++++++++++++
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt | 16++++++----------
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt | 23++++++++++-------------
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt | 11++++-------
Mwallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt | 2++
5 files changed, 34 insertions(+), 30 deletions(-)

diff --git 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 <T> 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 @@ -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 @@ -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 @@ -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 @@ -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<ExchangeSelection>) : WithdrawStatus()