diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt
index 83f6b0e3aa..2d0253eb8c 100644
--- a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt
+++ b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt
@@ -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('.')
diff --git a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt
index 83abb0b13f..4e4ec7260a 100644
--- a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt
+++ b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt
@@ -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
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt
index 16676936e5..fdabcb075d 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/models/TotalBalance.kt
@@ -10,7 +10,7 @@ data class TotalBalance(
) {
enum class State {
Loading,
- Failed,
- Success
+ SomeTokensFailed,
+ Success,
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt
index 3f4b539e20..4b4d1cce5d 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt
@@ -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
}
}
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt
index 996be5039a..e5d39024ac 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt
@@ -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
}
diff --git a/app/src/main/res/layout/card_total_balance.xml b/app/src/main/res/layout/card_total_balance.xml
index 51fa4aecb7..0b0d382e71 100644
--- a/app/src/main/res/layout/card_total_balance.xml
+++ b/app/src/main/res/layout/card_total_balance.xml
@@ -9,24 +9,24 @@
android:minWidth="300dp">
-
-
+ android:background="@android:color/white"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="4dp"
+ android:elevation="3dp">
+
+
+ tools:text="$ 22 325.40"
+ tools:visibility="visible" />
+
+
+
+
+ tools:text="USD" />
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 014599d80e..bc04e7cf38 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -383,4 +383,5 @@
Пожалуйста, расскажите нам больше о Вашей проблеме. Каждая деталь может быть полезной.
Информация ниже не является обязательной. Вы можете стереть её, если хотите.
Баланс
+ Обработка полной суммы…
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 82023e7837..c3caa853e1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -207,4 +207,5 @@
Reduce by %s XTZ
No, send all
Total balance
+ Processing full amount…