diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt index 7ee5761836..4fc3109010 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt @@ -16,6 +16,7 @@ import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.settings.usercountry.models.UserCountry import com.tangem.domain.wallets.builder.UserWalletBuilder import com.tangem.domain.wallets.builder.UserWalletIdBuilder +import com.tangem.domain.wallets.models.UserWallet import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.Onboarding @@ -91,6 +92,7 @@ object OnboardingHelper { } fun saveWallet( + alreadyCreatedWallet: UserWallet?, scanResponse: ScanResponse, accessCode: String? = null, backupCardsIds: List? = null, @@ -120,7 +122,7 @@ object OnboardingHelper { // When should not save user wallets but device has biometry and save wallet screen has not been shown, // then open save wallet screen tangemSdkManager.checkCanUseBiometry() && settingsRepository.shouldShowSaveUserWalletScreen() -> { - proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError) + proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError, alreadyCreatedWallet) delay(timeMillis = 1_200) @@ -134,7 +136,7 @@ object OnboardingHelper { } // If device has no biometry and save wallet screen has been shown, then go through old scenario else -> { - proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError) + proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError, alreadyCreatedWallet) } } } @@ -245,9 +247,10 @@ object OnboardingHelper { scanResponse: ScanResponse, backupCardsIds: List?, hasBackupError: Boolean, + alreadyCreatedWallet: UserWallet? = null, ) { val walletNameGenerateUseCase = store.inject(DaggerGraphState::generateWalletNameUseCase) - val userWallet = UserWalletBuilder(scanResponse, walletNameGenerateUseCase) + val userWallet = alreadyCreatedWallet ?: UserWalletBuilder(scanResponse, walletNameGenerateUseCase) .hasBackupError(hasBackupError) .backupCardsIds(backupCardsIds?.toSet()) .build() diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index dc9e77a48d..d306ced544 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -196,11 +196,11 @@ private fun handleWalletAction(action: Action) { } } -private fun handleFinishBackup(scanResponse: ScanResponse) { +private fun handleFinishBackup(scanResponse: ScanResponse, userWallet: UserWallet? = null) { val backupState = store.state.onboardingWalletState.backupState val updatedScanResponse = updateScanResponseAfterBackup(scanResponse, backupState) - val userWalletId = UserWalletIdBuilder.scanResponse(scanResponse).build() + val userWalletId = userWallet?.walletId ?: UserWalletIdBuilder.scanResponse(scanResponse).build() if (backupState.hasRing && userWalletId != null) { scope.launch { store.inject(DaggerGraphState::walletsRepository).setHasWalletsWithRing(userWalletId = userWalletId) @@ -208,6 +208,7 @@ private fun handleFinishBackup(scanResponse: ScanResponse) { } OnboardingHelper.saveWallet( + alreadyCreatedWallet = userWallet, scanResponse = updatedScanResponse, accessCode = backupState.accessCode, backupCardsIds = backupState.backupCardIds, @@ -667,7 +668,7 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) Analytics.send(Onboarding.Finished()) store.state.globalState.onboardingState.onboardingManager?.finishActivation(notActivatedCardIds) - handleFinishBackup(requireNotNull(scanResponse)) + handleFinishBackup(requireNotNull(scanResponse), userWallet) delay(1000) store.dispatchWithMain(BackupAction.BackupFinished(userWalletId = userWallet?.walletId)) } @@ -728,6 +729,7 @@ private suspend fun createUserWallet(scanResponse: ScanResponse, backupState: Ba return requireNotNull( value = UserWalletBuilder(scanResponse, walletNameGenerateUseCase) .backupCardsIds(backupState.backupCardIds.toSet()) + .hasBackupError(backupState.hasBackupError) .build(), lazyMessage = { "User wallet not created" }, )