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 d7bfda93a6..6768d0d8db 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 @@ -17,7 +17,7 @@ import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import io.element.android.libraries.di.annotations.SentrySdkDsn +import io.element.android.libraries.di.identifiers.SentrySdkDsn import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.matrix.api.platform.InitPlatformService import io.element.android.libraries.matrix.api.tracing.TracingService diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/identifiers/SentryDsn.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/identifiers/SentryDsn.kt new file mode 100644 index 0000000000..264af2e6e1 --- /dev/null +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/identifiers/SentryDsn.kt @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.di.identifiers + +@JvmInline +value class SentryDsn(val value: String) diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SentrySdkDsn.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/identifiers/SentrySdkDsn.kt similarity index 83% rename from libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SentrySdkDsn.kt rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/identifiers/SentrySdkDsn.kt index 19a0eac017..f1ebe2e5c2 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SentrySdkDsn.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/identifiers/SentrySdkDsn.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.di.annotations +package io.element.android.libraries.di.identifiers @JvmInline value class SentrySdkDsn(val value: String) diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt index 26e4f16b37..3c4b00c7a0 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt @@ -11,7 +11,7 @@ import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import io.element.android.libraries.di.annotations.SentrySdkDsn +import io.element.android.libraries.di.identifiers.SentrySdkDsn @BindingContainer @ContributesTo(AppScope::class) diff --git a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt index 3cea95bcae..df4f3a68a1 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.core.data.ByteUnit import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.di.annotations.ApplicationContext +import io.element.android.libraries.di.identifiers.SentryDsn import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase import io.element.android.services.analyticsproviders.api.AnalyticsProvider import io.element.android.services.analyticsproviders.api.AnalyticsTransaction @@ -40,6 +41,7 @@ import timber.log.Timber @Inject class SentryAnalyticsProvider( @ApplicationContext private val context: Context, + private val sentryDsn: SentryDsn?, private val buildMeta: BuildMeta, private val getDatabaseSizesUseCase: GetDatabaseSizesUseCase, private val appNavigationStateService: AppNavigationStateService, @@ -50,7 +52,7 @@ class SentryAnalyticsProvider( Timber.tag(analyticsTag.value).d("Initializing Sentry") if (Sentry.isEnabled()) return - val dsn = SentryConfig.DSN.ifBlank { + val dsn = sentryDsn?.value ?: run { Timber.w("No Sentry DSN provided, Sentry will not be initialized") return } diff --git a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt index 1887ed829b..74b7d56683 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt @@ -11,12 +11,16 @@ import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import io.element.android.libraries.di.annotations.SentrySdkDsn +import io.element.android.libraries.di.identifiers.SentryDsn +import io.element.android.libraries.di.identifiers.SentrySdkDsn import io.element.android.services.analyticsproviders.sentry.SentryConfig @BindingContainer @ContributesTo(AppScope::class) object SentryModule { @Provides - fun provideSentrySdkDsn(): SentrySdkDsn? = SentrySdkDsn(SentryConfig.SDK_DSN) + fun provideSentryDsn(): SentryDsn? = SentryConfig.DSN.takeIf { it.isNotBlank() }?.let(::SentryDsn) + + @Provides + fun provideSentrySdkDsn(): SentrySdkDsn? = SentryConfig.SDK_DSN.takeIf { it.isNotBlank() }?.let(::SentrySdkDsn) } diff --git a/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt b/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt index da496cb612..057cd972af 100644 --- a/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt +++ b/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt @@ -16,6 +16,7 @@ import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties import io.element.android.libraries.core.data.megaBytes import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.di.identifiers.SentryDsn import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes import io.element.android.libraries.matrix.test.A_SESSION_ID @@ -161,11 +162,13 @@ class SentryAnalyticsProviderTest { } private fun createSentryAnalyticsProvider( + sentryDsn: SentryDsn? = SentryDsn("https://1234@sentry.com/a"), buildMeta: BuildMeta = aBuildMeta(), getDatabaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null)) }, appNavigationStateService: FakeAppNavigationStateService = FakeAppNavigationStateService(), ) = SentryAnalyticsProvider( context = InstrumentationRegistry.getInstrumentation().targetContext, + sentryDsn = sentryDsn, buildMeta = buildMeta, getDatabaseSizesUseCase = getDatabaseSizesUseCase, appNavigationStateService = appNavigationStateService,