Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-28 20:31:58 +04:00
parent 7789f437fa
commit c4af41a48a
3 changed files with 28 additions and 41 deletions

View file

@ -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<Unit> {
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<UserWallet>,
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<UserWalletId>) {
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<UserWallet> = state.value.userWallets,
selectedUserWalletId: UserWalletId? = state.value.selectedUserWalletId,

View file

@ -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"),

View file

@ -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