Updated on 2026-08-14

This commit is contained in:
Tangem 2025-03-31 11:50:51 +03:00
parent 6db5fde59a
commit d452b4ca23
9 changed files with 39 additions and 5 deletions

View file

@ -624,7 +624,12 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction)
if (action.unfinishedBackupScanResponse != null) {
// onboarding V2
store.dispatchNavigationAction {
push(AppRoute.Onboarding(scanResponse = action.unfinishedBackupScanResponse))
push(
AppRoute.Onboarding(
scanResponse = action.unfinishedBackupScanResponse,
mode = AppRoute.Onboarding.Mode.ContinueFinalize,
),
)
}
} else {
store.dispatch(

View file

@ -2,6 +2,7 @@ package com.tangem.tap.features.welcome.model
import com.tangem.common.core.TangemError
import com.tangem.core.analytics.Analytics
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.finisher.AppFinisher
@ -23,6 +24,7 @@ import org.rekotlin.StoreSubscriber
import javax.inject.Inject
// FIXME: Remove redux: [REDACTED_JIRA]
@ModelScoped
internal class WelcomeModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
private val appFinisher: AppFinisher,

View file

@ -204,6 +204,8 @@ internal class ChildFactory @Inject constructor(
multiWalletMode = when (route.mode) {
AppRoute.Onboarding.Mode.Onboarding -> OnboardingEntryComponent.MultiWalletMode.Onboarding
AppRoute.Onboarding.Mode.AddBackup -> OnboardingEntryComponent.MultiWalletMode.AddBackup
AppRoute.Onboarding.Mode.ContinueFinalize ->
OnboardingEntryComponent.MultiWalletMode.ContinueFinalize
},
),
componentFactory = onboardingEntryComponentFactory,
@ -648,6 +650,8 @@ internal class ChildFactory @Inject constructor(
multiWalletMode = when (route.mode) {
AppRoute.Onboarding.Mode.Onboarding -> OnboardingEntryComponent.MultiWalletMode.Onboarding
AppRoute.Onboarding.Mode.AddBackup -> OnboardingEntryComponent.MultiWalletMode.AddBackup
AppRoute.Onboarding.Mode.ContinueFinalize ->
OnboardingEntryComponent.MultiWalletMode.ContinueFinalize
},
),
componentFactory = onboardingEntryComponentFactory,

View file

@ -256,6 +256,7 @@ sealed class AppRoute(val path: String) : Route {
enum class Mode {
Onboarding, // general Mode
AddBackup, // continue backup process for existing wallet 1
ContinueFinalize, // continue finalize process (unfinished backup dialog)
}
}

View file

@ -14,6 +14,7 @@ interface OnboardingEntryComponent : ComposableContentComponent {
enum class MultiWalletMode {
Onboarding,
AddBackup,
ContinueFinalize,
}
interface Factory : ComponentFactory<Params, OnboardingEntryComponent>

View file

@ -67,8 +67,12 @@ internal class OnboardingEntryModel @Inject constructor(
private fun routeByProductType(scanResponse: ScanResponse): OnboardingRoute {
val multiWalletNavigationMode = when (params.multiWalletMode) {
OnboardingEntryComponent.MultiWalletMode.Onboarding -> OnboardingMultiWalletComponent.Mode.Onboarding
OnboardingEntryComponent.MultiWalletMode.AddBackup -> OnboardingMultiWalletComponent.Mode.AddBackup
OnboardingEntryComponent.MultiWalletMode.Onboarding ->
OnboardingMultiWalletComponent.Mode.Onboarding
OnboardingEntryComponent.MultiWalletMode.AddBackup ->
OnboardingMultiWalletComponent.Mode.AddBackup
OnboardingEntryComponent.MultiWalletMode.ContinueFinalize ->
OnboardingMultiWalletComponent.Mode.ContinueFinalize
}
return when (scanResponse.productType) {

View file

@ -20,6 +20,7 @@ interface OnboardingMultiWalletComponent : ComposableContentComponent, InnerNavi
enum class Mode {
Onboarding,
AddBackup,
ContinueFinalize,
}
interface Factory : ComponentFactory<Params, OnboardingMultiWalletComponent>

View file

@ -227,7 +227,9 @@ internal class MultiWalletFinalizeModel @Inject constructor(
val userWalletCreated = createUserWallet(scanResponse)
val userWallet = when (params.parentParams.mode) {
OnboardingMultiWalletComponent.Mode.Onboarding -> {
OnboardingMultiWalletComponent.Mode.Onboarding,
OnboardingMultiWalletComponent.Mode.ContinueFinalize,
-> {
userWalletsListManager.save(
userWallet = userWalletCreated.copy(
scanResponse = scanResponse.updateScanResponseAfterBackup(),

View file

@ -40,7 +40,7 @@ internal class OnboardingMultiWalletModel @Inject constructor(
currentStep = getInitialStep(),
currentScanResponse = params.scanResponse,
accessCode = null,
isThreeCards = true,
isThreeCards = isThreeCardsInit(),
resultUserWallet = null,
startFromFinalize = getInitialStartFromFinalize(),
),
@ -99,6 +99,8 @@ internal class OnboardingMultiWalletModel @Inject constructor(
val card = scanResponse.card
return when {
params.mode == OnboardingMultiWalletComponent.Mode.ContinueFinalize ->
OnboardingMultiWalletState.Step.Finalize
// Add backup button
// Wallet1 without backup and userwallet's scanResponse doesn't contain primary card.
card.wallets.isNotEmpty() && card.backupStatus == CardDTO.BackupStatus.NoBackup &&
@ -131,6 +133,18 @@ internal class OnboardingMultiWalletModel @Inject constructor(
}
}
private fun isThreeCardsInit(): Boolean {
val backupService = backupServiceHolder.backupService.get() ?: return true
return when (backupService.currentState) {
BackupService.State.FinalizingPrimaryCard,
is BackupService.State.FinalizingBackupCard,
-> {
backupService.addedBackupCardsCount > 1
}
else -> true
}
}
private fun initScreenTitle() {
val title = screenTitleByStep(getInitialStep())
params.titleProvider.changeTitle(title)