Skip to content

Commit 2335298

Browse files
Merge
2 parents ab27dc8 + 3bb8bd8 commit 2335298

File tree

81 files changed

+1524
-740
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+1524
-740
lines changed

firebase-common/src/main/java/com/google/firebase/heartbeatinfo/DefaultHeartBeatInfo.java

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,10 @@
1717
import android.content.Context;
1818
import androidx.annotation.NonNull;
1919
import androidx.annotation.VisibleForTesting;
20-
import com.google.android.gms.tasks.Task;
21-
import com.google.android.gms.tasks.Tasks;
2220
import com.google.firebase.components.Component;
2321
import com.google.firebase.components.Dependency;
2422
import com.google.firebase.components.Lazy;
2523
import com.google.firebase.inject.Provider;
26-
import java.util.ArrayList;
27-
import java.util.List;
2824
import java.util.Set;
2925
import java.util.concurrent.Executor;
3026
import java.util.concurrent.LinkedBlockingQueue;
@@ -80,58 +76,6 @@ private DefaultHeartBeatInfo(Context context, Set<HeartBeatConsumer> consumers)
8076
return HeartBeat.NONE;
8177
}
8278

83-
@Override
84-
public Task<List<HeartBeatResult>> getAndClearStoredHeartBeatInfo() {
85-
return Tasks.call(
86-
backgroundExecutor,
87-
() -> {
88-
ArrayList<HeartBeatResult> heartBeatResults = new ArrayList<>();
89-
boolean shouldSendGlobalHeartBeat = false;
90-
HeartBeatInfoStorage storage = storageProvider.get();
91-
List<SdkHeartBeatResult> sdkHeartBeatResults = storage.getStoredHeartBeats(true);
92-
long lastGlobalHeartBeat = storage.getLastGlobalHeartBeat();
93-
HeartBeat heartBeat;
94-
for (SdkHeartBeatResult sdkHeartBeatResult : sdkHeartBeatResults) {
95-
shouldSendGlobalHeartBeat =
96-
HeartBeatInfoStorage.isSameDateUtc(
97-
lastGlobalHeartBeat, sdkHeartBeatResult.getMillis());
98-
if (shouldSendGlobalHeartBeat) {
99-
heartBeat = HeartBeat.COMBINED;
100-
} else {
101-
heartBeat = HeartBeat.SDK;
102-
}
103-
if (shouldSendGlobalHeartBeat) {
104-
lastGlobalHeartBeat = sdkHeartBeatResult.getMillis();
105-
}
106-
heartBeatResults.add(
107-
HeartBeatResult.create(
108-
sdkHeartBeatResult.getSdkName(), sdkHeartBeatResult.getMillis(), heartBeat));
109-
}
110-
if (lastGlobalHeartBeat > 0) {
111-
storage.updateGlobalHeartBeat(lastGlobalHeartBeat);
112-
}
113-
return heartBeatResults;
114-
});
115-
}
116-
117-
@Override
118-
public Task<Void> storeHeartBeatInfo(@NonNull String heartBeatTag) {
119-
if (consumers.size() <= 0) {
120-
return Tasks.forResult(null);
121-
}
122-
return Tasks.call(
123-
backgroundExecutor,
124-
() -> {
125-
long presentTime = System.currentTimeMillis();
126-
boolean shouldSendSdkHB =
127-
storageProvider.get().shouldSendSdkHeartBeat(heartBeatTag, presentTime);
128-
if (shouldSendSdkHB) {
129-
storageProvider.get().storeHeartBeatInformation(heartBeatTag, presentTime);
130-
}
131-
return null;
132-
});
133-
}
134-
13579
public static @NonNull Component<HeartBeatInfo> component() {
13680
return Component.builder(HeartBeatInfo.class)
13781
.add(Dependency.required(Context.class))

firebase-common/src/main/java/com/google/firebase/heartbeatinfo/HeartBeatInfo.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
package com.google.firebase.heartbeatinfo;
1616

1717
import androidx.annotation.NonNull;
18-
import com.google.android.gms.tasks.Task;
19-
import java.util.List;
2018

2119
/**
2220
* Class provides information about heartbeats.
@@ -49,10 +47,4 @@ public int getCode() {
4947

5048
@NonNull
5149
HeartBeat getHeartBeatCode(@NonNull String heartBeatTag);
52-
53-
@NonNull
54-
Task<Void> storeHeartBeatInfo(@NonNull String heartBeatTag);
55-
56-
@NonNull
57-
Task<List<HeartBeatResult>> getAndClearStoredHeartBeatInfo();
5850
}

firebase-common/src/test/java/com/google/firebase/heartbeatinfo/DefaultHeartBeatInfoTest.java

Lines changed: 0 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,14 @@
1515
package com.google.firebase.heartbeatinfo;
1616

1717
import static com.google.common.truth.Truth.assertThat;
18-
import static org.mockito.ArgumentMatchers.anyBoolean;
1918
import static org.mockito.ArgumentMatchers.anyLong;
2019
import static org.mockito.ArgumentMatchers.anyString;
2120
import static org.mockito.Mockito.mock;
22-
import static org.mockito.Mockito.times;
23-
import static org.mockito.Mockito.verify;
2421
import static org.mockito.Mockito.when;
2522

26-
import java.util.ArrayList;
2723
import java.util.HashSet;
2824
import java.util.List;
2925
import java.util.Set;
30-
import java.util.concurrent.ExecutionException;
3126
import java.util.concurrent.ExecutorService;
3227
import java.util.concurrent.LinkedBlockingQueue;
3328
import java.util.concurrent.ThreadPoolExecutor;
@@ -67,108 +62,6 @@ public void getHeartBeatCode_noHeartBeat() {
6762
assertThat(heartBeatInfo.getHeartBeatCode(testSdk).getCode()).isEqualTo(0);
6863
}
6964

70-
@Test
71-
public void whenNoSource_dontStoreHeartBeat() throws ExecutionException, InterruptedException {
72-
73-
DefaultHeartBeatInfo info = new DefaultHeartBeatInfo(() -> storage, new HashSet<>(), executor);
74-
info.storeHeartBeatInfo(testSdk).addOnCompleteListener(executor, storeOnCompleteListener);
75-
storeOnCompleteListener.await();
76-
verify(storage, times(0)).storeHeartBeatInformation(anyString(), anyLong());
77-
}
78-
79-
@Test
80-
public void storeHeartBeatCode_noHeartBeat() throws ExecutionException, InterruptedException {
81-
when(storage.shouldSendSdkHeartBeat(anyString(), anyLong())).thenReturn(Boolean.FALSE);
82-
when(storage.shouldSendGlobalHeartBeat(anyLong())).thenReturn(Boolean.FALSE);
83-
heartBeatInfo
84-
.storeHeartBeatInfo(testSdk)
85-
.addOnCompleteListener(executor, storeOnCompleteListener);
86-
storeOnCompleteListener.await();
87-
heartBeatInfo
88-
.getAndClearStoredHeartBeatInfo()
89-
.addOnCompleteListener(executor, getOnCompleteListener);
90-
List<HeartBeatResult> result = getOnCompleteListener.await();
91-
assertThat(result.size()).isEqualTo(0);
92-
}
93-
94-
@Test
95-
public void storeHeartBeatCode_sdkButNoGlobalHeartBeat()
96-
throws ExecutionException, InterruptedException {
97-
ArrayList<SdkHeartBeatResult> returnResults = new ArrayList<>();
98-
returnResults.add(SdkHeartBeatResult.create(testSdk, 1000000001));
99-
when(storage.shouldSendSdkHeartBeat(anyString(), anyLong())).thenReturn(Boolean.TRUE);
100-
when(storage.shouldSendGlobalHeartBeat(anyLong())).thenReturn(Boolean.FALSE);
101-
when(storage.getLastGlobalHeartBeat()).thenReturn((long) 1000000000);
102-
when(storage.getStoredHeartBeats(anyBoolean())).thenReturn(returnResults);
103-
heartBeatInfo
104-
.storeHeartBeatInfo(testSdk)
105-
.addOnCompleteListener(executor, storeOnCompleteListener);
106-
storeOnCompleteListener.await();
107-
heartBeatInfo
108-
.getAndClearStoredHeartBeatInfo()
109-
.addOnCompleteListener(executor, getOnCompleteListener);
110-
List<HeartBeatResult> results = getOnCompleteListener.await();
111-
verify(storage, times(1)).storeHeartBeatInformation(anyString(), anyLong());
112-
assertThat(results.size()).isEqualTo(1);
113-
assertThat(results.get(0))
114-
.isEqualTo(HeartBeatResult.create(testSdk, 1000000001, HeartBeatInfo.HeartBeat.SDK));
115-
verify(storage, times(1)).updateGlobalHeartBeat(1000000000);
116-
}
117-
118-
@Test
119-
public void storeHeartBeatCode_globalAndSDKHeartBeat()
120-
throws ExecutionException, InterruptedException {
121-
ArrayList<SdkHeartBeatResult> returnResults = new ArrayList<>();
122-
returnResults.add(SdkHeartBeatResult.create(testSdk, 100000000));
123-
when(storage.shouldSendSdkHeartBeat(anyString(), anyLong())).thenReturn(Boolean.TRUE);
124-
when(storage.shouldSendGlobalHeartBeat(anyLong())).thenReturn(Boolean.TRUE);
125-
when(storage.getLastGlobalHeartBeat()).thenReturn((long) 0);
126-
when(storage.getStoredHeartBeats(anyBoolean())).thenReturn(returnResults);
127-
heartBeatInfo
128-
.storeHeartBeatInfo(testSdk)
129-
.addOnCompleteListener(executor, storeOnCompleteListener);
130-
storeOnCompleteListener.await();
131-
heartBeatInfo
132-
.getAndClearStoredHeartBeatInfo()
133-
.addOnCompleteListener(executor, getOnCompleteListener);
134-
List<HeartBeatResult> results = getOnCompleteListener.await();
135-
verify(storage, times(1)).storeHeartBeatInformation(anyString(), anyLong());
136-
assertThat(results.size()).isEqualTo(1);
137-
assertThat(results.get(0))
138-
.isEqualTo(HeartBeatResult.create(testSdk, 100000000, HeartBeatInfo.HeartBeat.COMBINED));
139-
verify(storage, times(1)).updateGlobalHeartBeat(100000000);
140-
}
141-
142-
@Test
143-
public void storeHeartBeatCode_ThreeHeartBeats() throws ExecutionException, InterruptedException {
144-
ArrayList<SdkHeartBeatResult> returnResults = new ArrayList<>();
145-
returnResults.add(SdkHeartBeatResult.create(testSdk, 100000000));
146-
returnResults.add(SdkHeartBeatResult.create(testSdk, 200000000));
147-
returnResults.add(SdkHeartBeatResult.create(testSdk, 200002000));
148-
when(storage.shouldSendSdkHeartBeat(anyString(), anyLong())).thenReturn(Boolean.TRUE);
149-
when(storage.shouldSendGlobalHeartBeat(anyLong())).thenReturn(Boolean.TRUE);
150-
when(storage.getLastGlobalHeartBeat()).thenReturn((long) 0);
151-
when(storage.getStoredHeartBeats(anyBoolean())).thenReturn(returnResults);
152-
153-
heartBeatInfo
154-
.storeHeartBeatInfo(testSdk)
155-
.addOnCompleteListener(executor, storeOnCompleteListener);
156-
storeOnCompleteListener.await();
157-
heartBeatInfo
158-
.getAndClearStoredHeartBeatInfo()
159-
.addOnCompleteListener(executor, getOnCompleteListener);
160-
List<HeartBeatResult> results = getOnCompleteListener.await();
161-
verify(storage, times(1)).storeHeartBeatInformation(anyString(), anyLong());
162-
assertThat(results.size()).isEqualTo(3);
163-
assertThat(results.get(0))
164-
.isEqualTo(HeartBeatResult.create(testSdk, 100000000, HeartBeatInfo.HeartBeat.COMBINED));
165-
assertThat(results.get(1))
166-
.isEqualTo(HeartBeatResult.create(testSdk, 200000000, HeartBeatInfo.HeartBeat.COMBINED));
167-
assertThat(results.get(2))
168-
.isEqualTo(HeartBeatResult.create(testSdk, 200002000, HeartBeatInfo.HeartBeat.SDK));
169-
verify(storage, times(1)).updateGlobalHeartBeat(200000000);
170-
}
171-
17265
@Test
17366
public void getHeartBeatCode_sdkHeartBeat() {
17467
when(storage.shouldSendSdkHeartBeat(anyString(), anyLong())).thenReturn(Boolean.TRUE);

firebase-crashlytics-ndk/src/main/java/com/google/firebase/crashlytics/ndk/CrashlyticsNdkRegistrar.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
package com.google.firebase.crashlytics.ndk;
1616

17-
import static com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider.UNITY_PLATFORM;
18-
1917
import android.content.Context;
2018
import com.google.firebase.components.Component;
2119
import com.google.firebase.components.ComponentContainer;
@@ -43,8 +41,7 @@ private CrashlyticsNativeComponent buildCrashlyticsNdk(ComponentContainer contai
4341
Context context = container.get(Context.class);
4442
// The signal handler is installed immediately for non-Unity apps. For Unity apps, it will
4543
// be installed when the Firebase Unity SDK explicitly calls installSignalHandler().
46-
boolean installHandlerDuringPrepSession =
47-
!UNITY_PLATFORM.equals(new DevelopmentPlatformProvider(context).getDevelopmentPlatform());
44+
boolean installHandlerDuringPrepSession = !DevelopmentPlatformProvider.isUnity(context);
4845
return FirebaseCrashlyticsNdk.create(context, installHandlerDuringPrepSession);
4946
}
5047
}

firebase-crashlytics-ndk/src/main/java/com/google/firebase/crashlytics/ndk/CrashpadController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ public void writeSessionApp(String sessionId, StaticSessionData.AppData appData)
118118
appData.versionName(),
119119
appData.installUuid(),
120120
appData.deliveryMechanism(),
121-
appData.developmentPlatform(),
122-
appData.developmentPlatformVersion());
121+
appData.developmentPlatformProvider().getDevelopmentPlatform(),
122+
appData.developmentPlatformProvider().getDevelopmentPlatformVersion());
123123
writeSessionJsonFile(fileStore, sessionId, json, APP_METADATA_FILE);
124124
}
125125

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
matt says hi

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxyTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.google.firebase.crashlytics.internal;
1616

1717
import static org.mockito.ArgumentMatchers.eq;
18+
import static org.mockito.Mockito.mock;
1819

1920
import androidx.annotation.NonNull;
2021
import androidx.test.runner.AndroidJUnit4;
@@ -57,7 +58,7 @@ public void whenAvailable(
5758

5859
StaticSessionData.AppData appData =
5960
StaticSessionData.AppData.create(
60-
"appId", "123", "1.2.3", "install_id", 0, "unity", "unityVersion");
61+
"appId", "123", "1.2.3", "install_id", 0, mock(DevelopmentPlatformProvider.class));
6162
StaticSessionData.OsData osData = StaticSessionData.OsData.create("release", "codeName", false);
6263
StaticSessionData.DeviceData deviceData =
6364
StaticSessionData.DeviceData.create(

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/DevelopmentPlatformProviderTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package com.google.firebase.crashlytics.internal;
1616

17-
import static com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider.UNITY_PLATFORM;
1817
import static org.mockito.ArgumentMatchers.eq;
1918
import static org.mockito.Mockito.doReturn;
2019
import static org.mockito.Mockito.mock;
@@ -27,20 +26,36 @@
2726

2827
public class DevelopmentPlatformProviderTest extends CrashlyticsTestCase {
2928
private static final String PACKAGE_NAME = "package.name";
29+
private static final String UNITY_PLATFORM = "Unity";
3030
private static final String UNITY_VERSION = "2.0.0";
31+
private static final String FLUTTER_PLATFORM = "Flutter";
3132

3233
public void testDevelopmentPlatformInfo_withUnity_returnsPlatformAndVersion() throws Exception {
3334
Context context = createMockContext(/*withUnityResource=*/ true);
3435

36+
assertTrue(DevelopmentPlatformProvider.isUnity(context));
37+
3538
DevelopmentPlatformProvider provider = new DevelopmentPlatformProvider(context);
3639

3740
assertEquals(UNITY_PLATFORM, provider.getDevelopmentPlatform());
3841
assertEquals(UNITY_VERSION, provider.getDevelopmentPlatformVersion());
3942
}
4043

44+
public void testDevelopmentPlatformInfo_withFlutter_returnsPlatformAndNoVersion() {
45+
Context context = getContext(); // has asset in DevelopmentPlatformProvider.FLUTTER_ASSETS_PATH
46+
47+
DevelopmentPlatformProvider provider = new DevelopmentPlatformProvider(context);
48+
49+
assertEquals(FLUTTER_PLATFORM, provider.getDevelopmentPlatform());
50+
assertNull(provider.getDevelopmentPlatformVersion());
51+
assertFalse(DevelopmentPlatformProvider.isUnity(context));
52+
}
53+
4154
public void testDevelopmentPlatformInfo_unknownPlatform_returnsNull() throws Exception {
4255
Context context = createMockContext(/*withUnityResource=*/ false);
4356

57+
assertFalse(DevelopmentPlatformProvider.isUnity(context));
58+
4459
DevelopmentPlatformProvider provider = new DevelopmentPlatformProvider(context);
4560

4661
assertNull(provider.getDevelopmentPlatform());

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/CrashlyticsControllerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.google.firebase.FirebaseApp;
3535
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
3636
import com.google.firebase.crashlytics.internal.CrashlyticsTestCase;
37+
import com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider;
3738
import com.google.firebase.crashlytics.internal.NativeSessionFileProvider;
3839
import com.google.firebase.crashlytics.internal.analytics.AnalyticsEventLogger;
3940
import com.google.firebase.crashlytics.internal.log.LogFileManager;
@@ -142,8 +143,7 @@ public CrashlyticsController build() {
142143
"packageName",
143144
"versionCode",
144145
"versionName",
145-
/*developmentPlatform=*/ null,
146-
/*developmentPlatformVersion=*/ null);
146+
mock(DevelopmentPlatformProvider.class));
147147

148148
final CrashlyticsController controller =
149149
new CrashlyticsController(

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/CrashlyticsCoreInitializationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
3131
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponentDeferredProxy;
3232
import com.google.firebase.crashlytics.internal.CrashlyticsTestCase;
33+
import com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider;
3334
import com.google.firebase.crashlytics.internal.analytics.UnavailableAnalyticsEventLogger;
3435
import com.google.firebase.crashlytics.internal.breadcrumbs.DisabledBreadcrumbSource;
3536
import com.google.firebase.crashlytics.internal.persistence.FileStore;
@@ -263,8 +264,7 @@ private void setupAppData(String buildId) {
263264
"packageName",
264265
"versionCode",
265266
"versionName",
266-
"Unity",
267-
"1.0");
267+
mock(DevelopmentPlatformProvider.class));
268268
}
269269

270270
private void setupResource(Integer resId, String type, String name, String value) {

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/CrashlyticsCoreTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
3333
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponentDeferredProxy;
3434
import com.google.firebase.crashlytics.internal.CrashlyticsTestCase;
35+
import com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider;
3536
import com.google.firebase.crashlytics.internal.analytics.UnavailableAnalyticsEventLogger;
3637
import com.google.firebase.crashlytics.internal.breadcrumbs.BreadcrumbHandler;
3738
import com.google.firebase.crashlytics.internal.breadcrumbs.BreadcrumbSource;
@@ -343,8 +344,7 @@ private Task<CrashlyticsCore> startCoreAsync(CrashlyticsCore crashlyticsCore) {
343344
"packageName",
344345
"versionCode",
345346
"versionName",
346-
"Unity",
347-
"1.0");
347+
mock(DevelopmentPlatformProvider.class));
348348

349349
crashlyticsCore.onPreExecute(appData, mockSettingsController);
350350

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCaptureTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package com.google.firebase.crashlytics.internal.common;
1616

17-
import static com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider.UNITY_PLATFORM;
1817
import static com.google.firebase.crashlytics.internal.common.CrashlyticsReportDataCapture.GENERATOR;
1918
import static com.google.firebase.crashlytics.internal.common.CrashlyticsReportDataCapture.GENERATOR_TYPE;
2019
import static org.junit.Assert.assertArrayEquals;
@@ -51,6 +50,7 @@
5150

5251
@RunWith(AndroidJUnit4.class)
5352
public class CrashlyticsReportDataCaptureTest {
53+
private static final String UNITY_PLATFORM = "Unity";
5454

5555
private Context context = getContext();
5656
private IdManager idManager;

0 commit comments

Comments
 (0)