From 110994bc115f9dd19eb3cce52e1d8493a7539a2a Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Mon, 24 Oct 2022 07:46:34 +0200 Subject: [PATCH 1/6] Add rememberNavController to provide compose navigation hook --- sentry-compose/api/android/sentry-compose.api | 1 + .../io/sentry/compose/SentryNavigationIntegration.kt | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/sentry-compose/api/android/sentry-compose.api b/sentry-compose/api/android/sentry-compose.api index e30b863f6b..69501b6681 100644 --- a/sentry-compose/api/android/sentry-compose.api +++ b/sentry-compose/api/android/sentry-compose.api @@ -7,6 +7,7 @@ public final class io/sentry/compose/BuildConfig { } public final class io/sentry/compose/SentryNavigationIntegrationKt { + public static final fun rememberNavController ([Landroidx/navigation/Navigator;Landroidx/compose/runtime/Composer;I)Landroidx/navigation/NavHostController; public static final fun withSentryObservableEffect (Landroidx/navigation/NavHostController;ZZLandroidx/compose/runtime/Composer;II)Landroidx/navigation/NavHostController; } diff --git a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt index 2403148f2b..4399ff7c07 100644 --- a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt +++ b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt @@ -10,7 +10,9 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.navigation.NavController +import androidx.navigation.NavDestination import androidx.navigation.NavHostController +import androidx.navigation.Navigator import io.sentry.Breadcrumb import io.sentry.ITransaction import io.sentry.SentryOptions @@ -73,3 +75,9 @@ public fun NavHostController.withSentryObservableEffect( } return this } + +@Composable +public fun rememberNavController(vararg navigators: Navigator): NavHostController { + return androidx.navigation.compose.rememberNavController(navigators = navigators) + .withSentryObservableEffect() +} From f4673e9efe73d8a307e5e189ce5fcebb331bf9ed Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 27 Oct 2022 08:30:20 +0200 Subject: [PATCH 2/6] Remove rememberNavController in favor of withSentryObservableEffect without any args --- sentry-compose/api/android/sentry-compose.api | 2 +- .../compose/SentryNavigationIntegration.kt | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/sentry-compose/api/android/sentry-compose.api b/sentry-compose/api/android/sentry-compose.api index 69501b6681..b4da01daf9 100644 --- a/sentry-compose/api/android/sentry-compose.api +++ b/sentry-compose/api/android/sentry-compose.api @@ -7,7 +7,7 @@ public final class io/sentry/compose/BuildConfig { } public final class io/sentry/compose/SentryNavigationIntegrationKt { - public static final fun rememberNavController ([Landroidx/navigation/Navigator;Landroidx/compose/runtime/Composer;I)Landroidx/navigation/NavHostController; + public static final fun withSentryObservableEffect (Landroidx/navigation/NavHostController;Landroidx/compose/runtime/Composer;I)Landroidx/navigation/NavHostController; public static final fun withSentryObservableEffect (Landroidx/navigation/NavHostController;ZZLandroidx/compose/runtime/Composer;II)Landroidx/navigation/NavHostController; } diff --git a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt index 4399ff7c07..dc6d41d5e6 100644 --- a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt +++ b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt @@ -10,9 +10,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.navigation.NavController -import androidx.navigation.NavDestination import androidx.navigation.NavHostController -import androidx.navigation.Navigator import io.sentry.Breadcrumb import io.sentry.ITransaction import io.sentry.SentryOptions @@ -39,7 +37,7 @@ internal class SentryLifecycleObserver( /** * A [DisposableEffect] that captures a [Breadcrumb] and starts an [ITransaction] and sends - * them to Sentry for when attached to the respective [NavHostController]. + * them to Sentry for every navigation event when being attached to the respective [NavHostController]. * * @param enableNavigationBreadcrumbs Whether the integration should capture breadcrumbs for * navigation events. @@ -76,8 +74,14 @@ public fun NavHostController.withSentryObservableEffect( return this } +/** + * A [DisposableEffect] that captures a [Breadcrumb] and starts an [ITransaction] and sends + * them to Sentry for every navigation event when being attached to the respective [NavHostController]. + */ @Composable -public fun rememberNavController(vararg navigators: Navigator): NavHostController { - return androidx.navigation.compose.rememberNavController(navigators = navigators) - .withSentryObservableEffect() +public fun NavHostController.withSentryObservableEffect(): NavHostController { + return withSentryObservableEffect( + enableNavigationBreadcrumbs = true, + enableNavigationTracing = true + ) } From 48df6933b20e202a4df7f1e55374c055066b152a Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 27 Oct 2022 13:39:46 +0200 Subject: [PATCH 3/6] Mark withSentryObservableEffect as internal --- .../kotlin/io/sentry/compose/SentryNavigationIntegration.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt index dc6d41d5e6..7112e7ff77 100644 --- a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt +++ b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryNavigationIntegration.kt @@ -77,9 +77,12 @@ public fun NavHostController.withSentryObservableEffect( /** * A [DisposableEffect] that captures a [Breadcrumb] and starts an [ITransaction] and sends * them to Sentry for every navigation event when being attached to the respective [NavHostController]. + * + * Used by the sentry android gradle plugin for Jetpack Compose instrumentation. + * */ @Composable -public fun NavHostController.withSentryObservableEffect(): NavHostController { +internal fun NavHostController.withSentryObservableEffect(): NavHostController { return withSentryObservableEffect( enableNavigationBreadcrumbs = true, enableNavigationTracing = true From 3f789a3703368d5c0a08a7194e1dd05ac3ff02df Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 27 Oct 2022 14:39:07 +0200 Subject: [PATCH 4/6] Add Changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a66f85f332..e382d5eaf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +### Features +- Provide hook for Jetpack Compose navigation instrumentation ([#2320](https://github.com/getsentry/sentry-java/pull/2320)) + ## 6.6.0 ### Fixes From c5424a431fcfcbfff96bce468c807744a79b4d08 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 27 Oct 2022 14:43:49 +0200 Subject: [PATCH 5/6] Add missing header for Changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e382d5eaf1..8f9fb0d541 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## Unreleased + ### Features - Provide hook for Jetpack Compose navigation instrumentation ([#2320](https://github.com/getsentry/sentry-java/pull/2320)) From 4441c5f396c9d8147993245fccaa7e32ba8853aa Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Fri, 28 Oct 2022 07:28:35 +0200 Subject: [PATCH 6/6] Update .api file --- sentry-compose/api/android/sentry-compose.api | 1 - 1 file changed, 1 deletion(-) diff --git a/sentry-compose/api/android/sentry-compose.api b/sentry-compose/api/android/sentry-compose.api index b4da01daf9..e30b863f6b 100644 --- a/sentry-compose/api/android/sentry-compose.api +++ b/sentry-compose/api/android/sentry-compose.api @@ -7,7 +7,6 @@ public final class io/sentry/compose/BuildConfig { } public final class io/sentry/compose/SentryNavigationIntegrationKt { - public static final fun withSentryObservableEffect (Landroidx/navigation/NavHostController;Landroidx/compose/runtime/Composer;I)Landroidx/navigation/NavHostController; public static final fun withSentryObservableEffect (Landroidx/navigation/NavHostController;ZZLandroidx/compose/runtime/Composer;II)Landroidx/navigation/NavHostController; }