taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 881eeabd3999c75c1961eacb2921b41d3a8f58bb
parent 5b6ba02e4e3026d08807431b144c5b3c1125266c
Author: Iván Ávalos <avalos@disroot.org>
Date:   Thu, 14 Mar 2024 10:11:54 -0600

[taler-android] Improve handling of currencies with no symbol

(cherry picked from commit c9371584fedf8783ab472d32deb35b24b0329cab)

Diffstat:
Mtaler-kotlin-android/src/main/java/net/taler/common/Amount.kt | 7+++++--
Mtaler-kotlin-android/src/main/java/net/taler/common/CurrencySpecification.kt | 2+-
Mtaler-kotlin-android/src/test/java/net/taler/common/AmountTest.kt | 28++++++++++++++++++++++++++--
Mwallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt | 2+-
Mwallet/src/main/java/net/taler/wallet/SendFundsFragment.kt | 2+-
5 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt b/taler-kotlin-android/src/main/java/net/taler/common/Amount.kt @@ -240,11 +240,14 @@ public data class Amount( val format = NumberFormat.getCurrencyInstance() format.maximumFractionDigits = spec.numFractionalNormalDigits format.minimumFractionDigits = spec.numFractionalTrailingZeroDigits - s.currencySymbol = spec.symbol(this) + s.currencySymbol = spec.symbol ?: "" (format as DecimalFormat).decimalFormatSymbols = s val fmt = format.format(amount) - return if (showSymbol) fmt else { + return if (showSymbol) { + // If no symbol, then we use the currency string + if (spec.symbol != null) fmt else "$fmt $currency" + } else { // We should do better than manually removing the symbol here fmt.replace(s.currencySymbol, "").trim() } diff --git a/taler-kotlin-android/src/main/java/net/taler/common/CurrencySpecification.kt b/taler-kotlin-android/src/main/java/net/taler/common/CurrencySpecification.kt @@ -32,5 +32,5 @@ data class CurrencySpecification( val altUnitNames: Map<Int, String>, ) { // TODO: add support for alt units - fun symbol(amount: Amount): String = altUnitNames[0] ?: amount.currency + val symbol: String? get() = altUnitNames[0] } \ No newline at end of file diff --git a/taler-kotlin-android/src/test/java/net/taler/common/AmountTest.kt b/taler-kotlin-android/src/test/java/net/taler/common/AmountTest.kt @@ -150,6 +150,23 @@ class AmountTest { currency = "EUR", symbol = "€", ) + + amountToString( + amount = Amount.fromString("NOSYMBOL", "13.24"), + spec = CurrencySpecification( + name = "No symbol!", + numFractionalInputDigits = 2, + numFractionalNormalDigits = 2, + numFractionalTrailingZeroDigits = 2, + altUnitNames = mapOf(), + ), + rawStr = "13.24", + fraction = 24000000, + specAmount = "13.24", + noSpecAmount = "13.24", + currency = "NOSYMBOL", + symbol = "NOSYMBOL", + ) } private fun amountToString( @@ -182,10 +199,17 @@ class AmountTest { // The amount with currency spec val withSpec = amount.withSpec(spec) - assertEquals("${symbol}$specAmount", withSpec.toString(symbols = symbols)) assertEquals(specAmount, withSpec.toString(symbols = symbols, showSymbol = false)) - assertEquals("-${symbol}$specAmount", withSpec.toString(symbols = symbols, negative = true)) + assertEquals(specAmount, withSpec.toString(symbols = symbols, showSymbol = false)) assertEquals("-$specAmount", withSpec.toString(symbols = symbols, showSymbol = false, negative = true)) + assertEquals("-$specAmount", withSpec.toString(symbols = symbols, showSymbol = false, negative = true)) + if (spec.symbol != null) { + assertEquals("${symbol}$specAmount", withSpec.toString(symbols = symbols)) + assertEquals("-${symbol}$specAmount", withSpec.toString(symbols = symbols, negative = true)) + } else { + assertEquals("$specAmount $currency", withSpec.toString(symbols = symbols)) + assertEquals("-$specAmount $currency", withSpec.toString(symbols = symbols, negative = true)) + } } @Test diff --git a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt @@ -154,7 +154,7 @@ private fun ReceiveFundsIntro( ) Text( modifier = Modifier, - text = spec?.symbol(Amount.zero(currency)) ?: currency, + text = spec?.symbol ?: currency, softWrap = false, style = MaterialTheme.typography.titleLarge, ) diff --git a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt @@ -138,7 +138,7 @@ private fun SendFundsIntro( ) Text( modifier = Modifier, - text = spec?.symbol(Amount.zero(currency)) ?: currency, + text = spec?.symbol ?: currency, softWrap = false, style = MaterialTheme.typography.titleLarge, )