From 47c411b27006dbe1c62041dfc676021e2f01f048 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 11 Mar 2025 14:00:58 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../features/onboarding/OnboardingHelper.kt | 13 +++++++-- .../tangem/tap/routing/utils/ChildFactory.kt | 2 +- .../com/tangem/common/routing/AppRoute.kt | 1 + .../configs/feature_toggles_config.json | 4 +++ .../v2/OnboardingV2FeatureToggles.kt | 1 + .../v2/DefaultOnboardingV2FeatureToggles.kt | 2 ++ .../entry/impl/model/OnboardingEntryModel.kt | 5 ++++ .../impl/routing/OnboardingChildFactory.kt | 10 +++++++ .../v2/entry/impl/routing/OnboardingRoute.kt | 6 ++++ .../v2/entry/impl/ui/OnboardingEntry.kt | 7 ++++- .../v2/note/api/OnboardingNoteComponent.kt | 17 +++++++++++ .../impl/DefaultOnboardingNoteComponent.kt | 28 +++++++++++++++++++ .../v2/note/impl/di/ComponentModule.kt | 18 ++++++++++++ 13 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/api/OnboardingNoteComponent.kt create mode 100644 features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt create mode 100644 features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/di/ComponentModule.kt diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt index 502e216db1..2d53df4f9b 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt @@ -75,7 +75,8 @@ object OnboardingHelper { scanResponse.productType == ProductType.Ring || scanResponse.productType == ProductType.Wallet || scanResponse.productType == ProductType.Visa // AppRoute.OnboardingOther is also supported - if (store.inject(DaggerGraphState::onboardingV2FeatureToggles).isOnboardingV2Enabled && + val featureToggles = store.inject(DaggerGraphState::onboardingV2FeatureToggles) + if (featureToggles.isOnboardingV2Enabled && newOnboardingSupportTypes ) { val backupState = store.state.onboardingWalletState.backupState @@ -91,7 +92,15 @@ object OnboardingHelper { } return when (val type = scanResponse.productType) { - ProductType.Note -> AppRoute.OnboardingNote + ProductType.Note -> if (featureToggles.isNoteRefactoringEnabled) { + AppRoute.Onboarding( + scanResponse = scanResponse, + startFromBackup = false, + mode = AppRoute.Onboarding.Mode.Onboarding, + ) + } else { + AppRoute.OnboardingNote + } ProductType.Wallet, ProductType.Wallet2, ProductType.Ring, 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 07924cabd3..a852857c6d 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 @@ -364,8 +364,8 @@ internal class ChildFactory @Inject constructor( componentFactory = walletComponentFactory, ) } - is AppRoute.SaveWallet, is AppRoute.OnboardingNote, + is AppRoute.SaveWallet, is AppRoute.OnboardingOther, is AppRoute.OnboardingTwins, is AppRoute.OnboardingWallet, 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 ce6d8603f5..914a9ad067 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 @@ -40,6 +40,7 @@ sealed class AppRoute(val path: String) : Route { val isTosAccepted: Boolean, ) : AppRoute(path = "/disclaimer${if (isTosAccepted) "/tos_accepted" else ""}") + @Deprecated("Do not use! Should be replaced by an implementation in onboarding component") @Serializable data object OnboardingNote : AppRoute(path = "/onboarding/note") diff --git a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json index a7304f434c..20a7e31c0b 100644 --- a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json @@ -62,5 +62,9 @@ { "name": "ASK_BIOMETRY_REFACTORING_ENABLED", "version": "undefined" + }, + { + "name": "NOTE_REFACTORING_ENABLED", + "version": "undefined" } ] diff --git a/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/OnboardingV2FeatureToggles.kt b/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/OnboardingV2FeatureToggles.kt index 17841eaf7b..1845005df6 100644 --- a/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/OnboardingV2FeatureToggles.kt +++ b/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/OnboardingV2FeatureToggles.kt @@ -3,4 +3,5 @@ package com.tangem.features.onboarding.v2 interface OnboardingV2FeatureToggles { val isOnboardingV2Enabled: Boolean val isVisaOnboardingEnabled: Boolean + val isNoteRefactoringEnabled: Boolean } \ No newline at end of file diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt index 956f744182..41b7796f7a 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt @@ -10,4 +10,6 @@ internal class DefaultOnboardingV2FeatureToggles @Inject constructor( get() = featureTogglesManager.isFeatureEnabled("ONBOARDING_CODE_REFACTORING_ENABLED") override val isVisaOnboardingEnabled: Boolean get() = featureTogglesManager.isFeatureEnabled("VISA_ONBOARDING_ENABLED") + override val isNoteRefactoringEnabled: Boolean + get() = featureTogglesManager.isFeatureEnabled("NOTE_REFACTORING_ENABLED") } \ No newline at end of file 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 6381beb925..ff272adfb8 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 @@ -75,6 +75,11 @@ internal class OnboardingEntryModel @Inject constructor( titleProvider = titleProvider, onDone = ::onVisaOnboardingDone, ) + ProductType.Note -> OnboardingRoute.Note( + scanResponse = scanResponse, + titleProvider = titleProvider, + onDone = ::navigateToWalletScreen, + ) else -> error("Unsupported") } } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingChildFactory.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingChildFactory.kt index 6e614deefd..21976c01cb 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingChildFactory.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingChildFactory.kt @@ -4,6 +4,7 @@ import com.tangem.core.decompose.context.AppComponentContext import com.tangem.features.managetokens.component.OnboardingManageTokensComponent import com.tangem.features.onboarding.v2.done.api.OnboardingDoneComponent import com.tangem.features.onboarding.v2.multiwallet.api.OnboardingMultiWalletComponent +import com.tangem.features.onboarding.v2.note.api.OnboardingNoteComponent import com.tangem.features.onboarding.v2.visa.api.OnboardingVisaComponent import javax.inject.Inject @@ -12,6 +13,7 @@ internal class OnboardingChildFactory @Inject constructor( private val onboardingManageTokensComponentFactory: OnboardingManageTokensComponent.Factory, private val onboardingDoneComponentFactory: OnboardingDoneComponent.Factory, private val onBoardingVisaComponentFactory: OnboardingVisaComponent.Factory, + private val onboardingNoteComponentFactory: OnboardingNoteComponent.Factory, ) { fun createChild(route: OnboardingRoute, childContext: AppComponentContext, onManageTokensDone: () -> Unit): Any { @@ -47,6 +49,14 @@ internal class OnboardingChildFactory @Inject constructor( onDone = route.onDone, ), ) + is OnboardingRoute.Note -> onboardingNoteComponentFactory.create( + context = childContext, + params = OnboardingNoteComponent.Params( + scanResponse = route.scanResponse, + titleProvider = route.titleProvider, + onDone = route.onDone, + ), + ) else -> Unit } } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingRoute.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingRoute.kt index 69778da3b4..4686de8c0e 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingRoute.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/routing/OnboardingRoute.kt @@ -10,6 +10,12 @@ sealed class OnboardingRoute : Route { data object None : OnboardingRoute() + data class Note( + val titleProvider: TitleProvider, + val scanResponse: ScanResponse, + val onDone: () -> Unit, + ) : OnboardingRoute() + data class MultiWallet( val titleProvider: TitleProvider, val scanResponse: ScanResponse, diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/ui/OnboardingEntry.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/ui/OnboardingEntry.kt index 3ed12bd0e7..bfc7be83af 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/ui/OnboardingEntry.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/ui/OnboardingEntry.kt @@ -52,7 +52,12 @@ internal inline fun OnboardingEntry( modifier = modifier, ) } - OnboardingRoute.None -> {} + is OnboardingRoute.Note -> { + (it.instance as ComposableContentComponent).Content( + modifier = modifier, + ) + } + is OnboardingRoute.None -> {} } } } diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/api/OnboardingNoteComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/api/OnboardingNoteComponent.kt new file mode 100644 index 0000000000..3bbab7074a --- /dev/null +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/api/OnboardingNoteComponent.kt @@ -0,0 +1,17 @@ +package com.tangem.features.onboarding.v2.note.api + +import com.tangem.core.decompose.factory.ComponentFactory +import com.tangem.core.ui.decompose.ComposableContentComponent +import com.tangem.domain.models.scan.ScanResponse +import com.tangem.features.onboarding.v2.TitleProvider + +interface OnboardingNoteComponent : ComposableContentComponent { + + data class Params( + val titleProvider: TitleProvider, + val scanResponse: ScanResponse, + val onDone: () -> Unit, + ) + + interface Factory : ComponentFactory +} \ No newline at end of file diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt new file mode 100644 index 0000000000..3dacc2bdc0 --- /dev/null +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt @@ -0,0 +1,28 @@ +package com.tangem.features.onboarding.v2.note.impl + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.tangem.core.decompose.context.AppComponentContext +import com.tangem.features.onboarding.v2.note.api.OnboardingNoteComponent +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject + +internal class DefaultOnboardingNoteComponent @AssistedInject constructor( + @Assisted context: AppComponentContext, + @Assisted val params: OnboardingNoteComponent.Params, +) : OnboardingNoteComponent, AppComponentContext by context { + + @Composable + override fun Content(modifier: Modifier) { + // TODO [REDACTED_TASK_KEY] + } + + @AssistedFactory + interface Factory : OnboardingNoteComponent.Factory { + override fun create( + context: AppComponentContext, + params: OnboardingNoteComponent.Params, + ): DefaultOnboardingNoteComponent + } +} \ No newline at end of file diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/di/ComponentModule.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/di/ComponentModule.kt new file mode 100644 index 0000000000..49d9a5b659 --- /dev/null +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/di/ComponentModule.kt @@ -0,0 +1,18 @@ +package com.tangem.features.onboarding.v2.note.impl.di + +import com.tangem.features.onboarding.v2.note.api.OnboardingNoteComponent +import com.tangem.features.onboarding.v2.note.impl.DefaultOnboardingNoteComponent +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal interface ComponentModule { + + @Binds + @Singleton + fun bindComponent(factory: DefaultOnboardingNoteComponent.Factory): OnboardingNoteComponent.Factory +} \ No newline at end of file