diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index 399158200..c82fed1d0 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -47,4 +47,6 @@ dependencies { implementation(libs.material3) implementation(libs.material3.windowsize) implementation(libs.androidx.activity.compose) + implementation(libs.koin.core) + implementation(libs.koin.android) } \ No newline at end of file diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml index 22d1facc8..3426884c5 100644 --- a/androidApp/src/main/AndroidManifest.xml +++ b/androidApp/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ diff --git a/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainActivity.kt b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainActivity.kt index 1662ff4fb..7df94ff0c 100644 --- a/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainActivity.kt +++ b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainActivity.kt @@ -6,14 +6,14 @@ import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import com.github.diegoberaldin.raccoonforlemmy.Greeting +import com.github.diegoberaldin.raccoonforlemmy.android.presentation.GreetPresenter +import com.github.diegoberaldin.raccoonforlemmy.android.ui.GreetingView import com.github.diegoberaldin.raccoonforlemmy.android.ui.theme.AppTheme +import org.koin.android.ext.android.inject class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { @@ -22,22 +22,10 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - GreetingView(Greeting().greet()) + val presenter: GreetPresenter by inject() + GreetingView(presenter) } } } } } - -@Composable -fun GreetingView(text: String) { - Text(text = text) -} - -@Preview -@Composable -fun DefaultPreview() { - AppTheme { - GreetingView("Hello, Android!") - } -} diff --git a/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainApplication.kt b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainApplication.kt new file mode 100644 index 000000000..0cd08671e --- /dev/null +++ b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/MainApplication.kt @@ -0,0 +1,22 @@ +package com.github.diegoberaldin.raccoonforlemmy.android + +import android.app.Application +import com.github.diegoberaldin.raccoonforlemmy.android.di.androidModule +import com.github.diegoberaldin.raccoonforlemmy.di.appModule +import org.koin.android.ext.koin.androidContext +import org.koin.android.ext.koin.androidLogger +import org.koin.core.context.startKoin + +class MainApplication : Application() { + override fun onCreate() { + super.onCreate() + + startKoin { + androidContext(this@MainApplication) + androidLogger() + modules( + appModule() + androidModule, + ) + } + } +} \ No newline at end of file diff --git a/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/di/AndroidModule.kt b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/di/AndroidModule.kt new file mode 100644 index 000000000..7c419ca14 --- /dev/null +++ b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/di/AndroidModule.kt @@ -0,0 +1,9 @@ +package com.github.diegoberaldin.raccoonforlemmy.android.di + +import com.github.diegoberaldin.raccoonforlemmy.android.presentation.GreetPresenter +import org.koin.core.module.dsl.singleOf +import org.koin.dsl.module + +val androidModule = module { + singleOf(::GreetPresenter) +} \ No newline at end of file diff --git a/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/presentation/GreetPresenter.kt b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/presentation/GreetPresenter.kt new file mode 100644 index 000000000..af5355e16 --- /dev/null +++ b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/presentation/GreetPresenter.kt @@ -0,0 +1,10 @@ +package com.github.diegoberaldin.raccoonforlemmy.android.presentation + +import com.github.diegoberaldin.raccoonforlemmy.Greeting + +class GreetPresenter( + private val greeting: Greeting, +) { + + fun print() = greeting.greet() +} \ No newline at end of file diff --git a/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/ui/GreetingView.kt b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/ui/GreetingView.kt new file mode 100644 index 000000000..711ad30a1 --- /dev/null +++ b/androidApp/src/main/java/com/github/diegoberaldin/raccoonforlemmy/android/ui/GreetingView.kt @@ -0,0 +1,11 @@ +package com.github.diegoberaldin.raccoonforlemmy.android.ui + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.github.diegoberaldin.raccoonforlemmy.android.presentation.GreetPresenter + +@Composable +fun GreetingView(presenter: GreetPresenter) { + val text = presenter.print() + Text(text = text) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d51ae034c..a5c5a2f3f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,17 +2,23 @@ androidx_activity_compose = "1.7.2" android_gradle = "7.4.2" compose = "1.4.3" +koin = "3.2.0" kotlin = "1.8.22" material3 = "1.1.1" [libraries] androidx_activity_compose = { module = "androidx.activity:activity-compose", version.ref = "androidx.activity.compose" } + compose_ui = { module = "androidx.compose.ui:ui", version.ref = "compose" } compose_tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } compose_preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } compose_foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" } +koin_core = { module = "io.insert-koin:koin-core", version.ref = "koin" } +koin_test = { module = "io.insert-koin:koin-test", version.ref = "koin" } +koin_android = { module = "io.insert-koin:koin-android", version.ref = "koin" } + material3 = { module = "androidx.compose.material3:material3", version.ref = "material3" } material3_windowsize = { module = "androidx.compose.material3:material3-window-size-class", version.ref = "material3" } diff --git a/iosApp/iosApp/ContentView.swift b/iosApp/iosApp/ContentView.swift index 6a15a0953..44ea06b82 100644 --- a/iosApp/iosApp/ContentView.swift +++ b/iosApp/iosApp/ContentView.swift @@ -2,7 +2,7 @@ import SwiftUI import shared struct ContentView: View { - let greet = Greeting().greet() + let greet = GreetingHelper().greet() var body: some View { Text(greet) diff --git a/iosApp/iosApp/iOSApp.swift b/iosApp/iosApp/iOSApp.swift index 0648e8602..4bc560ea7 100644 --- a/iosApp/iosApp/iOSApp.swift +++ b/iosApp/iosApp/iOSApp.swift @@ -2,6 +2,11 @@ import SwiftUI @main struct iOSApp: App { + + init() { + HelperKt.doInitKoin() + } + var body: some Scene { WindowGroup { ContentView() diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 5b5c9e62b..65503e22f 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -23,7 +23,12 @@ kotlin { } sourceSets { - val commonMain by getting + val commonMain by getting { + dependencies { + api(libs.koin.core) + api(libs.koin.test) + } + } val commonTest by getting { dependencies { implementation(kotlin("test")) diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Greeting.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Greeting.kt index 2a36946a5..46508a0ae 100644 --- a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Greeting.kt +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Greeting.kt @@ -1,7 +1,8 @@ package com.github.diegoberaldin.raccoonforlemmy -class Greeting { - private val platform: Platform = getPlatform() +class Greeting( + private val platform: Platform, +) { fun greet(): String { return "Hello, ${platform.name}!" diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/AppModule.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/AppModule.kt new file mode 100644 index 000000000..1137dae7b --- /dev/null +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/AppModule.kt @@ -0,0 +1,3 @@ +package com.github.diegoberaldin.raccoonforlemmy.di + +fun appModule() = listOf(commonModule, platformModule) diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/CommonModule.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/CommonModule.kt new file mode 100644 index 000000000..c40993cb3 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/CommonModule.kt @@ -0,0 +1,9 @@ +package com.github.diegoberaldin.raccoonforlemmy.di + +import com.github.diegoberaldin.raccoonforlemmy.Greeting +import org.koin.core.module.dsl.singleOf +import org.koin.dsl.module + +val commonModule = module { + singleOf(::Greeting) +} diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/PlatformModule.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/PlatformModule.kt new file mode 100644 index 000000000..b279d8b58 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/PlatformModule.kt @@ -0,0 +1,9 @@ +package com.github.diegoberaldin.raccoonforlemmy.di + +import com.github.diegoberaldin.raccoonforlemmy.getPlatform +import org.koin.core.module.dsl.singleOf +import org.koin.dsl.module + +val platformModule = module { + singleOf(::getPlatform) +} diff --git a/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Helper.kt b/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Helper.kt new file mode 100644 index 000000000..e0a2fea52 --- /dev/null +++ b/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/Helper.kt @@ -0,0 +1,17 @@ +package com.github.diegoberaldin.raccoonforlemmy + +import com.github.diegoberaldin.raccoonforlemmy.di.appModule +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import org.koin.core.context.startKoin + +class GreetingHelper : KoinComponent { + private val greeting: Greeting by inject() + fun greet(): String = greeting.greet() +} + +fun initKoin() { + startKoin { + modules(appModule()) + } +} \ No newline at end of file