Skip to content

Commit 3220745

Browse files
VinayGuthalrlazo
andauthored
Update heartbeat to have the most recent useragent for a given day (#4694)
* update heartbeat to have the most recent useragent for a given day * update comment * update comment * add comment --------- Co-authored-by: Rodrigo Lazo <[email protected]>
1 parent c60f76b commit 3220745

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@ private synchronized String getStoredUserAgentString(String dateString) {
111111
return null;
112112
}
113113

114+
private synchronized void updateStoredUserAgent(String userAgent, String dateString) {
115+
removeStoredDate(dateString);
116+
Set<String> userAgentDateSet =
117+
new HashSet<String>(
118+
firebaseSharedPreferences.getStringSet(userAgent, new HashSet<String>()));
119+
userAgentDateSet.add(dateString);
120+
firebaseSharedPreferences.edit().putStringSet(userAgent, userAgentDateSet).commit();
121+
}
122+
114123
private synchronized void removeStoredDate(String dateString) {
115124
// Find stored heartbeat and clear it.
116125
String userAgentString = getStoredUserAgentString(dateString);
@@ -148,7 +157,18 @@ synchronized void storeHeartBeat(long millis, String userAgentString) {
148157
String dateString = getFormattedDate(millis);
149158
String lastDateString = firebaseSharedPreferences.getString(LAST_STORED_DATE, "");
150159
if (lastDateString.equals(dateString)) {
151-
return;
160+
String storedUserAgentString = getStoredUserAgentString(dateString);
161+
if (storedUserAgentString == null) {
162+
// Heartbeat already sent for today.
163+
return;
164+
}
165+
if (storedUserAgentString.equals(userAgentString)) {
166+
// UserAgent not updated.
167+
return;
168+
} else {
169+
updateStoredUserAgent(userAgentString, dateString);
170+
return;
171+
}
152172
}
153173
long heartBeatCount = firebaseSharedPreferences.getLong(HEART_BEAT_COUNT_TAG, 0);
154174
if (heartBeatCount + 1 == HEART_BEAT_COUNT_LIMIT) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,28 @@ public void storeOneHeartbeat_storesProperly() {
7575
assertThat(results.size()).isEqualTo(0);
7676
}
7777

78+
@Config(sdk = 29)
79+
@Test
80+
public void storeOneHeartbeat_updatesProperly() {
81+
assertThat(heartBeatInfoStorage.getHeartBeatCount()).isEqualTo(0);
82+
heartBeatInfoStorage.storeHeartBeat(0, "test-agent");
83+
assertThat(heartBeatInfoStorage.getHeartBeatCount()).isEqualTo(1);
84+
heartBeatInfoStorage.storeHeartBeat(10, "test-agent-1");
85+
ArrayList<HeartBeatResult> results =
86+
(ArrayList<HeartBeatResult>) heartBeatInfoStorage.getAllHeartBeats();
87+
assertThat(results.size()).isEqualTo(1);
88+
assertThat(results.get(0).getUserAgent()).isEqualTo("test-agent-1");
89+
assertThat(results.get(0).getUsedDates())
90+
.isEqualTo(new ArrayList<String>(Collections.singleton("1970-01-01")));
91+
heartBeatInfoStorage.deleteAllHeartBeats();
92+
heartBeatInfoStorage.storeHeartBeat(100, "test-agent-2");
93+
heartBeatInfoStorage.storeHeartBeat(1000, "test-agent-1");
94+
// Since the heartbeat is already sent for today no new heartbeats should be sent.
95+
assertThat(heartBeatInfoStorage.getHeartBeatCount()).isEqualTo(0);
96+
results = (ArrayList<HeartBeatResult>) heartBeatInfoStorage.getAllHeartBeats();
97+
assertThat(results.size()).isEqualTo(0);
98+
}
99+
78100
@Config(sdk = 29)
79101
@Test
80102
public void storeTwoHeartbeat_storesProperly() {

0 commit comments

Comments
 (0)