Updated on 2026-08-14

This commit is contained in:
Tangem 2022-05-18 16:26:21 +03:00
parent 2357aa509f
commit c03ab1bfb2
8 changed files with 127 additions and 33 deletions

View file

@ -93,8 +93,10 @@ fun BigDecimal.formatAmountAsSpannedString(
currencySymbol: String,
integerPartSizeProportion: Float = 1.4f
): SpannedString {
val amount = this.scaleToFiat(applyPrecision = true)
.stripZeroPlainString()
val amount = this.toFormattedString(
decimals = 2,
roundingMode = RoundingMode.HALF_UP
)
val integer = amount.substringAfter('.')
val reminder = amount.substringBefore('.')

View file

@ -1,5 +1,7 @@
package com.tangem.tap.common.extensions
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.app.Activity
import android.content.*
import android.content.res.Resources
@ -16,6 +18,7 @@ import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import com.google.android.material.card.MaterialCardView
import com.tangem.common.extensions.VoidCallback
@ -187,4 +190,47 @@ fun Context.safeStartActivity(
fun View.getString(resId: Int, vararg formatArgs: Any?): String {
return context.getString(resId, formatArgs)
}
fun View.showAnimated(durationMillis: Long = 300) {
this.animateVisibility(
show = true,
durationMillis = durationMillis
)
}
fun View.hideAnimated(
durationMillis: Long = 300,
hiddenVisibility: Int = View.GONE
) {
this.animateVisibility(
show = false,
durationMillis = durationMillis,
hiddenVisibility = hiddenVisibility
)
}
private fun View.animateVisibility(
show: Boolean,
durationMillis: Long = 300,
hiddenVisibility: Int = View.GONE
) {
if (this.isVisible == show) return
if (show) {
this.alpha = 0f
this.isVisible = true
this.animate()
.alpha(1f)
.setDuration(durationMillis)
.setListener(null)
} else {
this.animate()
.alpha(0f)
.setDuration(durationMillis)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
this@animateVisibility.visibility = hiddenVisibility
}
})
}
}

View file

@ -10,7 +10,7 @@ data class TotalBalance(
) {
enum class State {
Loading,
Failed,
Success
SomeTokensFailed,
Success,
}
}

View file

@ -214,7 +214,7 @@ class OnWalletLoadedReducer {
BalanceStatus.Unreachable,
BalanceStatus.NoAccount,
BalanceStatus.EmptyCard,
BalanceStatus.UnknownBlockchain -> TotalBalance.State.Failed
BalanceStatus.UnknownBlockchain -> TotalBalance.State.SomeTokensFailed
BalanceStatus.Loading,
null -> TotalBalance.State.Loading
}
@ -225,13 +225,13 @@ class OnWalletLoadedReducer {
return when (this) {
TotalBalance.State.Loading -> when (newState) {
TotalBalance.State.Loading -> this
TotalBalance.State.Failed,
TotalBalance.State.SomeTokensFailed,
TotalBalance.State.Success -> newState
}
TotalBalance.State.Success,
TotalBalance.State.Failed -> when (newState) {
TotalBalance.State.SomeTokensFailed -> when (newState) {
TotalBalance.State.Loading,
TotalBalance.State.Failed -> newState
TotalBalance.State.SomeTokensFailed -> newState
TotalBalance.State.Success -> this
}
}

View file

@ -1,13 +1,12 @@
package com.tangem.tap.features.wallet.ui.wallet
import android.app.Dialog
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.tangem.common.card.Card
import com.tangem.domain.common.TapWorkarounds.derivationStyle
import com.tangem.domain.common.TapWorkarounds.isTestCard
import com.tangem.tap.common.extensions.formatAmountAsSpannedString
import com.tangem.tap.common.extensions.hide
import com.tangem.tap.common.extensions.show
import com.tangem.tap.common.extensions.*
import com.tangem.tap.common.redux.StateDialog
import com.tangem.tap.common.redux.navigation.AppScreen
import com.tangem.tap.common.redux.navigation.NavigationAction
@ -135,10 +134,29 @@ class MultiWalletView : WalletView {
binding: FragmentWalletBinding,
totalBalance: TotalBalance,
) = with(binding.lCardTotalBalance) {
when (totalBalance.state) {
TotalBalance.State.Loading -> {
pbLoading.showAnimated()
tvBalance.hideAnimated(hiddenVisibility = View.INVISIBLE)
tvProcessing.hideAnimated()
}
TotalBalance.State.SomeTokensFailed -> {
tvBalance.showAnimated()
pbLoading.hideAnimated()
tvProcessing.showAnimated()
}
TotalBalance.State.Success -> {
tvBalance.showAnimated()
pbLoading.hideAnimated()
tvProcessing.hideAnimated()
}
}
tvBalance.text = totalBalance.fiatAmount.formatAmountAsSpannedString(
currencySymbol = totalBalance.fiatCurrency.symbol
)
tvCurrencyName.text = totalBalance.fiatCurrency.code
tvCurrencyName.setOnClickListener {
// TODO: Open app currency selector
}