From 295ce98ed60b81a88eebb20946cb31de672ddc84 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 13 Jan 2023 18:09:38 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../TotalFiatBalanceCalculator.kt | 14 ++------ .../DefaultTotalFiatBalanceCalculator.kt | 13 ++------ .../redux/middlewares/WalletMiddleware.kt | 11 +++---- .../redux/WalletSelectorMiddleware.kt | 32 ++++++++++--------- 4 files changed, 26 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt b/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt index 9790310eb0..a011491b0e 100644 --- a/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt +++ b/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt @@ -2,33 +2,23 @@ package com.tangem.tap.domain.totalBalance import com.tangem.tap.domain.model.TotalFiatBalance import com.tangem.tap.domain.model.WalletStoreModel -import java.math.BigDecimal interface TotalFiatBalanceCalculator { /** * Calculate total fiat balance for list of [WalletStoreModel] - * @param prevAmount Previous amount, used in [TotalFiatBalance.Refreshing] * @param walletStores List of [WalletStoreModel] to calculate fiat amount * @param initial Initial [TotalFiatBalance] state, used when list of [WalletStoreModel] is empty * @return [TotalFiatBalance] with state found with the [WalletStoreModel] list * */ - suspend fun calculate( - prevAmount: BigDecimal?, - walletStores: List, - initial: TotalFiatBalance, - ): TotalFiatBalance + suspend fun calculate(walletStores: List, initial: TotalFiatBalance): TotalFiatBalance /** * Same as [TotalFiatBalanceCalculator.calculate] but returns null if list of [WalletStoreModel] is empty - * @param prevAmount Previous amount, used in [TotalFiatBalance.Refreshing] * @param walletStores List of [WalletStoreModel] to calculate fiat amount * @return [TotalFiatBalance] with state found with the [WalletStoreModel] list * */ - suspend fun calculateOrNull( - prevAmount: BigDecimal?, - walletStores: List, - ): TotalFiatBalance? + suspend fun calculateOrNull(walletStores: List): TotalFiatBalance? companion object } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt b/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt index 0c0f909c80..12fd8abb1e 100644 --- a/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt +++ b/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt @@ -10,18 +10,11 @@ import kotlinx.coroutines.withContext import java.math.BigDecimal internal class DefaultTotalFiatBalanceCalculator : TotalFiatBalanceCalculator { - override suspend fun calculate( - prevAmount: BigDecimal?, - walletStores: List, - initial: TotalFiatBalance, - ): TotalFiatBalance { - return calculateOrNull(prevAmount, walletStores) ?: initial + override suspend fun calculate(walletStores: List, initial: TotalFiatBalance): TotalFiatBalance { + return calculateOrNull(walletStores) ?: initial } - override suspend fun calculateOrNull( - prevAmount: BigDecimal?, - walletStores: List, - ): TotalFiatBalance? { + override suspend fun calculateOrNull(walletStores: List): TotalFiatBalance? { return if (walletStores.isEmpty()) { null } else { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index 548d0ccf4f..96922afa51 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -8,10 +8,10 @@ import com.tangem.blockchain.common.WalletManager import com.tangem.common.CompletionResult import com.tangem.common.extensions.isZero import com.tangem.common.services.Result +import com.tangem.core.analytics.Analytics import com.tangem.domain.common.extensions.withMainContext import com.tangem.operations.attestation.Attestation import com.tangem.operations.attestation.OnlineCardVerifier -import com.tangem.core.analytics.Analytics import com.tangem.tap.common.analytics.events.MainScreen import com.tangem.tap.common.analytics.events.Token import com.tangem.tap.common.extensions.copyToClipboard @@ -286,7 +286,7 @@ class WalletMiddleware { is WalletAction.UserWalletChanged -> Unit is WalletAction.WalletStoresChanged -> { updateWalletStores(action.walletStores, walletState) - fetchTotalFiatBalance(action.walletStores, walletState) + fetchTotalFiatBalance(action.walletStores) findMissedDerivations(action.walletStores) tryToShowAppRatingWarning(action.walletStores) } @@ -311,12 +311,9 @@ class WalletMiddleware { } } - private fun fetchTotalFiatBalance(walletStores: List, state: WalletState) { + private fun fetchTotalFiatBalance(walletStores: List) { scope.launch(Dispatchers.Default) { - val totalFiatBalance = totalFiatBalanceCalculator.calculateOrNull( - prevAmount = state.totalBalance?.fiatAmount, - walletStores = walletStores, - )?.mapToReduxModel() + val totalFiatBalance = totalFiatBalanceCalculator.calculateOrNull(walletStores)?.mapToReduxModel() if (totalFiatBalance != null) { store.dispatchOnMain(WalletAction.TotalFiatBalanceChanged(totalFiatBalance)) diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt index 8c0d56cc71..38832e455a 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt @@ -6,9 +6,9 @@ import com.tangem.common.doOnFailure import com.tangem.common.doOnSuccess import com.tangem.common.flatMap import com.tangem.common.map +import com.tangem.core.analytics.Analytics import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.util.UserWalletId -import com.tangem.core.analytics.Analytics import com.tangem.tap.common.analytics.events.MyWallets import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.onUserWalletSelected @@ -98,21 +98,25 @@ internal class WalletSelectorMiddleware { } } - private fun updateBalances(walletStores: Map>, state: WalletSelectorState) { - walletStores.forEach { (walletId, walletStores) -> - scope.launch(Dispatchers.Default) { - val foundWallet = state.wallets - .find { it.id == walletId } + private fun updateBalances( + updatedWalletStores: Map>, + state: WalletSelectorState, + ) { + if (updatedWalletStores.isNotEmpty()) scope.launch(Dispatchers.Default) { + state.wallets + .associateWith { updatedWalletStores[it.id] } + .forEach { (wallet, walletStores) -> + val isWalletTokensEmpty = (wallet.type as? UserWalletModel.Type.MultiCurrency)?.tokensCount == 0 + val updatedWallet = if (walletStores == null && isWalletTokensEmpty) { + wallet.copy(fiatBalance = TotalFiatBalance.Loaded(BigDecimal.ZERO)) + } else { + wallet.updateWalletStoresAndCalculateFiatBalance(walletStores.orEmpty()) + } - if (foundWallet != null) { - val updatedWallet = foundWallet - .updateWalletStoresAndCalculateFiatBalance(walletStores) - - if (foundWallet != updatedWallet) { + if (wallet != updatedWallet) { store.dispatchOnMain(WalletSelectorAction.BalanceLoaded(updatedWallet)) } } - } } } @@ -287,7 +291,6 @@ internal class WalletSelectorMiddleware { selectedUserWallet == null -> { store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) } - currentSelectedWalletId != selectedUserWallet.walletId -> { store.onUserWalletSelected(selectedUserWallet) } @@ -320,9 +323,8 @@ internal class WalletSelectorMiddleware { is UserWalletModel.Type.SingleCurrency -> type }, fiatBalance = totalFiatBalanceCalculator.calculate( - prevAmount = fiatBalance.amount, walletStores = walletStores, - initial = TotalFiatBalance.Loaded(BigDecimal.ZERO), + initial = TotalFiatBalance.Loading, ), ) }