Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-26 14:57:11 +04:00
parent 48c179efea
commit cb1d6b4f66
7 changed files with 36 additions and 14 deletions

View file

@ -6,8 +6,9 @@ import com.arkivanov.decompose.defaultComponentContext
import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.context.DefaultAppComponentContext import com.tangem.core.decompose.context.DefaultAppComponentContext
import com.tangem.core.decompose.di.DecomposeComponent import com.tangem.core.decompose.di.DecomposeComponent
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.di.RootAppComponentContext import com.tangem.core.decompose.di.RootAppComponentContext
import com.tangem.core.ui.UiDependencies import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@ -27,13 +28,13 @@ internal object RootAppComponentContextModule {
@ActivityContext context: Context, @ActivityContext context: Context,
dispatchers: CoroutineDispatcherProvider, dispatchers: CoroutineDispatcherProvider,
componentBuilder: DecomposeComponent.Builder, componentBuilder: DecomposeComponent.Builder,
uiDependencies: UiDependencies, @GlobalUiMessageSender messageSender: UiMessageSender,
): AppComponentContext { ): AppComponentContext {
return DefaultAppComponentContext( return DefaultAppComponentContext(
componentContext = (context as AppCompatActivity).defaultComponentContext(), componentContext = (context as AppCompatActivity).defaultComponentContext(),
messageHandler = uiDependencies.eventMessageHandler,
dispatchers = dispatchers, dispatchers = dispatchers,
hiltComponentBuilder = componentBuilder, hiltComponentBuilder = componentBuilder,
messageSender = messageSender,
) )
} }
} }

View file

@ -1,6 +1,9 @@
package com.tangem.tap.di package com.tangem.tap.di
import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarHostState
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.ui.DefaultUiMessageSender
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.UiDependencies import com.tangem.core.ui.UiDependencies
import com.tangem.core.ui.haptic.VibratorHapticManager import com.tangem.core.ui.haptic.VibratorHapticManager
import com.tangem.core.ui.message.EventMessageHandler import com.tangem.core.ui.message.EventMessageHandler
@ -28,4 +31,11 @@ internal object UiDependenciesModule {
override val eventMessageHandler: EventMessageHandler = EventMessageHandler() override val eventMessageHandler: EventMessageHandler = EventMessageHandler()
} }
} }
@Provides
@Singleton
@GlobalUiMessageSender
fun provideUiMessageSender(uiDependencies: UiDependencies): UiMessageSender {
return DefaultUiMessageSender(uiDependencies.eventMessageHandler)
}
} }

View file

@ -7,8 +7,6 @@ import com.tangem.core.decompose.navigation.AppNavigationProvider
import com.tangem.core.decompose.navigation.DefaultAppNavigationProvider import com.tangem.core.decompose.navigation.DefaultAppNavigationProvider
import com.tangem.core.decompose.navigation.DefaultRouter import com.tangem.core.decompose.navigation.DefaultRouter
import com.tangem.core.decompose.navigation.Router import com.tangem.core.decompose.navigation.Router
import com.tangem.core.decompose.ui.DefaultUiMessageSender
import com.tangem.core.decompose.ui.UiMessageHandler
import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.decompose.utils.ComponentCoroutineScope import com.tangem.core.decompose.utils.ComponentCoroutineScope
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
@ -16,9 +14,9 @@ import kotlinx.coroutines.CoroutineScope
class DefaultAppComponentContext( class DefaultAppComponentContext(
componentContext: ComponentContext, componentContext: ComponentContext,
messageHandler: UiMessageHandler,
override val dispatchers: CoroutineDispatcherProvider, override val dispatchers: CoroutineDispatcherProvider,
override val hiltComponentBuilder: DecomposeComponent.Builder, override val hiltComponentBuilder: DecomposeComponent.Builder,
override val messageSender: UiMessageSender,
private val replaceRouter: Router? = null, private val replaceRouter: Router? = null,
) : AppComponentContext, ComponentContext by componentContext { ) : AppComponentContext, ComponentContext by componentContext {
@ -26,8 +24,6 @@ class DefaultAppComponentContext(
override val componentScope: CoroutineScope = ComponentCoroutineScope(lifecycle, dispatchers) override val componentScope: CoroutineScope = ComponentCoroutineScope(lifecycle, dispatchers)
override val messageSender: UiMessageSender = DefaultUiMessageSender(messageHandler)
override val navigationProvider: AppNavigationProvider override val navigationProvider: AppNavigationProvider
get() = instanceKeeper.getOrCreate { DefaultAppNavigationProvider() } get() = instanceKeeper.getOrCreate { DefaultAppNavigationProvider() }

View file

@ -3,4 +3,7 @@ package com.tangem.core.decompose.di
import javax.inject.Qualifier import javax.inject.Qualifier
@Qualifier @Qualifier
annotation class RootAppComponentContext annotation class RootAppComponentContext
@Qualifier
annotation class GlobalUiMessageSender

View file

@ -1,6 +1,6 @@
package com.tangem.core.decompose.ui package com.tangem.core.decompose.ui
internal class DefaultUiMessageSender( class DefaultUiMessageSender(
private val handler: UiMessageHandler, private val handler: UiMessageHandler,
) : UiMessageSender { ) : UiMessageSender {

View file

@ -3,15 +3,17 @@ package com.tangem.feature.tokendetails.presentation
import android.os.Bundle import android.os.Bundle
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.fragment.app.viewModels
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.arkivanov.decompose.defaultComponentContext import com.arkivanov.decompose.defaultComponentContext
import androidx.fragment.app.viewModels
import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRoute
import com.tangem.common.routing.AppRouter import com.tangem.common.routing.AppRouter
import com.tangem.common.routing.bundle.unbundle import com.tangem.common.routing.bundle.unbundle
import com.tangem.common.routing.utils.asRouter import com.tangem.common.routing.utils.asRouter
import com.tangem.core.decompose.context.DefaultAppComponentContext import com.tangem.core.decompose.context.DefaultAppComponentContext
import com.tangem.core.decompose.di.DecomposeComponent import com.tangem.core.decompose.di.DecomposeComponent
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.UiDependencies import com.tangem.core.ui.UiDependencies
import com.tangem.core.ui.components.NavigationBar3ButtonsScrim import com.tangem.core.ui.components.NavigationBar3ButtonsScrim
import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.screen.ComposeFragment
@ -32,7 +34,11 @@ internal class TokenDetailsFragment : ComposeFragment() {
override lateinit var uiDependencies: UiDependencies override lateinit var uiDependencies: UiDependencies
@Inject @Inject
lateinit var tokenDetailsRouter: TokenDetailsRouter @GlobalUiMessageSender
internal lateinit var messageSender: UiMessageSender
@Inject
internal lateinit var tokenDetailsRouter: TokenDetailsRouter
@Inject @Inject
internal lateinit var coroutineDispatcherProvider: CoroutineDispatcherProvider internal lateinit var coroutineDispatcherProvider: CoroutineDispatcherProvider
@ -70,7 +76,7 @@ internal class TokenDetailsFragment : ComposeFragment() {
val appContext = DefaultAppComponentContext( val appContext = DefaultAppComponentContext(
componentContext = defaultComponentContext(requireActivity().onBackPressedDispatcher), componentContext = defaultComponentContext(requireActivity().onBackPressedDispatcher),
messageHandler = uiDependencies.eventMessageHandler, messageSender = messageSender,
dispatchers = coroutineDispatcherProvider, dispatchers = coroutineDispatcherProvider,
hiltComponentBuilder = componentBuilder, hiltComponentBuilder = componentBuilder,
replaceRouter = appRouter.asRouter(), replaceRouter = appRouter.asRouter(),

View file

@ -9,6 +9,8 @@ import com.tangem.common.routing.AppRouter
import com.tangem.common.routing.utils.asRouter import com.tangem.common.routing.utils.asRouter
import com.tangem.core.decompose.context.DefaultAppComponentContext import com.tangem.core.decompose.context.DefaultAppComponentContext
import com.tangem.core.decompose.di.DecomposeComponent import com.tangem.core.decompose.di.DecomposeComponent
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.UiDependencies import com.tangem.core.ui.UiDependencies
import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.screen.ComposeFragment
import com.tangem.feature.wallet.presentation.router.InnerWalletRouter import com.tangem.feature.wallet.presentation.router.InnerWalletRouter
@ -45,6 +47,10 @@ internal class WalletFragment : ComposeFragment() {
@Inject @Inject
internal lateinit var appRouter: AppRouter internal lateinit var appRouter: AppRouter
@Inject
@GlobalUiMessageSender
internal lateinit var messageSender: UiMessageSender
private lateinit var marketsEntryComponent: MarketsEntryComponent private lateinit var marketsEntryComponent: MarketsEntryComponent
private val _walletRouter: InnerWalletRouter private val _walletRouter: InnerWalletRouter
@ -57,7 +63,7 @@ internal class WalletFragment : ComposeFragment() {
val appContext = DefaultAppComponentContext( val appContext = DefaultAppComponentContext(
componentContext = defaultComponentContext(requireActivity().onBackPressedDispatcher), componentContext = defaultComponentContext(requireActivity().onBackPressedDispatcher),
messageHandler = uiDependencies.eventMessageHandler, messageSender = messageSender,
dispatchers = coroutineDispatcherProvider, dispatchers = coroutineDispatcherProvider,
hiltComponentBuilder = componentBuilder, hiltComponentBuilder = componentBuilder,
replaceRouter = appRouter.asRouter(), replaceRouter = appRouter.asRouter(),