From 1e37763650cbd71c18b71c42598dede445f0f023 Mon Sep 17 00:00:00 2001 From: Matthew Robertson Date: Thu, 19 Jun 2025 11:50:29 -0400 Subject: [PATCH 1/2] Fix cold start resetting first session id --- .../firebase/sessions/SharedSessionRepository.kt | 15 ++++++++++++--- .../sessions/SharedSessionRepositoryTest.kt | 4 +--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt index c33b4800005..4f91649b3b7 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt @@ -98,7 +98,6 @@ constructor( CoroutineScope(backgroundDispatcher).launch { try { sessionDataStore.updateData { - // TODO(mrober): Double check time makes sense? sessionData.copy(backgroundTime = timeProvider.currentTime()) } } catch (ex: Exception) { @@ -125,6 +124,9 @@ constructor( val isSessionExpired = isSessionExpired(currentSessionData) val isColdStart = isColdStart(currentSessionData) val isMyProcessStale = isMyProcessStale(currentSessionData) + println( + "isSessionExpired: $isSessionExpired isColdStart: $isColdStart isMyProcessStale: $isMyProcessStale" + ) val newProcessDataMap = if (isColdStart) { @@ -138,10 +140,17 @@ constructor( currentSessionData.processDataMap } + val currentSession = + if (isColdStart) { + // For a cold start, do not keep the current session + null + } else { + currentSessionData.sessionDetails + } + // This is an expression, and returns the updated session data if (isSessionExpired || isColdStart) { - val newSessionDetails = - sessionGenerator.generateNewSession(currentSessionData.sessionDetails) + val newSessionDetails = sessionGenerator.generateNewSession(currentSession) sessionFirelogPublisher.mayLogSession(sessionDetails = newSessionDetails) processDataManager.onSessionGenerated() currentSessionData.copy( diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SharedSessionRepositoryTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SharedSessionRepositoryTest.kt index 38ab0ca37a4..5adc708e36b 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SharedSessionRepositoryTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SharedSessionRepositoryTest.kt @@ -127,9 +127,7 @@ class SharedSessionRepositoryTest { fakeDataStore.close() assertThat(sharedSessionRepository.localSessionData.sessionDetails) - .isEqualTo( - SessionDetails(SESSION_ID_1, SESSION_ID_INIT, 1, fakeTimeProvider.currentTime().us) - ) + .isEqualTo(SessionDetails(SESSION_ID_1, SESSION_ID_1, 0, fakeTimeProvider.currentTime().us)) } @Test From 342eb44368f8569c91bbf9ebe87f8917bd0dccde Mon Sep 17 00:00:00 2001 From: Matthew Robertson Date: Thu, 19 Jun 2025 12:03:11 -0400 Subject: [PATCH 2/2] Remove debugging line --- .../com/google/firebase/sessions/SharedSessionRepository.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt index 4f91649b3b7..ed2479646d8 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt @@ -124,9 +124,6 @@ constructor( val isSessionExpired = isSessionExpired(currentSessionData) val isColdStart = isColdStart(currentSessionData) val isMyProcessStale = isMyProcessStale(currentSessionData) - println( - "isSessionExpired: $isSessionExpired isColdStart: $isColdStart isMyProcessStale: $isMyProcessStale" - ) val newProcessDataMap = if (isColdStart) {