Use correct implementation for providing dispatchers

pull/2064/head
lihenggui 2 years ago
parent 36c537466c
commit 678e98ee3b

@ -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
}

@ -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

@ -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
}

@ -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
}

@ -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
}

@ -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

Loading…
Cancel
Save