From b4e9c23f6d39aae13649e0e3d69c0d2ab54b163a Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 27 Nov 2025 15:42:43 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../upgradewallet/UpgradeWalletModel.kt | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/upgradewallet/UpgradeWalletModel.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/upgradewallet/UpgradeWalletModel.kt index c030460551..d8d10b2729 100644 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/upgradewallet/UpgradeWalletModel.kt +++ b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/upgradewallet/UpgradeWalletModel.kt @@ -18,6 +18,7 @@ import com.tangem.core.ui.extensions.toWrappedList import com.tangem.core.ui.message.DialogMessage import com.tangem.core.ui.message.EventMessageAction import com.tangem.domain.card.BackupValidator +import com.tangem.domain.card.common.util.cardTypesResolver import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.feedback.models.FeedbackEmailType @@ -98,26 +99,12 @@ internal class UpgradeWalletModel @Inject constructor( tangemSdkManager .scanProduct() - .doOnSuccess { - // Check if user attempted to upgrade before but something went wrong and a full reset is required - val userWallet = coldUserWalletBuilderFactory.create(it).build() - val sameWalletButNotFinishedBackup by lazy { - userWallet?.walletId == params.userWalletId && - BackupValidator.isValidFull(it.card).not() + .doOnSuccess { scanResponse -> + checkIsWalletSuitableToBeUsedAsUpgrade(scanResponse = scanResponse) { + delay(DELAY_SDK_DIALOG_CLOSE) + tangemSdkManager.changeDisplayedCardIdNumbersCount(scanResponse) + navigateToUpgradeFlow(scanResponse) } - val otherWalletAndAlreadyCreated by lazy { - userWallet?.walletId != params.userWalletId && - it.card.wallets.map { it.curve }.toSet().isNotEmpty() - } - - if (userWallet != null && (sameWalletButNotFinishedBackup || otherWalletAndAlreadyCreated)) { - startResetCardsFlow.emit(userWallet) - return@doOnSuccess - } - - delay(DELAY_SDK_DIALOG_CLOSE) - tangemSdkManager.changeDisplayedCardIdNumbersCount(it) - navigateToUpgradeFlow(it) } .doOnFailure { showCardVerificationFailedDialog(it) @@ -132,6 +119,35 @@ internal class UpgradeWalletModel @Inject constructor( uiState.update { it.copy(isLoading = isLoading) } } + private suspend fun checkIsWalletSuitableToBeUsedAsUpgrade( + scanResponse: ScanResponse, + onSuccess: suspend () -> Unit, + ) { + // Check if user attempted to upgrade before but something went wrong and a full reset is required + val userWallet = coldUserWalletBuilderFactory.create(scanResponse).build() + val isSameWalletButNotFinishedBackup = userWallet?.walletId == params.userWalletId && + BackupValidator.isValidFull(scanResponse.card).not() + + if (userWallet != null && isSameWalletButNotFinishedBackup) { + startResetCardsFlow.emit(userWallet) + return + } + + // Check for the correct card type + when { + scanResponse.card.wallets.isNotEmpty() -> uiMessageSender.send( + DialogMessage(resourceReference(R.string.hw_upgrade_error_card_already_has_wallet)), + ) + scanResponse.cardTypesResolver.isWallet2().not() -> uiMessageSender.send( + DialogMessage(resourceReference(R.string.hw_upgrade_error_wallet2_card_required)), + ) + scanResponse.card.settings.isKeysImportAllowed.not() -> uiMessageSender.send( + DialogMessage(resourceReference(R.string.hw_upgrade_error_card_key_import)), + ) + else -> onSuccess() + } + } + private fun showCardVerificationFailedDialog(error: TangemError) { if (error !is TangemSdkError.CardVerificationFailed) return