Fix incorrect display of ISK recurring cost.

This commit is contained in:
Alex Hart
2024-09-20 16:11:47 -03:00
parent cafa5c9e28
commit 7935d12675
3 changed files with 14 additions and 8 deletions

View File

@@ -410,10 +410,7 @@ class DonateToSignalFragment :
val isActive = state.activeLevel == subscription.level && state.isSubscriptionActive val isActive = state.activeLevel == subscription.level && state.isSubscriptionActive
val activePrice = state.activeSubscription?.let { sub -> val activePrice = state.activeSubscription?.let { sub ->
val activeCurrency = Currency.getInstance(sub.currency) FiatMoney.fromSignalNetworkAmount(sub.amount, Currency.getInstance(sub.currency))
val activeAmount = sub.amount.movePointLeft(activeCurrency.defaultFractionDigits)
FiatMoney(activeAmount, activeCurrency)
} }
customPref( customPref(

View File

@@ -265,12 +265,9 @@ class ManageDonationsFragment :
state: ManageDonationsState state: ManageDonationsState
) { ) {
presentSubscriptionSettingsWithState(state) { presentSubscriptionSettingsWithState(state) {
val activeCurrency = Currency.getInstance(activeSubscription.currency)
val activeAmount = activeSubscription.amount.movePointLeft(activeCurrency.defaultFractionDigits)
customPref( customPref(
ActiveSubscriptionPreference.Model( ActiveSubscriptionPreference.Model(
price = FiatMoney(activeAmount, activeCurrency), price = FiatMoney.fromSignalNetworkAmount(activeSubscription.amount, Currency.getInstance(activeSubscription.currency)),
subscription = subscription, subscription = subscription,
renewalTimestamp = TimeUnit.SECONDS.toMillis(activeSubscription.endOfCurrentPeriod), renewalTimestamp = TimeUnit.SECONDS.toMillis(activeSubscription.endOfCurrentPeriod),
redemptionState = state.getMonthlyDonorRedemptionState(), redemptionState = state.getMonthlyDonorRedemptionState(),

View File

@@ -77,6 +77,18 @@ public class FiatMoney {
return formatter.format(amount.multiply(multiplicand)); 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) { public static boolean equals(FiatMoney left, FiatMoney right) {
return Objects.equals(left.amount, right.amount) && return Objects.equals(left.amount, right.amount) &&
Objects.equals(left.currency, right.currency) && Objects.equals(left.currency, right.currency) &&