From b9f0e1d11d3bcaa33fb153e795f80439d0dc1eeb Mon Sep 17 00:00:00 2001 From: Daymon <17409137+daymxn@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:59:26 -0500 Subject: [PATCH 1/8] Automatically add NO_RELEASE_CHANGE to mergeback (#5366) Per [b/302184829](https://b.corp.google.com/issues/302184829), This configures the newly added [post release cleanup workflow](https://github.com/firebase/firebase-android-sdk/blob/master/.github/workflows/post_release_cleanup.yml) to add `NO_RELEASE_CHANGE` to the PR's body by default. --- .github/workflows/post_release_cleanup.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/post_release_cleanup.yml b/.github/workflows/post_release_cleanup.yml index ef101c1c96c..0458f758b63 100644 --- a/.github/workflows/post_release_cleanup.yml +++ b/.github/workflows/post_release_cleanup.yml @@ -31,5 +31,8 @@ jobs: **/*.gradle **/*.gradle.kts title: '${{ inputs.name}} mergeback' - body: 'Auto-generated PR for cleaning up release ${{ inputs.name}}' + body: | + Auto-generated PR for cleaning up release ${{ inputs.name}} + + NO_RELEASE_CHANGE commit-message: 'Post release cleanup for ${{ inputs.name }}' From 57e01ea64998a281f1ba46bf63b172449b55f60a Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Tue, 26 Sep 2023 23:05:35 -0400 Subject: [PATCH 2/8] Add `SessionMaintainerFollower` and create in `FirebaseSessions` when we're a follower process. --- .../firebase/sessions/EventGDTLogger.kt | 1 + .../firebase/sessions/FirebaseSessions.kt | 34 +++++++++---- .../firebase/sessions/ProcessDetails.kt | 16 ++++-- .../google/firebase/sessions/SessionEvents.kt | 7 +++ .../follower/SessionMaintainerFollower.kt | 50 +++++++++++++++++++ .../follower/SessionsDataRepository.kt | 46 +++++++++++++++++ .../{ => leader}/SessionCoordinator.kt | 3 +- .../sessions/{ => leader}/SessionEvent.kt | 3 +- .../sessions/{ => leader}/SessionGenerator.kt | 3 +- .../{ => leader}/SessionInitiateListener.kt | 2 +- .../sessions/{ => leader}/SessionInitiator.kt | 3 +- .../leader/SessionMaintainerLeader.kt | 27 +++++----- .../sessions/SessionCoordinatorTest.kt | 1 + .../sessions/SessionEventEncoderTest.kt | 3 ++ .../firebase/sessions/SessionGeneratorTest.kt | 2 + .../firebase/sessions/SessionInitiatorTest.kt | 4 ++ .../sessions/testing/FakeEventGDTLogger.kt | 2 +- .../sessions/testing/FakeProcessDetails.kt | 2 + .../sessions/testing/FakeTransportFactory.kt | 2 +- .../sessions/testing/TestSessionEventData.kt | 12 ++--- 20 files changed, 182 insertions(+), 41 deletions(-) create mode 100644 firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt create mode 100644 firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt rename firebase-sessions/src/main/kotlin/com/google/firebase/sessions/{ => leader}/SessionCoordinator.kt (94%) rename firebase-sessions/src/main/kotlin/com/google/firebase/sessions/{ => leader}/SessionEvent.kt (97%) rename firebase-sessions/src/main/kotlin/com/google/firebase/sessions/{ => leader}/SessionGenerator.kt (95%) rename firebase-sessions/src/main/kotlin/com/google/firebase/sessions/{ => leader}/SessionInitiateListener.kt (94%) rename firebase-sessions/src/main/kotlin/com/google/firebase/sessions/{ => leader}/SessionInitiator.kt (96%) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/EventGDTLogger.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/EventGDTLogger.kt index 42135f2cd1f..7faf4e17b54 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/EventGDTLogger.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/EventGDTLogger.kt @@ -21,6 +21,7 @@ import com.google.android.datatransport.Encoding import com.google.android.datatransport.Event import com.google.android.datatransport.TransportFactory import com.google.firebase.inject.Provider +import com.google.firebase.sessions.leader.SessionEvent /** * The [EventGDTLoggerInterface] is for testing purposes so that we can mock EventGDTLogger in other diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt index 69dd76d5c31..00d0f41b289 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt @@ -25,6 +25,8 @@ import com.google.firebase.ktx.Firebase import com.google.firebase.ktx.app import com.google.firebase.sessions.api.FirebaseSessionsDependencies import com.google.firebase.sessions.api.SessionSubscriber +import com.google.firebase.sessions.follower.SessionMaintainerFollower +import com.google.firebase.sessions.follower.SessionsDataRepository import com.google.firebase.sessions.leader.SessionMaintainerLeader import kotlinx.coroutines.CoroutineDispatcher @@ -39,21 +41,35 @@ internal constructor( backgroundDispatcher: CoroutineDispatcher, blockingDispatcher: CoroutineDispatcher, transportFactoryProvider: Provider, + processDetails: ProcessDetails = AndroidProcessDetails(firebaseApp.applicationContext) ) { private val sessionMaintainer: SessionMaintainer private val tag = "FirebaseSessions" - + private val sessionsDataRepository: SessionsDataRepository init { - // TODO(rothbutter): create a different maintainer based on the characteristics of this process + Log.d(tag, "Initializing data repository") + sessionsDataRepository = SessionsDataRepository(firebaseApp.applicationContext) + + Log.d( + tag, + "Initializing data maintainer. Default process is: ${processDetails.defaultProcessName}" + ) sessionMaintainer = - SessionMaintainerLeader( - firebaseApp, - firebaseInstallations, - backgroundDispatcher, - blockingDispatcher, - transportFactoryProvider - ) + if (AndroidProcessDetails.shouldProcessGenerateNewSession(processDetails)) { + Log.d(tag, "Initializing leader maintainer on process: ${processDetails.processName}") + SessionMaintainerLeader( + firebaseApp, + firebaseInstallations, + backgroundDispatcher, + blockingDispatcher, + transportFactoryProvider, + sessionsDataRepository + ) + } else { + Log.d(tag, "Initializing follower maintainer on process: ${processDetails.processName}") + SessionMaintainerFollower(sessionsDataRepository) + } sessionMaintainer.start(backgroundDispatcher) } diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt index 6f808abb876..1fb0e5f7482 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt @@ -30,6 +30,12 @@ internal interface ProcessDetails { /** Whether the current process is running in the foreground or not. */ val isForegroundProcess: Boolean + + /** Name of this process */ + val processName: String? + + /** Name of the default process */ + val defaultProcessName: String } /** Android implementation of [ProcessDetails]. */ @@ -40,23 +46,23 @@ internal class AndroidProcessDetails(context: Context) : ProcessDetails { * This is the app's package name unless the app overrides the android:process attribute in the * application block of its Android manifest file. */ - private val defaultProcessName: String = context.applicationInfo.processName + override val defaultProcessName: String = context.applicationInfo.processName - /** The name of the current process, or null if it couldn't be found. */ - private val currentProcessName: String? = + /** The name of this process, or null if it couldn't be found. */ + override val processName: String? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { Application.getProcessName() } else { findProcessName(context, Process.myPid()) } - override val isDefaultProcess: Boolean = currentProcessName == defaultProcessName + override val isDefaultProcess: Boolean = processName == defaultProcessName override val isForegroundProcess: Boolean get() { val runningAppProcessInfo = RunningAppProcessInfo() ActivityManager.getMyMemoryState(runningAppProcessInfo) - return runningAppProcessInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND + return runningAppProcessInfo.importance <= RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE } /** Finds the process name for the given pid, or returns null if not found. */ diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvents.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvents.kt index 1769c3ab978..0b41ccee0d1 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvents.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvents.kt @@ -21,6 +21,13 @@ import com.google.firebase.FirebaseApp import com.google.firebase.encoders.DataEncoder import com.google.firebase.encoders.json.JsonDataEncoderBuilder import com.google.firebase.sessions.api.SessionSubscriber +import com.google.firebase.sessions.leader.AutoSessionEventEncoder +import com.google.firebase.sessions.leader.DataCollectionState +import com.google.firebase.sessions.leader.DataCollectionStatus +import com.google.firebase.sessions.leader.EventType +import com.google.firebase.sessions.leader.SessionDetails +import com.google.firebase.sessions.leader.SessionEvent +import com.google.firebase.sessions.leader.SessionInfo import com.google.firebase.sessions.settings.SessionsSettings /** Contains functions for [SessionEvent]s. */ diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt new file mode 100644 index 00000000000..7eadb2d5d1c --- /dev/null +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt @@ -0,0 +1,50 @@ +package com.google.firebase.sessions.follower + +import android.util.Log +import com.google.firebase.sessions.SessionMaintainer +import com.google.firebase.sessions.api.FirebaseSessionsDependencies +import com.google.firebase.sessions.api.SessionSubscriber +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +class SessionMaintainerFollower(private val sessionsDataRepository: SessionsDataRepository) : + SessionMaintainer { + val tag = "SessionMaintainerFollow" + + override fun register(subscriber: SessionSubscriber) { + // NOOP + } + + override fun start(backgroundDispatcher: CoroutineDispatcher) { + CoroutineScope(backgroundDispatcher).launch { + sessionsDataRepository.firebaseSessionDataFlow.collect { + if (it.sessionId == null) { + Log.d( + tag, + "No session data available in shared storage." + " subscribers will not be notified." + ) + } else { + Log.d( + tag, + "Follower process has observed a change to the repository and will notify subscribers. New session id is ${it.sessionId}" + ) + notifySubscribers(it.sessionId) + } + } + } + } + + private suspend fun notifySubscribers(sessionId: String) { + val subscribers = FirebaseSessionsDependencies.getRegisteredSubscribers() + if (subscribers.isEmpty()) { + Log.d(tag, "Sessions SDK did not have any subscribers. Events will not be sent.") + } else { + subscribers.values.forEach { subscriber -> + // Notify subscribers, irregardless ;) of sampling and data collection state. + Log.d(tag, "Sending session id $sessionId to subscriber $subscriber.") + subscriber.onSessionChanged(SessionSubscriber.SessionDetails(sessionId)) + } + } + } +} diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt new file mode 100644 index 00000000000..2107db2f1a2 --- /dev/null +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt @@ -0,0 +1,46 @@ +package com.google.firebase.sessions.follower + +import android.content.Context +import android.util.Log +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.emptyPreferences +import androidx.datastore.preferences.core.stringPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.map + +data class FirebaseSessionsData(val sessionId: String?) + +/** Persists session data that needs to be synchronized across processes */ +class SessionsDataRepository(private val context: Context) { + private val tag = "FirebaseSessionsRepo" + + private object FirebaseSessionDataKeys { + val SESSION_ID = stringPreferencesKey("session_id") + } + + val firebaseSessionDataFlow: Flow = + context.dataStore.data + .catch { exception -> + Log.e(tag, "Error reading stored session data.", exception) + emit(emptyPreferences()) + } + .map { preferences -> mapSessionsData(preferences) } + + suspend fun updateSessionId(sessionId: String) { + context.dataStore.edit { preferences -> + preferences[FirebaseSessionDataKeys.SESSION_ID] = sessionId + } + } + + private fun mapSessionsData(preferences: Preferences): FirebaseSessionsData = + FirebaseSessionsData(preferences[FirebaseSessionDataKeys.SESSION_ID]) +} + +const val SESSION_CONFIGS_NAME = "firebase_session_settings" + +private val Context.dataStore: DataStore by + preferencesDataStore(name = SESSION_CONFIGS_NAME) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionCoordinator.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionCoordinator.kt similarity index 94% rename from firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionCoordinator.kt rename to firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionCoordinator.kt index 3cf9f13a3ff..f8a2dfae731 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionCoordinator.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionCoordinator.kt @@ -14,10 +14,11 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import android.util.Log import com.google.firebase.installations.FirebaseInstallationsApi +import com.google.firebase.sessions.EventGDTLoggerInterface import kotlinx.coroutines.tasks.await /** diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionEvent.kt similarity index 97% rename from firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt rename to firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionEvent.kt index 1eff07db7fa..5690fc9d2d3 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionEvent.kt @@ -14,10 +14,11 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import com.google.firebase.encoders.annotations.Encodable import com.google.firebase.encoders.json.NumberedEnum +import com.google.firebase.sessions.ApplicationInfo /** * Contains the relevant information around a Firebase Session Event. diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionGenerator.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionGenerator.kt similarity index 95% rename from firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionGenerator.kt rename to firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionGenerator.kt index b526dc0558d..cf887fbba61 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionGenerator.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionGenerator.kt @@ -14,8 +14,9 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader +import com.google.firebase.sessions.TimeProvider import java.util.UUID /** diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionInitiateListener.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionInitiateListener.kt similarity index 94% rename from firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionInitiateListener.kt rename to firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionInitiateListener.kt index 13d37d91703..d90bd920ee8 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionInitiateListener.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionInitiateListener.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader /** Interface for listening to the initiation of a new session. */ internal interface SessionInitiateListener { diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionInitiator.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionInitiator.kt similarity index 96% rename from firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionInitiator.kt rename to firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionInitiator.kt index 84fbd99c72d..2ce193634f7 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionInitiator.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionInitiator.kt @@ -14,11 +14,12 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import android.app.Activity import android.app.Application.ActivityLifecycleCallbacks import android.os.Bundle +import com.google.firebase.sessions.TimeProvider import com.google.firebase.sessions.settings.SessionsSettings import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineScope diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt index e316c43717f..ecc92180824 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt @@ -23,17 +23,13 @@ import com.google.firebase.FirebaseApp import com.google.firebase.inject.Provider import com.google.firebase.installations.FirebaseInstallationsApi import com.google.firebase.sessions.EventGDTLogger -import com.google.firebase.sessions.SessionCoordinator -import com.google.firebase.sessions.SessionDetails import com.google.firebase.sessions.SessionEvents -import com.google.firebase.sessions.SessionGenerator -import com.google.firebase.sessions.SessionInitiateListener -import com.google.firebase.sessions.SessionInitiator import com.google.firebase.sessions.SessionMaintainer import com.google.firebase.sessions.Time import com.google.firebase.sessions.TimeProvider import com.google.firebase.sessions.api.FirebaseSessionsDependencies import com.google.firebase.sessions.api.SessionSubscriber +import com.google.firebase.sessions.follower.SessionsDataRepository import com.google.firebase.sessions.settings.SessionsSettings import kotlinx.coroutines.CoroutineDispatcher @@ -47,6 +43,7 @@ class SessionMaintainerLeader( backgroundDispatcher: CoroutineDispatcher, blockingDispatcher: CoroutineDispatcher, transportFactoryProvider: Provider, + private val sessionsDataRepository: SessionsDataRepository, ) : SessionMaintainer { private val applicationInfo = SessionEvents.getApplicationInfo(firebaseApp) @@ -64,7 +61,7 @@ class SessionMaintainerLeader( private val eventGDTLogger = EventGDTLogger(transportFactoryProvider) private val sessionCoordinator = SessionCoordinator(firebaseInstallations, eventGDTLogger) - private val TAG = "SessionMaintainerLeader" + private val tag = "SessionMaintainerLeader" override fun start(backgroundDispatcher: CoroutineDispatcher) { val sessionInitiateListener = @@ -89,12 +86,12 @@ class SessionMaintainerLeader( appContext.registerActivityLifecycleCallbacks(sessionInitiator.activityLifecycleCallbacks) firebaseApp.addLifecycleEventListener { _, _ -> - Log.w(TAG, "FirebaseApp instance deleted. Sessions library will not collect session data.") + Log.w(tag, "FirebaseApp instance deleted. Sessions library will not collect session data.") appContext.unregisterActivityLifecycleCallbacks(sessionInitiator.activityLifecycleCallbacks) } } else { Log.e( - TAG, + tag, "Failed to register lifecycle callbacks, unexpected context ${appContext.javaClass}." ) } @@ -116,7 +113,7 @@ class SessionMaintainerLeader( if (subscribers.isEmpty()) { Log.d( - TAG, + tag, "Sessions SDK did not have any dependent SDKs register as dependencies. Events will not be sent." ) return @@ -128,33 +125,35 @@ class SessionMaintainerLeader( } if (subscribers.values.none { it.isDataCollectionEnabled }) { - Log.d(TAG, "Data Collection is disabled for all subscribers. Skipping this Session Event") + Log.d(tag, "Data Collection is disabled for all subscribers. Skipping this Session Event") return } - Log.d(TAG, "Data Collection is enabled for at least one Subscriber") + Log.d(tag, "Data Collection is enabled for at least one Subscriber") // This will cause remote settings to be fetched if the cache is expired. sessionSettings.updateSettings() if (!sessionSettings.sessionsEnabled) { - Log.d(TAG, "Sessions SDK disabled. Events will not be sent.") + Log.d(tag, "Sessions SDK disabled. Events will not be sent.") return } if (!sessionGenerator.collectEvents) { - Log.d(TAG, "Sessions SDK has dropped this session due to sampling.") + Log.d(tag, "Sessions SDK has dropped this session due to sampling.") return } try { val sessionEvent = SessionEvents.startSession(firebaseApp, sessionDetails, sessionSettings, subscribers) + Log.d(tag, "Writing session id ${sessionEvent.sessionData.sessionId} to repository") + sessionsDataRepository.updateSessionId(sessionEvent.sessionData.sessionId) sessionCoordinator.attemptLoggingSessionEvent(sessionEvent) } catch (ex: IllegalStateException) { // This can happen if the app suddenly deletes the instance of FirebaseApp. Log.w( - TAG, + tag, "FirebaseApp is not initialized. Sessions library will not collect session data.", ex ) diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt index fbf17a72083..93b76a1b285 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt @@ -19,6 +19,7 @@ package com.google.firebase.sessions import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp +import com.google.firebase.sessions.leader.SessionCoordinator import com.google.firebase.sessions.settings.SessionsSettings import com.google.firebase.sessions.testing.FakeEventGDTLogger import com.google.firebase.sessions.testing.FakeFirebaseApp diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventEncoderTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventEncoderTest.kt index e4173cb89a1..adf16f6a733 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventEncoderTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventEncoderTest.kt @@ -22,6 +22,9 @@ import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp import com.google.firebase.sessions.SessionEvents.SESSION_EVENT_ENCODER import com.google.firebase.sessions.api.SessionSubscriber +import com.google.firebase.sessions.leader.EventType +import com.google.firebase.sessions.leader.SessionEvent +import com.google.firebase.sessions.leader.SessionInfo import com.google.firebase.sessions.settings.SessionsSettings import com.google.firebase.sessions.testing.FakeFirebaseApp import com.google.firebase.sessions.testing.FakeSessionSubscriber diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt index 59be72ea4b4..6c5962bcf1e 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt @@ -17,6 +17,8 @@ package com.google.firebase.sessions import com.google.common.truth.Truth.assertThat +import com.google.firebase.sessions.leader.SessionDetails +import com.google.firebase.sessions.leader.SessionGenerator import com.google.firebase.sessions.testing.FakeTimeProvider import com.google.firebase.sessions.testing.TestSessionEventData.TEST_SESSION_TIMESTAMP_US import java.util.UUID diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt index 891c18796ec..366b2076f2b 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt @@ -19,6 +19,10 @@ package com.google.firebase.sessions import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp import com.google.firebase.concurrent.TestOnlyExecutors +import com.google.firebase.sessions.leader.SessionDetails +import com.google.firebase.sessions.leader.SessionGenerator +import com.google.firebase.sessions.leader.SessionInitiateListener +import com.google.firebase.sessions.leader.SessionInitiator import com.google.firebase.sessions.settings.SessionsSettings import com.google.firebase.sessions.testing.FakeSettingsProvider import com.google.firebase.sessions.testing.FakeTimeProvider diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeEventGDTLogger.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeEventGDTLogger.kt index d213f4e8a4c..6e6f3743ba8 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeEventGDTLogger.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeEventGDTLogger.kt @@ -18,7 +18,7 @@ package com.google.firebase.sessions.testing import com.google.firebase.sessions.EventGDTLogger import com.google.firebase.sessions.EventGDTLoggerInterface -import com.google.firebase.sessions.SessionEvent +import com.google.firebase.sessions.leader.SessionEvent /** * The [FakeEventGDTLogger] is for mocking [EventGDTLogger]. diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt index 2e02b2c76dc..505b7d24764 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt @@ -22,4 +22,6 @@ import com.google.firebase.sessions.ProcessDetails class FakeProcessDetails( override val isDefaultProcess: Boolean = true, override val isForegroundProcess: Boolean = true, + override val processName: String? = "defaultProcessName", + override val defaultProcessName: String = "defaultProcessName" ) : ProcessDetails diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeTransportFactory.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeTransportFactory.kt index da1d273a33f..6d810d7cb02 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeTransportFactory.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeTransportFactory.kt @@ -17,7 +17,7 @@ package com.google.firebase.sessions.testing import com.google.android.datatransport.* -import com.google.firebase.sessions.SessionEvent +import com.google.firebase.sessions.leader.SessionEvent /** Fake [Transport] that implements [send]. */ internal class FakeTransport() : Transport { diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/TestSessionEventData.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/TestSessionEventData.kt index 964a28cbc98..624f23ec139 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/TestSessionEventData.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/TestSessionEventData.kt @@ -22,13 +22,13 @@ import androidx.test.core.app.ApplicationProvider import com.google.firebase.sessions.AndroidApplicationInfo import com.google.firebase.sessions.ApplicationInfo import com.google.firebase.sessions.BuildConfig -import com.google.firebase.sessions.DataCollectionState -import com.google.firebase.sessions.DataCollectionStatus -import com.google.firebase.sessions.EventType import com.google.firebase.sessions.LogEnvironment -import com.google.firebase.sessions.SessionDetails -import com.google.firebase.sessions.SessionEvent -import com.google.firebase.sessions.SessionInfo +import com.google.firebase.sessions.leader.DataCollectionState +import com.google.firebase.sessions.leader.DataCollectionStatus +import com.google.firebase.sessions.leader.EventType +import com.google.firebase.sessions.leader.SessionDetails +import com.google.firebase.sessions.leader.SessionEvent +import com.google.firebase.sessions.leader.SessionInfo internal object TestSessionEventData { const val TEST_SESSION_TIMESTAMP_US: Long = 12340000 From c8f87ae81bfd6190b9bf6e16f140b15f302fcd24 Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Tue, 26 Sep 2023 23:09:25 -0400 Subject: [PATCH 3/8] Add copyright. --- .../follower/SessionMaintainerFollower.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt index 7eadb2d5d1c..abf25277213 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.google.firebase.sessions.follower import android.util.Log From b9937d5d8f4f6039919f21e91937354944f851bf Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Tue, 26 Sep 2023 23:11:32 -0400 Subject: [PATCH 4/8] Add copyright --- .../sessions/follower/SessionsDataRepository.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt index 2107db2f1a2..705c9b43153 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.google.firebase.sessions.follower import android.content.Context From 1e04fe12b0b15bd6af0f2c4c62de45f2c5f7b5a7 Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Wed, 27 Sep 2023 13:42:10 -0400 Subject: [PATCH 5/8] PR feedback --- .../com/google/firebase/sessions/ProcessDetails.kt | 10 +++------- .../com/google/firebase/sessions/SessionMaintainer.kt | 2 +- .../sessions/follower/SessionMaintainerFollower.kt | 9 ++++----- .../sessions/follower/SessionsDataRepository.kt | 8 +++----- .../sessions/leader/SessionMaintainerLeader.kt | 2 +- .../firebase/sessions/testing/FakeProcessDetails.kt | 1 - 6 files changed, 12 insertions(+), 20 deletions(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt index 1fb0e5f7482..99f1fd4a752 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetails.kt @@ -25,9 +25,6 @@ import android.os.Process /** Provides details about the current process. */ internal interface ProcessDetails { - /** Whether the current process is the app's default process or not. */ - val isDefaultProcess: Boolean - /** Whether the current process is running in the foreground or not. */ val isForegroundProcess: Boolean @@ -56,13 +53,11 @@ internal class AndroidProcessDetails(context: Context) : ProcessDetails { findProcessName(context, Process.myPid()) } - override val isDefaultProcess: Boolean = processName == defaultProcessName - override val isForegroundProcess: Boolean get() { val runningAppProcessInfo = RunningAppProcessInfo() ActivityManager.getMyMemoryState(runningAppProcessInfo) - return runningAppProcessInfo.importance <= RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE + return runningAppProcessInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND } /** Finds the process name for the given pid, or returns null if not found. */ @@ -75,6 +70,7 @@ internal class AndroidProcessDetails(context: Context) : ProcessDetails { internal companion object { /** Returns whether the current process should generate a new session or not. */ fun shouldProcessGenerateNewSession(processDetails: ProcessDetails): Boolean = - processDetails.isDefaultProcess && processDetails.isForegroundProcess + (processDetails.processName == processDetails.defaultProcessName) && + processDetails.isForegroundProcess } } diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionMaintainer.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionMaintainer.kt index 0cecefaa8d6..846737d761e 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionMaintainer.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionMaintainer.kt @@ -24,7 +24,7 @@ import kotlinx.coroutines.CoroutineDispatcher * that includes data synchronizing across processes, sending events to our backend, and * broadcasting AQS related events to listeners */ -interface SessionMaintainer { +internal interface SessionMaintainer { /** Register a listener for updates to the session being maintained by this class */ fun register(subscriber: SessionSubscriber) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt index abf25277213..30733ccf075 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionMaintainerFollower.kt @@ -24,13 +24,12 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class SessionMaintainerFollower(private val sessionsDataRepository: SessionsDataRepository) : - SessionMaintainer { +internal class SessionMaintainerFollower( + private val sessionsDataRepository: SessionsDataRepository +) : SessionMaintainer { val tag = "SessionMaintainerFollow" - override fun register(subscriber: SessionSubscriber) { - // NOOP - } + override fun register(subscriber: SessionSubscriber) = Unit override fun start(backgroundDispatcher: CoroutineDispatcher) { CoroutineScope(backgroundDispatcher).launch { diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt index 705c9b43153..8bbf9ba6a0e 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt @@ -28,10 +28,10 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.map -data class FirebaseSessionsData(val sessionId: String?) +internal data class FirebaseSessionsData(val sessionId: String?) /** Persists session data that needs to be synchronized across processes */ -class SessionsDataRepository(private val context: Context) { +internal class SessionsDataRepository(private val context: Context) { private val tag = "FirebaseSessionsRepo" private object FirebaseSessionDataKeys { @@ -56,7 +56,5 @@ class SessionsDataRepository(private val context: Context) { FirebaseSessionsData(preferences[FirebaseSessionDataKeys.SESSION_ID]) } -const val SESSION_CONFIGS_NAME = "firebase_session_settings" - private val Context.dataStore: DataStore by - preferencesDataStore(name = SESSION_CONFIGS_NAME) + preferencesDataStore(name = "firebase_session_settings") diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt index ecc92180824..5acffa25c54 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/leader/SessionMaintainerLeader.kt @@ -37,7 +37,7 @@ import kotlinx.coroutines.CoroutineDispatcher * Maintainer that will manage the full lifecycle of a session including sending this to our * backend. It will also notify followers when there is a change */ -class SessionMaintainerLeader( +internal class SessionMaintainerLeader( private val firebaseApp: FirebaseApp, firebaseInstallations: FirebaseInstallationsApi, backgroundDispatcher: CoroutineDispatcher, diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt index 505b7d24764..56e92f4becb 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeProcessDetails.kt @@ -20,7 +20,6 @@ import com.google.firebase.sessions.ProcessDetails /** Fake implementation of [ProcessDetails] that always returns the provided values. */ class FakeProcessDetails( - override val isDefaultProcess: Boolean = true, override val isForegroundProcess: Boolean = true, override val processName: String? = "defaultProcessName", override val defaultProcessName: String = "defaultProcessName" From b3945b9f508e8d93d2d375b270650dffb0351516 Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Wed, 27 Sep 2023 14:02:36 -0400 Subject: [PATCH 6/8] Move tests to the leader package --- .../sessions/{ => leader}/SessionCoordinatorTest.kt | 4 ++-- .../firebase/sessions/{ => leader}/SessionEventTest.kt | 3 ++- .../firebase/sessions/{ => leader}/SessionGeneratorTest.kt | 4 +--- .../firebase/sessions/{ => leader}/SessionInitiatorTest.kt | 6 +----- 4 files changed, 6 insertions(+), 11 deletions(-) rename firebase-sessions/src/test/kotlin/com/google/firebase/sessions/{ => leader}/SessionCoordinatorTest.kt (96%) rename firebase-sessions/src/test/kotlin/com/google/firebase/sessions/{ => leader}/SessionEventTest.kt (96%) rename firebase-sessions/src/test/kotlin/com/google/firebase/sessions/{ => leader}/SessionGeneratorTest.kt (97%) rename firebase-sessions/src/test/kotlin/com/google/firebase/sessions/{ => leader}/SessionInitiatorTest.kt (96%) diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionCoordinatorTest.kt similarity index 96% rename from firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt rename to firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionCoordinatorTest.kt index 93b76a1b285..88351d3fbdc 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionCoordinatorTest.kt @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp -import com.google.firebase.sessions.leader.SessionCoordinator +import com.google.firebase.sessions.SessionEvents import com.google.firebase.sessions.settings.SessionsSettings import com.google.firebase.sessions.testing.FakeEventGDTLogger import com.google.firebase.sessions.testing.FakeFirebaseApp diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionEventTest.kt similarity index 96% rename from firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventTest.kt rename to firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionEventTest.kt index 4ee92f8acc1..9f78c39a14a 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionEventTest.kt @@ -14,11 +14,12 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import android.os.Bundle import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp +import com.google.firebase.sessions.SessionEvents import com.google.firebase.sessions.settings.LocalOverrideSettings import com.google.firebase.sessions.settings.SessionsSettings import com.google.firebase.sessions.testing.FakeFirebaseApp diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionGeneratorTest.kt similarity index 97% rename from firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt rename to firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionGeneratorTest.kt index 6c5962bcf1e..10b7c006e4c 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionGeneratorTest.kt @@ -14,11 +14,9 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import com.google.common.truth.Truth.assertThat -import com.google.firebase.sessions.leader.SessionDetails -import com.google.firebase.sessions.leader.SessionGenerator import com.google.firebase.sessions.testing.FakeTimeProvider import com.google.firebase.sessions.testing.TestSessionEventData.TEST_SESSION_TIMESTAMP_US import java.util.UUID diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionInitiatorTest.kt similarity index 96% rename from firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt rename to firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionInitiatorTest.kt index 366b2076f2b..30ec92e090c 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/leader/SessionInitiatorTest.kt @@ -14,15 +14,11 @@ * limitations under the License. */ -package com.google.firebase.sessions +package com.google.firebase.sessions.leader import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp import com.google.firebase.concurrent.TestOnlyExecutors -import com.google.firebase.sessions.leader.SessionDetails -import com.google.firebase.sessions.leader.SessionGenerator -import com.google.firebase.sessions.leader.SessionInitiateListener -import com.google.firebase.sessions.leader.SessionInitiator import com.google.firebase.sessions.settings.SessionsSettings import com.google.firebase.sessions.testing.FakeSettingsProvider import com.google.firebase.sessions.testing.FakeTimeProvider From 5c4ceee6878302ffe9da0c6ed6e5cf0a61d977d9 Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Wed, 27 Sep 2023 14:45:38 -0400 Subject: [PATCH 7/8] Restore FirebaseSessions --- .../kotlin/com/google/firebase/sessions/FirebaseSessions.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt index 00d0f41b289..57821d6b282 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt @@ -41,9 +41,8 @@ internal constructor( backgroundDispatcher: CoroutineDispatcher, blockingDispatcher: CoroutineDispatcher, transportFactoryProvider: Provider, - processDetails: ProcessDetails = AndroidProcessDetails(firebaseApp.applicationContext) ) { - + private val processDetails: ProcessDetails = AndroidProcessDetails(firebaseApp.applicationContext) private val sessionMaintainer: SessionMaintainer private val tag = "FirebaseSessions" private val sessionsDataRepository: SessionsDataRepository From 2300e61bf79c2681bf9490e1100cc1a616d8904e Mon Sep 17 00:00:00 2001 From: jrothfeder Date: Wed, 27 Sep 2023 15:24:00 -0400 Subject: [PATCH 8/8] Change the name of the sessions data repo --- .../google/firebase/sessions/follower/SessionsDataRepository.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt index 8bbf9ba6a0e..69ae50c1fba 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/follower/SessionsDataRepository.kt @@ -57,4 +57,4 @@ internal class SessionsDataRepository(private val context: Context) { } private val Context.dataStore: DataStore by - preferencesDataStore(name = "firebase_session_settings") + preferencesDataStore(name = "firebase_session_data_repository")