View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0012107 | Taler | wallet (Android App) | public | 2026-11-11 02:07 | 2026-11-11 02:07 |
| Reporter | bot-cg [agent] | Assigned To | Resolution deadline | ||
| Implementer | Reviewer | ||||
| Release signed by | Deployed by | ||||
| Verifier | Communicator | CM_7 | |||
| Data protection authority notification required | No | ||||
| CSIRT notification required | No | ||||
| Estimated effort (hours) | Actual effort (hours) | 0 | |||
| Fast-track | No | ||||
| Work package | none | ||||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | new | Resolution | open | ||
| Summary | 0012107: Android: no warning when a withdrawal will create very many coins (numCoins from wallet-core ignored) | ||||
| Description | wallet-core tells the UI how many coins a withdrawal will create (getWithdrawalDetailsForAmount.numCoins; taler-util documents "The UIs should warn if this number is too high (roughly at >100)"). Android ignores it: a withdrawal of hundreds or thousands of coins looks like any other, although it takes much longer to complete. What the user sees for KUDOS 9.99 at https://tripwire.taler.net:8445/ (denominations 0.01, 1 and 10, so 9 + 99 = 108 coins), same withdraw-exchange link on all three: - iOS: "Note: It will take some time to prepare this amount. Be patient..." below the amount (before-ios-1.png); above 199 coins "...quite some time...", above 999 "Amount too big for a single withdrawal!" with the button disabled (Views/Actions/Banking/QuiteSomeCoins.swift:12-18, 90-98). - WebExtension: review screen card "This withdrawal creates more than 100 digital coins and may take longer than usual." (before-web-1.png; routes/withdrawal-review-model.ts:109-112). - Android: amount and "Confirm withdrawal", nothing else (before-android-1.png). Code (origin/master 4c483527): wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt:190-217 (WithdrawalDetailsForAmount does not decode numCoins); withdraw/WithdrawalShowInfo.kt:199-361 (no hint). No Android code reads numCoins. Patch (android-many-coins-warning.patch): decode numCoins (optional) and show a WarningLabel "This withdrawal creates more than 100 digital coins and may take longer than usual." (web wording) below the amount when it is above 100, for bank-integrated and manual withdrawals. One new English string. (iOS additionally refuses more than 999 coins; not copied, since web does not either.) Verified: :wallet:assembleFdroidSim builds; after-android-1.png (KUDOS 9.99: warning shown), after-android-2-few-coins.png (KUDOS 5: no warning). Assisted by LLM | ||||
| Steps To Reproduce | Open taler://withdraw-exchange/tripwire.taler.net:8445/?a=KUDOS%3A9.99, accept the ToS, look at the confirmation screen. | ||||
| Tags | No tags attached. | ||||
| Attached Files | android-many-coins-warning.patch (3,186 bytes)
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 f2862adc..965fd93b 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
@@ -214,6 +214,12 @@ data class WithdrawalDetailsForAmount(
* Scope info of the currency withdrawn.
*/
val scopeInfo: ScopeInfo,
+
+ /**
+ * Number of coins that would be withdrawn.
+ * wallet-core asks UIs to warn when this is high (roughly > 100).
+ */
+ val numCoins: Int? = null,
)
@Serializable
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawalShowInfo.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawalShowInfo.kt
index 7bc37929..eb3293e6 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawalShowInfo.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawalShowInfo.kt
@@ -73,6 +73,9 @@ import net.taler.wallet.withdraw.WithdrawStatus.Status.TosReviewRequired
import net.taler.wallet.withdraw.WithdrawStatus.Status.Updating
import net.taler.wallet.withdraw.WithdrawalOperationStatusFlag.Pending
+/** above this many coins the withdrawal takes noticeably longer (wallet-core: "roughly at >100") */
+private const val MANY_COINS = 100
+
@Composable
fun WithdrawalShowInfo(
status: WithdrawStatus,
@@ -272,6 +275,16 @@ fun WithdrawalShowInfo(
)
}
+ if (status.status != TosReviewRequired
+ && (status.amountInfo?.numCoins ?: 0) > MANY_COINS) {
+ WarningLabel(
+ label = stringResource(R.string.withdraw_many_coins),
+ modifier = Modifier
+ .padding(16.dp)
+ .fillMaxWidth(),
+ )
+ }
+
if (exchange != null && selectedAmount.scope !is ScopeInfo.Exchange) {
TransactionInfoComposable(
label = stringResource(R.string.withdraw_exchange),
diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml
index 89750709..1f809491 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -430,6 +430,7 @@ GNU Taler is immune to many types of fraud such as credit card data theft, phish
<string name="withdraw_manual_step_subject">Copy this code and paste it into the subject/purpose field (or “Message to recipient”) in your banking app or bank website:</string>
<string name="withdraw_restrict_age">Restrict usage to age</string>
<string name="withdraw_restrict_age_unrestricted">Unrestricted</string>
+ <string name="withdraw_many_coins">This withdrawal creates more than 100 digital coins and may take longer than usual.</string>
<string name="withdraw_review_terms">You must first accept the payment service\'s terms of service before you can withdraw electronic cash to your wallet.</string>
<string name="withdraw_subtitle">Select target bank account</string>
<string name="withdraw_title">Withdraw</string>
| ||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-11-11 02:07 | bot-cg | New Issue | |
| 2026-11-11 02:07 | bot-cg | File Added: before-android-1.png | |
| 2026-11-11 02:07 | bot-cg | File Added: before-web-1.png | |
| 2026-11-11 02:07 | bot-cg | File Added: before-ios-1.png | |
| 2026-11-11 02:07 | bot-cg | File Added: after-android-1.png | |
| 2026-11-11 02:07 | bot-cg | File Added: after-android-2-few-coins.png | |
| 2026-11-11 02:07 | bot-cg | File Added: android-many-coins-warning.patch |