summaryrefslogtreecommitdiff
path: root/wallet/src/main/java
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-01-16 22:39:18 -0600
committerTorsten Grote <t@grobox.de>2023-01-17 12:05:23 -0300
commit9049e305ac376d7e04b8190c9f65f6efe24562b1 (patch)
tree581401754872dee0e03df1c541469cbd88ffc92d /wallet/src/main/java
parent0bf92f7636e27da2b30f680550f3ee9eaede56ec (diff)
downloadtaler-android-9049e305ac376d7e04b8190c9f65f6efe24562b1.tar.gz
taler-android-9049e305ac376d7e04b8190c9f65f6efe24562b1.tar.bz2
taler-android-9049e305ac376d7e04b8190c9f65f6efe24562b1.zip
[wallet] Initial implementation of KYC handling
#0007566
Diffstat (limited to 'wallet/src/main/java')
-rw-r--r--wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt3
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt16
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt22
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt15
4 files changed, 54 insertions, 2 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt b/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt
index e52fd4f..c87c28c 100644
--- a/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt
+++ b/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt
@@ -68,6 +68,9 @@ data class TalerErrorInfo(
// Error details
@Serializable(JSONObjectDeserializer::class)
val details: JSONObject? = null,
+
+ // KYC URL (in case KYC is required)
+ val kycUrl: String? = null,
) {
val userFacingMsg: String
get() {
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 b11f438..c4ec060 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt
@@ -32,6 +32,7 @@ import androidx.recyclerview.selection.SelectionTracker
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Adapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
+import com.google.android.material.button.MaterialButton
import net.taler.common.exhaustive
import net.taler.common.toRelativeTime
import net.taler.wallet.R
@@ -78,6 +79,7 @@ internal class TransactionAdapter(
private val icon: ImageView = v.findViewById(R.id.icon)
private val title: TextView = v.findViewById(R.id.title)
private val extraInfoView: TextView = v.findViewById(R.id.extraInfoView)
+ private val actionButton: MaterialButton = v.findViewById(R.id.actionButton)
private val time: TextView = v.findViewById(R.id.time)
private val amount: TextView = v.findViewById(R.id.amount)
private val pendingView: TextView = v.findViewById(R.id.pendingView)
@@ -95,6 +97,7 @@ internal class TransactionAdapter(
}
title.text = transaction.getTitle(context)
bindExtraInfo(transaction)
+ bindActionButton(transaction)
time.text = transaction.timestamp.ms.toRelativeTime(context)
bindAmount(transaction)
pendingView.visibility = if (transaction.pending) VISIBLE else GONE
@@ -123,6 +126,19 @@ 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
+ }
+
private fun bindAmount(transaction: Transaction) {
val amountStr = transaction.amountEffective.amountStr
when (transaction.amountType) {
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 ff8d272..feea5ba 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
@@ -22,6 +22,8 @@ import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
+import android.view.View.GONE
+import android.view.View.VISIBLE
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
@@ -57,6 +59,7 @@ class TransactionWithdrawalFragment : TransactionDetailFragment() {
ui.effectiveAmountLabel.text = getString(R.string.withdraw_total)
ui.effectiveAmountView.text = t.amountEffective.toString()
setupConfirmWithdrawalButton(t)
+ setupActionButton(t)
ui.chosenAmountLabel.text = getString(R.string.amount_chosen)
ui.chosenAmountView.text =
getString(R.string.amount_positive, t.amountRaw.toString())
@@ -103,8 +106,23 @@ class TransactionWithdrawalFragment : TransactionDetailFragment() {
findNavController().navigate(
R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success)
}
- } else ui.confirmWithdrawalButton.visibility = View.GONE
- } else ui.confirmWithdrawalButton.visibility = View.GONE
+ } 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
+ }
+ } ?: GONE
+ }
}
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 969b0de..f8c1047 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
@@ -16,6 +16,8 @@
package net.taler.wallet.transactions
+import android.content.Intent
+import android.net.Uri
import android.os.Bundle
import android.view.ActionMode
import android.view.LayoutInflater
@@ -39,12 +41,14 @@ import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL
import net.taler.common.Amount
import net.taler.common.fadeIn
import net.taler.common.fadeOut
+import net.taler.common.startActivitySafe
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
import net.taler.wallet.databinding.FragmentTransactionsBinding
interface OnTransactionClickListener {
fun onTransactionClicked(transaction: Transaction)
+ fun onActionButtonClicked(transaction: Transaction)
}
class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.Callback {
@@ -177,6 +181,17 @@ 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)
+ }
+ }
+ }
+ }
+
private fun onTransactionsResult(result: TransactionsResult) = when (result) {
is TransactionsResult.Error -> {
ui.list.fadeOut()