Skip to content

Commit aa0ad0a

Browse files
committed
Add early / late init
1 parent e00ccfb commit aa0ad0a

File tree

4 files changed

+47
-9
lines changed

4 files changed

+47
-9
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.google.firebase.sessions
1818

1919
import com.google.android.datatransport.*
2020
import com.google.android.datatransport.TransportFactory
21+
import com.google.firebase.inject.Provider
2122

2223
/**
2324
* The [EventGDTLoggerInterface] is for testing purposes so that we can mock EventGDTLogger in other
@@ -35,12 +36,12 @@ internal interface EventGDTLoggerInterface {
3536
*
3637
* @hide
3738
*/
38-
internal class EventGDTLogger(private val transportFactory: TransportFactory) :
39+
internal class EventGDTLogger(private val transportFactoryProvider: Provider<TransportFactory>) :
3940
EventGDTLoggerInterface {
4041

4142
// Logs a [SessionEvent] to FireLog
4243
override fun log(sessionEvent: SessionEvent) {
43-
transportFactory
44+
transportFactoryProvider.get()
4445
.getTransport(
4546
EventGDTLogger.AQS_LOG_SOURCE,
4647
SessionEvent::class.java,

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.util.Log
2121
import androidx.annotation.Discouraged
2222
import com.google.android.datatransport.TransportFactory
2323
import com.google.firebase.FirebaseApp
24+
import com.google.firebase.inject.Provider
2425
import com.google.firebase.installations.FirebaseInstallationsApi
2526
import com.google.firebase.ktx.Firebase
2627
import com.google.firebase.ktx.app
@@ -31,10 +32,10 @@ internal constructor(
3132
private val firebaseApp: FirebaseApp,
3233
firebaseInstallations: FirebaseInstallationsApi,
3334
backgroundDispatcher: CoroutineDispatcher,
34-
transportFactory: TransportFactory,
35+
transportFactoryProvider: Provider<TransportFactory>,
3536
) {
3637
private val sessionGenerator = SessionGenerator(collectEvents = true)
37-
private val eventGDTLogger = EventGDTLogger(transportFactory)
38+
private val eventGDTLogger = EventGDTLogger(transportFactoryProvider)
3839
private val sessionCoordinator =
3940
SessionCoordinator(firebaseInstallations, backgroundDispatcher, eventGDTLogger)
4041

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright 2023 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.firebase.sessions
18+
19+
/**
20+
* The Firebase Sessions early initialization.
21+
*
22+
* TODO: This should handle generating the Session ID and communicating with subscribers.
23+
*
24+
* @hide
25+
*/
26+
class FirebaseSessionsEarly {}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ import androidx.annotation.Keep
1818
import com.google.android.datatransport.TransportFactory
1919
import com.google.firebase.FirebaseApp
2020
import com.google.firebase.annotations.concurrent.Background
21-
import com.google.firebase.components.Component
22-
import com.google.firebase.components.ComponentRegistrar
23-
import com.google.firebase.components.Dependency
21+
import com.google.firebase.components.*
2422
import com.google.firebase.components.Qualified.qualified
2523
import com.google.firebase.components.Qualified.unqualified
2624
import com.google.firebase.installations.FirebaseInstallationsApi
@@ -36,28 +34,40 @@ import kotlinx.coroutines.CoroutineDispatcher
3634
internal class FirebaseSessionsRegistrar : ComponentRegistrar {
3735
override fun getComponents() =
3836
listOf(
37+
Component.builder(firebaseSessionsEarly)
38+
.name(EARLY_LIBRARY_NAME)
39+
.factory { _ ->
40+
FirebaseSessionsEarly()
41+
}
42+
.eagerInDefaultApp()
43+
.build(),
44+
3945
Component.builder(FirebaseSessions::class.java)
4046
.name(LIBRARY_NAME)
47+
.add(Dependency.required(firebaseSessionsEarly))
4148
.add(Dependency.required(firebaseApp))
4249
.add(Dependency.required(firebaseInstallationsApi))
4350
.add(Dependency.required(backgroundDispatcher))
4451
.add(Dependency.requiredProvider(transportFactory))
4552
.factory { container ->
53+
// Make sure FirebaseSessionsEarly has started up
54+
container.get(firebaseSessionsEarly)
4655
FirebaseSessions(
4756
container.get(firebaseApp),
4857
container.get(firebaseInstallationsApi),
4958
container.get(backgroundDispatcher),
50-
container.getProvider(transportFactory).get(),
59+
container.getProvider(transportFactory),
5160
)
5261
}
53-
.eagerInDefaultApp()
5462
.build(),
5563
LibraryVersionComponent.create(LIBRARY_NAME, BuildConfig.VERSION_NAME)
5664
)
5765

5866
companion object {
5967
private const val LIBRARY_NAME = "fire-sessions"
68+
private const val EARLY_LIBRARY_NAME = "fire-sessions-early"
6069

70+
private val firebaseSessionsEarly = unqualified(FirebaseSessionsEarly::class.java)
6171
private val firebaseApp = unqualified(FirebaseApp::class.java)
6272
private val firebaseInstallationsApi = unqualified(FirebaseInstallationsApi::class.java)
6373
private val backgroundDispatcher =

0 commit comments

Comments
 (0)