Skip to content

Commit 18862c2

Browse files
committed
update heartbeat to provide support for c++ sdks
1 parent fce5c40 commit 18862c2

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-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: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,22 +75,42 @@ 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+
Set<String> dates = (Set<String>) entry.getValue();
82+
String today = getFormattedDate(System.currentTimeMillis());
83+
String key = entry.getKey();
84+
if (dates.contains(today)) {
85+
Set<String> userAgentDateSet = new HashSet<>();
86+
userAgentDateSet.add(today);
87+
counter += 1;
88+
editor.putStringSet(key, userAgentDateSet);
89+
} else {
90+
editor.remove(key);
91+
}
8192
}
8293
}
83-
editor.remove(HEART_BEAT_COUNT_TAG);
94+
if (counter == 0) {
95+
editor.remove(HEART_BEAT_COUNT_TAG);
96+
} else {
97+
editor.putLong(HEART_BEAT_COUNT_TAG, counter);
98+
}
99+
84100
editor.commit();
85101
}
86102

87103
synchronized List<HeartBeatResult> getAllHeartBeats() {
88104
ArrayList<HeartBeatResult> heartBeatResults = new ArrayList<>();
89105
for (Map.Entry<String, ?> entry : this.firebaseSharedPreferences.getAll().entrySet()) {
90106
if (entry.getValue() instanceof Set) {
91-
heartBeatResults.add(
92-
HeartBeatResult.create(
93-
entry.getKey(), new ArrayList<String>((Set<String>) entry.getValue())));
107+
Set<String> dates = new HashSet<>((Set<String>) entry.getValue());
108+
String today = getFormattedDate(System.currentTimeMillis());
109+
dates.remove(today);
110+
if (!dates.isEmpty()) {
111+
heartBeatResults.add(
112+
HeartBeatResult.create(entry.getKey(), new ArrayList<String>(dates)));
113+
}
94114
}
95115
}
96116
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)