Skip to content

Commit da3cabe

Browse files
Extracted :shared module per targets, each target has own responsibility for DI context initialization
1 parent 6a82c54 commit da3cabe

File tree

31 files changed

+334
-376
lines changed

31 files changed

+334
-376
lines changed

compose-android-app/build.gradle.kts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,29 @@ kotlin {
1010
androidTarget()
1111
sourceSets {
1212
commonMain.dependencies {
13-
implementation(projects.shared)
14-
// Koin
1513
implementation(libs.koin.core.coroutine)
1614
}
17-
val androidMain by getting {
18-
dependencies {
19-
implementation(libs.koin.android)
20-
implementation(libs.koin.compose)
21-
implementation(libs.kotlinx.coroutine.android)
15+
androidMain.dependencies {
16+
implementation(projects.core.database.imp.room)
17+
implementation(projects.core.di)
18+
implementation(projects.core.domain)
19+
implementation(projects.feature.map)
2220

23-
implementation(libs.scarlet.lifecycle.android)
24-
implementation(libs.androidx.multidex)
25-
implementation(libs.googleMaterialDesign)
21+
implementation(libs.koin.android)
22+
implementation(libs.koin.compose)
23+
implementation(libs.kotlinx.coroutine.android)
2624

27-
// Lifecycles
28-
implementation(libs.androidx.lifecycle)
29-
implementation(libs.androidx.lifecycleKtx)
30-
implementation(libs.androidx.lifecycle.service)
31-
implementation(libs.androidx.activityCompose)
32-
implementation(libs.androidx.appCompat)
33-
implementation(libs.androidx.coreKtx)
34-
}
25+
implementation(libs.scarlet.lifecycle.android)
26+
implementation(libs.androidx.multidex)
27+
implementation(libs.googleMaterialDesign)
28+
29+
// Lifecycles
30+
implementation(libs.androidx.lifecycle)
31+
implementation(libs.androidx.lifecycleKtx)
32+
implementation(libs.androidx.lifecycle.service)
33+
implementation(libs.androidx.activityCompose)
34+
implementation(libs.androidx.appCompat)
35+
implementation(libs.androidx.coreKtx)
3536
}
3637
}
3738
}

compose-android-app/src/androidMain/kotlin/io/architecture/playground/MapActivity.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
package io.architecture.playground
22

3-
import ComposeApplication
43
import android.content.Intent
54
import android.os.Build
65
import android.os.Bundle
76
import androidx.activity.ComponentActivity
87
import androidx.activity.compose.setContent
9-
import org.koin.compose.KoinContext
8+
import io.architecture.map.MapScreen
109

1110
class MapActivity : ComponentActivity() {
1211

1312
override fun onCreate(savedInstanceState: Bundle?) { // TODO Implement Splash screen API + user data fetching
1413
super.onCreate(savedInstanceState)
1514

1615
setContent {
17-
// KoinContext { // Native feature + viewmodel
18-
// MapScreen()
19-
ComposeApplication()
20-
// }
16+
MapScreen()
2117
}
2218

2319
Intent(this, NetworkForegroundService::class.java).also {

compose-android-app/src/androidMain/kotlin/io/architecture/playground/PlaygroundApplication.kt

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ package io.architecture.playground
22

33
import android.app.Application
44
import androidx.multidex.BuildConfig
5-
import appModule
5+
import io.architecture.core.di.coreKoinModules
6+
import io.architecture.database.imp.room.di.roomDaoModule
7+
import io.architecture.database.imp.room.di.roomDatabaseModule
8+
import io.architecture.map.featureMapModule
69
import org.koin.android.ext.koin.androidContext
710
import org.koin.android.ext.koin.androidLogger
811
import org.koin.core.annotation.KoinExperimentalAPI
@@ -18,22 +21,26 @@ class PlaygroundApplication : Application() {
1821
override fun onCreate() {
1922
if (BuildConfig.DEBUG) setupCoroutineDebugMode()
2023

21-
// TODO Extract Lazy load in shared module!
22-
// val modules = lazyModule {
23-
// includes(appModule)
24-
// }
25-
//
26-
// startKoin {
27-
// androidLogger()
28-
// androidContext(this@PlaygroundApplication)
29-
// lazyModules(modules)
30-
// }
31-
//
32-
// val koin = KoinPlatform.getKoin()
33-
//
34-
// koin.runOnKoinStarted { _ ->
24+
val modules = lazyModule {
25+
includes(
26+
coreKoinModules,
27+
roomDaoModule,
28+
roomDatabaseModule,
29+
featureMapModule
30+
)
31+
}
32+
33+
startKoin {
34+
androidLogger()
35+
androidContext(this@PlaygroundApplication)
36+
lazyModules(modules)
37+
}
38+
39+
val koin = KoinPlatform.getKoin()
40+
41+
koin.runOnKoinStarted { _ ->
3542
super.onCreate()
36-
// }
43+
}
3744
}
3845

3946
private fun setupCoroutineDebugMode() {

compose-desktop-app/build.gradle.kts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ kotlin {
1212
sourceSets {
1313
val desktopMain by getting
1414
desktopMain.dependencies {
15-
implementation(compose.desktop.currentOs)
16-
implementation(projects.shared)
15+
implementation(projects.core.di)
16+
implementation(projects.core.datasource.api)
17+
implementation(projects.feature.map)
1718

18-
// Koin
19-
implementation(libs.koin.core.coroutine)
19+
implementation(libs.koin.core)
2020
implementation(libs.koin.mp.compose)
21+
implementation(compose.desktop.currentOs)
2122
}
2223
}
2324
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
import androidx.compose.ui.window.Window
22
import androidx.compose.ui.window.application
3+
import io.architecture.core.di.coreKoinModules
4+
import io.architecture.datasource.api.emptyMockLocalDatasourceModule
5+
import io.architecture.feature.common.map.MapScreen
6+
import org.koin.compose.KoinApplication
37

48
fun main() = application {
59
Window(onCloseRequest = ::exitApplication, title = "Node trace tracking") {
6-
ComposeApplication()
10+
KoinApplication(application = {
11+
modules(coreKoinModules, emptyMockLocalDatasourceModule)
12+
}) {
13+
MapScreen()
14+
}
715
}
816
}

compose-ios-app/build.gradle.kts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,28 @@
1-
import org.jetbrains.compose.ExperimentalComposeLibrary
2-
31
plugins {
42
alias(libs.plugins.kotlinMultiplatform)
53
alias(libs.plugins.jetbrainsCompose)
64
}
75

86
kotlin {
9-
107
listOf(
118
iosX64(),
129
iosArm64(),
1310
iosSimulatorArm64()
1411
).forEach { iosTarget ->
1512
iosTarget.binaries.framework {
16-
baseName = "compose-ios-app"
13+
baseName = "shared"
1714
isStatic = true
1815
}
1916
}
2017

2118
sourceSets {
22-
commonMain.dependencies {
23-
implementation(compose.runtime)
24-
implementation(compose.foundation)
25-
implementation(compose.material)
26-
implementation(compose.ui)
27-
@OptIn(ExperimentalComposeLibrary::class)
28-
implementation(compose.components.resources)
29-
implementation(projects.shared)
30-
implementation(projects.composeCommon)
31-
implementation(projects.shared)
19+
iosMain.dependencies {
20+
implementation(projects.core.di)
21+
implementation(projects.core.datasource.api)
22+
implementation(projects.feature.map)
23+
24+
implementation(libs.koin.core)
25+
implementation(libs.koin.mp.compose)
3226
}
3327
}
3428
}

compose-ios-app/compose-ios-app.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@
173173
);
174174
runOnlyForDeploymentPostprocessing = 0;
175175
shellPath = /bin/sh;
176-
shellScript = "cd \"$SRCROOT/..\"\n./gradlew :shared:embedAndSignAppleFrameworkForXcode\n";
176+
shellScript = "cd \"$SRCROOT/..\"\n./gradlew :compose-ios-app:embedAndSignAppleFrameworkForXcode\n";
177177
};
178178
/* End PBXShellScriptBuildPhase section */
179179

@@ -316,7 +316,7 @@
316316
ENABLE_PREVIEWS = YES;
317317
FRAMEWORK_SEARCH_PATHS = (
318318
"$(inherited)",
319-
"$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
319+
"$(SRCROOT)/../compose-ios-app/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
320320
);
321321
INFOPLIST_FILE = "compose-ios-app/Info.plist";
322322
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
@@ -346,7 +346,7 @@
346346
ENABLE_PREVIEWS = YES;
347347
FRAMEWORK_SEARCH_PATHS = (
348348
"$(inherited)",
349-
"$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
349+
"$(SRCROOT)/../compose-ios-app/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
350350
);
351351
INFOPLIST_FILE = "compose-ios-app/Info.plist";
352352
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import androidx.compose.ui.window.ComposeUIViewController
2+
import io.architecture.core.di.coreKoinModules
3+
import io.architecture.datasource.api.emptyMockLocalDatasourceModule
4+
import io.architecture.feature.common.map.MapScreen
5+
import org.koin.compose.KoinApplication
6+
7+
fun controller() = ComposeUIViewController {
8+
KoinApplication(application = {
9+
modules(coreKoinModules, emptyMockLocalDatasourceModule)
10+
}) {
11+
MapScreen()
12+
}
13+
}

compose-web-app/build.gradle.kts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ kotlin {
1616
}
1717

1818
sourceSets {
19-
commonMain.dependencies {
20-
implementation(projects.shared)
21-
}
2219
jsMain.dependencies {
20+
implementation(projects.core.di)
21+
implementation(projects.core.datasource.api)
22+
implementation(projects.feature.map)
23+
24+
implementation(libs.koin.core)
25+
implementation(libs.koin.mp.compose)
2326
implementation(compose.runtime)
2427
implementation(compose.html.core)
2528
}

compose-web-app/src/jsMain/kotlin/io/architecture/compose/web/app/App.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import androidx.compose.runtime.getValue
44
import androidx.compose.runtime.mutableStateOf
55
import androidx.compose.runtime.remember
66
import androidx.compose.runtime.setValue
7+
import io.architecture.core.di.coreKoinModules
8+
import io.architecture.datasource.api.emptyMockLocalDatasourceModule
79
import org.jetbrains.compose.web.css.Style
810
import org.jetbrains.compose.web.dom.Button
911
import org.jetbrains.compose.web.dom.Div
1012
import org.jetbrains.compose.web.dom.Label
1113
import org.jetbrains.compose.web.dom.Text
1214
import org.jetbrains.compose.web.renderComposable
15+
import org.koin.compose.KoinApplication
1316

1417
fun main() {
1518
renderComposable(rootElementId = "root") {
@@ -18,6 +21,12 @@ fun main() {
1821
if (isDarkTheme) Style(Dark) else Style(Light)
1922
Style(MainStyleSheet)
2023

24+
KoinApplication(application = {
25+
modules(coreKoinModules, emptyMockLocalDatasourceModule)
26+
}) {
27+
// TODO Compose HTML
28+
}
29+
2130
Div(attrs = { classes(MainStyleSheet.overlay) }) {
2231
Div {
2332
Label(forId = "theme-toggle") { Text("Toggle Theme:") }

0 commit comments

Comments
 (0)