Skip to content

Commit 3db3706

Browse files
committed
update dagger
1 parent 07dec7a commit 3db3706

File tree

6 files changed

+95
-88
lines changed

6 files changed

+95
-88
lines changed

firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ dependencies {
6464
implementation project(':encoders:firebase-encoders-json')
6565
implementation project(':firebase-common')
6666
implementation project(':firebase-components')
67+
implementation project(':firebase-annotations')
6768
implementation project(':firebase-datatransport')
6869
implementation project(':firebase-installations-interop')
6970
implementation project(':transport:transport-api')

firebase-ml-modeldownloader/src/main/java/com/google/firebase/ml/modeldownloader/FirebaseModelDownloader.java

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// limitations under the License.
1414
package com.google.firebase.ml.modeldownloader;
1515

16-
import android.annotation.SuppressLint;
1716
import android.os.Build.VERSION_CODES;
1817
import android.util.Log;
1918
import androidx.annotation.NonNull;
@@ -26,6 +25,8 @@
2625
import com.google.android.gms.tasks.Tasks;
2726
import com.google.firebase.FirebaseApp;
2827
import com.google.firebase.FirebaseOptions;
28+
import com.google.firebase.annotations.concurrent.Background;
29+
import com.google.firebase.annotations.concurrent.Blocking;
2930
import com.google.firebase.ml.modeldownloader.internal.CustomModelDownloadService;
3031
import com.google.firebase.ml.modeldownloader.internal.FirebaseMlLogEvent.ModelDownloadLogEvent.DownloadStatus;
3132
import com.google.firebase.ml.modeldownloader.internal.FirebaseMlLogEvent.ModelDownloadLogEvent.ErrorCode;
@@ -36,7 +37,6 @@
3637
import java.io.File;
3738
import java.util.Set;
3839
import java.util.concurrent.Executor;
39-
import java.util.concurrent.Executors;
4040
import javax.inject.Inject;
4141

4242
public class FirebaseModelDownloader {
@@ -47,34 +47,14 @@ public class FirebaseModelDownloader {
4747
private final ModelFileDownloadService fileDownloadService;
4848
private final ModelFileManager fileManager;
4949
private final CustomModelDownloadService modelDownloadService;
50-
private final Executor executor;
50+
private final Executor bgExecutor;
51+
private final Executor blockingExecutor;
5152

5253
private final FirebaseMlLogger eventLogger;
5354
private final CustomModel.Factory modelFactory;
5455

5556
@Inject
5657
@RequiresApi(api = VERSION_CODES.KITKAT)
57-
// TODO(b/258424267): Migrate to go/firebase-android-executors
58-
@SuppressLint("ThreadPoolCreation")
59-
FirebaseModelDownloader(
60-
FirebaseOptions firebaseOptions,
61-
SharedPreferencesUtil sharedPreferencesUtil,
62-
ModelFileDownloadService fileDownloadService,
63-
CustomModelDownloadService modelDownloadService,
64-
ModelFileManager fileManager,
65-
FirebaseMlLogger eventLogger,
66-
CustomModel.Factory modelFactory) {
67-
this(
68-
firebaseOptions,
69-
sharedPreferencesUtil,
70-
fileDownloadService,
71-
modelDownloadService,
72-
fileManager,
73-
eventLogger,
74-
Executors.newSingleThreadExecutor(),
75-
modelFactory);
76-
}
77-
7858
@VisibleForTesting
7959
FirebaseModelDownloader(
8060
FirebaseOptions firebaseOptions,
@@ -83,15 +63,17 @@ public class FirebaseModelDownloader {
8363
CustomModelDownloadService modelDownloadService,
8464
ModelFileManager fileManager,
8565
FirebaseMlLogger eventLogger,
86-
Executor executor,
66+
@Background Executor bgExecutor,
67+
@Blocking Executor blockingExecutor,
8768
CustomModel.Factory modelFactory) {
8869
this.firebaseOptions = firebaseOptions;
8970
this.sharedPreferencesUtil = sharedPreferencesUtil;
9071
this.fileDownloadService = fileDownloadService;
9172
this.modelDownloadService = modelDownloadService;
9273
this.fileManager = fileManager;
9374
this.eventLogger = eventLogger;
94-
this.executor = executor;
75+
this.bgExecutor = bgExecutor;
76+
this.blockingExecutor = blockingExecutor;
9577
this.modelFactory = modelFactory;
9678
}
9779

@@ -227,7 +209,7 @@ private Task<CustomModel> getCompletedLocalCustomModelTask(@NonNull CustomModel
227209

228210
if (downloadInProgressTask != null) {
229211
return downloadInProgressTask.continueWithTask(
230-
executor,
212+
bgExecutor,
231213
downloadTask -> {
232214
if (downloadTask.isSuccessful()) {
233215
return finishModelDownload(model.getName());
@@ -251,7 +233,7 @@ private Task<CustomModel> getCompletedLocalCustomModelTask(@NonNull CustomModel
251233
// bad model state - delete all existing model details and return exception
252234
return deleteDownloadedModel(model.getName())
253235
.continueWithTask(
254-
executor,
236+
bgExecutor,
255237
deletionTask ->
256238
Tasks.forException(
257239
new FirebaseMlException(
@@ -284,7 +266,7 @@ private Task<CustomModel> getCustomModelTask(
284266
firebaseOptions.getProjectId(), modelName, modelHash);
285267

286268
return incomingModelDetails.continueWithTask(
287-
executor,
269+
bgExecutor,
288270
incomingModelDetailTask -> {
289271
if (incomingModelDetailTask.isSuccessful()) {
290272
// null means we have the latest model or we failed to connect.
@@ -368,7 +350,7 @@ && new File(currentModel.getLocalFilePath()).exists()) {
368350
return fileDownloadService
369351
.download(incomingModelDetailTask.getResult(), conditions)
370352
.continueWithTask(
371-
executor,
353+
blockingExecutor,
372354
downloadTask -> {
373355
if (downloadTask.isSuccessful()) {
374356
return finishModelDownload(modelName);
@@ -401,14 +383,14 @@ private Task<CustomModel> retryExpiredUrlDownload(
401383
firebaseOptions.getProjectId(), modelName);
402384
// no local model - start download.
403385
return retryModelDetails.continueWithTask(
404-
executor,
386+
bgExecutor,
405387
retryModelDetailTask -> {
406388
if (retryModelDetailTask.isSuccessful()) {
407389
// start download
408390
return fileDownloadService
409391
.download(retryModelDetailTask.getResult(), conditions)
410392
.continueWithTask(
411-
executor,
393+
bgExecutor,
412394
retryDownloadTask -> {
413395
if (retryDownloadTask.isSuccessful()) {
414396
return finishModelDownload(modelName);
@@ -458,7 +440,7 @@ public Task<Set<CustomModel>> listDownloadedModels() {
458440
fileDownloadService.maybeCheckDownloadingComplete();
459441

460442
TaskCompletionSource<Set<CustomModel>> taskCompletionSource = new TaskCompletionSource<>();
461-
executor.execute(
443+
bgExecutor.execute(
462444
() -> taskCompletionSource.setResult(sharedPreferencesUtil.listDownloadedModels()));
463445
return taskCompletionSource.getTask();
464446
}
@@ -472,7 +454,7 @@ public Task<Set<CustomModel>> listDownloadedModels() {
472454
public Task<Void> deleteDownloadedModel(@NonNull String modelName) {
473455

474456
TaskCompletionSource<Void> taskCompletionSource = new TaskCompletionSource<>();
475-
executor.execute(
457+
bgExecutor.execute(
476458
() -> {
477459
// remove all files associated with this model and then clean up model references.
478460
boolean isSuccessful = deleteModelDetails(modelName);

firebase-ml-modeldownloader/src/main/java/com/google/firebase/ml/modeldownloader/FirebaseModelDownloaderRegistrar.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@
2020
import androidx.annotation.RequiresApi;
2121
import com.google.android.datatransport.TransportFactory;
2222
import com.google.firebase.FirebaseApp;
23+
import com.google.firebase.annotations.concurrent.Background;
24+
import com.google.firebase.annotations.concurrent.Blocking;
2325
import com.google.firebase.components.Component;
2426
import com.google.firebase.components.ComponentRegistrar;
2527
import com.google.firebase.components.Dependency;
28+
import com.google.firebase.components.Qualified;
2629
import com.google.firebase.installations.FirebaseInstallationsApi;
2730
import com.google.firebase.platforminfo.LibraryVersionComponent;
2831
import java.util.Arrays;
2932
import java.util.List;
33+
import java.util.concurrent.Executor;
3034

3135
/**
3236
* Registrar for setting up Firebase ML Model Downloader's dependency injections in Firebase Android
@@ -41,19 +45,25 @@ public class FirebaseModelDownloaderRegistrar implements ComponentRegistrar {
4145
@NonNull
4246
@RequiresApi(api = VERSION_CODES.KITKAT)
4347
public List<Component<?>> getComponents() {
48+
Qualified<Executor> bgExecutor = Qualified.qualified(Background.class, Executor.class);
49+
Qualified<Executor> blockingExecutor = Qualified.qualified(Blocking.class, Executor.class);
4450
return Arrays.asList(
4551
Component.builder(FirebaseModelDownloader.class)
4652
.name(LIBRARY_NAME)
4753
.add(Dependency.required(Context.class))
4854
.add(Dependency.required(FirebaseApp.class))
4955
.add(Dependency.requiredProvider(FirebaseInstallationsApi.class))
5056
.add(Dependency.requiredProvider(TransportFactory.class))
57+
.add(Dependency.required(bgExecutor))
58+
.add(Dependency.required(blockingExecutor))
5159
.factory(
5260
c ->
5361
DaggerModelDownloaderComponent.builder()
5462
.setApplicationContext(c.get(Context.class))
5563
.setFirebaseApp(c.get(FirebaseApp.class))
5664
.setFis(c.getProvider(FirebaseInstallationsApi.class))
65+
.setBlockingExecutor(c.get(blockingExecutor))
66+
.setBgExecutor(c.get(bgExecutor))
5767
.setTransportFactory(c.getProvider(TransportFactory.class))
5868
.build()
5969
.getModelDownloader())

firebase-ml-modeldownloader/src/main/java/com/google/firebase/ml/modeldownloader/ModelDownloaderComponent.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020
import com.google.android.datatransport.TransportFactory;
2121
import com.google.firebase.FirebaseApp;
2222
import com.google.firebase.FirebaseOptions;
23+
import com.google.firebase.annotations.concurrent.Background;
24+
import com.google.firebase.annotations.concurrent.Blocking;
2325
import com.google.firebase.inject.Provider;
2426
import com.google.firebase.installations.FirebaseInstallationsApi;
2527
import dagger.BindsInstance;
2628
import dagger.Component;
2729
import dagger.Module;
2830
import dagger.Provides;
31+
import java.util.concurrent.Executor;
2932
import javax.inject.Named;
3033
import javax.inject.Singleton;
3134

@@ -49,11 +52,18 @@ interface Builder {
4952
@BindsInstance
5053
Builder setTransportFactory(Provider<TransportFactory> transportFactory);
5154

55+
@BindsInstance
56+
Builder setBlockingExecutor(@Blocking Executor blockingExecutor);
57+
58+
@BindsInstance
59+
Builder setBgExecutor(@Background Executor bgExecutor);
60+
5261
ModelDownloaderComponent build();
5362
}
5463

5564
@Module
5665
interface MainModule {
66+
5767
@Provides
5868
@Named("persistenceKey")
5969
static String persistenceKey(FirebaseApp app) {

0 commit comments

Comments
 (0)