From 0e5c6fa85b94be484b22bac82f774e0bd40f78d9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Oct 2023 20:22:10 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../BiometricUserWalletsListManager.kt | 9 ++++---- .../UserWalletsPublicInformationRepository.kt | 2 +- ...tUserWalletsPublicInformationRepository.kt | 23 +++++++++++-------- 3 files changed, 20 insertions(+), 14 deletions(-) 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 9bc719665c..afbcc89e87 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 @@ -103,7 +103,7 @@ internal class BiometricUserWalletsListManager( override suspend fun save(userWallet: UserWallet, canOverride: Boolean): CompletionResult { return if (canOverride) { - saveInternal(userWallet, changeSelectedUserWallet = true) + saveInternal(userWallet, changeSelectedUserWallet = true, canOverridePublicInfo = false) } else { val isWalletSaved = state.value.userWallets .any { @@ -113,7 +113,7 @@ internal class BiometricUserWalletsListManager( if (isWalletSaved) { CompletionResult.Failure(UserWalletsListError.WalletAlreadySaved) } else { - saveInternal(userWallet, changeSelectedUserWallet = true) + saveInternal(userWallet, changeSelectedUserWallet = true, canOverridePublicInfo = false) } } } @@ -127,7 +127,7 @@ internal class BiometricUserWalletsListManager( update(storedUserWallet) } .flatMap { updatedUserWallet -> - saveInternal(updatedUserWallet, changeSelectedUserWallet = false) + saveInternal(updatedUserWallet, changeSelectedUserWallet = false, canOverridePublicInfo = true) } .flatMap { get(userWalletId) @@ -181,10 +181,11 @@ internal class BiometricUserWalletsListManager( private suspend fun saveInternal( userWallet: UserWallet, changeSelectedUserWallet: Boolean, + canOverridePublicInfo: Boolean, ): CompletionResult { return saveEncryptionKeyIfNotNull(userWallet) .flatMap { sensitiveInformationRepository.save(userWallet, encryptionKey = it) } - .flatMap { publicInformationRepository.save(userWallet) } + .flatMap { publicInformationRepository.save(userWallet, canOverridePublicInfo) } .map { if (changeSelectedUserWallet) { selectedUserWalletRepository.set(userWallet.walletId) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/UserWalletsPublicInformationRepository.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/UserWalletsPublicInformationRepository.kt index 6b40cf721e..383807f8fa 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/UserWalletsPublicInformationRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/UserWalletsPublicInformationRepository.kt @@ -6,7 +6,7 @@ import com.tangem.domain.wallets.models.UserWalletId import com.tangem.tap.domain.userWalletList.model.UserWalletPublicInformation internal interface UserWalletsPublicInformationRepository { - suspend fun save(userWallet: UserWallet): CompletionResult + suspend fun save(userWallet: UserWallet, canOverride: Boolean): CompletionResult suspend fun getAll(): CompletionResult> diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultUserWalletsPublicInformationRepository.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultUserWalletsPublicInformationRepository.kt index 1f64334fd7..9ee2498fa8 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultUserWalletsPublicInformationRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultUserWalletsPublicInformationRepository.kt @@ -24,18 +24,23 @@ internal class DefaultUserWalletsPublicInformationRepository( Types.newParameterizedType(List::class.java, UserWalletPublicInformation::class.java), ) - override suspend fun save(userWallet: UserWallet): CompletionResult { + override suspend fun save(userWallet: UserWallet, canOverride: Boolean): CompletionResult { return withContext(Dispatchers.IO) { - getAll() - .flatMap { savedInformation -> - val infoToSave = withContext(Dispatchers.Default) { - savedInformation.addOrReplace(userWallet.publicInformation) { - userWallet.walletId == it.walletId - } + getAll().flatMap { savedWalletsInformation -> + val infoToSave = if (canOverride) { + savedWalletsInformation.addOrReplace(userWallet.publicInformation) { + it.walletId == userWallet.walletId + } + } else { + if (savedWalletsInformation.none { it.walletId == userWallet.walletId }) { + savedWalletsInformation + userWallet.publicInformation + } else { + return@withContext CompletionResult.Success(Unit) } - - save(infoToSave) } + + save(infoToSave) + } } }