Updated on 2026-08-14

This commit is contained in:
Tangem 2025-03-18 15:22:15 +03:00
parent 0e11a8512f
commit 0b9ab4392f
8 changed files with 112 additions and 1 deletions

View file

@ -69,6 +69,7 @@ object OnboardingHelper {
}
}
@Suppress("CyclomaticComplexMethod")
fun whereToNavigate(scanResponse: ScanResponse): AppRoute {
val newOnboardingSupportTypes = scanResponse.productType == ProductType.Wallet2 ||
scanResponse.productType == ProductType.Ring ||
@ -103,7 +104,11 @@ object OnboardingHelper {
} else {
AppRoute.OnboardingOther
}
ProductType.Twins -> AppRoute.OnboardingTwins
ProductType.Twins -> if (featureToggles.isTwinRefactoringEnabled) {
AppRoute.Onboarding(scanResponse = scanResponse)
} else {
AppRoute.OnboardingTwins
}
ProductType.Start2Coin,
ProductType.Visa,
-> throw UnsupportedOperationException("Onboarding for ${type.name} cards is not supported")

View file

@ -70,5 +70,9 @@
{
"name": "NEW_ATTESTATION_ENABLED",
"version": "undefined"
},
{
"name": "TWIN_REFACTORING_ENABLED",
"version": "undefined"
}
]

View file

@ -4,4 +4,5 @@ interface OnboardingV2FeatureToggles {
val isOnboardingV2Enabled: Boolean
val isVisaOnboardingEnabled: Boolean
val isNoteRefactoringEnabled: Boolean
val isTwinRefactoringEnabled: Boolean
}

View file

@ -12,4 +12,6 @@ internal class DefaultOnboardingV2FeatureToggles @Inject constructor(
get() = featureTogglesManager.isFeatureEnabled("VISA_ONBOARDING_ENABLED")
override val isNoteRefactoringEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("NOTE_REFACTORING_ENABLED")
override val isTwinRefactoringEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("TWIN_REFACTORING_ENABLED")
}

View file

@ -0,0 +1,21 @@
package com.tangem.features.onboarding.v2.twin.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 OnboardingTwinComponent : ComposableContentComponent {
data class Params(
val titleProvider: TitleProvider,
val scanResponse: ScanResponse,
val modelCallbacks: ModelCallbacks,
)
interface ModelCallbacks {
fun onDone()
}
interface Factory : ComponentFactory<Params, OnboardingTwinComponent>
}

View file

@ -0,0 +1,32 @@
package com.tangem.features.onboarding.v2.twin.impl
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.features.onboarding.v2.twin.api.OnboardingTwinComponent
import com.tangem.features.onboarding.v2.twin.impl.model.OnboardingTwinModel
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
class DefaultOnboardingTwinComponent @AssistedInject constructor(
@Assisted appComponentContext: AppComponentContext,
@Assisted params: OnboardingTwinComponent.Params,
) : OnboardingTwinComponent, AppComponentContext by appComponentContext {
private val model: OnboardingTwinModel = getOrCreateModel(params)
@Composable
override fun Content(modifier: Modifier) {
TODO("Not yet implemented")
}
@AssistedFactory
interface Factory : OnboardingTwinComponent.Factory {
override fun create(
context: AppComponentContext,
params: OnboardingTwinComponent.Params,
): DefaultOnboardingTwinComponent
}
}

View file

@ -0,0 +1,33 @@
package com.tangem.features.onboarding.v2.twin.impl.di
import com.tangem.core.decompose.di.ModelComponent
import com.tangem.core.decompose.model.Model
import com.tangem.features.onboarding.v2.twin.api.OnboardingTwinComponent
import com.tangem.features.onboarding.v2.twin.impl.DefaultOnboardingTwinComponent
import com.tangem.features.onboarding.v2.twin.impl.model.OnboardingTwinModel
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
internal interface ComponentModule {
@Binds
@Singleton
fun bindComponent(factory: DefaultOnboardingTwinComponent.Factory): OnboardingTwinComponent.Factory
}
@Module
@InstallIn(ModelComponent::class)
internal interface ModelModule {
@Binds
@IntoMap
@ClassKey(OnboardingTwinModel::class)
fun provideModel(model: OnboardingTwinModel): Model
}

View file

@ -0,0 +1,13 @@
package com.tangem.features.onboarding.v2.twin.impl.model
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import javax.inject.Inject
@ModelScoped
class OnboardingTwinModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
) : Model() {
// TODO
}