From c5521ce89b1774bf532c071be6e158fcda8c0ad2 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Wed, 21 Feb 2024 17:09:46 -0800 Subject: [PATCH] Make :core:common as a multiplatform library --- core/common/build.gradle.kts | 21 ++++++--- .../{main => androidMain}/AndroidManifest.xml | 0 .../core_common_ic_nia_notification.xml | 0 .../core_common_ic_nia_notification.png | Bin .../core_common_ic_nia_notification.png | Bin .../core_common_ic_nia_notification.png | Bin .../core_common_ic_nia_notification.png | Bin .../network/di/CoroutineScopeComponent.kt} | 23 +++++---- .../core/network/di/DispatchersComponent.kt} | 22 ++++----- .../apps/nowinandroid/core/result/Result.kt | 0 .../nowinandroid/core/result/ResultKtTest.kt | 4 +- .../core/network/di/CoroutineScopesModule.kt | 44 ------------------ core/database/build.gradle.kts | 3 -- .../core/testing/di/TestDispatchersModule.kt | 4 +- 14 files changed, 39 insertions(+), 82 deletions(-) rename core/common/src/{main => androidMain}/AndroidManifest.xml (100%) rename core/common/src/{main => androidMain}/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml (100%) rename core/common/src/{main => androidMain}/res/drawable-hdpi/core_common_ic_nia_notification.png (100%) rename core/common/src/{main => androidMain}/res/drawable-mdpi/core_common_ic_nia_notification.png (100%) rename core/common/src/{main => androidMain}/res/drawable-xhdpi/core_common_ic_nia_notification.png (100%) rename core/common/src/{main => androidMain}/res/drawable-xxhdpi/core_common_ic_nia_notification.png (100%) rename core/common/src/{main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt => commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopeComponent.kt} (51%) rename core/common/src/{main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt => commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersComponent.kt} (56%) rename core/common/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt (100%) rename core/common/src/{test => commonTest}/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt (95%) delete mode 100644 core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 51ae627dc..14eadc703 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -14,16 +14,23 @@ * limitations under the License. */ plugins { - alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.kmp.library) + alias(libs.plugins.nowinandroid.kotlin.inject) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) } android { namespace = "com.google.samples.apps.nowinandroid.core.common" } - -dependencies { - testImplementation(libs.kotlinx.coroutines.test) - testImplementation(libs.turbine) -} \ No newline at end of file +kotlin { + sourceSets { + commonMain.dependencies { + implementation(libs.kotlinx.coroutines.core) + } + commonTest.dependencies { + implementation(libs.kotlin.test) + implementation(libs.turbine) + implementation(libs.kotlinx.coroutines.test) + } + } +} diff --git a/core/common/src/main/AndroidManifest.xml b/core/common/src/androidMain/AndroidManifest.xml similarity index 100% rename from core/common/src/main/AndroidManifest.xml rename to core/common/src/androidMain/AndroidManifest.xml diff --git a/core/common/src/main/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml b/core/common/src/androidMain/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml similarity index 100% rename from core/common/src/main/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml rename to core/common/src/androidMain/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml diff --git a/core/common/src/main/res/drawable-hdpi/core_common_ic_nia_notification.png b/core/common/src/androidMain/res/drawable-hdpi/core_common_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-hdpi/core_common_ic_nia_notification.png rename to core/common/src/androidMain/res/drawable-hdpi/core_common_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-mdpi/core_common_ic_nia_notification.png b/core/common/src/androidMain/res/drawable-mdpi/core_common_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-mdpi/core_common_ic_nia_notification.png rename to core/common/src/androidMain/res/drawable-mdpi/core_common_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-xhdpi/core_common_ic_nia_notification.png b/core/common/src/androidMain/res/drawable-xhdpi/core_common_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-xhdpi/core_common_ic_nia_notification.png rename to core/common/src/androidMain/res/drawable-xhdpi/core_common_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-xxhdpi/core_common_ic_nia_notification.png b/core/common/src/androidMain/res/drawable-xxhdpi/core_common_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-xxhdpi/core_common_ic_nia_notification.png rename to core/common/src/androidMain/res/drawable-xxhdpi/core_common_ic_nia_notification.png diff --git a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopeComponent.kt similarity index 51% rename from core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt rename to core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopeComponent.kt index 9c21dd69a..8bbab228c 100644 --- a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt +++ b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopeComponent.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,16 +14,19 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network +package com.google.samples.apps.nowinandroid.core.network.di -import javax.inject.Qualifier -import kotlin.annotation.AnnotationRetention.RUNTIME +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import me.tatarka.inject.annotations.Component +import me.tatarka.inject.annotations.Provides -@Qualifier -@Retention(RUNTIME) -annotation class Dispatcher(val niaDispatcher: NiaDispatchers) +typealias ApplicationScope = CoroutineScope -enum class NiaDispatchers { - Default, - IO, +@Component +abstract class CoroutineScopeComponent { + @Provides + fun providesCoroutineScope( + dispatcher: DefaultDispatcher, + ): ApplicationScope = CoroutineScope(SupervisorJob() + dispatcher) } diff --git a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersComponent.kt similarity index 56% rename from core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt rename to core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersComponent.kt index 95ec07049..cf3b1583b 100644 --- a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt +++ b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersComponent.kt @@ -16,24 +16,18 @@ package com.google.samples.apps.nowinandroid.core.network.di -import com.google.samples.apps.nowinandroid.core.network.Dispatcher -import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default -import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers +import me.tatarka.inject.annotations.Component +import me.tatarka.inject.annotations.Provides -@Module -@InstallIn(SingletonComponent::class) -object DispatchersModule { +typealias DefaultDispatcher = CoroutineDispatcher +typealias IODispatcher = CoroutineDispatcher +@Component +abstract class DispatchersComponent { @Provides - @Dispatcher(IO) - fun providesIODispatcher(): CoroutineDispatcher = Dispatchers.IO + fun providesIODispatcher(): IODispatcher = Dispatchers.Unconfined @Provides - @Dispatcher(Default) - fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default + fun providesDefaultDispatcher(): DefaultDispatcher = Dispatchers.Default } diff --git a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt similarity index 100% rename from core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt rename to core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt diff --git a/core/common/src/test/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt b/core/common/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt similarity index 95% rename from core/common/src/test/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt rename to core/common/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt index 4f1229e9d..5cd23a973 100644 --- a/core/common/src/test/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt +++ b/core/common/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.nowinandroid.core.result import app.cash.turbine.test import kotlinx.coroutines.flow.flow import kotlinx.coroutines.test.runTest -import org.junit.Test +import kotlin.test.Test import kotlin.test.assertEquals class ResultKtTest { @@ -38,7 +38,7 @@ class ResultKtTest { when (val errorResult = awaitItem()) { is Result.Error -> assertEquals( "Test Done", - errorResult.exception?.message, + errorResult.exception.message, ) Result.Loading, is Result.Success, diff --git a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt deleted file mode 100644 index 6e7ca6bb3..000000000 --- a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.network.di - -import com.google.samples.apps.nowinandroid.core.network.Dispatcher -import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.SupervisorJob -import javax.inject.Qualifier -import javax.inject.Singleton - -@Retention(AnnotationRetention.RUNTIME) -@Qualifier -annotation class ApplicationScope - -@Module -@InstallIn(SingletonComponent::class) -internal object CoroutineScopesModule { - @Provides - @Singleton - @ApplicationScope - fun providesCoroutineScope( - @Dispatcher(Default) dispatcher: CoroutineDispatcher, - ): CoroutineScope = CoroutineScope(SupervisorJob() + dispatcher) -} diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index 236891533..9dad3e0cd 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -46,9 +46,6 @@ kotlin { nativeMain.dependencies { implementation(libs.sqldelight.native.driver) } - nativeTest.dependencies { - implementation(libs.sqldelight.sqlite.driver) - } jvmMain.dependencies { implementation(libs.sqldelight.sqlite.driver) } diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt index 4f5d15be1..d4f08d0a2 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.nowinandroid.core.testing.di import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import com.google.samples.apps.nowinandroid.core.network.di.DispatchersModule +import com.google.samples.apps.nowinandroid.core.network.di.DispatchersComponent import dagger.Module import dagger.Provides import dagger.hilt.components.SingletonComponent @@ -30,7 +30,7 @@ import kotlinx.coroutines.test.TestDispatcher @Module @TestInstallIn( components = [SingletonComponent::class], - replaces = [DispatchersModule::class], + replaces = [DispatchersComponent::class], ) internal object TestDispatchersModule { @Provides