diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt index c98abffe..b33e585e 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/CrashLoggingDataProvider.kt @@ -17,7 +17,7 @@ interface CrashLoggingDataProvider { /** * Provides [CrashLogging] with the name of this release. */ - val releaseName: String + val releaseName: ReleaseName /** * Provides the [CrashLogging] with information about the user's current locale @@ -80,6 +80,20 @@ interface CrashLoggingDataProvider { typealias ExtraKnownKey = String +sealed class ReleaseName { + /** + * Sets release name attached for every event sent to Sentry. It's indented to use in debug. + */ + class SetByApplication(val name: String) : ReleaseName() + + /** + * Delegates setting the release name to the Tracks library. It's indented to use in release + * builds. The crash logging framework will single-handledly set the release name based on the + * build configuration. + */ + object SetByTracksLibrary : ReleaseName() +} + sealed class PerformanceMonitoringConfig { object Disabled : PerformanceMonitoringConfig() diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt index 17ee8781..845ef91d 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/crashlogging/internal/SentryCrashLogging.kt @@ -9,6 +9,7 @@ import com.automattic.android.tracks.crashlogging.JsException import com.automattic.android.tracks.crashlogging.JsExceptionCallback import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig.Disabled import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig.Enabled +import com.automattic.android.tracks.crashlogging.ReleaseName import com.automattic.android.tracks.crashlogging.eventLevel import io.sentry.Breadcrumb import io.sentry.Sentry @@ -44,7 +45,10 @@ internal class SentryCrashLogging constructor( options.apply { dsn = dataProvider.sentryDSN environment = dataProvider.buildType - release = dataProvider.releaseName + release = when (val releaseName = dataProvider.releaseName) { + is ReleaseName.SetByApplication -> releaseName.name + ReleaseName.SetByTracksLibrary -> null + } this.tracesSampleRate = tracesSampleRate this.profilesSampleRate = profilesSampleRate isDebug = dataProvider.enableCrashLoggingLogs diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt index 437ce9d6..fed46500 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/crashlogging/SentryCrashLoggingTest.kt @@ -80,7 +80,7 @@ class SentryCrashLoggingTest { SoftAssertions().apply { assertThat(options.dsn).isEqualTo(dataProvider.sentryDSN) assertThat(options.environment).isEqualTo(dataProvider.buildType) - assertThat(options.release).isEqualTo(dataProvider.releaseName) + assertThat(options.release).isEqualTo((dataProvider.releaseName as ReleaseName.SetByApplication).name) }.assertAll() } } diff --git a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt index be58800b..ae3c2830 100644 --- a/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt +++ b/AutomatticTracks/src/test/java/com/automattic/android/tracks/fakes/FakeDataProvider.kt @@ -6,6 +6,7 @@ import com.automattic.android.tracks.crashlogging.CrashLoggingUser import com.automattic.android.tracks.crashlogging.EventLevel import com.automattic.android.tracks.crashlogging.ExtraKnownKey import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig +import com.automattic.android.tracks.crashlogging.ReleaseName import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import java.util.Locale @@ -13,7 +14,7 @@ import java.util.Locale class FakeDataProvider( override val sentryDSN: String = BuildConfig.SENTRY_TEST_PROJECT_DSN, override val buildType: String = "testBuildType", - override val releaseName: String = "testReleaseName", + override val releaseName: ReleaseName = ReleaseName.SetByApplication("testReleaseName"), override val locale: Locale? = Locale.US, override val enableCrashLoggingLogs: Boolean = true, var crashLoggingEnabled: Boolean = true, diff --git a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt index 512d4ea2..927e297c 100644 --- a/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt +++ b/sampletracksapp/src/main/java/com/example/sampletracksapp/MainActivity.kt @@ -13,6 +13,7 @@ import com.automattic.android.tracks.crashlogging.JsException import com.automattic.android.tracks.crashlogging.JsExceptionCallback import com.automattic.android.tracks.crashlogging.JsExceptionStackTraceElement import com.automattic.android.tracks.crashlogging.PerformanceMonitoringConfig +import com.automattic.android.tracks.crashlogging.ReleaseName import com.automattic.android.tracks.crashlogging.RequestFormatter import com.automattic.android.tracks.crashlogging.performance.PerformanceMonitoringRepositoryProvider import com.automattic.android.tracks.crashlogging.performance.PerformanceTransactionRepository @@ -41,7 +42,7 @@ class MainActivity : AppCompatActivity() { object : CrashLoggingDataProvider { override val sentryDSN = BuildConfig.SENTRY_TEST_PROJECT_DSN override val buildType = BuildConfig.BUILD_TYPE - override val releaseName = "test" + override val releaseName = ReleaseName.SetByApplication("test") override val locale = Locale.US override val enableCrashLoggingLogs = true override val performanceMonitoringConfig = PerformanceMonitoringConfig.Enabled(sampleRate = 1.0, profilesSampleRate = 1.0)