From 1354262d0d90c7fca0d125b8d60c84389c8340ac Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 1 Oct 2026 08:30:19 +0200 Subject: [PATCH] ref(android): Remove Nav3 Breadcrumb TypeCheckHint Commit removes our Nav3 TypeCheckHint for breadcrumbs, which was cargo-culted from Nav2. We don't need it because - unlike Nav2 - developers can scrub Nav3 data before it's recorded. Our public KDocs instruct them to do so for *all* Sentry Nav3 data, not just breadcrumbs. Supporting a mechanism for after-the-fact access to just breadcrumb data (and not other Nav3 data) would be both asymmetrical and superfluous. --- .../compose/navigation3/BackStackObserver.kt | 14 ++------------ .../compose/navigation3/BackStackObserverTest.kt | 5 ----- sentry/api/sentry.api | 1 - sentry/src/main/java/io/sentry/TypeCheckHint.java | 4 ---- 4 files changed, 2 insertions(+), 22 deletions(-) diff --git a/sentry-android-navigation3/src/main/kotlin/io/sentry/compose/navigation3/BackStackObserver.kt b/sentry-android-navigation3/src/main/kotlin/io/sentry/compose/navigation3/BackStackObserver.kt index 6978e0615ac..34a036a41ff 100644 --- a/sentry-android-navigation3/src/main/kotlin/io/sentry/compose/navigation3/BackStackObserver.kt +++ b/sentry-android-navigation3/src/main/kotlin/io/sentry/compose/navigation3/BackStackObserver.kt @@ -12,7 +12,6 @@ import io.sentry.SentryLevel.INFO import io.sentry.SpanStatus import io.sentry.TransactionContext import io.sentry.TransactionOptions -import io.sentry.TypeCheckHint import io.sentry.compose.navigation3.BackStackConverter.RetentionPolicy import io.sentry.compose.navigation3.PreparedChange.BackStackHasNewTop import io.sentry.compose.navigation3.PreparedChange.BackStackHasSameTop @@ -199,11 +198,7 @@ internal class BackStackObserver( } if (options.enableNavigationBreadcrumbs) { - navBreadcrumbs.emit( - fromEntry = previousTop, - toEntry = currentBackStack.topEntryNormalized, - toRawEntry = currentBackStack.topEntry, - ) + navBreadcrumbs.emit(fromEntry = previousTop, toEntry = currentBackStack.topEntryNormalized) } navTransaction.stop(scope) @@ -454,11 +449,7 @@ private class NavScreen { /** A helper class for generating nav breadcrumbs. */ private class NavBreadcrumbs(private val scopes: IScopes) { - fun emit( - fromEntry: NormalizedSentryBackStackEntry?, - toEntry: NormalizedSentryBackStackEntry, - toRawEntry: T, - ) { + fun emit(fromEntry: NormalizedSentryBackStackEntry?, toEntry: NormalizedSentryBackStackEntry) { val breadcrumb = Breadcrumb().apply { type = NAVIGATION_OP @@ -480,7 +471,6 @@ private class NavBreadcrumbs(private val scopes: IScopes) { } val hint = Hint() - hint.set(TypeCheckHint.ANDROID_NAV3_DESTINATION, toRawEntry) scopes.addBreadcrumb(breadcrumb, hint) } } diff --git a/sentry-android-navigation3/src/test/kotlin/io/sentry/compose/navigation3/BackStackObserverTest.kt b/sentry-android-navigation3/src/test/kotlin/io/sentry/compose/navigation3/BackStackObserverTest.kt index 5c8d68d1710..d0fc171b93c 100644 --- a/sentry-android-navigation3/src/test/kotlin/io/sentry/compose/navigation3/BackStackObserverTest.kt +++ b/sentry-android-navigation3/src/test/kotlin/io/sentry/compose/navigation3/BackStackObserverTest.kt @@ -15,7 +15,6 @@ import io.sentry.SentryOptions import io.sentry.SentryTracer import io.sentry.TransactionContext import io.sentry.TransactionOptions -import io.sentry.TypeCheckHint import io.sentry.protocol.App import io.sentry.protocol.TransactionNameSource import org.junit.Test @@ -153,8 +152,6 @@ class BackStackObserverTest { "to_arguments", mapOf("userId" to "123"), ) - assertThat(fixture.breadcrumbHints.last().get(TypeCheckHint.ANDROID_NAV3_DESTINATION)) - .isSameInstanceAs(profile) } @Test @@ -320,8 +317,6 @@ class BackStackObserverTest { assertThat(fixture.breadcrumbs).hasSize(2) assertThat(fixture.breadcrumbs.last().data["from"]).isEqualTo("/ProfileScreen") assertThat(fixture.breadcrumbs.last().data["to"]).isEqualTo("/ProfileScreen") - assertThat(fixture.breadcrumbHints.last().get(TypeCheckHint.ANDROID_NAV3_DESTINATION)) - .isSameInstanceAs(replacementProfile) assertThat(fixture.startedTransactions).hasSize(2) assertThat(fixture.startedTransactions.last().name).isEqualTo("/ProfileScreen") assertThat(fixture.startedTransactions.first().isFinished).isTrue() diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index d557f04ad45..01b068ee689 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -4824,7 +4824,6 @@ public final class io/sentry/TypeCheckHint { public static final field ANDROID_FRAGMENT Ljava/lang/String; public static final field ANDROID_INTENT Ljava/lang/String; public static final field ANDROID_MOTION_EVENT Ljava/lang/String; - public static final field ANDROID_NAV3_DESTINATION Ljava/lang/String; public static final field ANDROID_NAV_DESTINATION Ljava/lang/String; public static final field ANDROID_NETWORK_CAPABILITIES Ljava/lang/String; public static final field ANDROID_SENSOR_EVENT Ljava/lang/String; diff --git a/sentry/src/main/java/io/sentry/TypeCheckHint.java b/sentry/src/main/java/io/sentry/TypeCheckHint.java index 852f9601928..3260b46f16b 100644 --- a/sentry/src/main/java/io/sentry/TypeCheckHint.java +++ b/sentry/src/main/java/io/sentry/TypeCheckHint.java @@ -51,10 +51,6 @@ public final class TypeCheckHint { /** Used for Navigation breadrcrumbs. */ public static final String ANDROID_NAV_DESTINATION = "android:navigationDestination"; - /** Used for Navigation 3 breadcrumbs. */ - @ApiStatus.Experimental @ApiStatus.Internal - public static final String ANDROID_NAV3_DESTINATION = "android:nav3Destination"; - /** Used for Network breadrcrumbs. */ public static final String ANDROID_NETWORK_CAPABILITIES = "android:networkCapabilities";