From e1f88a9232fe579df93399fec1bc7ca1bbf1fa0e Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 20 Sep 2024 18:28:25 +0200 Subject: [PATCH] Pinned messages analytics : introduce LocalAnalyticsService so we can easily inject it in views --- .../io/element/android/x/MainActivity.kt | 2 ++ .../io/element/android/x/di/AppBindings.kt | 3 +++ features/messages/impl/build.gradle.kts | 2 +- .../kotlin/extension/DependencyHandleScope.kt | 1 + services/analytics/compose/build.gradle.kts | 18 ++++++++++++++++++ .../compose/LocalAnalyticsService.kt | 19 +++++++++++++++++++ .../analytics/impl/DefaultAnalyticsService.kt | 2 +- 7 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 services/analytics/compose/build.gradle.kts create mode 100644 services/analytics/compose/src/main/kotlin/io/element/android/services/analytics/compose/LocalAnalyticsService.kt diff --git a/app/src/main/kotlin/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt index da8e063724..69808409cf 100644 --- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt +++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt @@ -34,6 +34,7 @@ import io.element.android.libraries.architecture.bindings import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.designsystem.utils.snackbar.LocalSnackbarDispatcher +import io.element.android.services.analytics.compose.LocalAnalyticsService import io.element.android.x.di.AppBindings import io.element.android.x.intent.SafeUriHandler import kotlinx.coroutines.launch @@ -64,6 +65,7 @@ class MainActivity : NodeActivity() { CompositionLocalProvider( LocalSnackbarDispatcher provides appBindings.snackbarDispatcher(), LocalUriHandler provides SafeUriHandler(this), + LocalAnalyticsService provides appBindings.analyticsService(), ) { Box( modifier = Modifier diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt index 839087f967..9864b5ad69 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt @@ -16,6 +16,7 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatch import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.tracing.TracingService import io.element.android.libraries.preferences.api.store.AppPreferencesStore +import io.element.android.services.analytics.api.AnalyticsService @ContributesTo(AppScope::class) interface AppBindings { @@ -32,4 +33,6 @@ interface AppBindings { fun migrationEntryPoint(): MigrationEntryPoint fun lockScreenEntryPoint(): LockScreenEntryPoint + + fun analyticsService(): AnalyticsService } diff --git a/features/messages/impl/build.gradle.kts b/features/messages/impl/build.gradle.kts index f0c6ba7eec..f2a5e69f63 100644 --- a/features/messages/impl/build.gradle.kts +++ b/features/messages/impl/build.gradle.kts @@ -54,7 +54,7 @@ dependencies { implementation(projects.libraries.uiUtils) implementation(projects.libraries.testtags) implementation(projects.features.networkmonitor.api) - implementation(projects.services.analytics.api) + implementation(projects.services.analytics.compose) implementation(projects.services.toolbox.api) implementation(libs.coil.compose) implementation(libs.datetime) diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt index 6471b332b1..5a8df0694d 100644 --- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt +++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt @@ -114,6 +114,7 @@ fun DependencyHandlerScope.allServicesImpl() { // For analytics configuration, either use noop, or use the impl, with at least one analyticsproviders implementation // implementation(project(":services:analytics:noop")) implementation(project(":services:analytics:impl")) + implementation(project(":services:analytics:compose")) implementation(project(":services:analyticsproviders:posthog")) implementation(project(":services:analyticsproviders:sentry")) diff --git a/services/analytics/compose/build.gradle.kts b/services/analytics/compose/build.gradle.kts new file mode 100644 index 0000000000..ab6c1244f4 --- /dev/null +++ b/services/analytics/compose/build.gradle.kts @@ -0,0 +1,18 @@ +/* + * Copyright 2023, 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ +plugins { + id("io.element.android-compose-library") +} + +android { + namespace = "io.element.android.services.analytics.compose" + +} +dependencies { + api(projects.services.analytics.api) + implementation(projects.services.analytics.noop) +} diff --git a/services/analytics/compose/src/main/kotlin/io/element/android/services/analytics/compose/LocalAnalyticsService.kt b/services/analytics/compose/src/main/kotlin/io/element/android/services/analytics/compose/LocalAnalyticsService.kt new file mode 100644 index 0000000000..d7278ed9c6 --- /dev/null +++ b/services/analytics/compose/src/main/kotlin/io/element/android/services/analytics/compose/LocalAnalyticsService.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.services.analytics.compose + +import androidx.compose.runtime.staticCompositionLocalOf +import io.element.android.services.analytics.api.AnalyticsService +import io.element.android.services.analytics.noop.NoopAnalyticsService + +/** + * Global key to access the [AnalyticsService] in the composition tree. + */ +val LocalAnalyticsService = staticCompositionLocalOf { + NoopAnalyticsService() +} diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt index 26d38b3b44..173b07410b 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject @SingleIn(AppScope::class) -@ContributesBinding(AppScope::class, boundType = AnalyticsService::class) +@ContributesBinding(AppScope::class, boundType = AnalyticsService::class, priority = ContributesBinding.Priority.HIGHEST) class DefaultAnalyticsService @Inject constructor( private val analyticsProviders: Set<@JvmSuppressWildcards AnalyticsProvider>, private val analyticsStore: AnalyticsStore,