diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 1a6869a4a5..62a0089954 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -49,7 +49,6 @@ import com.tangem.domain.tokens.GetPolkadotCheckHasResetUseCase import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.feature.qrscanning.QrScanningRouter import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent -import com.tangem.features.disclaimer.api.DisclaimerRouter import com.tangem.features.pushnotifications.api.navigation.PushNotificationsRouter import com.tangem.features.send.api.navigation.SendRouter import com.tangem.features.staking.api.navigation.StakingRouter @@ -175,9 +174,6 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac @Inject internal lateinit var routingComponentFactory: RoutingComponent.Factory - @Inject - lateinit var disclaimerRouter: DisclaimerRouter - @Inject lateinit var pushNotificationsRouter: PushNotificationsRouter @@ -298,7 +294,6 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac qrScanningRouter = qrScanningRouter, emailSender = emailSender, stakingRouter = stakingRouter, - disclaimerRouter = disclaimerRouter, pushNotificationsRouter = pushNotificationsRouter, ), ) diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt index a141560335..0f3c13fbf9 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt @@ -4,7 +4,6 @@ import com.tangem.core.navigation.email.EmailSender import com.tangem.domain.card.ScanCardUseCase import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.feature.qrscanning.QrScanningRouter -import com.tangem.features.disclaimer.api.DisclaimerRouter import com.tangem.features.pushnotifications.api.navigation.PushNotificationsRouter import com.tangem.features.send.api.navigation.SendRouter import com.tangem.features.staking.api.navigation.StakingRouter @@ -27,7 +26,6 @@ sealed interface DaggerGraphAction : Action { val qrScanningRouter: QrScanningRouter, val emailSender: EmailSender, val stakingRouter: StakingRouter, - val disclaimerRouter: DisclaimerRouter, val pushNotificationsRouter: PushNotificationsRouter, ) : DaggerGraphAction } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt index 77f2897541..2a20bab5b6 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt @@ -23,7 +23,6 @@ object DaggerGraphReducer { qrScanningRouter = action.qrScanningRouter, emailSender = action.emailSender, stakingRouter = action.stakingRouter, - disclaimerRouter = action.disclaimerRouter, pushNotificationsRouter = action.pushNotificationsRouter, ) } diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt index 80779536e5..ee435bc6ec 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt @@ -30,7 +30,6 @@ import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.usecase.GenerateWalletNameUseCase import com.tangem.feature.qrscanning.QrScanningRouter import com.tangem.features.details.DetailsFeatureToggles -import com.tangem.features.disclaimer.api.DisclaimerRouter import com.tangem.features.pushnotifications.api.featuretoggles.PushNotificationsFeatureToggles import com.tangem.features.pushnotifications.api.navigation.PushNotificationsRouter import com.tangem.features.send.api.featuretoggles.SendFeatureToggles @@ -88,7 +87,6 @@ data class DaggerGraphState( val urlOpener: UrlOpener? = null, val shareManager: ShareManager? = null, val appRouter: AppRouter? = null, - val disclaimerRouter: DisclaimerRouter? = null, val pushNotificationsFeatureToggles: PushNotificationsFeatureToggles? = null, val pushNotificationsRouter: PushNotificationsRouter? = null, ) : StateType \ No newline at end of file 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 48df79739b..8b3c22a7f9 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 @@ -8,7 +8,7 @@ import com.tangem.feature.swap.presentation.SwapFragment import com.tangem.feature.walletsettings.component.WalletSettingsComponent import com.tangem.features.details.DetailsFeatureToggles import com.tangem.features.details.component.DetailsComponent -import com.tangem.features.disclaimer.api.DisclaimerRouter +import com.tangem.features.disclaimer.api.components.DisclaimerComponent import com.tangem.features.pushnotifications.api.featuretoggles.PushNotificationsFeatureToggles import com.tangem.features.pushnotifications.api.navigation.PushNotificationsRouter import com.tangem.features.send.api.navigation.SendRouter @@ -46,6 +46,7 @@ import javax.inject.Inject internal class ChildFactory @Inject constructor( private val detailsComponentFactory: DetailsComponent.Factory, private val walletSettingsComponentFactory: WalletSettingsComponent.Factory, + private val disclaimerComponentFactory: DisclaimerComponent.Factory, private val sendRouter: SendRouter, private val tokenDetailsRouter: TokenDetailsRouter, private val walletRouter: WalletRouter, @@ -55,7 +56,6 @@ internal class ChildFactory @Inject constructor( private val detailsFeatureToggles: DetailsFeatureToggles, private val pushNotificationsFeatureToggles: PushNotificationsFeatureToggles, private val pushNotificationRouter: PushNotificationsRouter, - private val disclaimerRouter: DisclaimerRouter, ) { @Suppress("LongMethod", "CyclomaticComplexMethod") @@ -106,7 +106,11 @@ internal class ChildFactory @Inject constructor( } is AppRoute.Disclaimer -> { if (pushNotificationsFeatureToggles.isPushNotificationsEnabled) { - route.asFragmentChild(Provider { disclaimerRouter.entryFragment() }) + route.asComponentChild( + contextProvider = contextProvider(route, contextFactory), + params = DisclaimerComponent.Params(route.isTosAccepted), + componentFactory = disclaimerComponentFactory, + ) } else { route.asFragmentChild(Provider { DisclaimerFragment() }) } diff --git a/features/disclaimer/api/build.gradle.kts b/features/disclaimer/api/build.gradle.kts index fcd117da1b..7b97fa25c1 100644 --- a/features/disclaimer/api/build.gradle.kts +++ b/features/disclaimer/api/build.gradle.kts @@ -10,6 +10,7 @@ android { dependencies { - /** AndroidX */ - implementation(deps.androidx.fragment.ktx) + /* Project - Core */ + implementation(projects.core.decompose) + implementation(projects.core.ui) } \ No newline at end of file diff --git a/features/disclaimer/api/src/main/java/com/tangem/features/disclaimer/api/DisclaimerRouter.kt b/features/disclaimer/api/src/main/java/com/tangem/features/disclaimer/api/DisclaimerRouter.kt deleted file mode 100644 index e990639fc8..0000000000 --- a/features/disclaimer/api/src/main/java/com/tangem/features/disclaimer/api/DisclaimerRouter.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.tangem.features.disclaimer.api - -import androidx.fragment.app.Fragment - -interface DisclaimerRouter { - - fun entryFragment(): Fragment -} \ No newline at end of file diff --git a/features/disclaimer/api/src/main/java/com/tangem/features/disclaimer/api/components/DisclaimerComponent.kt b/features/disclaimer/api/src/main/java/com/tangem/features/disclaimer/api/components/DisclaimerComponent.kt new file mode 100644 index 0000000000..df556bb776 --- /dev/null +++ b/features/disclaimer/api/src/main/java/com/tangem/features/disclaimer/api/components/DisclaimerComponent.kt @@ -0,0 +1,12 @@ +package com.tangem.features.disclaimer.api.components + +import com.tangem.core.decompose.factory.ComponentFactory +import com.tangem.core.ui.decompose.ComposableContentComponent + +interface DisclaimerComponent : ComposableContentComponent { + interface Factory : ComponentFactory + + data class Params( + val isTosAccepted: Boolean, + ) +} \ No newline at end of file diff --git a/features/disclaimer/impl/build.gradle.kts b/features/disclaimer/impl/build.gradle.kts index b9bb0c5263..bb7ee06e94 100644 --- a/features/disclaimer/impl/build.gradle.kts +++ b/features/disclaimer/impl/build.gradle.kts @@ -11,9 +11,7 @@ android { } dependencies { - /** AndroidX */ - implementation(deps.androidx.fragment.ktx) - implementation(deps.androidx.appCompat) + /* AndroidX */ implementation(deps.lifecycle.compose) implementation(deps.androidx.activity.compose) @@ -31,6 +29,7 @@ dependencies { implementation(projects.core.utils) implementation(projects.core.featuretoggles) implementation(projects.core.navigation) + implementation(projects.core.decompose) implementation(projects.common.routing) /** Domain modules */ diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/DisclaimerFragment.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/DisclaimerFragment.kt deleted file mode 100644 index b53e0353d2..0000000000 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/DisclaimerFragment.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.tangem.features.disclaimer.impl - -import android.os.Bundle -import androidx.activity.compose.BackHandler -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.fragment.app.viewModels -import com.tangem.common.routing.AppRoute.Disclaimer.Companion.IS_TOS_ACCEPTED_KEY -import com.tangem.common.routing.AppRouter -import com.tangem.core.ui.UiDependencies -import com.tangem.core.ui.screen.ComposeFragment -import com.tangem.features.disclaimer.impl.presentation.ui.DisclaimerScreen -import com.tangem.features.disclaimer.impl.presentation.viewmodel.DisclaimerViewModel -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject - -@AndroidEntryPoint -internal class DisclaimerFragment : ComposeFragment() { - - @Inject - override lateinit var uiDependencies: UiDependencies - - @Inject - lateinit var appRouter: AppRouter - - private val viewModel by viewModels() - - private val isTosAccepted: Boolean - get() = arguments?.getBoolean(IS_TOS_ACCEPTED_KEY) ?: false - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - lifecycle.addObserver(viewModel) - } - - @Composable - override fun ScreenContent(modifier: Modifier) { - BackHandler { - if (isTosAccepted) { - appRouter.pop() - } else { - requireActivity().finish() - } - } - DisclaimerScreen(viewModel.state, appRouter::pop) - } - - companion object { - /** Create disclaimer fragment instance */ - fun create(): DisclaimerFragment = DisclaimerFragment() - } -} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/component/impl/DefaultDisclaimerComponent.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/component/impl/DefaultDisclaimerComponent.kt new file mode 100644 index 0000000000..f281084c55 --- /dev/null +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/component/impl/DefaultDisclaimerComponent.kt @@ -0,0 +1,48 @@ +package com.tangem.features.disclaimer.impl.component.impl + +import androidx.activity.compose.BackHandler +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.core.navigation.finisher.AppFinisher +import com.tangem.features.disclaimer.api.components.DisclaimerComponent +import com.tangem.features.disclaimer.impl.model.DisclaimerModel +import com.tangem.features.disclaimer.impl.ui.DisclaimerScreen +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject + +internal class DefaultDisclaimerComponent @AssistedInject constructor( + @Assisted context: AppComponentContext, + @Assisted private val params: DisclaimerComponent.Params, + private val appFinisher: AppFinisher, +) : DisclaimerComponent, AppComponentContext by context { + + private val model: DisclaimerModel = getOrCreateModel(params) + + @Composable + override fun Content(modifier: Modifier) { + val state by model.state.collectAsStateWithLifecycle() + + BackHandler { + if (params.isTosAccepted) { + state.popBack() + } else { + appFinisher.finish() + } + } + DisclaimerScreen(state = state) + } + + @AssistedFactory + interface Factory : DisclaimerComponent.Factory { + + override fun create( + context: AppComponentContext, + params: DisclaimerComponent.Params, + ): DefaultDisclaimerComponent + } +} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/ComponentModule.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/ComponentModule.kt new file mode 100644 index 0000000000..1605d6bbd6 --- /dev/null +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/ComponentModule.kt @@ -0,0 +1,18 @@ +package com.tangem.features.disclaimer.impl.di + +import com.tangem.features.disclaimer.api.components.DisclaimerComponent +import com.tangem.features.disclaimer.impl.component.impl.DefaultDisclaimerComponent +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 bindDisclaimerComponentFactory(factory: DefaultDisclaimerComponent.Factory): DisclaimerComponent.Factory +} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/DisclaimerRouterModule.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/DisclaimerRouterModule.kt deleted file mode 100644 index cdac031d49..0000000000 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/DisclaimerRouterModule.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.tangem.features.disclaimer.impl.di - -import com.tangem.common.routing.AppRouter -import com.tangem.features.disclaimer.api.DisclaimerRouter -import com.tangem.features.disclaimer.impl.navigation.DefaultDisclaimerRouter -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.components.ActivityComponent -import dagger.hilt.android.scopes.ActivityScoped - -/** - * DI module provides implementation of [DisclaimerRouter] - */ -@Module -@InstallIn(ActivityComponent::class) -object DisclaimerRouterModule { - - @Provides - @ActivityScoped - fun provideDisclaimerRouter(appRouter: AppRouter): DisclaimerRouter { - return DefaultDisclaimerRouter(appRouter) - } -} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/ModelModule.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/ModelModule.kt new file mode 100644 index 0000000000..a589336c78 --- /dev/null +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/di/ModelModule.kt @@ -0,0 +1,20 @@ +package com.tangem.features.disclaimer.impl.di + +import com.tangem.core.decompose.di.DecomposeComponent +import com.tangem.core.decompose.model.Model +import com.tangem.features.disclaimer.impl.model.DisclaimerModel +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.multibindings.ClassKey +import dagger.multibindings.IntoMap + +@Module +@InstallIn(DecomposeComponent::class) +internal interface ModelModule { + + @Binds + @IntoMap + @ClassKey(DisclaimerModel::class) + fun provideDisclaimerModel(model: DisclaimerModel): Model +} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/state/DisclaimerState.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/entity/DisclaimerUM.kt similarity index 59% rename from features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/state/DisclaimerState.kt rename to features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/entity/DisclaimerUM.kt index 01d0a398a6..155a91269b 100644 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/state/DisclaimerState.kt +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/entity/DisclaimerUM.kt @@ -1,16 +1,18 @@ -package com.tangem.features.disclaimer.impl.presentation.state +package com.tangem.features.disclaimer.impl.entity -internal data class DisclaimerState( +internal data class DisclaimerUM( val url: String, val isTosAccepted: Boolean, val onAccept: (Boolean) -> Unit, + val popBack: () -> Unit, ) internal object DummyDisclaimer { - val state = DisclaimerState( + val state = DisclaimerUM( url = "https://tangem.com/tangem_tos.html", isTosAccepted = false, onAccept = {}, + popBack = {}, ) } \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/model/DisclaimerModel.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/model/DisclaimerModel.kt new file mode 100644 index 0000000000..e3007b5a5a --- /dev/null +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/model/DisclaimerModel.kt @@ -0,0 +1,49 @@ +package com.tangem.features.disclaimer.impl.model + +import com.tangem.common.routing.AppRoute +import com.tangem.core.decompose.di.ComponentScoped +import com.tangem.core.decompose.model.Model +import com.tangem.core.decompose.model.ParamsContainer +import com.tangem.core.decompose.navigation.Router +import com.tangem.domain.card.repository.CardRepository +import com.tangem.features.disclaimer.api.components.DisclaimerComponent +import com.tangem.features.disclaimer.impl.entity.DisclaimerUM +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@ComponentScoped +internal class DisclaimerModel @Inject constructor( + private val cardRepository: CardRepository, + private val router: Router, + override val dispatchers: CoroutineDispatcherProvider, + paramsContainer: ParamsContainer, +) : Model() { + + private val params: DisclaimerComponent.Params = paramsContainer.require() + + val state: MutableStateFlow = MutableStateFlow( + DisclaimerUM( + onAccept = ::onAccept, + url = DISCLAIMER_URL, + isTosAccepted = params.isTosAccepted, + popBack = router::pop, + ), + ) + + private fun onAccept(shouldAskPushPermission: Boolean) { + modelScope.launch { + cardRepository.acceptTangemTOS() + if (shouldAskPushPermission) { + router.push(AppRoute.PushNotification) + } else { + router.push(AppRoute.Home) + } + } + } + + private companion object { + const val DISCLAIMER_URL = "https://tangem.com/tangem_tos.html" + } +} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/navigation/DefaultDisclaimerRouter.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/navigation/DefaultDisclaimerRouter.kt deleted file mode 100644 index 2897635472..0000000000 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/navigation/DefaultDisclaimerRouter.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.tangem.features.disclaimer.impl.navigation - -import androidx.fragment.app.Fragment -import com.tangem.common.routing.AppRoute -import com.tangem.common.routing.AppRouter -import com.tangem.features.disclaimer.impl.DisclaimerFragment -import javax.inject.Inject - -internal class DefaultDisclaimerRouter @Inject constructor( - private val appRouter: AppRouter, -) : InnerDisclaimerRouter { - - override fun entryFragment(): Fragment = DisclaimerFragment.create() - - override fun openPushNotificationPermission() { - appRouter.push(AppRoute.PushNotification) - } - - override fun openHome() { - appRouter.push(AppRoute.Home) - } -} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/navigation/InnerDisclaimerRouter.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/navigation/InnerDisclaimerRouter.kt deleted file mode 100644 index 5077db0901..0000000000 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/navigation/InnerDisclaimerRouter.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.tangem.features.disclaimer.impl.navigation - -import com.tangem.features.disclaimer.api.DisclaimerRouter - -internal interface InnerDisclaimerRouter : DisclaimerRouter { - - fun openPushNotificationPermission() - - fun openHome() -} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/viewmodel/DisclaimerClickIntents.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/viewmodel/DisclaimerClickIntents.kt deleted file mode 100644 index d80a1236ed..0000000000 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/viewmodel/DisclaimerClickIntents.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.tangem.features.disclaimer.impl.presentation.viewmodel - -internal interface DisclaimerClickIntents { - - fun onAccept(shouldAskPushPermission: Boolean) -} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/viewmodel/DisclaimerViewModel.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/viewmodel/DisclaimerViewModel.kt deleted file mode 100644 index 610278cd04..0000000000 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/viewmodel/DisclaimerViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.tangem.features.disclaimer.impl.presentation.viewmodel - -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.tangem.common.routing.AppRoute.Disclaimer.Companion.IS_TOS_ACCEPTED_KEY -import com.tangem.domain.card.repository.CardRepository -import com.tangem.features.disclaimer.impl.navigation.DefaultDisclaimerRouter -import com.tangem.features.disclaimer.impl.presentation.state.DisclaimerState -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -internal class DisclaimerViewModel @Inject constructor( - private val cardRepository: CardRepository, - private val disclaimerRouter: DefaultDisclaimerRouter, - savedStateHandle: SavedStateHandle, -) : ViewModel(), DefaultLifecycleObserver, DisclaimerClickIntents { - - private val isTosAccepted: Boolean = savedStateHandle[IS_TOS_ACCEPTED_KEY] ?: false - - val state: DisclaimerState - get() = DisclaimerState( - onAccept = ::onAccept, - url = DISCLAIMER_URL, - isTosAccepted = isTosAccepted, - ) - - override fun onAccept(shouldAskPushPermission: Boolean) { - viewModelScope.launch { - cardRepository.acceptTangemTOS() - disclaimerRouter.openPushNotificationPermission() - } - } - - private companion object { - const val DISCLAIMER_URL = "https://tangem.com/tangem_tos.html" - } -} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/ui/DisclaimerScreen.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt similarity index 91% rename from features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/ui/DisclaimerScreen.kt rename to features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt index 516eab4ef4..7567197f2d 100644 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/ui/DisclaimerScreen.kt +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt @@ -1,4 +1,4 @@ -package com.tangem.features.disclaimer.impl.presentation.ui +package com.tangem.features.disclaimer.impl.ui import android.annotation.SuppressLint import android.content.res.Configuration @@ -33,12 +33,12 @@ import com.tangem.core.ui.res.TangemColorPalette import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview import com.tangem.features.disclaimer.impl.R -import com.tangem.features.disclaimer.impl.presentation.state.DisclaimerState -import com.tangem.features.disclaimer.impl.presentation.state.DummyDisclaimer +import com.tangem.features.disclaimer.impl.entity.DisclaimerUM +import com.tangem.features.disclaimer.impl.entity.DummyDisclaimer import com.tangem.features.pushnotifications.api.utils.getPushPermissionOrNull @Composable -internal fun DisclaimerScreen(state: DisclaimerState, onBackClick: () -> Unit) { +internal fun DisclaimerScreen(state: DisclaimerUM) { val bottomBarHeight = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() } val bottomPadding = if (state.isTosAccepted) { bottomBarHeight + TangemTheme.dimens.size16 @@ -61,7 +61,7 @@ internal fun DisclaimerScreen(state: DisclaimerState, onBackClick: () -> Unit) { text = resourceReference(R.string.disclaimer_title), startButton = AdditionalButton( iconRes = R.drawable.ic_back_24, - onIconClicked = onBackClick, + onIconClicked = state.popBack, ).takeIf { state.isTosAccepted }, textColor = textColor, iconColor = iconColor, @@ -134,12 +134,12 @@ private fun DisclaimerContent(url: String, isTosAccepted: Boolean) { @OptIn(ExperimentalPermissionsApi::class) @Composable private fun BoxScope.DisclaimerButton(onAccept: (Boolean) -> Unit) { - val shouldAskPushPermission = getPushPermissionOrNull()?.let { permission -> + val isPermissionGranted = getPushPermissionOrNull()?.let { permission -> rememberPermissionState(permission = permission).status.isGranted } ?: true PrimaryButton( text = stringResource(id = R.string.common_accept), - onClick = { onAccept(shouldAskPushPermission) }, + onClick = { onAccept(!isPermissionGranted) }, colors = TangemButtonColors( backgroundColor = TangemColorPalette.Light4, contentColor = TangemColorPalette.Dark6, @@ -164,7 +164,7 @@ private fun BoxScope.DisclaimerButton(onAccept: (Boolean) -> Unit) { @Composable private fun DisclaimerScreen_Preview() { TangemThemePreview { - DisclaimerScreen(state = DummyDisclaimer.state, onBackClick = {}) + DisclaimerScreen(state = DummyDisclaimer.state) } } // endregion \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/ui/DisclaimerWebViewClient.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerWebViewClient.kt similarity index 97% rename from features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/ui/DisclaimerWebViewClient.kt rename to features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerWebViewClient.kt index a0b568833b..5ad8aedb8f 100644 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/presentation/ui/DisclaimerWebViewClient.kt +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerWebViewClient.kt @@ -1,4 +1,4 @@ -package com.tangem.features.disclaimer.impl.presentation.ui +package com.tangem.features.disclaimer.impl.ui import android.graphics.Bitmap import android.webkit.*