From 7935d1267553ea9430e9b34470c3e0fb3232b96d Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 20 Sep 2024 16:11:47 -0300 Subject: [PATCH] Fix incorrect display of ISK recurring cost. --- .../subscription/donate/DonateToSignalFragment.kt | 5 +---- .../subscription/manage/ManageDonationsFragment.kt | 5 +---- .../java/org/signal/core/util/money/FiatMoney.java | 12 ++++++++++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt index 8556f3e792..65be79c59a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalFragment.kt @@ -410,10 +410,7 @@ class DonateToSignalFragment : val isActive = state.activeLevel == subscription.level && state.isSubscriptionActive val activePrice = state.activeSubscription?.let { sub -> - val activeCurrency = Currency.getInstance(sub.currency) - val activeAmount = sub.amount.movePointLeft(activeCurrency.defaultFractionDigits) - - FiatMoney(activeAmount, activeCurrency) + FiatMoney.fromSignalNetworkAmount(sub.amount, Currency.getInstance(sub.currency)) } customPref( diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt index 93d3415488..55a7c69522 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt @@ -265,12 +265,9 @@ class ManageDonationsFragment : state: ManageDonationsState ) { presentSubscriptionSettingsWithState(state) { - val activeCurrency = Currency.getInstance(activeSubscription.currency) - val activeAmount = activeSubscription.amount.movePointLeft(activeCurrency.defaultFractionDigits) - customPref( ActiveSubscriptionPreference.Model( - price = FiatMoney(activeAmount, activeCurrency), + price = FiatMoney.fromSignalNetworkAmount(activeSubscription.amount, Currency.getInstance(activeSubscription.currency)), subscription = subscription, renewalTimestamp = TimeUnit.SECONDS.toMillis(activeSubscription.endOfCurrentPeriod), redemptionState = state.getMonthlyDonorRedemptionState(), diff --git a/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java b/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java index acdee2d2e8..afe480f054 100644 --- a/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java +++ b/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java @@ -77,6 +77,18 @@ public class FiatMoney { return formatter.format(amount.multiply(multiplicand)); } + /** + * Transforms the given currency / amount pair from a signal network amount to a FiatMoney, accounting for the special + * cased multiplicands for ISK and UGX + */ + public static @NonNull FiatMoney fromSignalNetworkAmount(@NonNull BigDecimal amount, @NonNull Currency currency) { + String currencyCode = currency.getCurrencyCode(); + int shift = SPECIAL_CASE_MULTIPLICANDS.contains(currencyCode) ? 2: currency.getDefaultFractionDigits(); + BigDecimal shiftedAmount = amount.movePointLeft(shift); + + return new FiatMoney(shiftedAmount, currency); + } + public static boolean equals(FiatMoney left, FiatMoney right) { return Objects.equals(left.amount, right.amount) && Objects.equals(left.currency, right.currency) &&