From 4c6d26eedaa4a7540c8cf9ddc5144ce99382dc6e Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 6 Nov 2026 06:08:10 +0100 Subject: [PATCH] fix(sample): Apply Nav3 sample options when a child Activity is restored Only Nav3Activity applied the sample's settings (screen tracking, user-interaction transactions and breadcrumbs) to the SDK options. When Android restored the process straight into Nav3ProductsActivity, Nav3CheckoutActivity, or Nav3FragmentsActivity, the options stayed at the app's init defaults, which have user-interaction tracing on. Each of those Activities now applies the configuration from its intent extras in onCreate. --- .../samples/android/navigation/nav3/Nav3MultiActivity.kt | 7 +++++++ .../samples/android/navigation/nav3/Nav3MultiFragment.kt | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiActivity.kt b/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiActivity.kt index 789bce20015..b15b1811687 100644 --- a/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiActivity.kt +++ b/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiActivity.kt @@ -59,6 +59,7 @@ import io.sentry.compose.navigation3.SentryNavEffect import io.sentry.compose.navigation3.SentryNavOptions import io.sentry.samples.android.navigation.common.NavigationSampleConfig import io.sentry.samples.android.navigation.common.RouteWorkOption +import io.sentry.samples.android.navigation.common.applyToCurrentOptions import io.sentry.samples.android.navigation.common.hasOnlyActivityUiLoadTransactions import io.sentry.samples.android.navigation.common.showRouteWorkDialog import kotlinx.coroutines.delay @@ -88,6 +89,9 @@ class Nav3ProductsActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val configuration = (intent.extras ?: Bundle()).nav3SampleConfiguration() + // Nav3Activity applies these options when the sample launches, but the system can restore + // this Activity in a new process without Nav3Activity, so apply them here as well. + configuration.applyToCurrentOptions() NavigationTransactionHistory.install() applyActivityUiLoadTransactionSetting(this, configuration.enableActivityUiLoadTransaction) setContent { @@ -166,6 +170,9 @@ open class Nav3CheckoutActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val configuration = (intent.extras ?: Bundle()).nav3SampleConfiguration() + // Nav3Activity applies these options when the sample launches, but the system can restore + // this Activity in a new process without Nav3Activity, so apply them here as well. + configuration.applyToCurrentOptions() val productId = intent.getStringExtra(EXTRA_PRODUCT_ID) ?: "42" val returnsResult = intent.getBooleanExtra(EXTRA_RETURN_RESULT, false) // Only crash on the first launch, not when the system restores this Activity. diff --git a/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiFragment.kt b/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiFragment.kt index d95be37b4af..aa99ef7440f 100644 --- a/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiFragment.kt +++ b/sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/navigation/nav3/Nav3MultiFragment.kt @@ -45,6 +45,7 @@ import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import io.sentry.samples.android.R import io.sentry.samples.android.navigation.common.NavigationSampleConfig +import io.sentry.samples.android.navigation.common.applyToCurrentOptions /** * Hosts Fragments that each own a Nav3 root (back stack, `SentryNavEffect`, and `NavDisplay`), to @@ -75,6 +76,9 @@ class Nav3FragmentsActivity : FragmentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // Nav3Activity applies these options when the sample launches, but the system can restore + // this Activity in a new process without Nav3Activity, so apply them here as well. + configuration.applyToCurrentOptions() NavigationTransactionHistory.install() applyActivityUiLoadTransactionSetting(this, configuration.enableActivityUiLoadTransaction)