From 364d064faf14be674a2ad37d37f38f8fdb0fd2df Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 14 Mar 2024 19:04:04 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../GeneralUserWalletsListManager.kt | 13 +++++- .../configs/feature_toggles_config.json | 2 +- .../wallet/viewmodels/WalletViewModel.kt | 29 ++----------- .../viewmodels/WalletsUpdateActionResolver.kt | 43 +++---------------- 4 files changed, 21 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/GeneralUserWalletsListManager.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/GeneralUserWalletsListManager.kt index cf7497ea51..6fccee5d59 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/GeneralUserWalletsListManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/GeneralUserWalletsListManager.kt @@ -131,16 +131,25 @@ internal class GeneralUserWalletsListManager( Timber.d("Switch to ${manager::class.java.simpleName}") implementation.value = manager + + clearOldManager(manager) } .flowOn(dispatchers.io) .launchIn(applicationScope) } - /** Copy data from [old] manager and clean it */ + /** Copy data from [old] manager */ private suspend fun UserWalletsListManager.copyFrom(old: UserWalletsListManager): UserWalletsListManager { old.selectedUserWalletSync?.let { this.save(it) } - old.clear() return this } + + private suspend fun clearOldManager(current: UserWalletsListManager) { + if (current == biometricUserWalletsListManager) { + runtimeUserWalletsListManager.clear() + } else { + biometricUserWalletsListManager.clear() + } + } } \ No newline at end of file diff --git a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json index 1b7b643cea..639da533da 100644 --- a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json @@ -17,7 +17,7 @@ }, { "name": "GENERAL_USER_WALLETS_LIST_MANAGER_ENABLED", - "version": "5.7.0" + "version": "5.8.0" }, { "name": "LOCAL_USER_LOGS_ENABLED", diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 1581b36984..467f87f0fa 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -14,7 +14,6 @@ import com.tangem.domain.settings.ShouldShowSaveWalletScreenUseCase import com.tangem.domain.walletconnect.WalletConnectActions import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase import com.tangem.domain.wallets.usecase.GetWalletsUseCase -import com.tangem.domain.wallets.usecase.ShouldSaveUserWalletsUseCase import com.tangem.feature.wallet.presentation.deeplink.WalletDeepLinksHandler import com.tangem.feature.wallet.presentation.router.InnerWalletRouter import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent @@ -53,7 +52,6 @@ internal class WalletViewModel @Inject constructor( private val getWalletsUseCase: GetWalletsUseCase, private val shouldShowSaveWalletScreenUseCase: ShouldShowSaveWalletScreenUseCase, private val canUseBiometryUseCase: CanUseBiometryUseCase, - private val shouldSaveUserWalletsUseCase: ShouldSaveUserWalletsUseCase, private val isWalletsScrollPreviewEnabled: IsWalletsScrollPreviewEnabled, private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, analyticsEventsHandler: AnalyticsEventHandler, @@ -74,7 +72,7 @@ internal class WalletViewModel @Inject constructor( suggestToEnableBiometrics() - subscribeOnWalletsUpdateFlow() + subscribeToUserWalletsUpdates() subscribeOnBalanceHiding() subscribeOnSelectedWalletFlow() } @@ -112,25 +110,12 @@ internal class WalletViewModel @Inject constructor( return router.isWalletLastScreen() && shouldShowSaveWalletScreenUseCase() && canUseBiometryUseCase() } - private fun subscribeOnWalletsUpdateFlow() { - viewModelScope.launch(dispatchers.main) { - shouldSaveUserWalletsUseCase() - .conflate() - .distinctUntilChanged() - .collectLatest(::subscribeToUserWalletsUpdates) - } - } - - private fun subscribeToUserWalletsUpdates(shouldSaveUserWallet: Boolean) { + private fun subscribeToUserWalletsUpdates() { getWalletsUseCase() .conflate() .distinctUntilChanged() .map { - walletsUpdateActionResolver.resolve( - wallets = it, - currentState = stateHolder.value, - canSaveWallets = shouldSaveUserWallet, - ) + walletsUpdateActionResolver.resolve(wallets = it, currentState = stateHolder.value) } .onEach(::updateWallets) .flowOn(dispatchers.main) @@ -182,14 +167,6 @@ internal class WalletViewModel @Inject constructor( private suspend fun updateWallets(action: WalletsUpdateActionResolver.Action) { when (action) { is WalletsUpdateActionResolver.Action.InitializeWallets -> initializeWallets(action) - is WalletsUpdateActionResolver.Action.ReinitializeWallets -> { - walletScreenContentLoader.load( - userWallet = action.selectedWallet, - clickIntents = clickIntents, - isRefresh = true, - coroutineScope = viewModelScope, - ) - } is WalletsUpdateActionResolver.Action.ReinitializeWallet -> reinitializeWallet(action) is WalletsUpdateActionResolver.Action.AddWallet -> addWallet(action) is WalletsUpdateActionResolver.Action.DeleteWallet -> deleteWallet(action) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletsUpdateActionResolver.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletsUpdateActionResolver.kt index 5e221221de..012aee200d 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletsUpdateActionResolver.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletsUpdateActionResolver.kt @@ -22,24 +22,16 @@ internal class WalletsUpdateActionResolver @Inject constructor( private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase, ) { - private var isInitialized: Boolean = false - private var canSaveWallets: Boolean = false - - fun resolve(wallets: List, currentState: WalletScreenState, canSaveWallets: Boolean): Action { + fun resolve(wallets: List, currentState: WalletScreenState): Action { val selectedWallet = wallets.getSelectedWallet() val action = if (selectedWallet == null) { createNoSelectedWalletAction(wallets) } else { - when { - isFirstInitialization(currentState) -> { - createInitializeWalletsAction(wallets, selectedWallet, canSaveWallets) - } - isReinitialization(canSaveWallets) -> { - this.canSaveWallets = canSaveWallets - Action.ReinitializeWallets(selectedWallet = selectedWallet) - } - else -> getUpdateContentAction(currentState, wallets, selectedWallet) + if (isFirstInitialization(currentState)) { + createInitializeWalletsAction(wallets, selectedWallet) + } else { + getUpdateContentAction(currentState, wallets, selectedWallet) } } @@ -68,14 +60,7 @@ internal class WalletsUpdateActionResolver @Inject constructor( return state.selectedWalletIndex == NOT_INITIALIZED_WALLET_INDEX } - private fun createInitializeWalletsAction( - wallets: List, - selectedWallet: UserWallet, - canSaveWallets: Boolean, - ): Action { - this.isInitialized = true - this.canSaveWallets = canSaveWallets - + private fun createInitializeWalletsAction(wallets: List, selectedWallet: UserWallet): Action { return Action.InitializeWallets( selectedWalletIndex = wallets.indexOfWallet(selectedWallet.walletId), selectedWallet = selectedWallet, @@ -83,10 +68,6 @@ internal class WalletsUpdateActionResolver @Inject constructor( ) } - private fun isReinitialization(canSaveWallets: Boolean): Boolean { - return isInitialized && this.canSaveWallets != canSaveWallets - } - private fun getUpdateContentAction( state: WalletScreenState, wallets: List, @@ -232,18 +213,6 @@ internal class WalletsUpdateActionResolver @Inject constructor( } } - /** - * Reinitialize wallets. Example, if user turned on wallets saving - * - * @property selectedWallet selected wallet - */ - data class ReinitializeWallets(val selectedWallet: UserWallet) : Action() { - - override fun toString(): String { - return "ReinitializeWallets(selectedWallet = ${selectedWallet.walletId})" - } - } - /** * Reinitialize selected wallet. Example, scanning a new card if wallets saving is turned off *