Skip to content

Commit 46e4196

Browse files
committed
Migrate to use standard executors provided by Firebase Common.
1 parent 3432f93 commit 46e4196

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

appcheck/firebase-appcheck/firebase-appcheck.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ android {
4141
}
4242

4343
dependencies {
44+
implementation project(':firebase-annotations')
4445
implementation project(':firebase-common')
4546
implementation project(':firebase-components')
4647
implementation project(":appcheck:firebase-appcheck-interop")

appcheck/firebase-appcheck/src/main/java/com/google/firebase/appcheck/FirebaseAppCheckRegistrar.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,21 @@
1616

1717
import com.google.android.gms.common.annotation.KeepForSdk;
1818
import com.google.firebase.FirebaseApp;
19+
import com.google.firebase.annotations.concurrent.Background;
20+
import com.google.firebase.annotations.concurrent.Blocking;
1921
import com.google.firebase.appcheck.internal.DefaultFirebaseAppCheck;
2022
import com.google.firebase.appcheck.interop.InternalAppCheckTokenProvider;
2123
import com.google.firebase.components.Component;
2224
import com.google.firebase.components.ComponentRegistrar;
2325
import com.google.firebase.components.Dependency;
26+
import com.google.firebase.components.Qualified;
2427
import com.google.firebase.heartbeatinfo.HeartBeatConsumerComponent;
2528
import com.google.firebase.heartbeatinfo.HeartBeatController;
2629
import com.google.firebase.platforminfo.LibraryVersionComponent;
2730
import java.util.Arrays;
2831
import java.util.List;
32+
import java.util.concurrent.ExecutorService;
33+
import java.util.concurrent.ScheduledExecutorService;
2934

3035
/**
3136
* {@link ComponentRegistrar} for setting up FirebaseAppCheck's dependency injections in Firebase
@@ -39,16 +44,25 @@ public class FirebaseAppCheckRegistrar implements ComponentRegistrar {
3944

4045
@Override
4146
public List<Component<?>> getComponents() {
47+
Qualified<ExecutorService> backgroundExecutorService =
48+
Qualified.qualified(Background.class, ExecutorService.class);
49+
Qualified<ScheduledExecutorService> blockingScheduledExecutorService =
50+
Qualified.qualified(Blocking.class, ScheduledExecutorService.class);
51+
4252
return Arrays.asList(
4353
Component.builder(FirebaseAppCheck.class, (InternalAppCheckTokenProvider.class))
4454
.name(LIBRARY_NAME)
4555
.add(Dependency.required(FirebaseApp.class))
56+
.add(Dependency.required(backgroundExecutorService))
57+
.add(Dependency.required(blockingScheduledExecutorService))
4658
.add(Dependency.optionalProvider(HeartBeatController.class))
4759
.factory(
4860
(container) ->
4961
new DefaultFirebaseAppCheck(
5062
container.get(FirebaseApp.class),
51-
container.getProvider(HeartBeatController.class)))
63+
container.getProvider(HeartBeatController.class),
64+
container.get(backgroundExecutorService),
65+
container.get(blockingScheduledExecutorService)))
5266
.alwaysEager()
5367
.build(),
5468
HeartBeatConsumerComponent.create(),

appcheck/firebase-appcheck/src/main/java/com/google/firebase/appcheck/internal/DefaultFirebaseAppCheck.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import com.google.android.gms.tasks.Tasks;
2626
import com.google.firebase.FirebaseApp;
2727
import com.google.firebase.FirebaseException;
28+
import com.google.firebase.annotations.concurrent.Background;
29+
import com.google.firebase.annotations.concurrent.Blocking;
2830
import com.google.firebase.appcheck.AppCheckProvider;
2931
import com.google.firebase.appcheck.AppCheckProviderFactory;
3032
import com.google.firebase.appcheck.AppCheckToken;
@@ -37,7 +39,7 @@
3739
import java.util.ArrayList;
3840
import java.util.List;
3941
import java.util.concurrent.ExecutorService;
40-
import java.util.concurrent.Executors;
42+
import java.util.concurrent.ScheduledExecutorService;
4143

4244
public class DefaultFirebaseAppCheck extends FirebaseAppCheck {
4345

@@ -50,29 +52,19 @@ public class DefaultFirebaseAppCheck extends FirebaseAppCheck {
5052
private final StorageHelper storageHelper;
5153
private final TokenRefreshManager tokenRefreshManager;
5254
private final ExecutorService backgroundExecutor;
55+
private final ScheduledExecutorService scheduledExecutorService;
5356
private final Task<Void> retrieveStoredTokenTask;
5457
private final Clock clock;
5558

5659
private AppCheckProviderFactory appCheckProviderFactory;
5760
private AppCheckProvider appCheckProvider;
5861
private AppCheckToken cachedToken;
5962

60-
// TODO(b/258273630): Migrate to go/firebase-android-executors
61-
@SuppressLint("ThreadPoolCreation")
6263
public DefaultFirebaseAppCheck(
63-
@NonNull FirebaseApp firebaseApp,
64-
@NonNull Provider<HeartBeatController> heartBeatController) {
65-
this(
66-
checkNotNull(firebaseApp),
67-
checkNotNull(heartBeatController),
68-
Executors.newCachedThreadPool());
69-
}
70-
71-
@VisibleForTesting
72-
DefaultFirebaseAppCheck(
7364
@NonNull FirebaseApp firebaseApp,
7465
@NonNull Provider<HeartBeatController> heartBeatController,
75-
@NonNull ExecutorService backgroundExecutor) {
66+
@Background ExecutorService backgroundExecutor,
67+
@Blocking ScheduledExecutorService scheduledExecutorService) {
7668
checkNotNull(firebaseApp);
7769
checkNotNull(heartBeatController);
7870
this.firebaseApp = firebaseApp;
@@ -84,6 +76,7 @@ public DefaultFirebaseAppCheck(
8476
this.tokenRefreshManager =
8577
new TokenRefreshManager(firebaseApp.getApplicationContext(), /* firebaseAppCheck= */ this);
8678
this.backgroundExecutor = backgroundExecutor;
79+
this.scheduledExecutorService = scheduledExecutorService;
8780
this.retrieveStoredTokenTask = retrieveStoredAppCheckTokenInBackground(backgroundExecutor);
8881
this.clock = new Clock.DefaultClock();
8982
}
@@ -257,6 +250,11 @@ Provider<HeartBeatController> getHeartbeatControllerProvider() {
257250
return heartbeatControllerProvider;
258251
}
259252

253+
@NonNull
254+
ScheduledExecutorService getScheduledExecutorService() {
255+
return scheduledExecutorService;
256+
}
257+
260258
/** Sets the in-memory cached {@link AppCheckToken}. */
261259
@VisibleForTesting
262260
void setCachedToken(@NonNull AppCheckToken token) {

appcheck/firebase-appcheck/src/main/java/com/google/firebase/appcheck/internal/DefaultTokenRefresher.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import android.annotation.SuppressLint;
2222
import androidx.annotation.NonNull;
2323
import androidx.annotation.VisibleForTesting;
24-
import java.util.concurrent.Executors;
2524
import java.util.concurrent.ScheduledExecutorService;
2625
import java.util.concurrent.ScheduledFuture;
2726

@@ -41,10 +40,8 @@ public class DefaultTokenRefresher {
4140
private volatile ScheduledFuture<?> refreshFuture;
4241
private volatile long delayAfterFailureSeconds;
4342

44-
// TODO(b/258273630): Migrate to go/firebase-android-executors
45-
@SuppressLint("ThreadPoolCreation")
4643
DefaultTokenRefresher(@NonNull DefaultFirebaseAppCheck firebaseAppCheck) {
47-
this(checkNotNull(firebaseAppCheck), Executors.newScheduledThreadPool(/* corePoolSize= */ 1));
44+
this(checkNotNull(firebaseAppCheck), firebaseAppCheck.getScheduledExecutorService());
4845
}
4946

5047
@VisibleForTesting

appcheck/firebase-appcheck/src/test/java/com/google/firebase/appcheck/internal/DefaultFirebaseAppCheckTest.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import static com.google.common.truth.Truth.assertThat;
1818
import static org.junit.Assert.assertThrows;
1919
import static org.mockito.ArgumentMatchers.any;
20+
import static org.mockito.Mockito.mock;
2021
import static org.mockito.Mockito.never;
2122
import static org.mockito.Mockito.verify;
2223
import static org.mockito.Mockito.when;
@@ -33,6 +34,7 @@
3334
import com.google.firebase.appcheck.FirebaseAppCheck.AppCheckListener;
3435
import com.google.firebase.appcheck.interop.AppCheckTokenListener;
3536
import com.google.firebase.heartbeatinfo.HeartBeatController;
37+
import java.util.concurrent.ScheduledExecutorService;
3638
import org.junit.Before;
3739
import org.junit.Test;
3840
import org.junit.runner.RunWith;
@@ -80,15 +82,20 @@ public void setup() {
8082
new DefaultFirebaseAppCheck(
8183
mockFirebaseApp,
8284
() -> mockHeartBeatController,
83-
MoreExecutors.newDirectExecutorService());
85+
MoreExecutors.newDirectExecutorService(),
86+
mock(ScheduledExecutorService.class));
8487
}
8588

8689
@Test
8790
public void testConstructor_nullFirebaseApp_expectThrows() {
8891
assertThrows(
8992
NullPointerException.class,
9093
() -> {
91-
new DefaultFirebaseAppCheck(null, () -> mockHeartBeatController);
94+
new DefaultFirebaseAppCheck(
95+
null,
96+
() -> mockHeartBeatController,
97+
MoreExecutors.newDirectExecutorService(),
98+
mock(ScheduledExecutorService.class));
9299
});
93100
}
94101

@@ -97,7 +104,11 @@ public void testConstructor_nullHeartBeatControllerProvider_expectThrows() {
97104
assertThrows(
98105
NullPointerException.class,
99106
() -> {
100-
new DefaultFirebaseAppCheck(mockFirebaseApp, null);
107+
new DefaultFirebaseAppCheck(
108+
mockFirebaseApp,
109+
null,
110+
MoreExecutors.newDirectExecutorService(),
111+
mock(ScheduledExecutorService.class));
101112
});
102113
}
103114

0 commit comments

Comments
 (0)