Updated on 2026-08-14

This commit is contained in:
Tangem 2024-11-13 11:19:00 +02:00
parent d2c40cfd5c
commit d220478ceb
2 changed files with 11 additions and 6 deletions

View file

@ -16,6 +16,7 @@ import com.tangem.domain.models.scan.ScanResponse
import com.tangem.domain.settings.usercountry.models.UserCountry import com.tangem.domain.settings.usercountry.models.UserCountry
import com.tangem.domain.wallets.builder.UserWalletBuilder import com.tangem.domain.wallets.builder.UserWalletBuilder
import com.tangem.domain.wallets.builder.UserWalletIdBuilder 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.converters.ParamCardCurrencyConverter
import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.AnalyticsParam
import com.tangem.tap.common.analytics.events.Onboarding import com.tangem.tap.common.analytics.events.Onboarding
@ -91,6 +92,7 @@ object OnboardingHelper {
} }
fun saveWallet( fun saveWallet(
alreadyCreatedWallet: UserWallet?,
scanResponse: ScanResponse, scanResponse: ScanResponse,
accessCode: String? = null, accessCode: String? = null,
backupCardsIds: List<String>? = null, backupCardsIds: List<String>? = 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, // When should not save user wallets but device has biometry and save wallet screen has not been shown,
// then open save wallet screen // then open save wallet screen
tangemSdkManager.checkCanUseBiometry() && settingsRepository.shouldShowSaveUserWalletScreen() -> { tangemSdkManager.checkCanUseBiometry() && settingsRepository.shouldShowSaveUserWalletScreen() -> {
proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError) proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError, alreadyCreatedWallet)
delay(timeMillis = 1_200) 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 // If device has no biometry and save wallet screen has been shown, then go through old scenario
else -> { else -> {
proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError) proceedWithScanResponse(scanResponse, backupCardsIds, hasBackupError, alreadyCreatedWallet)
} }
} }
} }
@ -245,9 +247,10 @@ object OnboardingHelper {
scanResponse: ScanResponse, scanResponse: ScanResponse,
backupCardsIds: List<String>?, backupCardsIds: List<String>?,
hasBackupError: Boolean, hasBackupError: Boolean,
alreadyCreatedWallet: UserWallet? = null,
) { ) {
val walletNameGenerateUseCase = store.inject(DaggerGraphState::generateWalletNameUseCase) val walletNameGenerateUseCase = store.inject(DaggerGraphState::generateWalletNameUseCase)
val userWallet = UserWalletBuilder(scanResponse, walletNameGenerateUseCase) val userWallet = alreadyCreatedWallet ?: UserWalletBuilder(scanResponse, walletNameGenerateUseCase)
.hasBackupError(hasBackupError) .hasBackupError(hasBackupError)
.backupCardsIds(backupCardsIds?.toSet()) .backupCardsIds(backupCardsIds?.toSet())
.build() .build()

View file

@ -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 backupState = store.state.onboardingWalletState.backupState
val updatedScanResponse = updateScanResponseAfterBackup(scanResponse, 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) { if (backupState.hasRing && userWalletId != null) {
scope.launch { scope.launch {
store.inject(DaggerGraphState::walletsRepository).setHasWalletsWithRing(userWalletId = userWalletId) store.inject(DaggerGraphState::walletsRepository).setHasWalletsWithRing(userWalletId = userWalletId)
@ -208,6 +208,7 @@ private fun handleFinishBackup(scanResponse: ScanResponse) {
} }
OnboardingHelper.saveWallet( OnboardingHelper.saveWallet(
alreadyCreatedWallet = userWallet,
scanResponse = updatedScanResponse, scanResponse = updatedScanResponse,
accessCode = backupState.accessCode, accessCode = backupState.accessCode,
backupCardsIds = backupState.backupCardIds, backupCardsIds = backupState.backupCardIds,
@ -667,7 +668,7 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction)
Analytics.send(Onboarding.Finished()) Analytics.send(Onboarding.Finished())
store.state.globalState.onboardingState.onboardingManager?.finishActivation(notActivatedCardIds) store.state.globalState.onboardingState.onboardingManager?.finishActivation(notActivatedCardIds)
handleFinishBackup(requireNotNull(scanResponse)) handleFinishBackup(requireNotNull(scanResponse), userWallet)
delay(1000) delay(1000)
store.dispatchWithMain(BackupAction.BackupFinished(userWalletId = userWallet?.walletId)) store.dispatchWithMain(BackupAction.BackupFinished(userWalletId = userWallet?.walletId))
} }
@ -728,6 +729,7 @@ private suspend fun createUserWallet(scanResponse: ScanResponse, backupState: Ba
return requireNotNull( return requireNotNull(
value = UserWalletBuilder(scanResponse, walletNameGenerateUseCase) value = UserWalletBuilder(scanResponse, walletNameGenerateUseCase)
.backupCardsIds(backupState.backupCardIds.toSet()) .backupCardsIds(backupState.backupCardIds.toSet())
.hasBackupError(backupState.hasBackupError)
.build(), .build(),
lazyMessage = { "User wallet not created" }, lazyMessage = { "User wallet not created" },
) )