commit 67d766bbfd44ef5648faa1861359e8dd0c8e2b62
parent 0b400a106c49f0b4c83e35d8d81c5a574210d900
Author: Iván Ávalos <avalos@disroot.org>
Date: Thu, 21 Nov 2024 15:05:02 +0100
[android] QC: clarify that deposit must be to your own bank account + show exchange URL in peer-push-credit
Diffstat:
6 files changed, 101 insertions(+), 28 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/compose/WarningLabel.kt b/wallet/src/main/java/net/taler/wallet/compose/WarningLabel.kt
@@ -0,0 +1,45 @@
+/*
+ * 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.compose
+
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+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.Modifier
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.unit.dp
+import net.taler.wallet.R
+
+@Composable
+fun WarningLabel(
+ label: String,
+ modifier: Modifier = Modifier,
+) {
+ Text(
+ text = label,
+ style = MaterialTheme.typography.bodyMedium,
+ color = colorResource(R.color.notice_text),
+ modifier = modifier
+ .background(colorResource(R.color.notice_background))
+ .border(BorderStroke(2.dp, colorResource(R.color.notice_border)))
+ .padding(all = 16.dp)
+ )
+}
+\ No newline at end of file
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
@@ -53,6 +53,7 @@ import net.taler.wallet.R
import net.taler.wallet.backend.TalerErrorCode
import net.taler.wallet.backend.TalerErrorInfo
import net.taler.wallet.compose.AmountCurrencyField
+import net.taler.wallet.compose.WarningLabel
import net.taler.wallet.peer.OutgoingError
import net.taler.wallet.peer.PeerErrorComposable
import net.taler.wallet.transactions.AmountType.Negative
@@ -152,6 +153,11 @@ fun MakeDepositComposable(
)
}
+ WarningLabel(
+ modifier = Modifier.padding(16.dp),
+ label = stringResource(R.string.send_deposit_account_warning),
+ )
+
when(selectedWireType) {
WireType.IBAN -> {
var ibanError by rememberSaveable { mutableStateOf(false) }
@@ -344,7 +350,22 @@ fun PreviewMakeDepositComposable() {
defaultCurrency = "KUDOS",
currencies = listOf("KUDOS", "TESTKUDOS", "NETZBON"),
getCurrencySpec = { null },
- getDepositWireTypes = { GetDepositWireTypesForCurrencyResponse(listOf(), listOf())},
+ getDepositWireTypes = { GetDepositWireTypesForCurrencyResponse(
+ wireTypes = listOf(
+ WireType.IBAN,
+ WireType.TalerBank,
+ ),
+ wireTypeDetails = listOf(
+ WireTypeDetails(
+ paymentTargetType = WireType.IBAN,
+ talerBankHostnames = listOf("bank.test.taler.net")
+ ),
+ WireTypeDetails(
+ paymentTargetType = WireType.TalerBank,
+ talerBankHostnames = listOf("bank.test.taler.net")
+ ),
+ ),
+ )},
checkDeposit = { _, _ -> CheckDepositResult.Success(
totalDepositCost = Amount.fromJSONString("KUDOS:10"),
effectiveDepositAmount = Amount.fromJSONString("KUDOS:12"),
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt
@@ -38,7 +38,6 @@ import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import kotlinx.serialization.json.JsonPrimitive
@@ -48,12 +47,14 @@ import net.taler.wallet.BottomInsetsSpacer
import net.taler.wallet.R
import net.taler.wallet.backend.TalerErrorCode
import net.taler.wallet.backend.TalerErrorInfo
+import net.taler.wallet.cleanExchange
import net.taler.wallet.compose.AmountCurrencyField
import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.exchanges.ExchangeTosStatus
import net.taler.wallet.peer.CheckFeeResult.InsufficientBalance
import net.taler.wallet.peer.CheckFeeResult.None
import net.taler.wallet.peer.CheckFeeResult.Success
+import net.taler.wallet.transactions.TransactionInfoComposable
import net.taler.wallet.useDebounce
import kotlin.random.Random
@@ -173,20 +174,14 @@ fun OutgoingPushIntroComposable(
MaterialTheme.colorScheme.error
} else Color.Unspecified,
)
- }
- )
-
- Text(
- modifier = Modifier
- .fillMaxWidth()
- .padding(top = 5.dp),
- color = if (subject.isBlank()) MaterialTheme.colorScheme.error else Color.Unspecified,
- text = stringResource(R.string.char_count, subject.length, MAX_LENGTH_SUBJECT),
- textAlign = TextAlign.End,
+ },
+ supportingText = {
+ Text(stringResource(R.string.char_count, subject.length, MAX_LENGTH_SUBJECT))
+ },
)
Text(
- modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp),
+ modifier = Modifier.padding(top = 8.dp, start = 16.dp, end = 16.dp),
text = stringResource(R.string.send_peer_expiration_period),
style = MaterialTheme.typography.bodyMedium,
)
@@ -194,12 +189,26 @@ fun OutgoingPushIntroComposable(
var option by rememberSaveable { mutableStateOf(DEFAULT_EXPIRY) }
var hours by rememberSaveable { mutableLongStateOf(DEFAULT_EXPIRY.hours) }
ExpirationComposable(
- modifier = Modifier.padding(top = 8.dp, bottom = 16.dp),
+ modifier = Modifier.padding(vertical = 8.dp),
option = option,
hours = hours,
onOptionChange = { option = it }
) { hours = it }
+ AnimatedVisibility(feeResult is Success) {
+ (feeResult as? Success)?.let {
+ Column(
+ modifier = Modifier.padding(bottom = 8.dp),
+ horizontalAlignment = CenterHorizontally,
+ ) {
+ TransactionInfoComposable(
+ label = stringResource(id = R.string.withdraw_exchange),
+ info = cleanExchange(it.exchangeBaseUrl),
+ )
+ }
+ }
+ }
+
Button(
enabled = feeResult is Success && subject.isNotBlank(),
onClick = { onSend(amount, subject, hours) },
@@ -223,6 +232,7 @@ fun PeerPushComposableCreatingPreview() {
getFees = { Success(
amountEffective = Amount.fromJSONString("KUDOS:10"),
amountRaw = Amount.fromJSONString("KUDOS:12"),
+ exchangeBaseUrl = "https://exchange.demo.taler.net"
) },
onSend = { _, _, _ -> },
onClose = {},
@@ -244,6 +254,7 @@ fun PeerPushComposableCheckingPreview() {
amountEffective = Amount.fromJSONString("KUDOS:10"),
amountRaw = Amount.fromJSONString("KUDOS:12"),
maxDepositAmountEffective = Amount.fromJSONString("KUDOS:12"),
+ exchangeBaseUrl = "https://exchange.demo.taler.net"
) },
onSend = { _, _, _ -> },
onClose = {},
@@ -267,6 +278,7 @@ fun PeerPushComposableCheckedPreview() {
amountEffective = Amount.fromJSONString("KUDOS:10"),
amountRaw = Amount.fromJSONString("KUDOS:12"),
maxDepositAmountEffective = Amount.fromJSONString("KUDOS:12"),
+ exchangeBaseUrl = "https://exchange.demo.taler.net"
) },
onSend = { _, _, _ -> },
onClose = {},
@@ -289,6 +301,7 @@ fun PeerPushComposableErrorPreview() {
amountEffective = Amount.fromJSONString("KUDOS:10"),
amountRaw = Amount.fromJSONString("KUDOS:12"),
maxDepositAmountEffective = Amount.fromJSONString("KUDOS:12"),
+ exchangeBaseUrl = "https://exchange.demo.taler.net"
) },
onSend = { _, _, _ -> },
onClose = {},
diff --git a/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
@@ -63,6 +63,7 @@ sealed class CheckFeeResult {
data class Success(
val amountRaw: Amount,
val amountEffective: Amount,
+ val exchangeBaseUrl: String,
override val maxDepositAmountEffective: Amount? = null,
): CheckFeeResult()
}
@@ -153,6 +154,7 @@ class PeerManager(
amountRaw = it.amountRaw,
amountEffective = it.amountEffective,
maxDepositAmountEffective = max?.effectiveAmount,
+ exchangeBaseUrl = it.exchangeBaseUrl,
)
}.onError { error ->
Log.e(TAG, "got checkPeerPushDebit error result $error")
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt
@@ -16,9 +16,6 @@
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
@@ -26,12 +23,12 @@ 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.compose.WarningLabel
import net.taler.wallet.transactions.TransactionInfoComposable
import net.taler.wallet.withdraw.TransferData
@@ -61,16 +58,9 @@ fun TransferIBAN(
.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)
+ WarningLabel(
+ modifier = Modifier.padding(8.dp),
+ label = stringResource(R.string.withdraw_manual_ready_warning),
)
DetailRow(
diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml
@@ -215,6 +215,7 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card
<string name="pay_peer_intro">Do you want to pay this request?</string>
<string name="pay_peer_title">Pay request</string>
<string name="send_deposit_account">Account</string>
+ <string name="send_deposit_account_warning">You must enter an account that you control, otherwise you will not be able to fulfill the regulatory requirements.</string>
<string name="send_deposit_bitcoin_address">Bitcoin address</string>
<string name="send_deposit_bitcoin_create_button">Transfer Bitcoin</string>
<string name="send_deposit_button_label">Deposit</string>