Skip to content

Commit 1a5b720

Browse files
authored
Merge pull request #53 from SimonMarquis/dagger-module
Dagger `@Module` cleanup
2 parents aa8288c + 8c75c44 commit 1a5b720

File tree

8 files changed

+44
-81
lines changed

8 files changed

+44
-81
lines changed

core/util/src/main/java/com/android/developers/androidify/util/LocalFileProvider.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616
package com.android.developers.androidify.util
1717

18+
import android.app.Application
1819
import android.content.ContentValues
19-
import android.content.Context
2020
import android.graphics.Bitmap
2121
import android.net.Uri
2222
import android.os.Build
@@ -56,10 +56,9 @@ interface LocalFileProvider {
5656
}
5757

5858
@Singleton
59-
open class LocalFileProviderImpl @Inject constructor(
60-
val application: Context,
61-
@Named("IO")
62-
val ioDispatcher: CoroutineDispatcher,
59+
class LocalFileProviderImpl @Inject constructor(
60+
private val application: Application,
61+
@Named("IO") private val ioDispatcher: CoroutineDispatcher
6362
) : LocalFileProvider {
6463

6564
override suspend fun saveBitmapToFile(bitmap: Bitmap, file: File) = withContext(ioDispatcher) {

data/src/main/java/com/android/developers/androidify/data/ConfigProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
package com.android.developers.androidify.data
1717

1818
import com.android.developers.androidify.RemoteConfigDataSource
19+
import javax.inject.Inject
1920
import javax.inject.Singleton
2021

2122
@Singleton
22-
class ConfigProvider(val remoteConfigDataSource: RemoteConfigDataSource) {
23+
class ConfigProvider @Inject constructor(val remoteConfigDataSource: RemoteConfigDataSource) {
2324

2425
fun isAppInactive(): Boolean {
2526
return remoteConfigDataSource.isAppInactive()

data/src/main/java/com/android/developers/androidify/data/DataModule.kt

Lines changed: 23 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,16 @@
1515
*/
1616
package com.android.developers.androidify.data
1717

18-
import android.content.Context
1918
import com.android.developers.androidify.RemoteConfigDataSource
2019
import com.android.developers.androidify.RemoteConfigDataSourceImpl
2120
import com.android.developers.androidify.util.LocalFileProvider
2221
import com.android.developers.androidify.util.LocalFileProviderImpl
2322
import com.android.developers.androidify.vertexai.FirebaseAiDataSource
2423
import com.android.developers.androidify.vertexai.FirebaseAiDataSourceImpl
24+
import dagger.Binds
2525
import dagger.Module
2626
import dagger.Provides
2727
import dagger.hilt.InstallIn
28-
import dagger.hilt.android.qualifiers.ApplicationContext
2928
import dagger.hilt.components.SingletonComponent
3029
import kotlinx.coroutines.CoroutineDispatcher
3130
import 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
}

data/src/main/java/com/android/developers/androidify/data/GeminiNanoDownloader.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@
1515
*/
1616
package com.android.developers.androidify.data
1717

18-
import android.content.Context
18+
import android.app.Application
1919
import android.util.Log
2020
import com.google.ai.edge.aicore.DownloadCallback
2121
import com.google.ai.edge.aicore.DownloadConfig
2222
import com.google.ai.edge.aicore.GenerativeAIException
2323
import com.google.ai.edge.aicore.GenerativeModel
2424
import com.google.ai.edge.aicore.generationConfig
25+
import javax.inject.Inject
2526
import javax.inject.Singleton
2627

2728
@Singleton
28-
class GeminiNanoDownloader(val applicationContext: Context) {
29+
class GeminiNanoDownloader @Inject constructor(private val application: Application) {
2930
var generativeModel: GenerativeModel? = null
3031
private set
3132

@@ -68,7 +69,7 @@ class GeminiNanoDownloader(val applicationContext: Context) {
6869
val downloadConfig = DownloadConfig(downloadCallback)
6970

7071
val generationConfig = generationConfig {
71-
context = applicationContext
72+
context = application
7273
temperature = 0.2f
7374
topK = 16
7475
maxOutputTokens = 256

data/src/main/java/com/android/developers/androidify/data/GeminiNanoGenerationDataSource.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ interface GeminiNanoGenerationDataSource {
2525
}
2626

2727
@Singleton
28-
class GeminiNanoGenerationDataSourceImpl @Inject constructor(val downloader: GeminiNanoDownloader) :
28+
internal class GeminiNanoGenerationDataSourceImpl @Inject constructor(private val downloader: GeminiNanoDownloader) :
2929
GeminiNanoGenerationDataSource {
3030

3131
override suspend fun initialize() {

data/src/main/java/com/android/developers/androidify/data/ImageGenerationRepository.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import android.graphics.Bitmap
1919
import android.graphics.BitmapFactory
2020
import android.net.Uri
2121
import android.util.Log
22-
import com.android.developers.androidify.RemoteConfigDataSource
2322
import com.android.developers.androidify.model.ValidatedDescription
2423
import com.android.developers.androidify.model.ValidatedImage
2524
import com.android.developers.androidify.util.LocalFileProvider
@@ -40,11 +39,10 @@ interface ImageGenerationRepository {
4039

4140
@Singleton
4241
internal class ImageGenerationRepositoryImpl @Inject constructor(
43-
val remoteConfigDataSource: RemoteConfigDataSource,
44-
val localFileProvider: LocalFileProvider,
45-
val internetConnectivityManager: InternetConnectivityManager,
46-
val geminiNanoDataSource: GeminiNanoGenerationDataSource,
47-
val firebaseAiDataSource: FirebaseAiDataSource,
42+
private val localFileProvider: LocalFileProvider,
43+
private val internetConnectivityManager: InternetConnectivityManager,
44+
private val geminiNanoDataSource: GeminiNanoGenerationDataSource,
45+
private val firebaseAiDataSource: FirebaseAiDataSource,
4846
) : ImageGenerationRepository {
4947

5048
override suspend fun initialize() {

data/src/main/java/com/android/developers/androidify/data/InternetConnectivityManager.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
*/
1616
package com.android.developers.androidify.data
1717

18+
import android.app.Application
1819
import android.content.Context
1920
import android.net.ConnectivityManager
2021
import android.net.NetworkCapabilities
21-
import dagger.hilt.android.qualifiers.ApplicationContext
2222
import javax.inject.Inject
2323
import javax.inject.Singleton
2424

@@ -27,11 +27,11 @@ interface InternetConnectivityManager {
2727
}
2828

2929
@Singleton
30-
class InternetConnectivityManagerImpl @Inject constructor(@ApplicationContext val context: Context) :
30+
internal class InternetConnectivityManagerImpl @Inject constructor(private val application: Application) :
3131
InternetConnectivityManager {
3232
override fun isInternetAvailable(): Boolean {
3333
val connectivityManager =
34-
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
34+
application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
3535
val network = connectivityManager.activeNetwork ?: return false
3636
val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
3737
return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)

data/src/main/java/com/android/developers/androidify/data/TextGenerationRepository.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ interface TextGenerationRepository {
2727

2828
@Singleton
2929
class TextGenerationRepositoryImpl @Inject constructor(
30-
val remoteConfigDataSource: RemoteConfigDataSource,
31-
val geminiNanoDataSource: GeminiNanoGenerationDataSource,
32-
val firebaseAiDataSource: FirebaseAiDataSource,
30+
private val remoteConfigDataSource: RemoteConfigDataSource,
31+
private val geminiNanoDataSource: GeminiNanoGenerationDataSource,
32+
private val firebaseAiDataSource: FirebaseAiDataSource,
3333
) : TextGenerationRepository {
3434

3535
private var currentPrompts: List<String>? = null

0 commit comments

Comments
 (0)