Move FiatMoney object to core-util module.

This commit is contained in:
Alex Hart 2021-09-30 11:44:18 -03:00 committed by Greyson Parrelli
parent 0fa13eb097
commit 7752b3aba3
12 changed files with 128 additions and 42 deletions

View file

@ -9,7 +9,7 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
import org.whispersystems.libsignal.util.guava.Optional;

View file

@ -4,7 +4,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.payments.Payee;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.whispersystems.signalservice.api.payments.Money;
import java.util.UUID;

View file

@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.payments.FiatMoneyUtil;
import org.thoughtcrime.securesms.payments.PaymentTransactionLiveData;
import org.thoughtcrime.securesms.payments.PaymentsAddressException;
import org.thoughtcrime.securesms.payments.confirm.ConfirmPaymentRepository.ConfirmPaymentResult;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.thoughtcrime.securesms.util.DefaultValueLiveData;
import org.thoughtcrime.securesms.util.SingleLiveEvent;
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;

View file

@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.payments.Balance;
import org.thoughtcrime.securesms.payments.CreatePaymentDetails;
import org.thoughtcrime.securesms.payments.FiatMoneyUtil;
import org.thoughtcrime.securesms.payments.currency.CurrencyExchange;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.thoughtcrime.securesms.payments.preferences.model.PayeeParcelable;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.DefaultValueLiveData;

View file

@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.payments.create;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.payments.currency.CurrencyExchange;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.payments.Money;

View file

@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.signal.core.util.money.FiatMoney;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.payments.Money;

View file

@ -1,34 +0,0 @@
package org.thoughtcrime.securesms.payments.currency;
import androidx.annotation.NonNull;
import java.math.BigDecimal;
import java.util.Currency;
public class FiatMoney {
private final BigDecimal amount;
private final Currency currency;
private final long timestamp;
public FiatMoney(@NonNull BigDecimal amount, @NonNull Currency currency) {
this(amount, currency, 0);
}
public FiatMoney(@NonNull BigDecimal amount, @NonNull Currency currency, long timestamp) {
this.amount = amount;
this.currency = currency;
this.timestamp = timestamp;
}
public @NonNull BigDecimal getAmount() {
return amount;
}
public @NonNull Currency getCurrency() {
return currency;
}
public long getTimestamp() {
return timestamp;
}
}

View file

@ -4,7 +4,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.payments.currency.CurrencyExchange;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.thoughtcrime.securesms.payments.preferences.model.PaymentItem;
import java.util.Collections;

View file

@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.payments.Payment;
import org.thoughtcrime.securesms.payments.UnreadPaymentsRepository;
import org.thoughtcrime.securesms.payments.currency.CurrencyExchange;
import org.thoughtcrime.securesms.payments.currency.CurrencyExchangeRepository;
import org.thoughtcrime.securesms.payments.currency.FiatMoney;
import org.signal.core.util.money.FiatMoney;
import org.thoughtcrime.securesms.payments.preferences.model.InProgress;
import org.thoughtcrime.securesms.payments.preferences.model.InfoCard;
import org.thoughtcrime.securesms.payments.preferences.model.IntroducingPayments;

View file

@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.signal.core.util.money.FiatMoney;
import org.whispersystems.signalservice.api.payments.Money;
import java.math.BigDecimal;
@ -12,7 +13,6 @@ import java.math.RoundingMode;
import java.util.Arrays;
import java.util.Collection;
import java.util.Currency;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;

View file

@ -0,0 +1,59 @@
package org.signal.core.util.money;
import androidx.annotation.NonNull;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Currency;
public class FiatMoney {
private final BigDecimal amount;
private final Currency currency;
private final long timestamp;
public FiatMoney(@NonNull BigDecimal amount, @NonNull Currency currency) {
this(amount, currency, 0);
}
public FiatMoney(@NonNull BigDecimal amount, @NonNull Currency currency, long timestamp) {
this.amount = amount;
this.currency = currency;
this.timestamp = timestamp;
}
public @NonNull BigDecimal getAmount() {
return amount;
}
public @NonNull Currency getCurrency() {
return currency;
}
public long getTimestamp() {
return timestamp;
}
/**
* @return amount, rounded to the default fractional amount.
*/
public @NonNull String getDefaultPrecisionString() {
NumberFormat formatter = NumberFormat.getInstance();
formatter.setMinimumFractionDigits(currency.getDefaultFractionDigits());
formatter.setGroupingUsed(false);
return formatter.format(amount);
}
/**
* @return amount, in smallest possible units (cents, yen, etc.)
*/
public @NonNull String getMinimumUnitPrecisionString() {
NumberFormat formatter = NumberFormat.getInstance();
formatter.setMaximumFractionDigits(0);
formatter.setGroupingUsed(false);
BigDecimal multiplicand = BigDecimal.TEN.pow(currency.getDefaultFractionDigits());
return formatter.format(amount.multiply(multiplicand));
}
}

View file

@ -0,0 +1,60 @@
package org.signal.core.util.money;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.Currency;
import static org.junit.Assert.assertEquals;
public class FiatMoneyTest {
@Test
public void given100USD_whenIGetDefaultPrecisionString_thenIExpect100dot00() {
// GIVEN
FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("USD"));
// WHEN
String result = fiatMoney.getDefaultPrecisionString();
// THEN
assertEquals("100.00", result);
}
@Test
public void given100USD_whenIGetMinimumUnitPrecisionString_thenIExpect10000() {
// GIVEN
FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("USD"));
// WHEN
String result = fiatMoney.getMinimumUnitPrecisionString();
// THEN
assertEquals("10000", result);
}
@Test
public void given100JPY_whenIGetDefaultPrecisionString_thenIExpect100() {
// GIVEN
FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("JPY"));
// WHEN
String result = fiatMoney.getDefaultPrecisionString();
// THEN
assertEquals("100", result);
}
@Test
public void given100JPY_whenIGetMinimumUnitPrecisionString_thenIExpect100() {
// GIVEN
FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("JPY"));
// WHEN
String result = fiatMoney.getMinimumUnitPrecisionString();
// THEN
assertEquals("100", result);
}
}