diff --git a/core/common/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt b/core/common/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/di/AndroidDispatchersComponent.kt similarity index 72% rename from core/common/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt rename to core/common/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/di/AndroidDispatchersComponent.kt index 6ae0c863d..0421b2b55 100644 --- a/core/common/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt +++ b/core/common/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/di/AndroidDispatchersComponent.kt @@ -16,15 +16,17 @@ package com.google.samples.apps.nowinandroid.core.di +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import me.tatarka.inject.annotations.Component import me.tatarka.inject.annotations.Provides @Component -actual abstract class DispatchersComponent { +abstract class AndroidDispatchersComponent : DispatchersComponent() { @Provides - actual fun providesIODispatcher(): IODispatcher = Dispatchers.IO + override fun providesIODispatcher(): @IoDispatcher CoroutineDispatcher = Dispatchers.IO @Provides - actual fun providesDefaultDispatcher(): DefaultDispatcher = Dispatchers.Default + override fun providesDefaultDispatcher(): @DefaultDispatcher CoroutineDispatcher = + Dispatchers.Default } diff --git a/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatcherQualifier.kt b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatcherQualifier.kt new file mode 100644 index 000000000..3193db2c9 --- /dev/null +++ b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatcherQualifier.kt @@ -0,0 +1,46 @@ +/* + * 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. + * 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.di + +import me.tatarka.inject.annotations.Qualifier + +@Qualifier +@Target( + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.FUNCTION, + AnnotationTarget.VALUE_PARAMETER, + AnnotationTarget.TYPE +) +annotation class IoDispatcher + +@Qualifier +@Target( + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.FUNCTION, + AnnotationTarget.VALUE_PARAMETER, + AnnotationTarget.TYPE +) +annotation class MainDispatcher + +@Qualifier +@Target( + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.FUNCTION, + AnnotationTarget.VALUE_PARAMETER, + AnnotationTarget.TYPE +) +annotation class DefaultDispatcher diff --git a/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt index 3de817939..95cc4e8be 100644 --- a/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt +++ b/core/common/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt @@ -19,13 +19,10 @@ package com.google.samples.apps.nowinandroid.core.di import kotlinx.coroutines.CoroutineDispatcher import me.tatarka.inject.annotations.Provides -typealias DefaultDispatcher = CoroutineDispatcher -typealias IODispatcher = CoroutineDispatcher - -expect abstract class DispatchersComponent { +abstract class DispatchersComponent { @Provides - fun providesIODispatcher(): IODispatcher + abstract fun providesIODispatcher(): @IoDispatcher CoroutineDispatcher @Provides - fun providesDefaultDispatcher(): DefaultDispatcher + abstract fun providesDefaultDispatcher(): @DefaultDispatcher CoroutineDispatcher } diff --git a/core/common/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt b/core/common/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/di/JvmDispatchersComponent.kt similarity index 73% rename from core/common/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt rename to core/common/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/di/JvmDispatchersComponent.kt index e4edc24a7..1afab8067 100644 --- a/core/common/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt +++ b/core/common/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/di/JvmDispatchersComponent.kt @@ -16,17 +16,16 @@ package com.google.samples.apps.nowinandroid.core.di +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import me.tatarka.inject.annotations.Component import me.tatarka.inject.annotations.Provides @Component -actual abstract class DispatchersComponent { - - // TODO Provides an actual IODispatcher +abstract class JvmDispatchersComponent: DispatchersComponent() { @Provides - actual fun providesIODispatcher(): IODispatcher = Dispatchers.Default + override fun providesIODispatcher(): @IoDispatcher CoroutineDispatcher = Dispatchers.IO @Provides - actual fun providesDefaultDispatcher(): DefaultDispatcher = Dispatchers.Default + override fun providesDefaultDispatcher(): @DefaultDispatcher CoroutineDispatcher = Dispatchers.Default } diff --git a/core/common/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt b/core/common/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/di/NativeDispatchersComponent.kt similarity index 70% rename from core/common/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt rename to core/common/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/di/NativeDispatchersComponent.kt index 6ae0c863d..16cfd5a91 100644 --- a/core/common/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/di/DispatchersComponent.kt +++ b/core/common/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/di/NativeDispatchersComponent.kt @@ -16,15 +16,18 @@ package com.google.samples.apps.nowinandroid.core.di +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO import me.tatarka.inject.annotations.Component import me.tatarka.inject.annotations.Provides @Component -actual abstract class DispatchersComponent { +abstract class NativeDispatchersComponent : DispatchersComponent() { @Provides - actual fun providesIODispatcher(): IODispatcher = Dispatchers.IO + override fun providesIODispatcher(): @IoDispatcher CoroutineDispatcher = Dispatchers.IO @Provides - actual fun providesDefaultDispatcher(): DefaultDispatcher = Dispatchers.Default + override fun providesDefaultDispatcher(): @DefaultDispatcher CoroutineDispatcher = + Dispatchers.Default } diff --git a/core/data/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/data/di/AndroidPlatformDependentDataModule.kt b/core/data/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/data/di/AndroidPlatformDependentDataModule.kt index f1f19d3c7..d0262c24f 100644 --- a/core/data/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/data/di/AndroidPlatformDependentDataModule.kt +++ b/core/data/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/data/di/AndroidPlatformDependentDataModule.kt @@ -20,14 +20,17 @@ import com.google.samples.apps.nowinandroid.core.data.util.ConnectivityManagerNe import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneBroadcastMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor +import com.google.samples.apps.nowinandroid.core.di.AndroidApplicationComponent import me.tatarka.inject.annotations.Component import me.tatarka.inject.annotations.Provides @Component -abstract class AndroidPlatformDependentDataModule: PlatformDependentDataModule() { +abstract class AndroidPlatformDependentDataModule( + @Component val applicationComponent: AndroidApplicationComponent, +): PlatformDependentDataModule() { @Provides override fun bindsNetworkMonitor(): NetworkMonitor { - return ConnectivityManagerNetworkMonitor() + return ConnectivityManagerNetworkMonitor(applicationComponent.application) } @Provides