Use correct provider for CoroutineScope

pull/2064/head
lihenggui 2 years ago
parent 6982c57b93
commit eeb86ad23a

@ -16,25 +16,41 @@
package com.google.samples.apps.nowinandroid.core.data.di
import android.app.Application
import com.google.samples.apps.nowinandroid.core.data.util.ConnectivityManagerNetworkMonitor
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 com.google.samples.apps.nowinandroid.core.di.ApplicationScope
import com.google.samples.apps.nowinandroid.core.di.CoroutineScopeComponent
import com.google.samples.apps.nowinandroid.core.di.DispatchersComponent
import com.google.samples.apps.nowinandroid.core.di.IoDispatcher
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import me.tatarka.inject.annotations.Component
import me.tatarka.inject.annotations.Provides
@Component
abstract class AndroidPlatformDependentDataModule(
@Component val applicationComponent: AndroidApplicationComponent,
): PlatformDependentDataModule() {
@Component val dispatchersComponent: DispatchersComponent,
@Component val coroutineScopeComponent: CoroutineScopeComponent,
) : PlatformDependentDataModule() {
abstract val application: Application
@IoDispatcher abstract val ioDispatcher: CoroutineDispatcher
abstract val coroutineScope: CoroutineScope
@Provides
override fun bindsNetworkMonitor(): NetworkMonitor {
return ConnectivityManagerNetworkMonitor(applicationComponent.application)
return ConnectivityManagerNetworkMonitor(
application,
ioDispatcher,
)
}
@Provides
override fun bindsTimeZoneMonitor(): TimeZoneMonitor {
return TimeZoneBroadcastMonitor()
return TimeZoneBroadcastMonitor(application, coroutineScope, ioDispatcher)
}
}

@ -23,7 +23,7 @@ import android.content.IntentFilter
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import androidx.tracing.trace
import com.google.samples.apps.nowinandroid.core.di.IODispatcher
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.SharedFlow
@ -42,7 +42,7 @@ import java.time.ZoneId
internal class TimeZoneBroadcastMonitor(
private val context: Context,
appScope: CoroutineScope,
private val ioDispatcher: IODispatcher,
private val ioDispatcher: CoroutineDispatcher,
) : TimeZoneMonitor {
override val currentTimeZone: SharedFlow<TimeZone> =

@ -21,14 +21,11 @@ import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor
import com.google.samples.apps.nowinandroid.core.di.ApplicationScope
import me.tatarka.inject.annotations.Provides
@ApplicationScope
abstract class PlatformDependentDataModule {
@ApplicationScope
abstract class PlatformDependentDataModule {
@Provides
abstract fun bindsNetworkMonitor(): NetworkMonitor
@ApplicationScope
@Provides
abstract fun bindsTimeZoneMonitor(): TimeZoneMonitor
}

@ -23,8 +23,9 @@ import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDao
import com.google.samples.apps.nowinandroid.core.database.model.PopulatedNewsResource
import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel
import com.google.samples.apps.nowinandroid.core.database.model.asFtsEntity
import com.google.samples.apps.nowinandroid.core.di.IODispatcher
import com.google.samples.apps.nowinandroid.core.di.IoDispatcher
import com.google.samples.apps.nowinandroid.core.model.data.SearchResult
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
@ -42,7 +43,7 @@ class DefaultSearchContentsRepository(
private val newsResourceFtsDao: NewsResourceFtsDao,
private val topicDao: TopicDao,
private val topicFtsDao: TopicFtsDao,
private val ioDispatcher: IODispatcher,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
) : SearchContentsRepository {
override suspend fun populateFtsData() {

@ -23,42 +23,41 @@ import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao
import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDao
import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao
import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDao
import com.google.samples.apps.nowinandroid.core.di.IODispatcher
import com.google.samples.apps.nowinandroid.core.di.DispatchersComponent
import com.google.samples.apps.nowinandroid.core.di.IoDispatcher
import kotlinx.coroutines.CoroutineDispatcher
import me.tatarka.inject.annotations.Component
import me.tatarka.inject.annotations.Provides
@Component
internal abstract class DatabaseModule {
abstract class DatabaseModule(@Component val dispatchersComponent: DispatchersComponent) {
@IoDispatcher abstract val dispatcher: CoroutineDispatcher
@Provides
fun providesNiaDatabase(driver: SqlDriver): NiaDatabase = NiaDatabase(driver)
@Provides
fun providesTopicsDao(
database: NiaDatabase,
dispatcher: IODispatcher,
database: NiaDatabase
): TopicDao = TopicDao(database, dispatcher)
@Provides
fun providesNewsResourceDao(
database: NiaDatabase,
dispatcher: IODispatcher,
): NewsResourceDao = NewsResourceDao(database, dispatcher)
@Provides
fun providesTopicFtsDao(
database: NiaDatabase,
dispatcher: IODispatcher,
): TopicFtsDao = TopicFtsDao(database, dispatcher)
@Provides
fun providesNewsResourceFtsDao(
database: NiaDatabase,
dispatcher: IODispatcher,
): NewsResourceFtsDao = NewsResourceFtsDao(database, dispatcher)
@Provides
fun providesRecentSearchQueryDao(
database: NiaDatabase,
dispatcher: IODispatcher,
): RecentSearchQueryDao = RecentSearchQueryDao(database, dispatcher)
}

@ -15,8 +15,7 @@
*/
package com.google.samples.apps.nowinandroid.core.datastore
import com.google.samples.apps.nowinandroid.core.di.IODispatcher
import com.google.samples.apps.nowinandroid.core.di.IoDispatcher
import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig
import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand
import com.google.samples.apps.nowinandroid.core.model.data.UserData
@ -25,6 +24,7 @@ import com.russhwolf.settings.Settings
import com.russhwolf.settings.serialization.decodeValue
import com.russhwolf.settings.serialization.decodeValueOrNull
import com.russhwolf.settings.serialization.encodeValue
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.map
@ -38,7 +38,7 @@ private const val USER_DATA_KEY = "userData"
@Inject
class NiaPreferencesDataSource(
private val settings: Settings,
private val dispatcher: IODispatcher,
@IoDispatcher private val dispatcher: CoroutineDispatcher,
) {
// FlowSettings did not support JS, use a workaround instead
// https://github.com/russhwolf/multiplatform-settings/issues/139

@ -16,13 +16,14 @@
package com.google.samples.apps.nowinandroid.core.network.demo
import com.google.samples.apps.nowinandroid.core.di.IODispatcher
import com.google.samples.apps.nowinandroid.core.di.IoDispatcher
import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource
import com.google.samples.apps.nowinandroid.core.network.assets.NEWS_DATA
import com.google.samples.apps.nowinandroid.core.network.assets.TOPICS_DATA
import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList
import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource
import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import me.tatarka.inject.annotations.Inject
@ -31,7 +32,7 @@ import me.tatarka.inject.annotations.Inject
* [NiaNetworkDataSource] implementation that provides static news resources to aid development
*/
class DemoNiaNetworkDataSource @Inject constructor(
private val ioDispatcher: IODispatcher,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher,
private val networkJson: Json,
) : NiaNetworkDataSource {

Loading…
Cancel
Save