Updated on 2026-08-14

This commit is contained in:
Tangem 2025-03-17 13:33:13 +03:00
parent 995c082869
commit 8990adcc6e
9 changed files with 32 additions and 31 deletions

View file

@ -83,7 +83,6 @@ object OnboardingHelper {
return AppRoute.Onboarding(
scanResponse = scanResponse,
startFromBackup = false,
mode = when (backupState.startedSource) {
BackupStartedSource.Onboarding -> AppRoute.Onboarding.Mode.Onboarding
BackupStartedSource.CreateBackup -> AppRoute.Onboarding.Mode.AddBackup
@ -93,11 +92,7 @@ object OnboardingHelper {
return when (val type = scanResponse.productType) {
ProductType.Note -> if (featureToggles.isNoteRefactoringEnabled) {
AppRoute.Onboarding(
scanResponse = scanResponse,
startFromBackup = false,
mode = AppRoute.Onboarding.Mode.Onboarding,
)
AppRoute.Onboarding(scanResponse = scanResponse)
} else {
AppRoute.OnboardingNote
}

View file

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

View file

@ -202,7 +202,6 @@ internal class ChildFactory @Inject constructor(
contextProvider = contextProvider(route, contextFactory),
params = OnboardingEntryComponent.Params(
scanResponse = route.scanResponse,
startBackupFlow = route.startFromBackup,
multiWalletMode = when (route.mode) {
AppRoute.Onboarding.Mode.Onboarding -> OnboardingEntryComponent.MultiWalletMode.Onboarding
AppRoute.Onboarding.Mode.AddBackup -> OnboardingEntryComponent.MultiWalletMode.AddBackup
@ -641,7 +640,6 @@ internal class ChildFactory @Inject constructor(
contextProvider = contextProvider(route, contextFactory),
params = OnboardingEntryComponent.Params(
scanResponse = route.scanResponse,
startBackupFlow = route.startFromBackup,
multiWalletMode = when (route.mode) {
AppRoute.Onboarding.Mode.Onboarding -> OnboardingEntryComponent.MultiWalletMode.Onboarding
AppRoute.Onboarding.Mode.AddBackup -> OnboardingEntryComponent.MultiWalletMode.AddBackup

View file

@ -245,15 +245,13 @@ sealed class AppRoute(val path: String) : Route {
/**
* Onboarding V2
* @property scanResponse scan response, determines onboarding route by the product type
* @property startFromBackup (MultiWallet param, doesn't affect other types) start onboarding from backup
* @property mode (MultiWallet param, doesn't affect other types) onboarding mode
*/
@Serializable
data class Onboarding(
val scanResponse: ScanResponse,
val startFromBackup: Boolean = false,
val mode: Mode = Mode.Onboarding,
) : AppRoute(path = "/onboarding_v2${if (startFromBackup) "/backup" else ""}") {
) : AppRoute(path = "/onboarding_v2/${mode.name}") {
enum class Mode {
Onboarding, // general Mode

View file

@ -8,7 +8,6 @@ interface OnboardingEntryComponent : ComposableContentComponent {
data class Params(
val scanResponse: ScanResponse,
val startBackupFlow: Boolean,
val multiWalletMode: MultiWalletMode,
)

View file

@ -92,10 +92,16 @@ internal class OnboardingEntryModel @Inject constructor(
}
private fun onMultiWalletOnboardingDone(userWallet: UserWallet) {
if (userWallet.scanResponse.cardTypesResolver.isMultiwalletAllowed()) {
stackNavigation.replaceAll(OnboardingRoute.ManageTokens(userWallet))
} else {
navigateToFinalScreenFlow()
when {
params.multiWalletMode == OnboardingEntryComponent.MultiWalletMode.AddBackup -> {
stackNavigation.replaceAll(OnboardingRoute.Done(onDone = ::navigateToWalletScreen))
}
userWallet.scanResponse.cardTypesResolver.isMultiwalletAllowed() -> {
stackNavigation.replaceAll(OnboardingRoute.ManageTokens(userWallet))
}
else -> {
navigateToFinalScreenFlow()
}
}
}

View file

@ -17,6 +17,7 @@ dependencies {
implementation(projects.features.walletSettings.api)
implementation(projects.features.manageTokens.api)
implementation(projects.features.nft.api)
implementation(projects.features.onboardingV2.api)
/* Project - Core */
implementation(projects.core.decompose)

View file

@ -33,6 +33,7 @@ import com.tangem.feature.walletsettings.entity.WalletSettingsUM
import com.tangem.feature.walletsettings.impl.R
import com.tangem.feature.walletsettings.utils.ItemsBuilder
import com.tangem.features.nft.NFTFeatureToggles
import com.tangem.features.onboarding.v2.OnboardingV2FeatureToggles
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
@ -57,6 +58,7 @@ internal class WalletSettingsModel @Inject constructor(
private val getShouldSaveUserWalletsSyncUseCase: ShouldSaveUserWalletsSyncUseCase,
private val walletsRepository: WalletsRepository,
private val nftFeatureToggles: NFTFeatureToggles,
private val onboardingV2FeatureToggles: OnboardingV2FeatureToggles,
) : Model() {
val params: WalletSettingsComponent.Params = paramsContainer.require()
@ -156,17 +158,25 @@ internal class WalletSettingsModel @Inject constructor(
private fun onLinkMoreCardsClick(scanResponse: ScanResponse) {
analyticsEventHandler.send(Settings.ButtonCreateBackup)
analyticsContextProxy.addContext(scanResponse)
reduxStateHolder.dispatch(
LegacyAction.StartOnboardingProcess(
scanResponse = scanResponse,
canSkipBackup = false,
),
)
if (onboardingV2FeatureToggles.isOnboardingV2Enabled) {
router.push(
AppRoute.Onboarding(
scanResponse = scanResponse,
mode = AppRoute.Onboarding.Mode.AddBackup,
),
)
} else {
reduxStateHolder.dispatch(
LegacyAction.StartOnboardingProcess(
scanResponse = scanResponse,
canSkipBackup = false,
),
)
router.push(AppRoute.OnboardingWallet())
router.push(AppRoute.OnboardingWallet())
}
}
private fun onCheckedNFTChange(isChecked: Boolean) {

View file

@ -53,7 +53,6 @@ internal class DefaultWalletRouter @Inject constructor(
router.push(
AppRoute.Onboarding(
scanResponse = scanResponse,
startFromBackup = true,
mode = if (continueBackup) {
AppRoute.Onboarding.Mode.AddBackup
} else {