Skip to content

Commit 2939446

Browse files
authored
Merge pull request #750 from android/tidy/scopes
Add general application scope, use IO dispatcher for DataStore
2 parents d4d471f + d319264 commit 2939446

File tree

6 files changed

+27
-11
lines changed

6 files changed

+27
-11
lines changed

core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,28 @@
1717
package com.google.samples.apps.nowinandroid.core.network.di
1818

1919
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
20-
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO
20+
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default
2121
import dagger.Module
2222
import dagger.Provides
2323
import dagger.hilt.InstallIn
2424
import dagger.hilt.components.SingletonComponent
2525
import kotlinx.coroutines.CoroutineDispatcher
2626
import kotlinx.coroutines.CoroutineScope
2727
import kotlinx.coroutines.SupervisorJob
28+
import javax.inject.Qualifier
2829
import javax.inject.Singleton
2930

31+
@Retention(AnnotationRetention.RUNTIME)
32+
@Qualifier
33+
annotation class ApplicationScope
34+
3035
@Module
3136
@InstallIn(SingletonComponent::class)
3237
object CoroutineScopesModule {
3338
@Provides
3439
@Singleton
35-
@Dispatcher(IO)
36-
fun providesIOCoroutineScope(
37-
@Dispatcher(IO) ioDispatcher: CoroutineDispatcher,
38-
): CoroutineScope = CoroutineScope(SupervisorJob() + ioDispatcher)
40+
@ApplicationScope
41+
fun providesCoroutineScope(
42+
@Dispatcher(Default) dispatcher: CoroutineDispatcher,
43+
): CoroutineScope = CoroutineScope(SupervisorJob() + dispatcher)
3944
}

core/data-test/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ android {
2525
dependencies {
2626
api(project(":core:data"))
2727
implementation(project(":core:testing"))
28+
implementation(project(":core:common"))
2829
}

core/datastore-test/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ dependencies {
2626
api(project(":core:datastore"))
2727
api(libs.androidx.dataStore.core)
2828

29+
implementation(libs.protobuf.kotlin.lite)
2930
implementation(project(":core:common"))
3031
implementation(project(":core:testing"))
3132
}

core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ import androidx.datastore.core.DataStoreFactory
2121
import com.google.samples.apps.nowinandroid.core.datastore.UserPreferences
2222
import com.google.samples.apps.nowinandroid.core.datastore.UserPreferencesSerializer
2323
import com.google.samples.apps.nowinandroid.core.datastore.di.DataStoreModule
24-
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
25-
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO
24+
import com.google.samples.apps.nowinandroid.core.network.di.ApplicationScope
2625
import dagger.Module
2726
import dagger.Provides
2827
import dagger.hilt.components.SingletonComponent
@@ -41,12 +40,12 @@ object TestDataStoreModule {
4140
@Provides
4241
@Singleton
4342
fun providesUserPreferencesDataStore(
44-
@Dispatcher(IO) ioScope: CoroutineScope,
43+
@ApplicationScope scope: CoroutineScope,
4544
userPreferencesSerializer: UserPreferencesSerializer,
4645
tmpFolder: TemporaryFolder,
4746
): DataStore<UserPreferences> =
4847
tmpFolder.testUserPreferencesDataStore(
49-
coroutineScope = ioScope,
48+
coroutineScope = scope,
5049
userPreferencesSerializer = userPreferencesSerializer,
5150
)
5251
}

core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ import com.google.samples.apps.nowinandroid.core.datastore.UserPreferences
2525
import com.google.samples.apps.nowinandroid.core.datastore.UserPreferencesSerializer
2626
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
2727
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO
28+
import com.google.samples.apps.nowinandroid.core.network.di.ApplicationScope
2829
import dagger.Module
2930
import dagger.Provides
3031
import dagger.hilt.InstallIn
3132
import dagger.hilt.android.qualifiers.ApplicationContext
3233
import dagger.hilt.components.SingletonComponent
34+
import kotlinx.coroutines.CoroutineDispatcher
3335
import kotlinx.coroutines.CoroutineScope
3436
import javax.inject.Singleton
3537

@@ -41,12 +43,13 @@ object DataStoreModule {
4143
@Singleton
4244
fun providesUserPreferencesDataStore(
4345
@ApplicationContext context: Context,
44-
@Dispatcher(IO) ioScope: CoroutineScope,
46+
@Dispatcher(IO) ioDispatcher: CoroutineDispatcher,
47+
@ApplicationScope scope: CoroutineScope,
4548
userPreferencesSerializer: UserPreferencesSerializer,
4649
): DataStore<UserPreferences> =
4750
DataStoreFactory.create(
4851
serializer = userPreferencesSerializer,
49-
scope = ioScope,
52+
scope = CoroutineScope(scope.coroutineContext + ioDispatcher),
5053
migrations = listOf(
5154
IntToStringIdsMigration,
5255
),

core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.samples.apps.nowinandroid.core.testing.di
1818

1919
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
20+
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default
2021
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO
2122
import com.google.samples.apps.nowinandroid.core.network.di.DispatchersModule
2223
import dagger.Module
@@ -35,4 +36,10 @@ object TestDispatchersModule {
3536
@Provides
3637
@Dispatcher(IO)
3738
fun providesIODispatcher(testDispatcher: TestDispatcher): CoroutineDispatcher = testDispatcher
39+
40+
@Provides
41+
@Dispatcher(Default)
42+
fun providesDefaultDispatcher(
43+
testDispatcher: TestDispatcher,
44+
): CoroutineDispatcher = testDispatcher
3845
}

0 commit comments

Comments
 (0)