diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt index ec26567f..4aaa2a8d 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt @@ -57,7 +57,7 @@ fun ColumnScope.WithdrawalTransfers( } KycRequired -> if (tx.kycUrl != null) { - ConfirmKycButton { + ConfirmKycButton(underReview = tx.kycUnderReview) { onConfirmKyc(tx.kycUrl) } } @@ -130,7 +130,7 @@ fun ColumnScope.DepositActions( } KycRequired -> if (tx.kycUrl != null) { - ConfirmKycButton { + ConfirmKycButton(underReview = tx.kycUnderReview) { onConfirmKyc(tx.kycUrl) } } @@ -151,7 +151,7 @@ fun ColumnScope.PeerActions( } ?: return if (tx.txState.minor == KycRequired) { - ConfirmKycButton { onConfirmKyc(kycUrl) } + ConfirmKycButton(underReview = tx.kycUnderReview) { onConfirmKyc(kycUrl) } } } @@ -196,7 +196,7 @@ private fun ShowQrCodesButton(onClick: () -> Unit) { } @Composable -private fun ConfirmKycButton(onClick: () -> Unit) { +private fun ConfirmKycButton(underReview: Boolean = false, onClick: () -> Unit) { Button(onClick) { Icon( Icons.Default.Link, @@ -204,6 +204,8 @@ private fun ConfirmKycButton(onClick: () -> Unit) { modifier = Modifier.size(ButtonDefaults.IconSize) ) Spacer(Modifier.size(ButtonDefaults.IconSpacing)) - Text(stringResource(R.string.transaction_action_kyc)) + Text(stringResource( + if (underReview) R.string.transaction_action_kyc_status else R.string.transaction_action_kyc + )) } } \ No newline at end of file diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt index c658eab3..4ba5ca73 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt @@ -426,7 +426,7 @@ fun TransactionPeerComposable( .verticalScroll(scrollState), horizontalAlignment = Alignment.CenterHorizontally, ) { - TransactionStateComposable(state = t.txState) + TransactionStateComposable(state = t.txState, tx = t) Text( modifier = Modifier.padding(16.dp), diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt index 972e1911..66b8de29 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt @@ -61,7 +61,10 @@ fun TransactionStateComposable( state: TransactionState, tx: Transaction? = null, ) { - val message = when (state) { + val underReview = tx?.kycUnderReview == true && state.major == Pending + val message = if (underReview) { + stringResource(R.string.transaction_state_pending_kyc_review) + } else when (state) { TransactionState(Done) -> stringResource(R.string.transaction_state_done) TransactionState(Pending, BankConfirmTransfer) -> stringResource(R.string.transaction_state_pending_bank) TransactionState(Pending, KycInit) -> stringResource(R.string.transaction_preparing_kyc) 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 d5d397c5..7f26ae7c 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt @@ -133,6 +133,18 @@ sealed class Transaction { } @Serializable +/** + * The exchange reports that it is reviewing the user's KYC information, + * so there is nothing the user can do but wait. + */ +val Transaction.kycUnderReview: Boolean + get() = when (this) { + is TransactionWithdrawal -> kycAmlReview == true + is TransactionPeerPullCredit -> kycAmlReview == true + is TransactionPeerPushCredit -> kycAmlReview == true + else -> false + } + enum class TransactionAction { // Common States @SerialName("delete") @@ -168,6 +180,7 @@ data class TransactionWithdrawal( override val txState: TransactionState, override val txActions: List, val kycUrl: String? = null, + val kycAmlReview: Boolean? = null, val exchangeBaseUrl: String? = null, val withdrawalDetails: WithdrawalDetails, override val error: TalerErrorInfo? = null, @@ -625,6 +638,7 @@ data class TransactionPeerPullCredit( override val txState: TransactionState, override val txActions: List, val kycUrl: String? = null, + val kycAmlReview: Boolean? = null, val exchangeBaseUrl: String, override val error: TalerErrorInfo? = null, override val amountRaw: Amount, @@ -693,6 +707,7 @@ data class TransactionPeerPushCredit( override val txState: TransactionState, override val txActions: List, val kycUrl: String? = null, + val kycAmlReview: Boolean? = null, val exchangeBaseUrl: String, override val error: TalerErrorInfo? = null, override val amountRaw: Amount, diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml index 89750709..8f11e499 100644 --- a/wallet/src/main/res/values/strings.xml +++ b/wallet/src/main/res/values/strings.xml @@ -183,6 +183,7 @@ GNU Taler is immune to many types of fraud such as credit card data theft, phish Complete KYC + View verification status Loss of funds Deposit Deposit to %1$s @@ -212,6 +213,7 @@ GNU Taler is immune to many types of fraud such as credit card data theft, phish This transaction is pending Waiting for authorization in the bank This transaction would exceed a limit set by the payment service. To increase the limit, follow the instructions linked below. + The payment service is reviewing your information. Please wait. You need to prove having control over the bank account for the deposit. To continue, follow the instructions linked below. This transaction is suspended Abort