diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-02-28 10:03:24 -0600 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2024-02-29 11:17:06 -0300 |
commit | 53163f914e8173239188beb01da2570642041b6a (patch) | |
tree | 20d500718488adc6a5570907d5328b49b3fcd8dc /wallet | |
parent | 5d0b4a4bfda22d6a7c4664baa91c6046303bda4a (diff) | |
download | taler-android-53163f914e8173239188beb01da2570642041b6a.tar.gz taler-android-53163f914e8173239188beb01da2570642041b6a.tar.bz2 taler-android-53163f914e8173239188beb01da2570642041b6a.zip |
[wallet] Add proper rendering for x-taler-bank URIs
bug 0008532
Diffstat (limited to 'wallet')
4 files changed, 135 insertions, 8 deletions
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 231091f..d5438f2 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt @@ -91,11 +91,22 @@ sealed class TransferData { val currency get() = withdrawalAccount.transferAmount?.currency + data class Taler( + override val subject: String, + override val amountRaw: Amount, + override val amountEffective: Amount, + override val withdrawalAccount: WithdrawalExchangeAccountDetails, + val receiverName: String? = null, + val bankUrl: String, + val account: String, + ): TransferData() + data class IBAN( override val subject: String, override val amountRaw: Amount, override val amountEffective: Amount, override val withdrawalAccount: WithdrawalExchangeAccountDetails, + val receiverName: String? = null, val iban: String, ): TransferData() @@ -353,7 +364,7 @@ fun createManualTransferRequired( transactionAmountRaw = amountRaw, transactionAmountEffective = amountEffective, exchangeBaseUrl = exchangeBaseUrl, - withdrawalTransfers = withdrawalAccountList.map { + withdrawalTransfers = withdrawalAccountList.mapNotNull { val uri = Uri.parse(it.paytoUri.replace("receiver-name=", "receiver_name=")) if ("bitcoin".equals(uri.authority, true)) { val msg = uri.getQueryParameter("message").orEmpty() @@ -368,13 +379,25 @@ fun createManualTransferRequired( amountEffective = amountEffective, withdrawalAccount = it.copy(paytoUri = uri.toString()) ) - } else TransferData.IBAN( - iban = uri.lastPathSegment!!, - subject = uri.getQueryParameter("message") ?: "Error: No message in URI", - amountRaw = amountRaw, - amountEffective = amountEffective, - withdrawalAccount = it.copy(paytoUri = uri.toString()) - ) + } else if (uri.authority.equals("x-taler-bank", true)) { + TransferData.Taler( + account = uri.lastPathSegment!!, + bankUrl = uri.pathSegments.first(), + receiverName = uri.getQueryParameter("receiver_name"), + subject = uri.getQueryParameter("message") ?: "Error: No message in URI", + amountRaw = amountRaw, + amountEffective = amountEffective, + withdrawalAccount = it.copy(paytoUri = uri.toString()), + ) + } else if (uri.authority.equals("iban", true)) { + TransferData.IBAN( + iban = uri.lastPathSegment!!, + subject = uri.getQueryParameter("message") ?: "Error: No message in URI", + amountRaw = amountRaw, + amountEffective = amountEffective, + withdrawalAccount = it.copy(paytoUri = uri.toString()), + ) + } else null }, ) 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 19cfbdb..b9fd9dd 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 @@ -86,6 +86,13 @@ fun ScreenTransfer( horizontalAlignment = Alignment.CenterHorizontally, ) { when (val transfer = selectedTransfer) { + is TransferData.Taler -> TransferTaler( + transfer = transfer, + exchangeBaseUrl = status.exchangeBaseUrl, + transactionAmountRaw = status.transactionAmountRaw, + transactionAmountEffective = status.transactionAmountEffective, + ) + is TransferData.IBAN -> TransferIBAN( transfer = transfer, exchangeBaseUrl = status.exchangeBaseUrl, diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt new file mode 100644 index 0000000..e15af89 --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt @@ -0,0 +1,94 @@ +/* + * This file is part of GNU Taler + * (C) 2024 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +package net.taler.wallet.withdraw.manual + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import net.taler.common.Amount +import net.taler.wallet.R +import net.taler.wallet.cleanExchange +import net.taler.wallet.transactions.TransactionInfoComposable +import net.taler.wallet.withdraw.TransferData + +@Composable +fun TransferTaler( + transfer: TransferData.Taler, + exchangeBaseUrl: String, + transactionAmountRaw: Amount, + transactionAmountEffective: Amount, +) { + Column( + modifier = Modifier.padding(all = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Text( + text = stringResource( + R.string.withdraw_manual_ready_intro, + transfer.amountRaw.toString()), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier + .padding(vertical = 8.dp) + ) + + Text( + text = stringResource(R.string.withdraw_manual_ready_warning), + style = MaterialTheme.typography.bodyMedium, + color = colorResource(R.color.notice_text), + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(all = 8.dp) + .background(colorResource(R.color.notice_background)) + .border(BorderStroke(2.dp, colorResource(R.color.notice_border))) + .padding(all = 16.dp) + ) + + transfer.receiverName?.let { + DetailRow(stringResource(R.string.withdraw_manual_ready_receiver), it) + } + DetailRow(stringResource(R.string.withdraw_manual_ready_account), transfer.account) + DetailRow(stringResource(R.string.withdraw_manual_ready_subject), transfer.subject) + + TransactionInfoComposable( + label = stringResource(R.string.withdraw_bank), + info = cleanExchange(transfer.bankUrl), + ) + + TransactionInfoComposable( + label = stringResource(R.string.withdraw_exchange), + info = cleanExchange(exchangeBaseUrl), + ) + + transfer.withdrawalAccount.transferAmount?.let { amount -> + WithdrawalAmountTransfer( + amountRaw = transactionAmountRaw, + amountEffective = transactionAmountEffective, + conversionAmountRaw = amount, + ) + } + } +}
\ No newline at end of file diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml index 15461c7..4f580af 100644 --- a/wallet/src/main/res/values/strings.xml +++ b/wallet/src/main/res/values/strings.xml @@ -195,6 +195,7 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="withdraw_restrict_age">Restrict Usage to Age</string> <string name="withdraw_restrict_age_unrestricted">Unrestricted</string> <string name="withdraw_exchange">Exchange</string> + <string name="withdraw_bank">Bank</string> <string name="withdraw_button_confirm">Confirm Withdraw</string> <string name="withdraw_button_confirm_bank">Confirm with bank</string> <string name="withdraw_button_tos">Review Terms</string> @@ -210,6 +211,8 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="withdraw_manual_bitcoin_title">Bitcoin exchange ready for withdrawal</string> <string name="withdraw_manual_bitcoin_intro">Now make a split transaction with the following three outputs.</string> <string name="withdraw_manual_ready_iban">IBAN</string> + <string name="withdraw_manual_ready_account">Account</string> + <string name="withdraw_manual_ready_receiver">Receiver name</string> <string name="withdraw_manual_ready_subject">Subject</string> <string name="withdraw_manual_ready_bank_button">Open in banking app</string> <string name="withdraw_manual_ready_cancel">Cancel withdrawal</string> |