Updated on 2026-08-14
This commit is contained in:
parent
48c179efea
commit
cb1d6b4f66
7 changed files with 36 additions and 14 deletions
|
|
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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() }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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 {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue