diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt index 52e9be2c6d..199b92bf71 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt @@ -152,19 +152,29 @@ internal class BiometricUserWalletsListManager( return CompletionResult.Success(Unit) } - changeSelectedUserWalletIdIfNeeded(idsToRemove) + if (idsToRemove.size == state.value.userWallets.size) { + return clear() + } return sensitiveInformationRepository.delete(idsToRemove) .flatMap { publicInformationRepository.delete(idsToRemove) } .map { keysRepository.delete(idsToRemove) } .map { state.update { prevState -> - val newUserWallets = prevState.userWallets.filter { it.walletId !in idsToRemove } + val remainingWallets = prevState.userWallets.filter { it.walletId !in idsToRemove } + + val isSelectedWalletDeleted = prevState.selectedUserWalletId in idsToRemove + val newSelectedUserWallet = findOrSetSelectedWallet( + prevSelectedWalletId = prevState.selectedUserWalletId, + userWallets = remainingWallets, + ignorePrevSelectedWallet = isSelectedWalletDeleted, + ) prevState.copy( encryptionKeys = prevState.encryptionKeys.filter { it.walletId !in idsToRemove }, - userWallets = newUserWallets, - isLocked = newUserWallets.any { it.isLocked }, + userWallets = remainingWallets, + isLocked = remainingWallets.any { it.isLocked }, + selectedUserWalletId = newSelectedUserWallet?.walletId, ) } } @@ -173,10 +183,10 @@ internal class BiometricUserWalletsListManager( override suspend fun clear(): CompletionResult { return sensitiveInformationRepository.clear() .flatMap { publicInformationRepository.clear() } - .map { keysRepository.clear() } .map { + keysRepository.clear() selectedUserWalletRepository.set(null) - lock() + state.value = State() } } @@ -301,47 +311,24 @@ internal class BiometricUserWalletsListManager( private fun findOrSetSelectedWallet( prevSelectedWalletId: UserWalletId?, userWallets: List, + ignorePrevSelectedWallet: Boolean = false, ): UserWallet? { - val selectedWalletId = prevSelectedWalletId ?: selectedUserWalletRepository.get() - var possibleSelectedUserWallet = findSelectedUserWallet(userWallets, selectedWalletId) + var possibleSelectedUserWallet: UserWallet? = null + + if (!ignorePrevSelectedWallet) { + val selectedWalletId = prevSelectedWalletId ?: selectedUserWalletRepository.get() + possibleSelectedUserWallet = findSelectedUserWallet(userWallets, selectedWalletId) + } if (possibleSelectedUserWallet == null || possibleSelectedUserWallet.isLocked) { possibleSelectedUserWallet = userWallets.firstOrNull { !it.isLocked } ?: userWallets.firstOrNull() - - if (possibleSelectedUserWallet != null) { - selectedUserWalletRepository.set(possibleSelectedUserWallet.walletId) - } } + selectedUserWalletRepository.set(possibleSelectedUserWallet?.walletId) + return possibleSelectedUserWallet } - private fun changeSelectedUserWalletIdIfNeeded(walletsIdsToRemove: List) { - val remainingWallets = state.value.userWallets.filter { - it.walletId !in walletsIdsToRemove - } - val selectedWallet = findSelectedUserWallet() - when { - remainingWallets.isEmpty() -> { - state.update { prevState -> - prevState.copy( - selectedUserWalletId = null, - ) - } - selectedUserWalletRepository.set(null) - } - !remainingWallets.contains(selectedWallet) -> { - val newSelectedWallet = remainingWallets.firstOrNull { !it.isLocked } - state.update { prevState -> - prevState.copy( - selectedUserWalletId = newSelectedWallet?.walletId, - ) - } - selectedUserWalletRepository.set(newSelectedWallet?.walletId) - } - } - } - private fun findSelectedUserWallet( userWallets: List = state.value.userWallets, selectedUserWalletId: UserWalletId? = state.value.selectedUserWalletId, diff --git a/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt b/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt index d8427a907f..8c91326d64 100644 --- a/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt +++ b/data/card/src/main/java/com/tangem/data/card/sdk/DefaultCardSdkProvider.kt @@ -40,7 +40,7 @@ internal class DefaultCardSdkProvider @Inject constructor() : CardSdkProvider, C linkedTerminal = true, allowUntrustedCards = true, filter = CardFilter( - allowedCardTypes = FirmwareVersion.FirmwareType.values().toList(), + allowedCardTypes = FirmwareVersion.FirmwareType.entries.toList(), maxFirmwareVersion = FirmwareVersion(major = 6, minor = 33), batchIdFilter = CardFilter.Companion.ItemFilter.Deny( items = setOf("0027", "0030", "0031", "0035"), diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 5fae08e5f1..d0f16ceba2 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -89,8 +89,8 @@ markdown = "0.7.2" # region Tangem tangemBlockchainSdk = "release-app_5.12-694" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.12-367" -#tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ +#tangemCardSdk = "release-app_5.12-367" +tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ # endregion Tangem # region Tools