From 7a1b9b780d2d845eac137a9b0623578fcc039e28 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Fri, 12 Apr 2024 13:25:16 -0600 Subject: [wallet] Show exchange accounts by priority bug 0008615 --- .../net/taler/wallet/transactions/Transactions.kt | 28 +++++++++++++++++++++- .../withdraw/TransactionWithdrawalComposable.kt | 1 + .../taler/wallet/withdraw/manual/ScreenTransfer.kt | 18 +++++++++++--- 3 files changed, 43 insertions(+), 4 deletions(-) (limited to 'wallet/src/main/java/net/taler') 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 f43db5f..7ccdbde 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt @@ -215,6 +215,16 @@ data class WithdrawalExchangeAccountDetails ( */ val paytoUri: String, + /** + * Status that indicates whether the account can be used + * by the user to send funds for a withdrawal. + * + * ok: account should be shown to the user + * error: account should not be shown to the user, UIs might render the error (in conversionError), + * especially in dev mode. + */ + val status: Status, + /** * Transfer amount. Might be in a different currency than the requested * amount for withdrawal. @@ -235,7 +245,23 @@ data class WithdrawalExchangeAccountDetails ( * exchange. */ val creditRestrictions: List? = null, -) + + /** + * Label given to the account or the account's bank by the exchange. + */ + val bankLabel: String? = null, + + val priority: Int? = null, +) { + @Serializable + enum class Status { + @SerialName("ok") + Ok, + + @SerialName("error") + Error; + } +} @Serializable sealed class AccountRestriction { diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt b/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt index 5155b5b..20f8280 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt @@ -129,6 +129,7 @@ fun TransactionWithdrawalComposablePreview() { WithdrawalExchangeAccountDetails( paytoUri = "payto://IBAN/1231231231", transferAmount = Amount.fromJSONString("NETZBON:42.23"), + status = WithdrawalExchangeAccountDetails.Status.Ok, currencySpecification = CurrencySpecification( name = "NETZBON", numFractionalInputDigits = 2, diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt index 0ea9208..7d0526c 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt @@ -53,6 +53,7 @@ import net.taler.wallet.compose.copyToClipBoard import net.taler.wallet.transactions.AmountType import net.taler.wallet.transactions.TransactionAmountComposable import net.taler.wallet.transactions.WithdrawalExchangeAccountDetails +import net.taler.wallet.transactions.WithdrawalExchangeAccountDetails.Status.* import net.taler.wallet.withdraw.TransferData import net.taler.wallet.withdraw.WithdrawStatus @@ -66,13 +67,20 @@ fun ScreenTransfer( // TODO: show some placeholder if (status.withdrawalTransfers.isEmpty()) return - val defaultTransfer = status.withdrawalTransfers[0] + val transfers = status.withdrawalTransfers.filter { + // TODO: in dev mode, show debug info when status is `Error' + it.withdrawalAccount.status == Ok + }.sortedByDescending { + it.withdrawalAccount.priority + } + + val defaultTransfer = transfers[0] var selectedTransfer by remember { mutableStateOf(defaultTransfer) } Column { if (status.withdrawalTransfers.size > 1) { TransferAccountChooser( - accounts = status.withdrawalTransfers.map { it.withdrawalAccount }, + accounts = transfers.map { it.withdrawalAccount }, selectedAccount = selectedTransfer.withdrawalAccount, onSelectAccount = { account -> status.withdrawalTransfers.find { @@ -236,7 +244,9 @@ fun TransferAccountChooser( selected = selectedAccount.paytoUri == account.paytoUri, onClick = { onSelectAccount(account) }, text = { - if (account.currencySpecification?.name != null) { + if (account.bankLabel != null) { + Text(account.bankLabel) + } else if (account.currencySpecification?.name != null) { Text(stringResource( R.string.withdraw_account_currency, index + 1, @@ -274,6 +284,7 @@ fun ScreenTransferPreview() { withdrawalAccount = WithdrawalExchangeAccountDetails( paytoUri = "https://taler.net/kudos", transferAmount = Amount("KUDOS", 10, 0), + status = WithdrawalExchangeAccountDetails.Status.Ok, currencySpecification = CurrencySpecification( "KUDOS", numFractionalInputDigits = 2, @@ -295,6 +306,7 @@ fun ScreenTransferPreview() { withdrawalAccount = WithdrawalExchangeAccountDetails( paytoUri = "https://taler.net/btc", transferAmount = Amount("BTC", 0, 14000000), + status = Ok, currencySpecification = CurrencySpecification( "Bitcoin", numFractionalInputDigits = 2, -- cgit v1.2.3