diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt deleted file mode 100644 index 328815f377..0000000000 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.tangem.tap.features.details.ui.cardsettings - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Modifier -import androidx.fragment.app.viewModels -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.tangem.core.ui.UiDependencies -import com.tangem.core.ui.screen.ComposeFragment -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject - -@AndroidEntryPoint -internal class CardSettingsFragment : ComposeFragment() { - - @Inject - override lateinit var uiDependencies: UiDependencies - - private val viewModel: CardSettingsViewModel by viewModels() - - @Composable - override fun ScreenContent(modifier: Modifier) { - val state by viewModel.screenState.collectAsStateWithLifecycle() - - CardSettingsScreen(modifier = modifier, state = state) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/DefaultCardSettingsComponent.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/DefaultCardSettingsComponent.kt new file mode 100644 index 0000000000..bb92d1a9a1 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/DefaultCardSettingsComponent.kt @@ -0,0 +1,36 @@ +package com.tangem.tap.features.details.ui.cardsettings + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.core.decompose.context.AppComponentContext +import com.tangem.core.decompose.model.getOrCreateModel +import com.tangem.tap.features.details.ui.cardsettings.api.CardSettingsComponent +import com.tangem.tap.features.details.ui.cardsettings.model.CardSettingsModel +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject + +internal class DefaultCardSettingsComponent @AssistedInject constructor( + @Assisted appComponentContext: AppComponentContext, + @Assisted params: CardSettingsComponent.Params, +) : CardSettingsComponent, AppComponentContext by appComponentContext { + + private val model: CardSettingsModel = getOrCreateModel(params) + + @Composable + override fun Content(modifier: Modifier) { + val state by model.screenState.collectAsStateWithLifecycle() + + CardSettingsScreen(modifier = modifier, state = state) + } + + @AssistedFactory + interface Factory : CardSettingsComponent.Factory { + override fun create( + context: AppComponentContext, + params: CardSettingsComponent.Params, + ): DefaultCardSettingsComponent + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/api/CardSettingsComponent.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/api/CardSettingsComponent.kt new file mode 100644 index 0000000000..608362caa8 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/api/CardSettingsComponent.kt @@ -0,0 +1,14 @@ +package com.tangem.tap.features.details.ui.cardsettings.api + +import com.tangem.core.decompose.factory.ComponentFactory +import com.tangem.core.ui.decompose.ComposableContentComponent +import com.tangem.domain.wallets.models.UserWalletId + +interface CardSettingsComponent : ComposableContentComponent { + + data class Params( + val userWalletId: UserWalletId, + ) + + interface Factory : ComponentFactory +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt deleted file mode 100644 index bcfe7cd28d..0000000000 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.tangem.tap.features.details.ui.cardsettings.coderecovery - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Modifier -import androidx.fragment.app.viewModels -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.tangem.common.routing.AppRouter -import com.tangem.core.ui.UiDependencies -import com.tangem.core.ui.screen.ComposeFragment -import com.tangem.tap.common.extensions.dispatchNavigationAction -import com.tangem.tap.store -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject - -@AndroidEntryPoint -class AccessCodeRecoveryFragment : ComposeFragment() { - - private val viewModel: AccessCodeRecoveryViewModel by viewModels() - - @Inject - override lateinit var uiDependencies: UiDependencies - - @Composable - override fun ScreenContent(modifier: Modifier) { - val state by viewModel.screenState.collectAsStateWithLifecycle() - - AccessCodeRecoveryScreen( - state = state, - onBackClick = { store.dispatchNavigationAction(AppRouter::pop) }, - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/DefaultAccessCodeRecoveryComponent.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/DefaultAccessCodeRecoveryComponent.kt new file mode 100644 index 0000000000..fd75548292 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/DefaultAccessCodeRecoveryComponent.kt @@ -0,0 +1,40 @@ +package com.tangem.tap.features.details.ui.cardsettings.coderecovery + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.common.routing.AppRouter +import com.tangem.core.decompose.context.AppComponentContext +import com.tangem.core.decompose.model.getOrCreateModel +import com.tangem.tap.common.extensions.dispatchNavigationAction +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.api.AccessCodeRecoveryComponent +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.model.AccessCodeRecoveryModel +import com.tangem.tap.store +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject + +@Suppress("UnusedPrivateMember") +internal class DefaultAccessCodeRecoveryComponent @AssistedInject constructor( + @Assisted appComponentContext: AppComponentContext, + @Assisted params: Unit, +) : AccessCodeRecoveryComponent, AppComponentContext by appComponentContext { + + private val model: AccessCodeRecoveryModel = getOrCreateModel() + + @Composable + override fun Content(modifier: Modifier) { + val state by model.screenState.collectAsStateWithLifecycle() + + AccessCodeRecoveryScreen( + state = state, + onBackClick = { store.dispatchNavigationAction(AppRouter::pop) }, + ) + } + + @AssistedFactory + interface Factory : AccessCodeRecoveryComponent.Factory { + override fun create(context: AppComponentContext, params: Unit): DefaultAccessCodeRecoveryComponent + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/api/AccessCodeRecoveryComponent.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/api/AccessCodeRecoveryComponent.kt new file mode 100644 index 0000000000..5cd2e1449c --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/api/AccessCodeRecoveryComponent.kt @@ -0,0 +1,9 @@ +package com.tangem.tap.features.details.ui.cardsettings.coderecovery.api + +import com.tangem.core.decompose.factory.ComponentFactory +import com.tangem.core.ui.decompose.ComposableContentComponent + +interface AccessCodeRecoveryComponent : ComposableContentComponent { + + interface Factory : ComponentFactory +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/di/AccessCodeRecoveryFeatureModule.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/di/AccessCodeRecoveryFeatureModule.kt new file mode 100644 index 0000000000..a4c86d70a7 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/di/AccessCodeRecoveryFeatureModule.kt @@ -0,0 +1,25 @@ +package com.tangem.tap.features.details.ui.cardsettings.coderecovery.di + +import com.tangem.core.decompose.model.Model +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.DefaultAccessCodeRecoveryComponent +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.api.AccessCodeRecoveryComponent +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.model.AccessCodeRecoveryModel +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import dagger.multibindings.ClassKey +import dagger.multibindings.IntoMap + +@Module +@InstallIn(SingletonComponent::class) +internal interface AccessCodeRecoveryFeatureModule { + + @Binds + fun bindFactory(impl: DefaultAccessCodeRecoveryComponent.Factory): AccessCodeRecoveryComponent.Factory + + @Binds + @IntoMap + @ClassKey(AccessCodeRecoveryModel::class) + fun bindModel(model: AccessCodeRecoveryModel): Model +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/model/AccessCodeRecoveryModel.kt similarity index 84% rename from app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryViewModel.kt rename to app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/model/AccessCodeRecoveryModel.kt index 1652506ca9..b3c2fb4878 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/model/AccessCodeRecoveryModel.kt @@ -1,29 +1,33 @@ -package com.tangem.tap.features.details.ui.cardsettings.coderecovery +package com.tangem.tap.features.details.ui.cardsettings.coderecovery.model -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope +import androidx.compose.runtime.Stable import com.tangem.common.doOnSuccess import com.tangem.common.routing.AppRouter import com.tangem.core.analytics.Analytics +import com.tangem.core.decompose.di.ComponentScoped +import com.tangem.core.decompose.model.Model import com.tangem.domain.common.util.cardTypesResolver import com.tangem.sdk.api.TangemSdkManager import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.Settings import com.tangem.tap.common.extensions.dispatchNavigationAction +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.AccessCodeRecoveryScreenState import com.tangem.tap.features.details.ui.cardsettings.domain.CardSettingsInteractor import com.tangem.tap.features.details.ui.common.utils.isAccessCodeRecoveryEnabled import com.tangem.tap.store -import dagger.hilt.android.lifecycle.HiltViewModel +import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import javax.inject.Inject -@HiltViewModel -internal class AccessCodeRecoveryViewModel @Inject constructor( +@Stable +@ComponentScoped +internal class AccessCodeRecoveryModel @Inject constructor( + override val dispatchers: CoroutineDispatcherProvider, private val tangemSdkManager: TangemSdkManager, private val cardSettingsInteractor: CardSettingsInteractor, -) : ViewModel() { +) : Model() { private val scannedScanResponse = cardSettingsInteractor.scannedScanResponse.value ?: error("Scan response is null") @@ -47,7 +51,7 @@ internal class AccessCodeRecoveryViewModel @Inject constructor( ) } - private fun saveChanges() = viewModelScope.launch { + private fun saveChanges() = modelScope.launch { val isEnabled = screenState.value.enabledSelection tangemSdkManager diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/di/CardSettingsFeatureModule.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/di/CardSettingsFeatureModule.kt new file mode 100644 index 0000000000..78f5ba6486 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/di/CardSettingsFeatureModule.kt @@ -0,0 +1,25 @@ +package com.tangem.tap.features.details.ui.cardsettings.di + +import com.tangem.core.decompose.model.Model +import com.tangem.tap.features.details.ui.cardsettings.api.CardSettingsComponent +import com.tangem.tap.features.details.ui.cardsettings.DefaultCardSettingsComponent +import com.tangem.tap.features.details.ui.cardsettings.model.CardSettingsModel +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import dagger.multibindings.ClassKey +import dagger.multibindings.IntoMap + +@Module +@InstallIn(SingletonComponent::class) +internal interface CardSettingsFeatureModule { + + @Binds + fun bindFactory(impl: DefaultCardSettingsComponent.Factory): CardSettingsComponent.Factory + + @Binds + @IntoMap + @ClassKey(CardSettingsModel::class) + fun bindModel(model: CardSettingsModel): Model +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/model/CardSettingsModel.kt similarity index 89% rename from app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt rename to app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/model/CardSettingsModel.kt index 68d354a90c..11964f58c4 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/model/CardSettingsModel.kt @@ -1,16 +1,15 @@ -package com.tangem.tap.features.details.ui.cardsettings +package com.tangem.tap.features.details.ui.cardsettings.model -import android.os.Bundle -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope +import androidx.compose.runtime.Stable import arrow.core.getOrElse import com.tangem.common.CompletionResult import com.tangem.common.doOnSuccess import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter -import com.tangem.common.routing.bundle.unbundle import com.tangem.core.analytics.Analytics +import com.tangem.core.decompose.di.ComponentScoped +import com.tangem.core.decompose.model.Model +import com.tangem.core.decompose.model.ParamsContainer import com.tangem.domain.card.ScanCardProcessor import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.common.CardTypesResolver @@ -20,7 +19,6 @@ import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.domain.wallets.builder.UserWalletIdBuilder -import com.tangem.domain.wallets.models.UserWalletId import com.tangem.domain.wallets.usecase.GetUserWalletUseCase import com.tangem.sdk.api.TangemSdkManager import com.tangem.tap.common.analytics.events.AnalyticsParam @@ -29,13 +27,16 @@ import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchNavigationAction import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.domain.extensions.signedHashesCount +import com.tangem.tap.features.details.ui.cardsettings.CardInfo +import com.tangem.tap.features.details.ui.cardsettings.CardSettingsScreenState +import com.tangem.tap.features.details.ui.cardsettings.api.CardSettingsComponent import com.tangem.tap.features.details.ui.cardsettings.domain.CardSettingsInteractor import com.tangem.tap.features.details.ui.common.utils.* import com.tangem.tap.features.onboarding.products.twins.redux.CreateTwinWalletMode import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction import com.tangem.tap.store +import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.wallet.R -import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -43,22 +44,24 @@ import timber.log.Timber import javax.inject.Inject @Suppress("LongParameterList") -@HiltViewModel -internal class CardSettingsViewModel @Inject constructor( +@Stable +@ComponentScoped +internal class CardSettingsModel @Inject constructor( + paramsContainer: ParamsContainer, + override val dispatchers: CoroutineDispatcherProvider, private val scanCardProcessor: ScanCardProcessor, private val tangemSdkManager: TangemSdkManager, private val cardSettingsInteractor: CardSettingsInteractor, private val getUserWalletUseCase: GetUserWalletUseCase, private val cardSdkConfigRepository: CardSdkConfigRepository, private val settingsRepository: SettingsRepository, - savedStateHandle: SavedStateHandle, -) : ViewModel() { +) : Model() { + + private val params = paramsContainer.require() private var previousBiometricsRequestPolicy: Boolean = false - private val userWalletId = savedStateHandle.get(AppRoute.CardSettings.USER_WALLET_ID_KEY) - ?.unbundle(UserWalletId.serializer()) - ?: error("User wallet ID is required for CardSettingsViewModel") + private val userWalletId = params.userWalletId val screenState: MutableStateFlow = MutableStateFlow(getInitialState()) @@ -68,10 +71,11 @@ internal class CardSettingsViewModel @Inject constructor( cardSettingsInteractor.scannedScanResponse .filterNotNull() .onEach(::updateCardDetails) - .launchIn(viewModelScope) + .launchIn(modelScope) } - override fun onCleared() { + override fun onDestroy() { + super.onDestroy() // Restore the previous value of access code request policy cardSdkConfigRepository.isBiometricsRequestPolicy = previousBiometricsRequestPolicy } @@ -96,7 +100,7 @@ internal class CardSettingsViewModel @Inject constructor( onBackClick = ::onBackClick, ) - private fun scanCard() = viewModelScope.launch { + private fun scanCard() = modelScope.launch { scanCardProcessor.scan( analyticsSource = com.tangem.core.analytics.models.AnalyticsParam.ScreensSources.Settings, allowsRequestAccessCodeFromRepository = true, @@ -217,7 +221,7 @@ internal class CardSettingsViewModel @Inject constructor( } } - private fun changeAccessCode() = viewModelScope.launch { + private fun changeAccessCode() = modelScope.launch { val scanResponse = requireNotNull(cardSettingsInteractor.scannedScanResponse.value) { "Scan response is null" } when (val result = tangemSdkManager.setAccessCode(scanResponse.card.cardId)) { 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 2342a80e63..5818faad8e 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 @@ -22,8 +22,8 @@ import com.tangem.features.tokendetails.TokenDetailsComponent import com.tangem.features.wallet.navigation.WalletRouter import com.tangem.tap.features.details.ui.appcurrency.AppCurrencySelectorFragment import com.tangem.tap.features.details.ui.appsettings.AppSettingsFragment -import com.tangem.tap.features.details.ui.cardsettings.CardSettingsFragment -import com.tangem.tap.features.details.ui.cardsettings.coderecovery.AccessCodeRecoveryFragment +import com.tangem.tap.features.details.ui.cardsettings.api.CardSettingsComponent +import com.tangem.tap.features.details.ui.cardsettings.coderecovery.api.AccessCodeRecoveryComponent import com.tangem.tap.features.details.ui.resetcard.ResetCardFragment import com.tangem.tap.features.details.ui.securitymode.SecurityModeFragment import com.tangem.tap.features.details.ui.walletconnect.api.WalletConnectComponent @@ -65,6 +65,8 @@ internal class ChildFactory @Inject constructor( private val tokenDetailsComponentFactory: TokenDetailsComponent.Factory, private val walletConnectComponentFactory: WalletConnectComponent.Factory, private val qrScanningComponentFactory: QrScanningComponent.Factory, + private val accessCodeRecoveryComponentFactory: AccessCodeRecoveryComponent.Factory, + private val cardSettingsComponentFactory: CardSettingsComponent.Factory, private val walletRouter: WalletRouter, private val testerRouter: TesterRouter, private val pushNotificationRouter: PushNotificationsRouter, @@ -285,11 +287,23 @@ internal class ChildFactory @Inject constructor( componentFactory = qrScanningComponentFactory, ) } - is AppRoute.AccessCodeRecovery, + is AppRoute.AccessCodeRecovery -> { + createComponentChild( + contextProvider = contextProvider(route, contextFactory), + params = Unit, + componentFactory = accessCodeRecoveryComponentFactory, + ) + } + is AppRoute.CardSettings -> { + createComponentChild( + contextProvider = contextProvider(route, contextFactory), + params = CardSettingsComponent.Params(userWalletId = route.userWalletId), + componentFactory = cardSettingsComponentFactory, + ) + } is AppRoute.AppCurrencySelector, is AppRoute.SaveWallet, is AppRoute.AppSettings, - is AppRoute.CardSettings, is AppRoute.DetailsSecurity, is AppRoute.OnboardingNote, is AppRoute.OnboardingOther, @@ -314,7 +328,11 @@ internal class ChildFactory @Inject constructor( Child.Initial } is AppRoute.AccessCodeRecovery -> { - route.asFragmentChild(Provider { AccessCodeRecoveryFragment() }) + route.asComponentChild( + contextProvider = contextProvider(route, contextFactory), + params = Unit, + componentFactory = accessCodeRecoveryComponentFactory, + ) } is AppRoute.AppCurrencySelector -> { route.asFragmentChild(Provider { AppCurrencySelectorFragment() }) @@ -340,7 +358,11 @@ internal class ChildFactory @Inject constructor( route.asFragmentChild(Provider { AppSettingsFragment() }) } is AppRoute.CardSettings -> { - route.asFragmentChild(Provider { CardSettingsFragment() }) + route.asComponentChild( + contextProvider = contextProvider(route, contextFactory), + params = CardSettingsComponent.Params(userWalletId = route.userWalletId), + componentFactory = cardSettingsComponentFactory, + ) } is AppRoute.Details -> { route.asComponentChild( 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 62df97b518..2d3246daa6 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 @@ -111,14 +111,7 @@ sealed class AppRoute(val path: String) : Route { @Serializable data class CardSettings( val userWalletId: UserWalletId, - ) : AppRoute(path = "/card_settings/${userWalletId.stringValue}"), RouteBundleParams { - - override fun getBundle(): Bundle = bundle(serializer()) - - companion object { - const val USER_WALLET_ID_KEY = "userWalletId" - } - } + ) : AppRoute(path = "/card_settings/${userWalletId.stringValue}") @Serializable data object AppSettings : AppRoute(path = "/app_settings") diff --git a/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/VisaActivationOrderInfo.kt b/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/VisaActivationOrderInfo.kt index b8320e7678..78bbd9692b 100644 --- a/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/VisaActivationOrderInfo.kt +++ b/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/VisaActivationOrderInfo.kt @@ -1,9 +1,11 @@ package com.tangem.domain.visa.model import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import kotlinx.serialization.Serializable @Serializable +@JsonClass(generateAdapter = true) data class VisaActivationOrderInfo( @Json(name = "orderId") val orderId: String, @Json(name = "customer_id") val customerId: String,