From 4a40cf2a263ec294fc924765e49e9ee0308437e3 Mon Sep 17 00:00:00 2001 From: Gerson Rocha Date: Thu, 5 Nov 2026 14:56:44 -0300 Subject: [PATCH 1/2] feat(android): Add enableUserInteractionBreadcrumbs option Forward the option to sentry-java so an app can turn off native user interaction breadcrumbs on Android. When the option is false and native user interaction tracing is off (the default), UserInteractionIntegration does not wrap the activity Window.Callback. Closes #6993 --- CHANGELOG.md | 1 + .../java/io/sentry/react/RNSentryStart.java | 4 ++++ .../java/io/sentry/react/RNSentryStartTest.java | 7 +++++++ packages/core/etc/sentry-react-native.api.md | 1 + packages/core/src/js/options.ts | 17 +++++++++++++++++ packages/core/test/wrapper.test.ts | 2 ++ 6 files changed, 32 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26502bf6b5..35bdef0480 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ }, }); ``` +- Add the `enableUserInteractionBreadcrumbs` option to turn off native user interaction breadcrumbs on Android ([#PR](https://github.com/getsentry/sentry-react-native/pull/PR)) ### Fixes diff --git a/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java b/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java index 2025268110..6bae09e290 100644 --- a/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java +++ b/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java @@ -212,6 +212,10 @@ static void getSentryAndroidOptions( options.setEnableAppComponentBreadcrumbs( rnOptions.getBoolean("enableAppComponentBreadcrumbs")); } + if (rnOptions.hasKey("enableUserInteractionBreadcrumbs")) { + options.setEnableUserInteractionBreadcrumbs( + rnOptions.getBoolean("enableUserInteractionBreadcrumbs")); + } if (rnOptions.hasKey("spotlight")) { if (rnOptions.getType("spotlight") == ReadableType.Boolean) { options.setEnableSpotlight(rnOptions.getBoolean("spotlight")); diff --git a/packages/core/android/src/test/java/io/sentry/react/RNSentryStartTest.java b/packages/core/android/src/test/java/io/sentry/react/RNSentryStartTest.java index 9853414399..86ea7e88ec 100644 --- a/packages/core/android/src/test/java/io/sentry/react/RNSentryStartTest.java +++ b/packages/core/android/src/test/java/io/sentry/react/RNSentryStartTest.java @@ -93,4 +93,11 @@ public void enableAppComponentBreadcrumbsForwarded() { assertBreadcrumbOffSwitchForwarded( "enableAppComponentBreadcrumbs", SentryAndroidOptions::isEnableAppComponentBreadcrumbs); } + + @Test + public void enableUserInteractionBreadcrumbsForwarded() { + assertBreadcrumbOffSwitchForwarded( + "enableUserInteractionBreadcrumbs", + SentryAndroidOptions::isEnableUserInteractionBreadcrumbs); + } } diff --git a/packages/core/etc/sentry-react-native.api.md b/packages/core/etc/sentry-react-native.api.md index 94a8b1df87..9e90bdfe9f 100644 --- a/packages/core/etc/sentry-react-native.api.md +++ b/packages/core/etc/sentry-react-native.api.md @@ -192,6 +192,7 @@ export interface BaseReactNativeOptions { enableTombstone?: boolean; // @internal enableTurboModuleTracking?: boolean; + enableUserInteractionBreadcrumbs?: boolean; enableUserInteractionTracing?: boolean; enableWatchdogTerminationTracking?: boolean; // Warning: (ae-forgotten-export) The symbol "SharedExperimentsSubset" needs to be exported by the entry point index.d.ts diff --git a/packages/core/src/js/options.ts b/packages/core/src/js/options.ts index 238336b3b7..a956a3bfd5 100644 --- a/packages/core/src/js/options.ts +++ b/packages/core/src/js/options.ts @@ -350,6 +350,23 @@ export interface BaseReactNativeOptions { */ enableAppComponentBreadcrumbs?: boolean; + /** + * When enabled, the native Android SDK records breadcrumbs for user interactions + * (taps, swipes and scrolls) by wrapping each activity's `Window.Callback`. + * + * When the app uses `Sentry.wrap`, which adds `TouchEventBoundary`, the JS SDK already + * records touch breadcrumbs, so the native breadcrumbs duplicate them. Without + * `Sentry.wrap`, the native breadcrumbs are the only user interaction breadcrumbs. + * + * Disable this to stop the native layer from wrapping the window callback and adding + * user interaction breadcrumbs. If native user interaction tracing is also disabled + * (the default), the native `UserInteractionIntegration` is not installed. + * + * @default true + * @platform android + */ + enableUserInteractionBreadcrumbs?: boolean; + /** * Use this feature to enable the Sentry MetricKit integration. * diff --git a/packages/core/test/wrapper.test.ts b/packages/core/test/wrapper.test.ts index 687c4979a5..24a0b60edf 100644 --- a/packages/core/test/wrapper.test.ts +++ b/packages/core/test/wrapper.test.ts @@ -266,6 +266,7 @@ describe('Tests Native Wrapper', () => { enableAppLifecycleBreadcrumbs: false, enableSystemEventBreadcrumbs: false, enableAppComponentBreadcrumbs: false, + enableUserInteractionBreadcrumbs: false, devServerUrl: undefined, defaultSidecarUrl: undefined, mobileReplayOptions: undefined, @@ -278,6 +279,7 @@ describe('Tests Native Wrapper', () => { expect(initParameter.enableAppLifecycleBreadcrumbs).toBe(false); expect(initParameter.enableSystemEventBreadcrumbs).toBe(false); expect(initParameter.enableAppComponentBreadcrumbs).toBe(false); + expect(initParameter.enableUserInteractionBreadcrumbs).toBe(false); }); test('forwards reportAccessibilityIdentifier to the Native SDK', async () => { From d20c170a1c04ba5424be3e88cffcc71a868b8205 Mon Sep 17 00:00:00 2001 From: Gerson Rocha Date: Tue, 10 Nov 2026 17:40:41 -0300 Subject: [PATCH 2/2] chore: Add the PR number to the changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35bdef0480..ee00c18583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ }, }); ``` -- Add the `enableUserInteractionBreadcrumbs` option to turn off native user interaction breadcrumbs on Android ([#PR](https://github.com/getsentry/sentry-react-native/pull/PR)) +- Add the `enableUserInteractionBreadcrumbs` option to turn off native user interaction breadcrumbs on Android ([#7016](https://github.com/getsentry/sentry-react-native/pull/7016)) ### Fixes