From d452b4ca23782fa1b0ecd184f8c336a7d9200bae Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 31 Mar 2025 11:50:51 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../wallet/redux/OnboardingWalletMiddleware.kt | 7 ++++++- .../tap/features/welcome/model/WelcomeModel.kt | 2 ++ .../com/tangem/tap/routing/utils/ChildFactory.kt | 4 ++++ .../kotlin/com/tangem/common/routing/AppRoute.kt | 1 + .../v2/entry/OnboardingEntryComponent.kt | 1 + .../v2/entry/impl/model/OnboardingEntryModel.kt | 8 ++++++-- .../api/OnboardingMultiWalletComponent.kt | 1 + .../finalize/model/MultiWalletFinalizeModel.kt | 4 +++- .../impl/model/OnboardingMultiWalletModel.kt | 16 +++++++++++++++- 9 files changed, 39 insertions(+), 5 deletions(-) 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 855d95ce35..c8f16739b1 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 @@ -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( diff --git a/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt b/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt index fd312671d9..7d15881d39 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt @@ -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, diff --git a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt index f437e1e6e9..1005d79f38 100644 --- a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt +++ b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt @@ -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, diff --git a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt index f033d76c1e..eb0c41ce29 100644 --- a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt @@ -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) } } diff --git a/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt b/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt index 9649b1e0c7..3728ca80ae 100644 --- a/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt +++ b/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt @@ -14,6 +14,7 @@ interface OnboardingEntryComponent : ComposableContentComponent { enum class MultiWalletMode { Onboarding, AddBackup, + ContinueFinalize, } interface Factory : ComponentFactory diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt index 45def47034..8deec2de9b 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt @@ -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) { diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt index 44fdf461ed..76ceb4466e 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt @@ -20,6 +20,7 @@ interface OnboardingMultiWalletComponent : ComposableContentComponent, InnerNavi enum class Mode { Onboarding, AddBackup, + ContinueFinalize, } interface Factory : ComponentFactory diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt index ebf937ae3d..a615402867 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt @@ -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(), diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt index f1c33ffc66..c7d7b2963a 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt @@ -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)