Skip to content

Commit f79e5c4

Browse files
authored
Use firebase-encoders-processor instead of manually building encoder (#5030)
1 parent b615ecc commit f79e5c4

File tree

5 files changed

+53
-112
lines changed

5 files changed

+53
-112
lines changed

firebase-sessions/firebase-sessions.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
plugins {
1818
id("firebase-library")
1919
id("kotlin-android")
20+
id("kotlin-kapt")
2021
}
2122

2223
firebaseLibrary {
@@ -50,11 +51,12 @@ dependencies {
5051
implementation("com.google.firebase:firebase-encoders:17.0.0")
5152
implementation("com.google.firebase:firebase-installations-interop:17.1.0")
5253
implementation(libs.androidx.annotation)
53-
testImplementation(project(mapOf("path" to ":integ-testing")))
5454

5555
runtimeOnly("com.google.firebase:firebase-installations:17.1.3")
5656
runtimeOnly(project(":firebase-datatransport"))
5757

58+
kapt(project(":encoders:firebase-encoders-processor"))
59+
5860
testImplementation(libs.androidx.test.junit)
5961
testImplementation(libs.androidx.test.runner)
6062
testImplementation(libs.junit)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
package com.google.firebase.sessions
1818

1919
import android.util.Log
20-
import com.google.android.datatransport.*
20+
import com.google.android.datatransport.Encoding
21+
import com.google.android.datatransport.Event
2122
import com.google.android.datatransport.TransportFactory
2223
import com.google.firebase.inject.Provider
2324

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.firebase.sessions
1818

19+
import com.google.firebase.encoders.annotations.Encodable
1920
import com.google.firebase.encoders.json.NumberedEnum
2021

2122
/**
@@ -24,7 +25,7 @@ import com.google.firebase.encoders.json.NumberedEnum
2425
* See go/app-quality-unified-session-definition for more details. Keep in sync with
2526
* https://github.com/firebase/firebase-ios-sdk/blob/master/FirebaseSessions/ProtoSupport/Protos/sessions.proto
2627
*/
27-
// TODO(mrober): Add and populate all fields from sessions.proto
28+
@Encodable
2829
internal data class SessionEvent(
2930
/** The type of event being reported. */
3031
val eventType: EventType,

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

Lines changed: 2 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ package com.google.firebase.sessions
1919
import android.os.Build
2020
import com.google.firebase.FirebaseApp
2121
import com.google.firebase.encoders.DataEncoder
22-
import com.google.firebase.encoders.FieldDescriptor
23-
import com.google.firebase.encoders.ObjectEncoderContext
2422
import com.google.firebase.encoders.json.JsonDataEncoderBuilder
2523
import com.google.firebase.sessions.settings.SessionsSettings
2624

@@ -31,73 +29,10 @@ import com.google.firebase.sessions.settings.SessionsSettings
3129
*/
3230
internal object SessionEvents {
3331
/** JSON [DataEncoder] for [SessionEvent]s. */
34-
// TODO(mrober): Replace with firebase-encoders-processor when it can encode Kotlin data classes.
3532
internal val SESSION_EVENT_ENCODER: DataEncoder =
3633
JsonDataEncoderBuilder()
37-
.configureWith {
38-
it.registerEncoder(SessionEvent::class.java) {
39-
sessionEvent: SessionEvent,
40-
ctx: ObjectEncoderContext ->
41-
run {
42-
ctx.add(FieldDescriptor.of("event_type"), sessionEvent.eventType)
43-
ctx.add(FieldDescriptor.of("session_data"), sessionEvent.sessionData)
44-
ctx.add(FieldDescriptor.of("application_info"), sessionEvent.applicationInfo)
45-
}
46-
}
47-
48-
it.registerEncoder(SessionInfo::class.java) {
49-
sessionInfo: SessionInfo,
50-
ctx: ObjectEncoderContext ->
51-
run {
52-
ctx.add(FieldDescriptor.of("session_id"), sessionInfo.sessionId)
53-
ctx.add(FieldDescriptor.of("first_session_id"), sessionInfo.firstSessionId)
54-
ctx.add(FieldDescriptor.of("session_index"), sessionInfo.sessionIndex)
55-
ctx.add(
56-
FieldDescriptor.of("firebase_installation_id"),
57-
sessionInfo.firebaseInstallationId
58-
)
59-
ctx.add(FieldDescriptor.of("event_timestamp_us"), sessionInfo.eventTimestampUs)
60-
ctx.add(FieldDescriptor.of("data_collection_status"), sessionInfo.dataCollectionStatus)
61-
}
62-
}
63-
64-
it.registerEncoder(DataCollectionStatus::class.java) {
65-
dataCollectionStatus: DataCollectionStatus,
66-
ctx: ObjectEncoderContext ->
67-
run {
68-
ctx.add(FieldDescriptor.of("performance"), dataCollectionStatus.performance)
69-
ctx.add(FieldDescriptor.of("crashlytics"), dataCollectionStatus.crashlytics)
70-
ctx.add(
71-
FieldDescriptor.of("session_sampling_rate"),
72-
dataCollectionStatus.sessionSamplingRate
73-
)
74-
}
75-
}
76-
77-
it.registerEncoder(ApplicationInfo::class.java) {
78-
applicationInfo: ApplicationInfo,
79-
ctx: ObjectEncoderContext ->
80-
run {
81-
ctx.add(FieldDescriptor.of("app_id"), applicationInfo.appId)
82-
ctx.add(FieldDescriptor.of("device_model"), applicationInfo.deviceModel)
83-
ctx.add(FieldDescriptor.of("session_sdk_version"), applicationInfo.sessionSdkVersion)
84-
ctx.add(FieldDescriptor.of("os_version"), applicationInfo.osVersion)
85-
ctx.add(FieldDescriptor.of("log_environment"), applicationInfo.logEnvironment)
86-
ctx.add(FieldDescriptor.of("android_app_info"), applicationInfo.androidAppInfo)
87-
}
88-
}
89-
90-
it.registerEncoder(AndroidApplicationInfo::class.java) {
91-
androidAppInfo: AndroidApplicationInfo,
92-
ctx: ObjectEncoderContext ->
93-
run {
94-
ctx.add(FieldDescriptor.of("package_name"), androidAppInfo.packageName)
95-
ctx.add(FieldDescriptor.of("version_name"), androidAppInfo.versionName)
96-
ctx.add(FieldDescriptor.of("app_build_version"), androidAppInfo.appBuildVersion)
97-
ctx.add(FieldDescriptor.of("device_manufacturer"), androidAppInfo.deviceManufacturer)
98-
}
99-
}
100-
}
34+
.configureWith(AutoSessionEventEncoder.CONFIG)
35+
.ignoreNullValues(true)
10136
.build()
10237

10338
/**

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventEncoderTest.kt

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ import com.google.firebase.sessions.testing.FakeFirebaseApp
2727
import com.google.firebase.sessions.testing.FakeFirebaseInstallations
2828
import com.google.firebase.sessions.testing.FakeTimeProvider
2929
import com.google.firebase.sessions.testing.TestSessionEventData
30+
import kotlinx.coroutines.ExperimentalCoroutinesApi
3031
import kotlinx.coroutines.asCoroutineDispatcher
3132
import kotlinx.coroutines.test.runTest
3233
import org.junit.After
3334
import org.junit.Test
3435
import org.junit.runner.RunWith
3536

37+
@OptIn(ExperimentalCoroutinesApi::class)
3638
@RunWith(AndroidJUnit4::class)
3739
class SessionEventEncoderTest {
3840

@@ -65,30 +67,30 @@ class SessionEventEncoderTest {
6567
.isEqualTo(
6668
"""
6769
{
68-
"event_type":1,
69-
"session_data":{
70-
"session_id":"a1b2c3",
71-
"first_session_id":"a1a1a1",
72-
"session_index":3,
73-
"firebase_installation_id":"",
74-
"event_timestamp_us":12340000,
75-
"data_collection_status":{
70+
"eventType":1,
71+
"sessionData":{
72+
"sessionId":"a1b2c3",
73+
"firstSessionId":"a1a1a1",
74+
"sessionIndex":3,
75+
"eventTimestampUs":12340000,
76+
"dataCollectionStatus":{
7677
"performance":2,
7778
"crashlytics":2,
78-
"session_sampling_rate":1.0
79-
}
79+
"sessionSamplingRate":1.0
80+
},
81+
"firebaseInstallationId":""
8082
},
81-
"application_info":{
82-
"app_id":"1:12345:android:app",
83-
"device_model":"${Build.MODEL}",
84-
"session_sdk_version":"0.1.0",
85-
"os_version":"${Build.VERSION.RELEASE}",
86-
"log_environment":3,
87-
"android_app_info":{
88-
"package_name":"com.google.firebase.sessions.test",
89-
"version_name":"1.0.0",
90-
"app_build_version":"0",
91-
"device_manufacturer":"${Build.MANUFACTURER}"
83+
"applicationInfo":{
84+
"appId":"1:12345:android:app",
85+
"deviceModel":"${Build.MODEL}",
86+
"sessionSdkVersion":"0.1.0",
87+
"osVersion":"${Build.VERSION.RELEASE}",
88+
"logEnvironment":3,
89+
"androidAppInfo":{
90+
"packageName":"com.google.firebase.sessions.test",
91+
"versionName":"1.0.0",
92+
"appBuildVersion":"0",
93+
"deviceManufacturer":"${Build.MANUFACTURER}"
9294
}
9395
}
9496
}
@@ -132,30 +134,30 @@ class SessionEventEncoderTest {
132134
.isEqualTo(
133135
"""
134136
{
135-
"event_type":0,
136-
"session_data":{
137-
"session_id":"",
138-
"first_session_id":"",
139-
"session_index":0,
140-
"firebase_installation_id":"",
141-
"event_timestamp_us":0,
142-
"data_collection_status":{
137+
"eventType":0,
138+
"sessionData":{
139+
"sessionId":"",
140+
"firstSessionId":"",
141+
"sessionIndex":0,
142+
"eventTimestampUs":0,
143+
"dataCollectionStatus":{
143144
"performance":2,
144145
"crashlytics":2,
145-
"session_sampling_rate":1.0
146-
}
146+
"sessionSamplingRate":1.0
147+
},
148+
"firebaseInstallationId":""
147149
},
148-
"application_info":{
149-
"app_id":"",
150-
"device_model":"",
151-
"session_sdk_version":"",
152-
"os_version":"",
153-
"log_environment":3,
154-
"android_app_info":{
155-
"package_name":"",
156-
"version_name":"",
157-
"app_build_version":"",
158-
"device_manufacturer":""
150+
"applicationInfo":{
151+
"appId":"",
152+
"deviceModel":"",
153+
"sessionSdkVersion":"",
154+
"osVersion":"",
155+
"logEnvironment":3,
156+
"androidAppInfo":{
157+
"packageName":"",
158+
"versionName":"",
159+
"appBuildVersion":"",
160+
"deviceManufacturer":""
159161
}
160162
}
161163
}

0 commit comments

Comments
 (0)