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,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:ellipsize="end"
|
||||
android:gravity="start"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/text_primary_1"
|
||||
android:textSize="16sp"
|
||||
|
|
@ -35,8 +36,8 @@
|
|||
android:id="@+id/tv_amount_fiat"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
android:maxLines="1"
|
||||
android:textAlignment="viewEnd"
|
||||
android:textColor="@color/text_primary_1"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"
|
||||
|
|
@ -50,8 +51,8 @@
|
|||
android:id="@+id/tv_amount"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
android:maxLines="1"
|
||||
android:textAlignment="viewEnd"
|
||||
android:textColor="@color/text_tertiary"
|
||||
android:textSize="12sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
|
@ -66,6 +67,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:ellipsize="end"
|
||||
android:gravity="start"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/text_tertiary"
|
||||
android:textSize="12sp"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue