From 774cbe3dfe39f5c2f4dec2e06038b4077ffff71c Mon Sep 17 00:00:00 2001 From: Karan Sharma <55722391+ksharma-xyz@users.noreply.github.com> Date: Fri, 3 Jan 2025 13:36:55 +1100 Subject: [PATCH] Create new module called ::core:di --- composeApp/build.gradle.kts | 7 +-- .../kotlin/xyz/ksharma/krail/di/AppModule.kt | 2 + core/di/build.gradle.kts | 43 +++++++++++++++++++ .../krail/core}/di/DispatchersComponent.kt | 12 +++--- core/remote-config/build.gradle.kts | 3 +- .../core/remote_config/RealRemoteConfig.kt | 5 +-- settings.gradle.kts | 1 + 7 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 core/di/build.gradle.kts rename core/{analytics/src/commonMain/kotlin/xyz/ksharma/krail/core/analytics => di/src/commonMain/kotlin/xyz/ksharma/krail/core}/di/DispatchersComponent.kt (72%) diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 2317a61a..a5201d48 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -98,14 +98,15 @@ kotlin { commonMain.dependencies { implementation(projects.core.analytics) - implementation(projects.taj) - implementation(projects.sandook) implementation(projects.core.appInfo) + implementation(projects.core.di) implementation(projects.core.log) implementation(projects.core.remoteConfig) implementation(projects.feature.tripPlanner.network) - implementation(projects.feature.tripPlanner.ui) implementation(projects.feature.tripPlanner.state) + implementation(projects.feature.tripPlanner.ui) + implementation(projects.sandook) + implementation(projects.taj) implementation(libs.navigation.compose) diff --git a/composeApp/src/commonMain/kotlin/xyz/ksharma/krail/di/AppModule.kt b/composeApp/src/commonMain/kotlin/xyz/ksharma/krail/di/AppModule.kt index fca9ebbb..90838142 100644 --- a/composeApp/src/commonMain/kotlin/xyz/ksharma/krail/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/xyz/ksharma/krail/di/AppModule.kt @@ -7,6 +7,7 @@ import org.koin.dsl.koinConfiguration import org.koin.dsl.module import xyz.ksharma.krail.core.analytics.di.analyticsModule import xyz.ksharma.krail.core.appinfo.di.appInfoModule +import xyz.ksharma.krail.core.di.coroutineDispatchersModule import xyz.ksharma.krail.core.remote_config.di.remoteConfigModule import xyz.ksharma.krail.sandook.di.sandookModule import xyz.ksharma.krail.splash.SplashViewModel @@ -23,6 +24,7 @@ val koinConfig = koinConfiguration { appInfoModule, analyticsModule, remoteConfigModule, + coroutineDispatchersModule, ) } diff --git a/core/di/build.gradle.kts b/core/di/build.gradle.kts new file mode 100644 index 00000000..3e473b2a --- /dev/null +++ b/core/di/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + alias(libs.plugins.krail.android.library) + alias(libs.plugins.krail.kotlin.multiplatform) + alias(libs.plugins.krail.compose.multiplatform) + alias(libs.plugins.compose.compiler) +} + +android { + namespace = "xyz.ksharma.krail.core.di" +} + +kotlin { + applyDefaultHierarchyTemplate() + + androidTarget() + + iosArm64() + iosSimulatorArm64() + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(JavaVersion.VERSION_17.majorVersion)) + } + } + + sourceSets { + androidMain { + dependencies { + api(libs.di.koinAndroid) + } + } + + commonMain { + dependencies { + implementation(compose.runtime) + api(libs.di.koinComposeViewmodel) + } + } + + iosMain.dependencies { + } + } +} diff --git a/core/analytics/src/commonMain/kotlin/xyz/ksharma/krail/core/analytics/di/DispatchersComponent.kt b/core/di/src/commonMain/kotlin/xyz/ksharma/krail/core/di/DispatchersComponent.kt similarity index 72% rename from core/analytics/src/commonMain/kotlin/xyz/ksharma/krail/core/analytics/di/DispatchersComponent.kt rename to core/di/src/commonMain/kotlin/xyz/ksharma/krail/core/di/DispatchersComponent.kt index efdc67cf..f112a3d9 100644 --- a/core/analytics/src/commonMain/kotlin/xyz/ksharma/krail/core/analytics/di/DispatchersComponent.kt +++ b/core/di/src/commonMain/kotlin/xyz/ksharma/krail/core/di/DispatchersComponent.kt @@ -1,4 +1,4 @@ -package xyz.ksharma.krail.core.analytics.di +package xyz.ksharma.krail.core.di import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -9,9 +9,9 @@ import org.koin.core.component.KoinComponent import org.koin.core.qualifier.named import org.koin.dsl.module import org.koin.core.component.inject -import xyz.ksharma.krail.core.analytics.di.DispatchersComponent.Companion.DefaultDispatcher -import xyz.ksharma.krail.core.analytics.di.DispatchersComponent.Companion.IODispatcher -import xyz.ksharma.krail.core.analytics.di.DispatchersComponent.Companion.MainDispatcher +import xyz.ksharma.krail.core.di.DispatchersComponent.Companion.DefaultDispatcher +import xyz.ksharma.krail.core.di.DispatchersComponent.Companion.IODispatcher +import xyz.ksharma.krail.core.di.DispatchersComponent.Companion.MainDispatcher open class DispatchersComponent : KoinComponent { @@ -28,7 +28,7 @@ open class DispatchersComponent : KoinComponent { } } -val coroutineModule = module { +val coroutineDispatchersModule = module { single(named(DefaultDispatcher)) { Dispatchers.Default @@ -43,6 +43,6 @@ val coroutineModule = module { } single { - CoroutineScope(SupervisorJob() + Dispatchers.Default) + CoroutineScope(context = SupervisorJob() + Dispatchers.Default) } } diff --git a/core/remote-config/build.gradle.kts b/core/remote-config/build.gradle.kts index 20116843..3bdd78d6 100644 --- a/core/remote-config/build.gradle.kts +++ b/core/remote-config/build.gradle.kts @@ -34,8 +34,9 @@ kotlin { commonMain { dependencies { - implementation(projects.core.log) implementation(projects.core.appInfo) + implementation(projects.core.di) + implementation(projects.core.log) implementation(libs.kotlinx.serialization.json) implementation(compose.runtime) diff --git a/core/remote-config/src/commonMain/kotlin/xyz/ksharma/krail/core/remote_config/RealRemoteConfig.kt b/core/remote-config/src/commonMain/kotlin/xyz/ksharma/krail/core/remote_config/RealRemoteConfig.kt index 19ec87cb..0633a610 100644 --- a/core/remote-config/src/commonMain/kotlin/xyz/ksharma/krail/core/remote_config/RealRemoteConfig.kt +++ b/core/remote-config/src/commonMain/kotlin/xyz/ksharma/krail/core/remote_config/RealRemoteConfig.kt @@ -5,12 +5,9 @@ import dev.gitlive.firebase.remoteconfig.remoteConfig import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import org.koin.core.component.inject -import org.koin.core.qualifier.named -import xyz.ksharma.krail.core.analytics.di.DispatchersComponent +import xyz.ksharma.krail.core.di.DispatchersComponent import xyz.ksharma.krail.core.appinfo.AppInfoProvider import kotlin.time.Duration.Companion.minutes -import kotlin.time.Duration.Companion.seconds internal class RealRemoteConfig( private val appInfoProvider: AppInfoProvider, diff --git a/settings.gradle.kts b/settings.gradle.kts index 727d5714..c939524e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -36,6 +36,7 @@ include(":taj") // Design System include(":core:analytics") include(":core:app-info") include(":core:date-time") +include(":core:di") include(":core:log") include(":core:remote-config") include(":feature:trip-planner:ui")