Updated on 2026-08-14

This commit is contained in:
Tangem 2025-03-18 13:42:10 +03:00
parent 32c24c5cd0
commit c9b3b3f555
6 changed files with 27 additions and 29 deletions

View file

@ -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) {

View file

@ -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),

View file

@ -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,

View file

@ -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<OnboardingEntryComponent.Params>()
@ -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()
}

View file

@ -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)
}
}

View file

@ -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<OnboardingMultiWalletComponent.Params>()
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 ->