Updated on 2026-08-14
This commit is contained in:
parent
6760d7c16e
commit
4f927cad74
4 changed files with 43 additions and 8 deletions
|
|
@ -5,10 +5,12 @@ import android.text.SpannedString
|
|||
import android.text.style.RelativeSizeSpan
|
||||
import androidx.core.text.buildSpannedString
|
||||
import com.tangem.common.extensions.isZero
|
||||
import timber.log.Timber
|
||||
import java.math.BigDecimal
|
||||
import java.math.RoundingMode
|
||||
import java.text.DecimalFormat
|
||||
import java.text.DecimalFormatSymbols
|
||||
import java.text.NumberFormat
|
||||
import java.util.*
|
||||
|
||||
// TODO: move extensions to utils
|
||||
|
|
@ -46,7 +48,18 @@ fun BigDecimal.toFormattedCurrencyString(
|
|||
return "$formattedAmount $currency"
|
||||
}
|
||||
|
||||
fun BigDecimal.toFiatRateString(fiatCurrencyName: String): String {
|
||||
fun BigDecimal.toFiatRateString(fiatCurrencyName: String, fiatCode: String): String {
|
||||
try {
|
||||
val formatter = NumberFormat.getCurrencyInstance()
|
||||
Currency.getInstance(fiatCode)?.let { currency ->
|
||||
formatter.currency = currency
|
||||
formatter.maximumFractionDigits = 2
|
||||
formatter.roundingMode = RoundingMode.HALF_UP
|
||||
return formatter.format(this)
|
||||
}
|
||||
} catch (e: IllegalArgumentException) {
|
||||
Timber.e(e, "can't parse currency")
|
||||
}
|
||||
val value = this
|
||||
.setScale(2, RoundingMode.HALF_UP)
|
||||
.formatWithSpaces()
|
||||
|
|
@ -56,10 +69,15 @@ fun BigDecimal.toFiatRateString(fiatCurrencyName: String): String {
|
|||
fun BigDecimal.toFiatString(
|
||||
rateValue: BigDecimal,
|
||||
fiatCurrencyName: String,
|
||||
fiatCode: String,
|
||||
formatWithSpaces: Boolean = false,
|
||||
): String {
|
||||
val fiatValue = rateValue.multiply(this)
|
||||
return fiatValue.toFormattedFiatValue(fiatCurrencyName, formatWithSpaces)
|
||||
return fiatValue.toFormattedFiatValue(
|
||||
fiatCurrencyName = fiatCurrencyName,
|
||||
fiatCode = fiatCode,
|
||||
formatWithSpaces = formatWithSpaces,
|
||||
)
|
||||
}
|
||||
|
||||
fun BigDecimal.toFiatValue(rateValue: BigDecimal): BigDecimal {
|
||||
|
|
@ -67,7 +85,22 @@ fun BigDecimal.toFiatValue(rateValue: BigDecimal): BigDecimal {
|
|||
return fiatValue.setScale(2, RoundingMode.HALF_UP)
|
||||
}
|
||||
|
||||
fun BigDecimal.toFormattedFiatValue(fiatCurrencyName: String, formatWithSpaces: Boolean = false): String {
|
||||
fun BigDecimal.toFormattedFiatValue(
|
||||
fiatCurrencyName: String,
|
||||
fiatCode: String,
|
||||
formatWithSpaces: Boolean = false,
|
||||
): String {
|
||||
try {
|
||||
val formatter = NumberFormat.getCurrencyInstance()
|
||||
Currency.getInstance(fiatCode)?.let { currency ->
|
||||
formatter.currency = currency
|
||||
formatter.maximumFractionDigits = 2
|
||||
formatter.roundingMode = RoundingMode.HALF_UP
|
||||
return formatter.format(this)
|
||||
}
|
||||
} catch (e: IllegalArgumentException) {
|
||||
Timber.e(e, "can't parse currency")
|
||||
}
|
||||
val fiatValue = this.setScale(2, RoundingMode.HALF_UP)
|
||||
.let { if (formatWithSpaces) it.formatWithSpaces() else it }
|
||||
return " $fiatValue $fiatCurrencyName"
|
||||
|
|
|
|||
|
|
@ -36,12 +36,12 @@ internal fun WalletDataModel.getFormattedFiatAmount(
|
|||
): String {
|
||||
return this.fiatRate?.let { status.amount.toFiatValue(it) }
|
||||
?.takeIf { !status.isErrorStatus }
|
||||
?.toFormattedFiatValue(fiatCurrency.symbol)
|
||||
?.toFormattedFiatValue(fiatCurrencyName = fiatCurrency.symbol, fiatCode = fiatCurrency.code)
|
||||
?: unknownAmountSign
|
||||
}
|
||||
|
||||
internal fun WalletDataModel.getFormattedFiatRate(fiatCurrency: FiatCurrency, noRateValue: String): String {
|
||||
return fiatRate?.toFiatRateString(fiatCurrency.symbol)
|
||||
return fiatRate?.toFiatRateString(fiatCurrency.symbol, fiatCurrency.code)
|
||||
?: noRateValue
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ internal fun List<UserWalletModel>.toUiModels(appCurrency: FiatCurrency): Sequen
|
|||
is TotalFiatBalance.Failed -> UserWalletItem.Balance.Failed
|
||||
is TotalFiatBalance.Loading -> UserWalletItem.Balance.Loading
|
||||
is TotalFiatBalance.Loaded -> UserWalletItem.Balance.Loaded(
|
||||
amount = fiatBalance.amount.toFormattedFiatValue(appCurrency.symbol),
|
||||
amount = fiatBalance.amount.toFormattedFiatValue(appCurrency.symbol, appCurrency.code),
|
||||
showWarning = fiatBalance.isWarning,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue