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) &&