Skip to content

Commit eb3faa2

Browse files
committed
Double check pattern
1 parent 6ab4d26 commit eb3faa2

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,12 @@ constructor(
5656
if (!settings.sessionsEnabled) {
5757
Log.d(TAG, "Sessions SDK disabled. Not listening to lifecycle events.")
5858
} else {
59-
// val lifecycleClient = SessionLifecycleClient(backgroundDispatcher)
60-
// lifecycleClient.bindToService(lifecycleServiceBinder)
61-
// SessionsActivityLifecycleCallbacks.lifecycleClient = lifecycleClient
62-
6359
firebaseApp.addLifecycleEventListener { _, _ ->
64-
Log.w(
65-
TAG,
66-
"FirebaseApp instance deleted. Sessions library will stop collecting data.",
67-
)
68-
// SessionsActivityLifecycleCallbacks.lifecycleClient = null
60+
// Log.w(
61+
// TAG,
62+
// "FirebaseApp instance deleted. Sessions library will stop collecting data.",
63+
// )
64+
// TODO(mrober): Clean up on firebase app delete
6965
}
7066
}
7167
}

firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ constructor(
7474
Log.d(TAG, "App backgrounded on ${getProcessName()} - $sessionData")
7575

7676
CoroutineScope(backgroundDispatcher).launch {
77-
updateSessionData(sessionData.copy(backgroundTime = timeProvider.currentTime()))
77+
sessionDataStore.updateData {
78+
// TODO(mrober): Double check time makes sense?
79+
sessionData.copy(backgroundTime = timeProvider.currentTime())
80+
}
7881
}
7982
}
8083

@@ -86,14 +89,19 @@ constructor(
8689
val sessionData = localSessionData
8790
Log.d(TAG, "App foregrounded on ${getProcessName()} - $sessionData")
8891

89-
val interval = timeProvider.currentTime() - sessionData.backgroundTime
90-
Log.d(TAG, "Interval: $interval")
91-
if (interval > sessionsSettings.sessionRestartTimeout) {
92+
if (shouldInitiateNewSession(sessionData)) {
9293
// Generate new session details on main thread so the timestamp is as current as possible
9394
val newSessionDetails = sessionGenerator.generateNewSession(sessionData.sessionDetails)
9495

9596
CoroutineScope(backgroundDispatcher).launch {
96-
updateSessionData(sessionData.copy(sessionDetails = newSessionDetails))
97+
sessionDataStore.updateData { currentSessionData ->
98+
// Double-check pattern
99+
if (shouldInitiateNewSession(currentSessionData)) {
100+
currentSessionData.copy(sessionDetails = newSessionDetails)
101+
} else {
102+
currentSessionData
103+
}
104+
}
97105
}
98106

99107
// TODO(mrober): If data collection is enabled for at least one subscriber...
@@ -102,12 +110,9 @@ constructor(
102110
}
103111
}
104112

105-
private suspend fun updateSessionData(sessionData: SessionData) {
106-
sessionDataStore.updateData {
107-
// TODO(mrober): Do double-check pattern, might need two update methods
108-
Log.d(TAG, "Update data to: $sessionData")
109-
sessionData
110-
}
113+
private fun shouldInitiateNewSession(sessionData: SessionData): Boolean {
114+
val interval = timeProvider.currentTime() - sessionData.backgroundTime
115+
return interval > sessionsSettings.sessionRestartTimeout
111116
}
112117

113118
private companion object {

0 commit comments

Comments
 (0)