1515 */
1616package com.android.developers.androidify.data
1717
18- import android.content.Context
1918import com.android.developers.androidify.RemoteConfigDataSource
2019import com.android.developers.androidify.RemoteConfigDataSourceImpl
2120import com.android.developers.androidify.util.LocalFileProvider
2221import com.android.developers.androidify.util.LocalFileProviderImpl
2322import com.android.developers.androidify.vertexai.FirebaseAiDataSource
2423import com.android.developers.androidify.vertexai.FirebaseAiDataSourceImpl
24+ import dagger.Binds
2525import dagger.Module
2626import dagger.Provides
2727import dagger.hilt.InstallIn
28- import dagger.hilt.android.qualifiers.ApplicationContext
2928import dagger.hilt.components.SingletonComponent
3029import kotlinx.coroutines.CoroutineDispatcher
3130import kotlinx.coroutines.Dispatchers
@@ -34,78 +33,43 @@ import javax.inject.Singleton
3433
3534@Module
3635@InstallIn(SingletonComponent ::class )
37- internal object DataModule {
36+ internal abstract class DataModule {
3837
39- @Provides
40- @Named(" IO" )
41- fun ioDispatcher (): CoroutineDispatcher = Dispatchers .IO
38+ companion object {
39+ @Provides
40+ @Named(" IO" )
41+ fun ioDispatcher (): CoroutineDispatcher = Dispatchers .IO
42+ }
4243
43- @Provides
44+ @Binds
4445 @Singleton
45- fun provideLocalFileProvider (
46- @ApplicationContext appContext : Context ,
47- @Named(" IO" ) ioDispatcher : CoroutineDispatcher ,
48- ): LocalFileProvider =
49- LocalFileProviderImpl (appContext, ioDispatcher)
46+ abstract fun bindsLocalFileProvider (impl : LocalFileProviderImpl ): LocalFileProvider
5047
51- @Provides
48+ @Binds
5249 @Singleton
53- fun provideRemoteConfigDataSource (): RemoteConfigDataSource = RemoteConfigDataSourceImpl ()
50+ abstract fun bindsRemoteConfigDataSource ( impl : RemoteConfigDataSourceImpl ): RemoteConfigDataSource
5451
55- @Provides
56- fun provideConfigProvider (remoteConfigDataSource : RemoteConfigDataSource ): ConfigProvider =
57- ConfigProvider (remoteConfigDataSource)
58-
59- @Provides
52+ @Binds
6053 @Singleton
61- fun providesGeminiNanoDownloader (@ApplicationContext appContext : Context ): GeminiNanoDownloader =
62- GeminiNanoDownloader (appContext)
54+ abstract fun bindsGeminiNanoDataSource (impl : GeminiNanoGenerationDataSourceImpl ): GeminiNanoGenerationDataSource
6355
64- @Provides
56+ @Binds
6557 @Singleton
66- fun providesInternetConnectivityManager (@ApplicationContext appContext : Context ): InternetConnectivityManager =
67- InternetConnectivityManagerImpl (appContext)
58+ abstract fun bindsInternetConnectivityManager (impl : InternetConnectivityManagerImpl ): InternetConnectivityManager
6859
69- @Provides
60+ @Binds
7061 @Singleton
71- fun providesFirebaseVertexAiDataSource (remoteConfigDataSource : RemoteConfigDataSource ): FirebaseAiDataSource =
72- FirebaseAiDataSourceImpl (remoteConfigDataSource)
62+ abstract fun bindsFirebaseVertexAiDataSource (impl : FirebaseAiDataSourceImpl ): FirebaseAiDataSource
7363
74- @Provides
64+ @Binds
7565 @Singleton
76- fun providesTextGenerationRepository (
77- remoteConfigDataSource : RemoteConfigDataSource ,
78- geminiNanoDataSource : GeminiNanoGenerationDataSource ,
79- firebaseAiDataSource : FirebaseAiDataSource ,
80- ): TextGenerationRepository =
81- TextGenerationRepositoryImpl (
82- remoteConfigDataSource,
83- geminiNanoDataSource,
84- firebaseAiDataSource,
85- )
66+ abstract fun bindsTextGenerationRepository (impl : TextGenerationRepositoryImpl ): TextGenerationRepository
8667
87- @Provides
68+ @Binds
8869 @Singleton
89- fun providesGeminiNanoDataSource (geminiNanoDownloader : GeminiNanoDownloader ): GeminiNanoGenerationDataSource =
90- GeminiNanoGenerationDataSourceImpl (geminiNanoDownloader)
70+ abstract fun bindsImageGenerationRepository (impl : ImageGenerationRepositoryImpl ): ImageGenerationRepository
9171
92- @Provides
72+ @Binds
9373 @Singleton
94- fun imageGenerationRepository (
95- remoteConfigDataSource : RemoteConfigDataSource ,
96- localFileProvider : LocalFileProvider ,
97- internetConnectivityManager : InternetConnectivityManager ,
98- firebaseAiDataSource : FirebaseAiDataSource ,
99- geminiNanoGenerationDataSource : GeminiNanoGenerationDataSource ,
100- ): ImageGenerationRepository = ImageGenerationRepositoryImpl (
101- remoteConfigDataSource = remoteConfigDataSource,
102- localFileProvider = localFileProvider,
103- geminiNanoDataSource = geminiNanoGenerationDataSource,
104- internetConnectivityManager = internetConnectivityManager,
105- firebaseAiDataSource = firebaseAiDataSource,
106- )
107-
108- @Provides
109- fun dropBehaviourFactory (localFileProvider : LocalFileProvider ,): DropBehaviourFactory =
110- DropBehaviourFactoryImpl (localFileProvider = localFileProvider)
74+ abstract fun bindsDropBehaviourFactory (impl : DropBehaviourFactoryImpl ): DropBehaviourFactory
11175}
0 commit comments