Skip to content

Commit 1c763f0

Browse files
authored
update heartbeat to provide support for c++ sdks (#5011)
* update heartbeat to provide support for c++ sdks * update
1 parent fce5c40 commit 1c763f0

File tree

3 files changed

+45
-6
lines changed

3 files changed

+45
-6
lines changed

firebase-common/src/main/java/com/google/firebase/FirebaseApp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ public static FirebaseApp getInstance() {
180180
+ ". Make sure to call "
181181
+ "FirebaseApp.initializeApp(Context) first.");
182182
}
183+
defaultApp.defaultHeartBeatController.get().registerHeartBeat();
183184
return defaultApp;
184185
}
185186
}

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

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,22 +75,43 @@ int getHeartBeatCount() {
7575

7676
synchronized void deleteAllHeartBeats() {
7777
SharedPreferences.Editor editor = firebaseSharedPreferences.edit();
78+
int counter = 0;
7879
for (Map.Entry<String, ?> entry : this.firebaseSharedPreferences.getAll().entrySet()) {
7980
if (entry.getValue() instanceof Set) {
80-
editor.remove(entry.getKey());
81+
// All other heartbeats other than the heartbeats stored today will be deleted.
82+
Set<String> dates = (Set<String>) entry.getValue();
83+
String today = getFormattedDate(System.currentTimeMillis());
84+
String key = entry.getKey();
85+
if (dates.contains(today)) {
86+
Set<String> userAgentDateSet = new HashSet<>();
87+
userAgentDateSet.add(today);
88+
counter += 1;
89+
editor.putStringSet(key, userAgentDateSet);
90+
} else {
91+
editor.remove(key);
92+
}
8193
}
8294
}
83-
editor.remove(HEART_BEAT_COUNT_TAG);
95+
if (counter == 0) {
96+
editor.remove(HEART_BEAT_COUNT_TAG);
97+
} else {
98+
editor.putLong(HEART_BEAT_COUNT_TAG, counter);
99+
}
100+
84101
editor.commit();
85102
}
86103

87104
synchronized List<HeartBeatResult> getAllHeartBeats() {
88105
ArrayList<HeartBeatResult> heartBeatResults = new ArrayList<>();
89106
for (Map.Entry<String, ?> entry : this.firebaseSharedPreferences.getAll().entrySet()) {
90107
if (entry.getValue() instanceof Set) {
91-
heartBeatResults.add(
92-
HeartBeatResult.create(
93-
entry.getKey(), new ArrayList<String>((Set<String>) entry.getValue())));
108+
Set<String> dates = new HashSet<>((Set<String>) entry.getValue());
109+
String today = getFormattedDate(System.currentTimeMillis());
110+
dates.remove(today);
111+
if (!dates.isEmpty()) {
112+
heartBeatResults.add(
113+
HeartBeatResult.create(entry.getKey(), new ArrayList<String>(dates)));
114+
}
94115
}
95116
}
96117
updateGlobalHeartBeat(System.currentTimeMillis());

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import androidx.test.runner.AndroidJUnit4;
2323
import java.util.ArrayList;
2424
import java.util.Collections;
25+
import java.util.HashSet;
2526
import org.junit.After;
2627
import org.junit.Before;
2728
import org.junit.Test;
@@ -179,14 +180,30 @@ public void shouldSendGlobalHeartBeat_answerIsNo() {
179180
assertThat(heartBeatInfoStorage.shouldSendGlobalHeartBeat(1)).isFalse();
180181
}
181182

183+
@Test
184+
public void currentDayHeartbeatNotSent_updatesCorrectly() {
185+
long millis = System.currentTimeMillis();
186+
assertThat(heartBeatInfoStorage.getHeartBeatCount()).isEqualTo(0);
187+
heartBeatInfoStorage.storeHeartBeat(millis, "test-agent");
188+
assertThat(heartBeatInfoStorage.getHeartBeatCount()).isEqualTo(1);
189+
assertThat(heartBeatInfoStorage.getAllHeartBeats().size()).isEqualTo(0);
190+
heartBeatInfoStorage.deleteAllHeartBeats();
191+
assertThat(heartBeatInfoStorage.getHeartBeatCount()).isEqualTo(1);
192+
assertThat(heartBeatSharedPreferences.getStringSet("test-agent", new HashSet<>())).isNotEmpty();
193+
heartBeatInfoStorage.storeHeartBeat(millis, "test-agent-1");
194+
assertThat(heartBeatSharedPreferences.getStringSet("test-agent", new HashSet<>())).isEmpty();
195+
assertThat(heartBeatSharedPreferences.getStringSet("test-agent-1", new HashSet<>()))
196+
.isNotEmpty();
197+
}
198+
182199
@Test
183200
public void postHeartBeatCleanUp_worksCorrectly() {
184201
long millis = System.currentTimeMillis();
185202
// Store using new method
186203
heartBeatInfoStorage.storeHeartBeat(millis, "test-agent");
187204
// Get global heartbeat using old method
188205
assertThat(heartBeatInfoStorage.shouldSendGlobalHeartBeat(millis)).isTrue();
189-
assertThat(heartBeatInfoStorage.getAllHeartBeats().size()).isEqualTo(1);
206+
assertThat(heartBeatInfoStorage.getAllHeartBeats().size()).isEqualTo(0);
190207
heartBeatInfoStorage.postHeartBeatCleanUp();
191208
assertThat(heartBeatInfoStorage.getAllHeartBeats().size()).isEqualTo(0);
192209
// Try storing using new method again.

0 commit comments

Comments
 (0)