Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-20 16:16:45 +04:00
parent 2ab4b3a66d
commit abb83c9e02
2 changed files with 44 additions and 17 deletions

View file

@ -3,15 +3,22 @@ package com.tangem.tap.routing
import android.app.Activity
import android.os.Bundle
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat.startActivity
import com.arkivanov.decompose.extensions.compose.jetpack.stack.Children
import com.arkivanov.decompose.router.stack.ChildStack
import com.tangem.common.routing.AppRoute
import com.tangem.core.ui.UiDependencies
import com.tangem.core.ui.components.snackbar.TangemSnackbarHost
import com.tangem.core.ui.message.EventMessageEffect
import com.tangem.core.ui.res.LocalSnackbarHostState
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.utils.WindowInsetsZero
import com.tangem.tap.routing.component.RoutingComponent
@Composable
@ -26,22 +33,42 @@ internal fun RootContent(
activity = context as Activity,
uiDependencies = uiDependencies,
) {
Children(
val snackbarHostState = LocalSnackbarHostState.current
Scaffold(
modifier = modifier,
stack = stack,
) { child ->
when (val instance = child.instance) {
is RoutingComponent.Child.Initial -> Unit
is RoutingComponent.Child.ComposableComponent -> {
instance.component.Content(Modifier.fillMaxSize())
containerColor = TangemTheme.colors.background.primary,
snackbarHost = {
TangemSnackbarHost(
modifier = Modifier.padding(all = 16.dp),
hostState = snackbarHostState,
)
},
contentWindowInsets = WindowInsetsZero,
content = { paddingValues ->
Children(
modifier = Modifier.padding(paddingValues),
stack = stack,
) { child ->
when (val instance = child.instance) {
is RoutingComponent.Child.Initial -> Unit
is RoutingComponent.Child.ComposableComponent -> {
instance.component.Content(Modifier.fillMaxSize())
}
is RoutingComponent.Child.LegacyIntent -> {
// TODO: Remove and use it's own router: [REDACTED_JIRA]
startActivity(context, instance.intent, Bundle.EMPTY)
}
is RoutingComponent.Child.LegacyFragment,
-> error("Unsupported child: $instance")
}
}
is RoutingComponent.Child.LegacyIntent -> {
// TODO: Remove and use it's own router: [REDACTED_JIRA]
startActivity(context, instance.intent, Bundle.EMPTY)
}
is RoutingComponent.Child.LegacyFragment,
-> error("Unsupported child: $instance")
}
}
},
)
EventMessageEffect(
messageHandler = uiDependencies.eventMessageHandler,
snackbarHostState = snackbarHostState,
)
}
}

View file

@ -37,8 +37,8 @@ internal class DefaultRoutingComponent @AssistedInject constructor(
@Assisted context: AppComponentContext,
private val childFactory: ChildFactory,
private val appRouterConfig: AppRouterConfig,
private val routingFeatureToggles: RoutingFeatureToggles,
private val uiDependencies: UiDependencies,
routingFeatureToggles: RoutingFeatureToggles,
) : RoutingComponent,
AppComponentContext by context,
SnackbarHandler {
@ -47,7 +47,7 @@ internal class DefaultRoutingComponent @AssistedInject constructor(
override val stack: Value<ChildStack<AppRoute, Child>> = childStack(
source = navigationProvider.getOrCreateTyped(),
serializer = AppRoute.serializer(), // TODO Maybe set this to null for AppRoute.Onboarding case. Need to check
serializer = AppRoute.serializer(),
initialConfiguration = getInitialRoute(),
handleBackButton = false,
childFactory = ::child,