Updated on 2026-08-14
This commit is contained in:
parent
1da2ca6d1f
commit
364d064faf
4 changed files with 21 additions and 66 deletions
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
},
|
||||
{
|
||||
"name": "GENERAL_USER_WALLETS_LIST_MANAGER_ENABLED",
|
||||
"version": "5.7.0"
|
||||
"version": "5.8.0"
|
||||
},
|
||||
{
|
||||
"name": "LOCAL_USER_LOGS_ENABLED",
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<UserWallet>, currentState: WalletScreenState, canSaveWallets: Boolean): Action {
|
||||
fun resolve(wallets: List<UserWallet>, 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<UserWallet>,
|
||||
selectedWallet: UserWallet,
|
||||
canSaveWallets: Boolean,
|
||||
): Action {
|
||||
this.isInitialized = true
|
||||
this.canSaveWallets = canSaveWallets
|
||||
|
||||
private fun createInitializeWalletsAction(wallets: List<UserWallet>, 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<UserWallet>,
|
||||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue