Skip to content

Commit a493044

Browse files
Add DI to FirebasePerfRegistrar.java (#2406)
* Add DI to FirebasePerfResgistrar.java. * Remote the component builder definition as that is auto generated. * Address comments. * Unify the constructors for FirebasePerformance. * Create injection directories and fix api-information failure. * Make the variables since the constructors are now unified. * Address comments. Co-authored-by: Jeremy Jiang <[email protected]>
1 parent fffbe08 commit a493044

File tree

5 files changed

+150
-23
lines changed

5 files changed

+150
-23
lines changed

firebase-perf/firebase-perf.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ dependencies {
109109
// 3rd Party Deps
110110
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
111111
compileOnly group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
112+
implementation 'com.google.dagger:dagger:2.27'
113+
annotationProcessor 'com.google.dagger:dagger-compiler:2.27'
112114

113115
// Unit Test Deps
114116
testImplementation 'junit:junit:4.12'

firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfRegistrar.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@
1818
import com.google.android.datatransport.TransportFactory;
1919
import com.google.firebase.FirebaseApp;
2020
import com.google.firebase.components.Component;
21+
import com.google.firebase.components.ComponentContainer;
2122
import com.google.firebase.components.ComponentRegistrar;
2223
import com.google.firebase.components.Dependency;
2324
import com.google.firebase.installations.FirebaseInstallationsApi;
25+
import com.google.firebase.perf.injection.components.DaggerFirebasePerformanceComponent;
26+
import com.google.firebase.perf.injection.components.FirebasePerformanceComponent;
27+
import com.google.firebase.perf.injection.modules.FirebasePerformanceModule;
2428
import com.google.firebase.platforminfo.LibraryVersionComponent;
2529
import com.google.firebase.remoteconfig.RemoteConfigComponent;
2630
import java.util.Arrays;
@@ -47,13 +51,7 @@ public List<Component<?>> getComponents() {
4751
.add(Dependency.requiredProvider(RemoteConfigComponent.class))
4852
.add(Dependency.required(FirebaseInstallationsApi.class))
4953
.add(Dependency.requiredProvider(TransportFactory.class))
50-
.factory(
51-
container ->
52-
new FirebasePerformance(
53-
container.get(FirebaseApp.class),
54-
container.getProvider(RemoteConfigComponent.class),
55-
container.get(FirebaseInstallationsApi.class),
56-
container.getProvider(TransportFactory.class)))
54+
.factory(FirebasePerfRegistrar::providesFirebasePerformance)
5755
// Since the SDK is eager(auto starts at app start), we use "lazy" dependency for some
5856
// components that are not required during initialization so as not to force initialize
5957
// them at app startup (refer
@@ -62,4 +60,18 @@ public List<Component<?>> getComponents() {
6260
.build(),
6361
LibraryVersionComponent.create("fire-perf", BuildConfig.VERSION_NAME));
6462
}
63+
64+
private static FirebasePerformance providesFirebasePerformance(ComponentContainer container) {
65+
FirebasePerformanceComponent component =
66+
DaggerFirebasePerformanceComponent.builder()
67+
.firebasePerformanceModule(
68+
new FirebasePerformanceModule(
69+
container.get(FirebaseApp.class),
70+
container.get(FirebaseInstallationsApi.class),
71+
container.getProvider(RemoteConfigComponent.class),
72+
container.getProvider(TransportFactory.class)))
73+
.build();
74+
75+
return component.getFirebasePerformance();
76+
}
6577
}

firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.Locale;
4949
import java.util.Map;
5050
import java.util.concurrent.ConcurrentHashMap;
51+
import javax.inject.Inject;
5152

5253
/**
5354
* The Firebase Performance Monitoring API.
@@ -132,22 +133,10 @@ public static FirebasePerformance getInstance() {
132133
// to false if it's been force disabled or it is set to null if neither.
133134
@Nullable private Boolean mPerformanceCollectionForceEnabledState = null;
134135

135-
/** This constructor is invoked from {@link com.google.firebase.perf.FirebasePerfRegistrar}. */
136-
FirebasePerformance(
137-
FirebaseApp firebaseApp,
138-
Provider<RemoteConfigComponent> firebaseRemoteConfigProvider,
139-
FirebaseInstallationsApi firebaseInstallationsApi,
140-
Provider<TransportFactory> transportFactoryProvider) {
141-
142-
this(
143-
firebaseApp,
144-
firebaseRemoteConfigProvider,
145-
firebaseInstallationsApi,
146-
transportFactoryProvider,
147-
RemoteConfigManager.getInstance(),
148-
ConfigResolver.getInstance(),
149-
GaugeManager.getInstance());
150-
}
136+
private final FirebaseApp firebaseApp;
137+
private final Provider<RemoteConfigComponent> firebaseRemoteConfigProvider;
138+
private final FirebaseInstallationsApi firebaseInstallationsApi;
139+
private final Provider<TransportFactory> transportFactoryProvider;
151140

152141
/**
153142
* Constructs the FirebasePerformance class and allows injecting dependencies.
@@ -164,6 +153,7 @@ public static FirebasePerformance getInstance() {
164153
* @param gaugeManager The GaugeManager instance.
165154
*/
166155
@VisibleForTesting
156+
@Inject
167157
FirebasePerformance(
168158
FirebaseApp firebaseApp,
169159
Provider<RemoteConfigComponent> firebaseRemoteConfigProvider,
@@ -173,6 +163,11 @@ public static FirebasePerformance getInstance() {
173163
ConfigResolver configResolver,
174164
GaugeManager gaugeManager) {
175165

166+
this.firebaseApp = firebaseApp;
167+
this.firebaseRemoteConfigProvider = firebaseRemoteConfigProvider;
168+
this.firebaseInstallationsApi = firebaseInstallationsApi;
169+
this.transportFactoryProvider = transportFactoryProvider;
170+
176171
if (firebaseApp == null) {
177172
this.mPerformanceCollectionForceEnabledState = false;
178173
this.configResolver = configResolver;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright 2021 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package com.google.firebase.perf.injection.components;
16+
17+
import androidx.annotation.NonNull;
18+
import com.google.firebase.perf.FirebasePerformance;
19+
import com.google.firebase.perf.injection.modules.FirebasePerformanceModule;
20+
import dagger.Component;
21+
22+
/**
23+
* Dagger component to create FirebasePerformanceComponent Objects.
24+
*
25+
* @hide
26+
*/
27+
@Component(modules = {FirebasePerformanceModule.class})
28+
public interface FirebasePerformanceComponent {
29+
@NonNull
30+
FirebasePerformance getFirebasePerformance();
31+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Copyright 2021 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package com.google.firebase.perf.injection.modules;
16+
17+
import androidx.annotation.NonNull;
18+
import com.google.android.datatransport.TransportFactory;
19+
import com.google.firebase.FirebaseApp;
20+
import com.google.firebase.inject.Provider;
21+
import com.google.firebase.installations.FirebaseInstallationsApi;
22+
import com.google.firebase.perf.FirebasePerformance;
23+
import com.google.firebase.perf.config.ConfigResolver;
24+
import com.google.firebase.perf.internal.GaugeManager;
25+
import com.google.firebase.perf.internal.RemoteConfigManager;
26+
import com.google.firebase.remoteconfig.RemoteConfigComponent;
27+
import dagger.Module;
28+
import dagger.Provides;
29+
30+
/**
31+
* Provider for {@link FirebasePerformance}.
32+
*
33+
* @hide
34+
*/
35+
@Module
36+
public class FirebasePerformanceModule {
37+
private final FirebaseApp firebaseApp;
38+
private final FirebaseInstallationsApi firebaseInstallations;
39+
private final Provider<RemoteConfigComponent> remoteConfigComponentProvider;
40+
private final Provider<TransportFactory> transportFactoryProvider;
41+
42+
public FirebasePerformanceModule(
43+
@NonNull FirebaseApp firebaseApp,
44+
@NonNull FirebaseInstallationsApi firebaseInstallations,
45+
@NonNull Provider<RemoteConfigComponent> remoteConfigComponentProvider,
46+
@NonNull Provider<TransportFactory> transportFactoryProvider) {
47+
this.firebaseApp = firebaseApp;
48+
this.firebaseInstallations = firebaseInstallations;
49+
this.remoteConfigComponentProvider = remoteConfigComponentProvider;
50+
this.transportFactoryProvider = transportFactoryProvider;
51+
}
52+
53+
@Provides
54+
FirebaseApp providesFirebaseApp() {
55+
return firebaseApp;
56+
}
57+
58+
@Provides
59+
FirebaseInstallationsApi providesFirebaseInstallations() {
60+
return firebaseInstallations;
61+
}
62+
63+
@Provides
64+
Provider<RemoteConfigComponent> providesRemoteConfigComponent() {
65+
return remoteConfigComponentProvider;
66+
}
67+
68+
@Provides
69+
Provider<TransportFactory> providesTransportFactoryProvider() {
70+
return transportFactoryProvider;
71+
}
72+
73+
@Provides
74+
RemoteConfigManager providesRemoteConfigManager() {
75+
return RemoteConfigManager.getInstance();
76+
}
77+
78+
@Provides
79+
ConfigResolver providesConfigResolver() {
80+
return ConfigResolver.getInstance();
81+
}
82+
83+
@Provides
84+
GaugeManager providesGaugeManager() {
85+
return GaugeManager.getInstance();
86+
}
87+
}

0 commit comments

Comments
 (0)