Skip to content

Commit 12bdbd6

Browse files
authored
Merge 3bf1738 into 62e9e4b
2 parents 62e9e4b + 3bf1738 commit 12bdbd6

File tree

9 files changed

+88
-13
lines changed

9 files changed

+88
-13
lines changed

firebase-perf/firebase-perf.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ protobuf {
4242
}
4343

4444
android {
45-
compileSdkVersion project.targetSdkVersion
45+
compileSdk 30
4646

4747
lintOptions {
4848
abortOnError true
@@ -105,6 +105,7 @@ dependencies {
105105
runtimeOnly project(':firebase-datatransport')
106106
javadocClasspath 'com.google.auto.value:auto-value-annotations:1.6.6'
107107
javadocClasspath 'com.google.code.findbugs:jsr305:3.0.2'
108+
implementation project(':firebase-sessions')
108109

109110
// Google Deps
110111
implementation "com.google.android.gms:play-services-tasks:18.0.1"

firebase-perf/ktx/ktx.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ firebaseLibrary {
2424
}
2525

2626
android {
27-
compileSdkVersion project.targetSdkVersion
27+
compileSdk 30
2828
defaultConfig {
2929
minSdkVersion 16
3030
multiDexEnabled true

firebase-perf/ktx/src/test/kotlin/com/google/firebase/perf/ktx/PerformanceTests.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
package com.google.firebase.perf.ktx
1616

17+
import android.content.Context
1718
import androidx.test.core.app.ApplicationProvider
1819
import com.google.common.truth.Truth.assertThat
1920
import com.google.firebase.FirebaseApp
@@ -49,15 +50,21 @@ import org.mockito.Mockito.verify
4950
import org.mockito.Mockito.`when`
5051
import org.mockito.MockitoAnnotations.initMocks
5152
import org.robolectric.RobolectricTestRunner
53+
import org.robolectric.Shadows
5254

53-
const val APP_ID = "APP_ID"
54-
const val API_KEY = "API_KEY"
55+
const val APP_ID = "1:149208680807:android:0000000000000000"
56+
const val API_KEY = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
5557

5658
const val EXISTING_APP = "existing"
5759

5860
abstract class BaseTestCase {
5961
@Before
6062
open fun setUp() {
63+
val context = ApplicationProvider.getApplicationContext<Context>()
64+
val shadowPackageManager = Shadows.shadowOf(context.packageManager)
65+
val packageInfo = shadowPackageManager.getInternalMutablePackageInfo(context.packageName)
66+
packageInfo.versionName = "1.0.0"
67+
6168
Firebase.initialize(
6269
ApplicationProvider.getApplicationContext(),
6370
FirebaseOptions.Builder()

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
import com.google.firebase.perf.injection.modules.FirebasePerformanceModule;
3131
import com.google.firebase.platforminfo.LibraryVersionComponent;
3232
import com.google.firebase.remoteconfig.RemoteConfigComponent;
33+
import com.google.firebase.sessions.FirebaseSessions;
34+
import com.google.firebase.sessions.api.FirebaseSessionsDependencies;
35+
import com.google.firebase.sessions.api.SessionSubscriber;
3336
import java.util.Arrays;
3437
import java.util.List;
3538
import java.util.concurrent.Executor;
@@ -47,6 +50,10 @@ public class FirebasePerfRegistrar implements ComponentRegistrar {
4750
private static final String LIBRARY_NAME = "fire-perf";
4851
private static final String EARLY_LIBRARY_NAME = "fire-perf-early";
4952

53+
static {
54+
FirebaseSessionsDependencies.INSTANCE.addDependency(SessionSubscriber.Name.PERFORMANCE);
55+
}
56+
5057
@Override
5158
@Keep
5259
public List<Component<?>> getComponents() {
@@ -58,6 +65,7 @@ public List<Component<?>> getComponents() {
5865
.add(Dependency.requiredProvider(RemoteConfigComponent.class))
5966
.add(Dependency.required(FirebaseInstallationsApi.class))
6067
.add(Dependency.requiredProvider(TransportFactory.class))
68+
.add(Dependency.required(FirebaseSessions.class))
6169
.add(Dependency.required(FirebasePerfEarly.class))
6270
.factory(FirebasePerfRegistrar::providesFirebasePerformance)
6371
.build(),
@@ -94,7 +102,8 @@ private static FirebasePerformance providesFirebasePerformance(ComponentContaine
94102
container.get(FirebaseApp.class),
95103
container.get(FirebaseInstallationsApi.class),
96104
container.getProvider(RemoteConfigComponent.class),
97-
container.getProvider(TransportFactory.class)))
105+
container.getProvider(TransportFactory.class),
106+
container.get(FirebaseSessions.class)))
98107
.build();
99108

100109
return component.getFirebasePerformance();

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import com.google.firebase.perf.util.ImmutableBundle;
4343
import com.google.firebase.perf.util.Timer;
4444
import com.google.firebase.remoteconfig.RemoteConfigComponent;
45+
import com.google.firebase.sessions.FirebaseSessions;
46+
import com.google.firebase.sessions.api.SessionSubscriber;
4547
import java.lang.annotation.Retention;
4648
import java.lang.annotation.RetentionPolicy;
4749
import java.net.URL;
@@ -140,6 +142,7 @@ public static FirebasePerformance getInstance() {
140142
private final Provider<RemoteConfigComponent> firebaseRemoteConfigProvider;
141143
private final FirebaseInstallationsApi firebaseInstallationsApi;
142144
private final Provider<TransportFactory> transportFactoryProvider;
145+
private final FirebaseSessions firebaseSessions;
143146

144147
/**
145148
* Constructs the FirebasePerformance class and allows injecting dependencies.
@@ -163,13 +166,15 @@ public static FirebasePerformance getInstance() {
163166
FirebaseInstallationsApi firebaseInstallationsApi,
164167
Provider<TransportFactory> transportFactoryProvider,
165168
RemoteConfigManager remoteConfigManager,
169+
FirebaseSessions firebaseSessions,
166170
ConfigResolver configResolver,
167171
SessionManager sessionManager) {
168172

169173
this.firebaseApp = firebaseApp;
170174
this.firebaseRemoteConfigProvider = firebaseRemoteConfigProvider;
171175
this.firebaseInstallationsApi = firebaseInstallationsApi;
172176
this.transportFactoryProvider = transportFactoryProvider;
177+
this.firebaseSessions = firebaseSessions;
173178

174179
if (firebaseApp == null) {
175180
this.mPerformanceCollectionForceEnabledState = false;
@@ -199,6 +204,26 @@ public static FirebasePerformance getInstance() {
199204
ConsoleUrlGenerator.generateDashboardUrl(
200205
firebaseApp.getOptions().getProjectId(), appContext.getPackageName())));
201206
}
207+
208+
// Register with Firebase sessions to receive updates about session changes.
209+
this.firebaseSessions.register(
210+
new SessionSubscriber() {
211+
@Override
212+
public void onSessionChanged(@NonNull SessionDetails sessionDetails) {
213+
// TODO(visum) Handle sessionID change by updating the sessionID in the sessionManager
214+
}
215+
216+
@Override
217+
public boolean isDataCollectionEnabled() {
218+
return configResolver.isPerformanceMonitoringEnabled();
219+
}
220+
221+
@NonNull
222+
@Override
223+
public Name getSessionSubscriberName() {
224+
return SessionSubscriber.Name.PERFORMANCE;
225+
}
226+
});
202227
}
203228

204229
/**

firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.firebase.perf.config.RemoteConfigManager;
2525
import com.google.firebase.perf.session.SessionManager;
2626
import com.google.firebase.remoteconfig.RemoteConfigComponent;
27+
import com.google.firebase.sessions.FirebaseSessions;
2728
import dagger.Module;
2829
import dagger.Provides;
2930

@@ -34,16 +35,19 @@ public class FirebasePerformanceModule {
3435
private final FirebaseInstallationsApi firebaseInstallations;
3536
private final Provider<RemoteConfigComponent> remoteConfigComponentProvider;
3637
private final Provider<TransportFactory> transportFactoryProvider;
38+
private final FirebaseSessions firebaseSessions;
3739

3840
public FirebasePerformanceModule(
3941
@NonNull FirebaseApp firebaseApp,
4042
@NonNull FirebaseInstallationsApi firebaseInstallations,
4143
@NonNull Provider<RemoteConfigComponent> remoteConfigComponentProvider,
42-
@NonNull Provider<TransportFactory> transportFactoryProvider) {
44+
@NonNull Provider<TransportFactory> transportFactoryProvider,
45+
@NonNull FirebaseSessions firebaseSessions) {
4346
this.firebaseApp = firebaseApp;
4447
this.firebaseInstallations = firebaseInstallations;
4548
this.remoteConfigComponentProvider = remoteConfigComponentProvider;
4649
this.transportFactoryProvider = transportFactoryProvider;
50+
this.firebaseSessions = firebaseSessions;
4751
}
4852

4953
@Provides
@@ -80,4 +84,9 @@ ConfigResolver providesConfigResolver() {
8084
SessionManager providesSessionManager() {
8185
return SessionManager.getInstance();
8286
}
87+
88+
@Provides
89+
FirebaseSessions providesFirebaseSessions() {
90+
return firebaseSessions;
91+
}
8392
}

firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerfRegistrarTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.firebase.components.Qualified;
2626
import com.google.firebase.installations.FirebaseInstallationsApi;
2727
import com.google.firebase.remoteconfig.RemoteConfigComponent;
28+
import com.google.firebase.sessions.FirebaseSessions;
2829
import java.util.List;
2930
import java.util.concurrent.Executor;
3031
import org.junit.Test;
@@ -49,6 +50,7 @@ public void testGetComponents() {
4950
Dependency.requiredProvider(RemoteConfigComponent.class),
5051
Dependency.required(FirebaseInstallationsApi.class),
5152
Dependency.requiredProvider(TransportFactory.class),
53+
Dependency.required(FirebaseSessions.class),
5254
Dependency.required(FirebasePerfEarly.class));
5355

5456
assertThat(firebasePerfComponent.isLazy()).isTrue();

firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import android.content.Context;
2525
import android.content.SharedPreferences;
26+
import android.content.pm.PackageInfo;
2627
import android.content.pm.PackageManager.NameNotFoundException;
2728
import android.os.Bundle;
2829
import androidx.annotation.Nullable;
@@ -39,6 +40,7 @@
3940
import com.google.firebase.perf.util.Constants;
4041
import com.google.firebase.perf.util.ImmutableBundle;
4142
import com.google.firebase.remoteconfig.RemoteConfigComponent;
43+
import com.google.firebase.sessions.FirebaseSessions;
4244
import com.google.testing.timing.FakeDirectExecutorService;
4345
import java.util.Map;
4446
import org.junit.After;
@@ -50,6 +52,7 @@
5052
import org.mockito.junit.MockitoJUnit;
5153
import org.mockito.junit.MockitoRule;
5254
import org.robolectric.RobolectricTestRunner;
55+
import org.robolectric.shadows.ShadowPackageManager;
5356

5457
/** Unit tests for {@link FirebasePerformance}. */
5558
@RunWith(RobolectricTestRunner.class)
@@ -81,6 +84,14 @@ public void setUp() throws NameNotFoundException {
8184
FirebaseApp.clearInstancesForTest();
8285

8386
Context context = ApplicationProvider.getApplicationContext();
87+
ShadowPackageManager shadowPackageManager = shadowOf(context.getPackageManager());
88+
89+
PackageInfo packageInfo =
90+
shadowPackageManager.getInternalMutablePackageInfo(context.getPackageName());
91+
packageInfo.versionName = "1.0.0";
92+
93+
packageInfo.applicationInfo.metaData.clear();
94+
8495
FirebaseApp.initializeApp(context, options);
8596
for (int i = 0; i <= Constants.MAX_TRACE_CUSTOM_ATTRIBUTES; i++) {
8697
FirebasePerformance.getInstance().removeAttribute("dim" + i);
@@ -90,11 +101,6 @@ public void setUp() throws NameNotFoundException {
90101
sharedPreferences.edit().clear().commit();
91102
DeviceCacheManager.clearInstance();
92103

93-
shadowOf(context.getPackageManager())
94-
.getInternalMutablePackageInfo(context.getPackageName())
95-
.applicationInfo
96-
.metaData
97-
.clear();
98104
spyRemoteConfigManager = spy(RemoteConfigManager.getInstance());
99105
ConfigResolver.clearInstance();
100106
spyConfigResolver = spy(ConfigResolver.getInstance());
@@ -544,8 +550,9 @@ private FirebasePerformance initializeFirebasePerformancePreferences(
544550
Boolean sharedPreferencesEnabledDisabledKey,
545551
Provider<RemoteConfigComponent> firebaseRemoteConfigProvider,
546552
Provider<TransportFactory> transportFactoryProvider) {
553+
Context context = ApplicationProvider.getApplicationContext();
547554
DeviceCacheManager deviceCacheManager = new DeviceCacheManager(fakeDirectExecutorService);
548-
deviceCacheManager.setContext(ApplicationProvider.getApplicationContext());
555+
deviceCacheManager.setContext(context);
549556
if (sharedPreferencesEnabledDisabledKey != null) {
550557
deviceCacheManager.setValue(Constants.ENABLE_DISABLE, sharedPreferencesEnabledDisabledKey);
551558
}
@@ -560,7 +567,6 @@ private FirebasePerformance initializeFirebasePerformancePreferences(
560567
bundle.putBoolean(FIREPERF_FORCE_DEACTIVATED_KEY, metadataFireperfForceDeactivatedKey);
561568
}
562569

563-
Context context = ApplicationProvider.getApplicationContext();
564570
shadowOf(context.getPackageManager())
565571
.getInternalMutablePackageInfo(context.getPackageName())
566572
.applicationInfo
@@ -573,6 +579,7 @@ private FirebasePerformance initializeFirebasePerformancePreferences(
573579
mock(FirebaseInstallationsApi.class),
574580
transportFactoryProvider,
575581
spyRemoteConfigManager,
582+
mock(FirebaseSessions.class),
576583
spyConfigResolver,
577584
spySessionManager);
578585
}

firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
import static org.mockito.Mockito.verify;
2525
import static org.mockito.Mockito.when;
2626
import static org.mockito.MockitoAnnotations.initMocks;
27+
import static org.robolectric.Shadows.shadowOf;
2728

29+
import android.content.Context;
30+
import android.content.pm.PackageInfo;
31+
import androidx.test.core.app.ApplicationProvider;
2832
import com.google.android.datatransport.TransportFactory;
2933
import com.google.android.gms.tasks.Tasks;
3034
import com.google.firebase.FirebaseApp;
@@ -64,6 +68,7 @@
6468
import org.mockito.verification.VerificationMode;
6569
import org.robolectric.RobolectricTestRunner;
6670
import org.robolectric.annotation.Config;
71+
import org.robolectric.shadows.ShadowPackageManager;
6772

6873
/** Unit tests for {@link TransportManager}. */
6974
@Config(shadows = ShadowPreconditions.class)
@@ -1393,6 +1398,16 @@ private void initializeTransport(boolean shouldInitialize) {
13931398
clearLastLoggedEvents();
13941399

13951400
if (shouldInitialize) {
1401+
// Set the version name since Firebase sessions needs it.
1402+
Context context = ApplicationProvider.getApplicationContext();
1403+
ShadowPackageManager shadowPackageManager = shadowOf(context.getPackageManager());
1404+
1405+
PackageInfo packageInfo =
1406+
shadowPackageManager.getInternalMutablePackageInfo(context.getPackageName());
1407+
packageInfo.versionName = "1.0.0";
1408+
1409+
packageInfo.applicationInfo.metaData.clear();
1410+
13961411
testTransportManager = TransportManager.getInstance();
13971412
testTransportManager.initializeForTest(
13981413
FirebaseApp.getInstance(),

0 commit comments

Comments
 (0)