From c9b3b3f555bacdaa0bf050e5c027aaa8442200b4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 18 Mar 2025 13:42:10 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../features/biometry/impl/ui/AskBiometry.kt | 2 +- .../ui/CantLeaveBackupDialog.kt} | 4 ++-- .../impl/DefaultOnboardingEntryComponent.kt | 11 +++++----- .../entry/impl/model/OnboardingEntryModel.kt | 15 +++++++++---- .../model/MultiWalletFinalizeModel.kt | 3 ++- .../impl/model/OnboardingMultiWalletModel.kt | 21 ++++++------------- 6 files changed, 27 insertions(+), 29 deletions(-) rename features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/{multiwallet/impl/child/finalize/model/CantLeaveFinalizeDialog.kt => common/ui/CantLeaveBackupDialog.kt} (73%) diff --git a/features/biometry/impl/src/main/kotlin/com/tangem/features/biometry/impl/ui/AskBiometry.kt b/features/biometry/impl/src/main/kotlin/com/tangem/features/biometry/impl/ui/AskBiometry.kt index 913b028223..cd367b9850 100644 --- a/features/biometry/impl/src/main/kotlin/com/tangem/features/biometry/impl/ui/AskBiometry.kt +++ b/features/biometry/impl/src/main/kotlin/com/tangem/features/biometry/impl/ui/AskBiometry.kt @@ -17,8 +17,8 @@ import com.tangem.core.ui.components.* import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview -import com.tangem.features.biometry.impl.ui.state.AskBiometryUM import com.tangem.features.biometry.R +import com.tangem.features.biometry.impl.ui.state.AskBiometryUM @Composable internal fun AskBiometry(state: AskBiometryUM, modifier: Modifier = Modifier) { diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/CantLeaveFinalizeDialog.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/common/ui/CantLeaveBackupDialog.kt similarity index 73% rename from features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/CantLeaveFinalizeDialog.kt rename to features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/common/ui/CantLeaveBackupDialog.kt index 92e3be5491..00b61fe30f 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/CantLeaveFinalizeDialog.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/common/ui/CantLeaveBackupDialog.kt @@ -1,11 +1,11 @@ -package com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize.model +package com.tangem.features.onboarding.v2.common.ui import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.message.DialogMessage import com.tangem.core.ui.message.EventMessageAction import com.tangem.features.onboarding.v2.impl.R -internal val CantLeaveFinalizeDialog: DialogMessage = DialogMessage( +internal val CantLeaveBackupDialog: DialogMessage = DialogMessage( message = resourceReference(R.string.onboarding_backup_exit_warning), firstAction = EventMessageAction( title = resourceReference(R.string.warning_button_ok), diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/DefaultOnboardingEntryComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/DefaultOnboardingEntryComponent.kt index 05eabc3965..8e6cf0d6c5 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/DefaultOnboardingEntryComponent.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/DefaultOnboardingEntryComponent.kt @@ -53,7 +53,7 @@ internal class DefaultOnboardingEntryComponent @AssistedInject constructor( popBack = { popInternal { success -> if (success.not()) { - model.stackNavigation.pop() + model.onBack() } } }, @@ -113,15 +113,15 @@ internal class DefaultOnboardingEntryComponent @AssistedInject constructor( stepperComponent.state.update { it.copy( currentStep = when (stack.active.configuration) { - is OnboardingRoute.AskBiometry -> 7 - is OnboardingRoute.ManageTokens -> 8 + is OnboardingRoute.ManageTokens -> 7 + is OnboardingRoute.AskBiometry -> 8 is OnboardingRoute.Done -> 9 else -> error("Unsupported route") }, steps = 9, title = when (stack.active.configuration) { - is OnboardingRoute.AskBiometry -> resourceReference(R.string.onboarding_navbar_save_wallet) is OnboardingRoute.ManageTokens -> resourceReference(R.string.main_manage_tokens) + is OnboardingRoute.AskBiometry -> resourceReference(R.string.onboarding_navbar_save_wallet) is OnboardingRoute.Done -> resourceReference(R.string.onboarding_done_header) else -> error("Unsupported route") }, @@ -144,8 +144,7 @@ internal class DefaultOnboardingEntryComponent @AssistedInject constructor( override fun Content(modifier: Modifier) { val innerStackState by innerStack.subscribeAsState() - // prevent back navigation - BackHandler { } + BackHandler { model.onBack() } OnboardingEntry( modifier = modifier, 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 75ce0e4bcf..45def47034 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 @@ -8,6 +8,7 @@ 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.decompose.navigation.Router +import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.stringReference import com.tangem.domain.common.util.cardTypesResolver @@ -18,6 +19,7 @@ import com.tangem.domain.wallets.models.UserWallet import com.tangem.features.biometry.AskBiometryComponent import com.tangem.features.biometry.BiometryFeatureToggles import com.tangem.features.onboarding.v2.TitleProvider +import com.tangem.features.onboarding.v2.common.ui.CantLeaveBackupDialog import com.tangem.features.onboarding.v2.entry.OnboardingEntryComponent import com.tangem.features.onboarding.v2.entry.impl.analytics.OnboardingEntryEvent import com.tangem.features.onboarding.v2.entry.impl.routing.OnboardingRoute @@ -40,6 +42,7 @@ internal class OnboardingEntryModel @Inject constructor( private val settingsRepository: SettingsRepository, private val askBiometryFeatureToggles: BiometryFeatureToggles, private val analyticsEventHandler: AnalyticsEventHandler, + private val uiMessageSender: UiMessageSender, ) : Model() { private val params = paramsContainer.require() @@ -54,6 +57,14 @@ internal class OnboardingEntryModel @Inject constructor( val startRoute = routeByProductType(params.scanResponse) + fun onManageTokensDone() { + navigateToFinalScreenFlow() + } + + fun onBack() { + uiMessageSender.send(CantLeaveBackupDialog) + } + private fun routeByProductType(scanResponse: ScanResponse): OnboardingRoute { val multiWalletNavigationMode = when (params.multiWalletMode) { OnboardingEntryComponent.MultiWalletMode.Onboarding -> OnboardingMultiWalletComponent.Mode.Onboarding @@ -105,10 +116,6 @@ internal class OnboardingEntryModel @Inject constructor( } } - fun onManageTokensDone() { - navigateToFinalScreenFlow() - } - private fun onVisaOnboardingDone() { navigateToFinalScreenFlow() } 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 eea8684ef3..ebf937ae3d 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 @@ -21,6 +21,7 @@ import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.usecase.GenerateWalletNameUseCase +import com.tangem.features.onboarding.v2.common.ui.CantLeaveBackupDialog import com.tangem.features.onboarding.v2.impl.R import com.tangem.features.onboarding.v2.multiwallet.api.OnboardingMultiWalletComponent import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildParams @@ -96,7 +97,7 @@ internal class MultiWalletFinalizeModel @Inject constructor( if (uiState.value.scanPrimary) { modelScope.launch { onBackFlow.emit(Unit) } } else { - uiMessageSender.send(CantLeaveFinalizeDialog) + uiMessageSender.send(CantLeaveBackupDialog) } } 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 7b11113ad6..f1c33ffc66 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 @@ -5,10 +5,9 @@ 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.decompose.navigation.Router -import com.tangem.datasource.local.preferences.AppPreferencesStore -import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ProductType +import com.tangem.domain.onboarding.repository.OnboardingRepository import com.tangem.domain.wallets.usecase.GetCardImageUseCase import com.tangem.features.onboarding.v2.multiwallet.api.OnboardingMultiWalletComponent import com.tangem.features.onboarding.v2.multiwallet.impl.analytics.OnboardingEvent @@ -30,7 +29,7 @@ internal class OnboardingMultiWalletModel @Inject constructor( private val router: Router, private val analyticsHandler: AnalyticsEventHandler, private val backupServiceHolder: BackupServiceHolder, - private val appPreferencesStore: AppPreferencesStore, + private val onboardingRepository: OnboardingRepository, ) : Model() { private val params = paramsContainer.require() private val getCardImageUseCase = GetCardImageUseCase() @@ -61,8 +60,10 @@ internal class OnboardingMultiWalletModel @Inject constructor( st.copy( dialog = interruptBackupDialog( onConfirm = { - removeFinalizeScanResponseState() - router.pop() + modelScope.launch { + onboardingRepository.clearUnfinishedFinalizeOnboarding() + router.pop() + } }, dismiss = { _uiState.update { it.copy(dialog = null) } }, ), @@ -70,16 +71,6 @@ internal class OnboardingMultiWalletModel @Inject constructor( } } - private fun removeFinalizeScanResponseState() { - // discarding onboarding means we have to remove scan response from preferences - // to prevent showing finalize screen dialog on next app start - modelScope.launch { - appPreferencesStore.editData { mutablePreferences -> - mutablePreferences.remove(PreferencesKeys.ONBOARDING_FINALIZE_SCAN_RESPONSE_KEY) - } - } - } - private fun subscribeToBackups() { modelScope.launch { backups.collectLatest { backup ->