diff --git a/README.md b/README.md index 7fc403c..65176f4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A multiplatform Dependency Injection library. | Artifact | Description | |---------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| kinject | Provides core DI functionality. | +| kinject-core | Provides core DI functionality. | | kinject-android | Provides helper methods for working with `ObjectGraph`s embedded in `Context`s, and helper classes for embedding `ObjectGraph`s in `Contexts`. | | kinject-android-appcompat | Provides `KinjectAppCompatActivity`. | | kinject-android-compose | Provides `KinjectComponentActivity`. | diff --git a/build.gradle.kts b/build.gradle.kts index 3763045..443acd5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,10 +8,10 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { alias(libs.plugins.kotlin.multiplatform) apply false - alias(libs.plugins.gradleMavenPublish) apply false - alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false + alias(libs.plugins.gradleMavenPublish) apply false + alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.androidx.benchmark) apply false } diff --git a/gradle.properties b/gradle.properties index d844b09..19b5ff7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,6 @@ org.gradle.jvmargs=-Xmx3g -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2g" kotlin.code.style=official +kotlin.mpp.androidGradlePluginCompatibility.nowarn=true android.useAndroidX=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5fe6913..6174426 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,14 +7,15 @@ kotlinxBenchmark = "0.4.10" androidx-benchmark = "1.2.4" runner = "1.6.1" benchmarkJunit4 = "1.2.4" -lifecycleViewmodel = "2.8.2" +androidx-lifecycle = "2.8.3" compose-bom = "2024.06.00" compose-compiler = "1.5.14" coreKtx = "1.13.1" espressoCore = "3.6.1" -lifecycleRuntimeKtx = "2.8.2" +lifecycleRuntimeKtx = "2.8.3" activityCompose = "1.9.0" appcompat = "1.7.0" +jetbrains-androidx-lifecycle = "2.8.0" [libraries] androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } @@ -26,8 +27,11 @@ compose-runtime = { group = "androidx.compose.runtime", name = "runtime", versio junit = { group = "junit", name = "junit", version.ref = "junit" } koin-core = { module = "io.insert-koin:koin-core", version = "3.5.6" } kotlinx-benchmark = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "kotlinxBenchmark" } -androidx-lifecycle-viewmodel-android = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-android", version.ref = "lifecycleViewmodel" } -androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose-android", version.ref = "lifecycleViewmodel" } +androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle" } +androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } +jetbrains-androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "jetbrains-androidx-lifecycle" } +jetbrains-androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "jetbrains-androidx-lifecycle" } + androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } diff --git a/kinject-android/src/main/kotlin/kinject/android/ContextExt.kt b/kinject-android/src/main/kotlin/kinject/android/ContextExt.kt index b3b2384..9b90f0b 100644 --- a/kinject-android/src/main/kotlin/kinject/android/ContextExt.kt +++ b/kinject-android/src/main/kotlin/kinject/android/ContextExt.kt @@ -1,8 +1,10 @@ package kinject.android +import android.annotation.SuppressLint import android.content.Context import kinject.ObjectGraph +@SuppressLint("WrongConstant") fun Context.objectGraphOrNull(): ObjectGraph? { return getSystemService(KinjectApplication.KINJECT_SERVICE) as ObjectGraph? } diff --git a/kinject-compose-viewmodel/build.gradle.kts b/kinject-compose-viewmodel/build.gradle.kts index 6980c0e..a1fe300 100644 --- a/kinject-compose-viewmodel/build.gradle.kts +++ b/kinject-compose-viewmodel/build.gradle.kts @@ -7,17 +7,10 @@ plugins { android { namespace = "kinject.compose.viewmodel" - - buildFeatures { - compose = true - } - composeOptions { - kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() - } } dependencies { api(project(":kinject-compose")) api(project(":kinject-viewmodel")) - implementation(libs.androidx.lifecycle.viewmodel.compose) + api(libs.androidx.lifecycle.viewmodel.compose) } diff --git a/kinject-compose/build.gradle.kts b/kinject-compose/build.gradle.kts index b4e6556..9e4f472 100644 --- a/kinject-compose/build.gradle.kts +++ b/kinject-compose/build.gradle.kts @@ -7,13 +7,6 @@ plugins { android { namespace = "kinject.compose" - - buildFeatures { - compose = true - } - composeOptions { - kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() - } } composeCompiler { diff --git a/kinject-core/build.gradle.kts b/kinject-core/build.gradle.kts index ccd5b4e..3bfa2f9 100644 --- a/kinject-core/build.gradle.kts +++ b/kinject-core/build.gradle.kts @@ -1,5 +1,3 @@ -@file:OptIn(ExperimentalWasmDsl::class) - import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { @@ -19,8 +17,6 @@ kotlin { } } } - wasmJs() - wasmWasi() macosArm64() macosX64() iosX64() diff --git a/kinject-viewmodel/build.gradle.kts b/kinject-viewmodel/build.gradle.kts index 9ffca1e..0cc6cc3 100644 --- a/kinject-viewmodel/build.gradle.kts +++ b/kinject-viewmodel/build.gradle.kts @@ -1,14 +1,28 @@ plugins { + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.gradleMavenPublish) } -android { - namespace = "kinject.viewmodel" +kotlin { + jvm() + androidTarget() + macosArm64() + macosX64() + iosX64() + iosArm64() + iosSimulatorArm64() + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + api(project(":kinject-core")) + implementation(libs.androidx.lifecycle.viewmodel) + } + } } -dependencies { - api(project(":kinject-core")) - implementation(libs.androidx.lifecycle.viewmodel.android) +android { + namespace = "kinject.viewmodel" } diff --git a/kinject-viewmodel/src/main/kotlin/kinject/viewmodel/KinjectViewModelFactory.kt b/kinject-viewmodel/src/commonMain/kotlin/kinject/viewmodel/KinjectViewModelFactory.kt similarity index 52% rename from kinject-viewmodel/src/main/kotlin/kinject/viewmodel/KinjectViewModelFactory.kt rename to kinject-viewmodel/src/commonMain/kotlin/kinject/viewmodel/KinjectViewModelFactory.kt index b597663..4a2661b 100644 --- a/kinject-viewmodel/src/main/kotlin/kinject/viewmodel/KinjectViewModelFactory.kt +++ b/kinject-viewmodel/src/commonMain/kotlin/kinject/viewmodel/KinjectViewModelFactory.kt @@ -2,11 +2,14 @@ package kinject.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.CreationExtras import kinject.ObjectGraph -import kinject.get +import kotlin.reflect.KClass class KinjectViewModelFactory( private val objectGraph: ObjectGraph, ) : ViewModelProvider.Factory { - override fun create(modelClass: Class): T = objectGraph.get(modelClass) + override fun create(modelClass: KClass, extras: CreationExtras): T { + return objectGraph.get(modelClass) + } } diff --git a/kinject-viewmodel/src/main/kotlin/kinject/viewmodel/ObjectGraphExt.kt b/kinject-viewmodel/src/commonMain/kotlin/kinject/viewmodel/ObjectGraphExt.kt similarity index 100% rename from kinject-viewmodel/src/main/kotlin/kinject/viewmodel/ObjectGraphExt.kt rename to kinject-viewmodel/src/commonMain/kotlin/kinject/viewmodel/ObjectGraphExt.kt