commit 4203b8b266cdbf92a066fa350f46a17a3e97956d
parent 5ca8e78d2e1666fef8e52ce9c819be9b5458d724
Author: Bohdan Potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date: Sat, 24 Oct 2026 12:24:30 +0200
[shared] fix amount logic
Diffstat:
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/merchant-terminal/src/test/java/net/taler/merchantpos/config/ConfigProductTest.kt b/merchant-terminal/src/test/java/net/taler/merchantpos/config/ConfigProductTest.kt
@@ -29,11 +29,12 @@ class ConfigProductTest {
categories = listOf(1)
)
- assertEquals("2.50 KUDOS", product.displayPrice)
+ // Plain JVM tests use Amount's pre-Android-11 currency-code formatter.
+ assertEquals("KUDOS 2.50", product.displayPrice)
}
@Test
- fun `display price uses currency spec symbol`() {
+ fun `display price uses currency code with spec on legacy formatter`() {
val product = ConfigProduct(
description = "Coffee",
price = Amount("CHF", 2, 50000000).withSpec(
@@ -48,7 +49,7 @@ class ConfigProductTest {
categories = listOf(1)
)
- assertEquals("Fr.2.50", product.displayPrice)
+ assertEquals("CHF 2.50", product.displayPrice)
}
@Test
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
@@ -256,7 +256,9 @@ data class Amount(
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// In newer phones > 2019, do full, locale-based formatting
val uLocale = ULocale.forLocale(locale)
- val blueprintCurrency = Currency.getInstance(uLocale)
+ // Language-only app locales (e.g. "en") have no regional currency.
+ // Use a neutral template; the actual Taler currency symbol replaces it below.
+ val blueprintCurrency = Currency.getInstance(uLocale) ?: Currency.getInstance("XXX")
NumberFormatter.with()
.unit(blueprintCurrency)
.unitWidth(
@@ -344,4 +346,4 @@ fun java.text.DecimalFormatSymbols.toIcu(targetLocale: Locale? = null): DecimalF
icuSymbols.monetaryGroupingSeparator = this.monetaryGroupingSeparator
}
return icuSymbols
-}
-\ No newline at end of file
+}