From 1f2b7206367910b7ba061e89551765a23dee52d9 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Fri, 8 Mar 2024 14:37:31 -0800 Subject: [PATCH] Migrate the analytics module to multiplatform --- core/analytics/build.gradle.kts | 18 ++++---- .../{main => commonMain}/AndroidManifest.xml | 0 .../core/analytics/AnalyticsEvent.kt | 0 .../core/analytics/AnalyticsHelper.kt | 0 .../core/analytics/NoOpAnalyticsHelper.kt | 0 .../core/analytics/StubAnalyticsHelper.kt | 11 ++--- .../nowinandroid/core/analytics/UiHelpers.kt | 0 .../core/analytics/di}/AnalyticsModule.kt | 19 ++++----- .../core/analytics/AnalyticsModule.kt | 42 ------------------- .../core/analytics/FirebaseAnalyticsHelper.kt | 41 ------------------ gradle/libs.versions.toml | 2 +- 11 files changed, 23 insertions(+), 110 deletions(-) rename core/analytics/src/{main => commonMain}/AndroidManifest.xml (100%) rename core/analytics/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt (100%) rename core/analytics/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt (100%) rename core/analytics/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt (100%) rename core/analytics/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt (76%) rename core/analytics/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt (100%) rename core/analytics/src/{demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics => commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/di}/AnalyticsModule.kt (57%) delete mode 100644 core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt delete mode 100644 core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt diff --git a/core/analytics/build.gradle.kts b/core/analytics/build.gradle.kts index 023574e6f..5ae18a2b7 100644 --- a/core/analytics/build.gradle.kts +++ b/core/analytics/build.gradle.kts @@ -14,18 +14,20 @@ * limitations under the License. */ plugins { - alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.kmp.library) + alias(libs.plugins.nowinandroid.kotlin.inject) + alias(libs.plugins.jetbrains.compose) } android { namespace = "com.google.samples.apps.nowinandroid.core.analytics" } -dependencies { - implementation(libs.androidx.compose.runtime) - - prodImplementation(platform(libs.firebase.bom)) - prodImplementation(libs.firebase.analytics) +kotlin { + sourceSets { + commonMain.dependencies { + implementation(libs.logging) + implementation(compose.runtime) + } + } } diff --git a/core/analytics/src/main/AndroidManifest.xml b/core/analytics/src/commonMain/AndroidManifest.xml similarity index 100% rename from core/analytics/src/main/AndroidManifest.xml rename to core/analytics/src/commonMain/AndroidManifest.xml diff --git a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt similarity index 100% rename from core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt rename to core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt diff --git a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt similarity index 100% rename from core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt rename to core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt diff --git a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt similarity index 100% rename from core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt rename to core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt diff --git a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt similarity index 76% rename from core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt rename to core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt index f570be4a9..ec42eaa64 100644 --- a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt +++ b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt @@ -16,19 +16,14 @@ package com.google.samples.apps.nowinandroid.core.analytics -import android.util.Log -import javax.inject.Inject -import javax.inject.Singleton - -private const val TAG = "StubAnalyticsHelper" +import co.touchlab.kermit.Logger /** * An implementation of AnalyticsHelper just writes the events to logcat. Used in builds where no * analytics events should be sent to a backend. */ -@Singleton -internal class StubAnalyticsHelper @Inject constructor() : AnalyticsHelper { +internal class StubAnalyticsHelper : AnalyticsHelper { override fun logEvent(event: AnalyticsEvent) { - Log.d(TAG, "Received analytics event: $event") + Logger.d { "Received analytics event: $event" } } } diff --git a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt similarity index 100% rename from core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt rename to core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt diff --git a/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/di/AnalyticsModule.kt similarity index 57% rename from core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt rename to core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/di/AnalyticsModule.kt index 4ad6b6dc2..e61cb98ec 100644 --- a/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/analytics/di/AnalyticsModule.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,16 +14,15 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.analytics +package com.google.samples.apps.nowinandroid.core.analytics.di -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent +import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper +import com.google.samples.apps.nowinandroid.core.analytics.StubAnalyticsHelper +import me.tatarka.inject.annotations.Component +import me.tatarka.inject.annotations.Provides -@Module -@InstallIn(SingletonComponent::class) +@Component internal abstract class AnalyticsModule { - @Binds - abstract fun bindsAnalyticsHelper(analyticsHelperImpl: StubAnalyticsHelper): AnalyticsHelper + @Provides + fun providesAnalyticsHelper(): AnalyticsHelper = StubAnalyticsHelper() } diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt deleted file mode 100644 index 111130a79..000000000 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * 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 - * - * https://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.samples.apps.nowinandroid.core.analytics - -import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.analytics -import com.google.firebase.ktx.Firebase -import dagger.Binds -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class AnalyticsModule { - @Binds - abstract fun bindsAnalyticsHelper(analyticsHelperImpl: FirebaseAnalyticsHelper): AnalyticsHelper - - companion object { - @Provides - @Singleton - fun provideFirebaseAnalytics(): FirebaseAnalytics { - return Firebase.analytics - } - } -} diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt deleted file mode 100644 index 5a4b7f362..000000000 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * 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 - * - * https://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.samples.apps.nowinandroid.core.analytics - -import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.logEvent -import javax.inject.Inject - -/** - * Implementation of `AnalyticsHelper` which logs events to a Firebase backend. - */ -internal class FirebaseAnalyticsHelper @Inject constructor( - private val firebaseAnalytics: FirebaseAnalytics, -) : AnalyticsHelper { - - override fun logEvent(event: AnalyticsEvent) { - firebaseAnalytics.logEvent(event.type) { - for (extra in event.extras) { - // Truncate parameter keys and values according to firebase maximum length values. - param( - key = extra.key.take(40), - value = extra.value.take(100), - ) - } - } - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3b70ada5e..54d8403c2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -69,7 +69,7 @@ androidx-espresso-core = "3.5.1" androidx-material = "1.11.0" androidx-test-junit = "1.1.5" compose = "1.6.0" -compose-plugin = "1.6.0-alpha01" +compose-plugin = "1.6.0" junit = "4.13.2" sqldelight = "2.0.1" kotlinInject = '0.6.3'