From 58ce8e9a15cac725d387753aff2d214044a9b00c Mon Sep 17 00:00:00 2001 From: bidetofevil Date: Mon, 30 Mar 2026 14:40:54 -0700 Subject: [PATCH] Add featutre flag for nav state --- .../behavior/FakeAutoDataCaptureBehavior.kt | 2 ++ .../behavior/AutoDataCaptureBehavior.kt | 5 +++ .../behavior/AutoDataCaptureBehaviorImpl.kt | 3 ++ .../AutoDataCaptureBehaviorImplTest.kt | 32 +++++++++++++++++-- .../internal/config/remote/RemoteConfig.kt | 3 ++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/embrace-android-config-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/behavior/FakeAutoDataCaptureBehavior.kt b/embrace-android-config-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/behavior/FakeAutoDataCaptureBehavior.kt index c3234186e8..9ebaa9d277 100644 --- a/embrace-android-config-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/behavior/FakeAutoDataCaptureBehavior.kt +++ b/embrace-android-config-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/behavior/FakeAutoDataCaptureBehavior.kt @@ -17,6 +17,7 @@ class FakeAutoDataCaptureBehavior( private val endStartupWithAppReady: Boolean = false, private val enableStateCapture: Boolean = false, private val networkCallbackConnectivityServiceEnabled: Boolean = false, + private val navigationStateCaptureEnabled: Boolean = true, ) : AutoDataCaptureBehavior { override fun isThermalStatusCaptureEnabled(): Boolean = thermalStatusCaptureEnabled @@ -33,4 +34,5 @@ class FakeAutoDataCaptureBehavior( override fun isEndStartupWithAppReadyEnabled(): Boolean = endStartupWithAppReady override fun isStateCaptureEnabled(): Boolean = enableStateCapture override fun isNetworkCallbackConnectivityServiceEnabled(): Boolean = networkCallbackConnectivityServiceEnabled + override fun isNavigationStateCaptureEnabled(): Boolean = navigationStateCaptureEnabled } diff --git a/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehavior.kt b/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehavior.kt index 9686c4c5e8..9590693e89 100644 --- a/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehavior.kt +++ b/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehavior.kt @@ -74,4 +74,9 @@ interface AutoDataCaptureBehavior { * Whether the NetworkCallback-based connectivity service implementation is enabled */ fun isNetworkCallbackConnectivityServiceEnabled(): Boolean + + /** + * Whether navigation state capture is enabled + */ + fun isNavigationStateCaptureEnabled(): Boolean } diff --git a/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImpl.kt b/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImpl.kt index 022dc88eed..aa6de14b5d 100644 --- a/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImpl.kt +++ b/embrace-android-config/src/main/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImpl.kt @@ -51,4 +51,7 @@ class AutoDataCaptureBehaviorImpl( override fun isNetworkCallbackConnectivityServiceEnabled(): Boolean = thresholdCheck.isBehaviorEnabled(remote?.pctNetworkCallbackConnectivityServiceEnabled) ?: false + + override fun isNavigationStateCaptureEnabled(): Boolean = + thresholdCheck.isBehaviorEnabled(remote?.pctNavigationStateCaptureEnabled) ?: true } diff --git a/embrace-android-config/src/test/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImplTest.kt b/embrace-android-config/src/test/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImplTest.kt index ce5d425b16..bfbeaee028 100644 --- a/embrace-android-config/src/test/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImplTest.kt +++ b/embrace-android-config/src/test/kotlin/io/embrace/android/embracesdk/internal/config/behavior/AutoDataCaptureBehaviorImplTest.kt @@ -40,6 +40,7 @@ internal class AutoDataCaptureBehaviorImplTest { assertFalse(isEndStartupWithAppReadyEnabled()) assertFalse(isStateCaptureEnabled()) assertFalse(isNetworkCallbackConnectivityServiceEnabled()) + assertTrue(isNavigationStateCaptureEnabled()) } } @@ -187,9 +188,34 @@ internal class AutoDataCaptureBehaviorImplTest { ) } + @Test + fun `navigation state capture enabled by default when remote pct is null`() { + assertTrue( + createBehavior(remote = RemoteConfig()).isNavigationStateCaptureEnabled() + ) + } + + @Test + fun `navigation state capture enabled when pct is 100`() { + assertTrue( + createBehavior( + remote = RemoteConfig(pctNavigationStateCaptureEnabled = 100.0f) + ).isNavigationStateCaptureEnabled() + ) + } + + @Test + fun `navigation state capture disabled when pct is 0`() { + assertFalse( + createBehavior( + remote = RemoteConfig(pctNavigationStateCaptureEnabled = 0.0f) + ).isNavigationStateCaptureEnabled() + ) + } + private fun createBehavior( - localUiLoadTracingEnabled: Boolean, - localUiLoadTracingTraceAllEnabled: Boolean, + localUiLoadTracingEnabled: Boolean = true, + localUiLoadTracingTraceAllEnabled: Boolean = true, stateCaptureEnabled: Boolean = false, remote: RemoteConfig, ) = AutoDataCaptureBehaviorImpl( @@ -198,7 +224,7 @@ internal class AutoDataCaptureBehaviorImplTest { enabledFeatures = FakeEnabledFeatureConfig( uiLoadTracingTraceAll = localUiLoadTracingTraceAllEnabled, uiLoadTracingEnabled = localUiLoadTracingEnabled, - stateCaptureEnabled = stateCaptureEnabled + stateCaptureEnabled = stateCaptureEnabled, ) ), remote = remote diff --git a/embrace-android-payload/src/main/kotlin/io/embrace/android/embracesdk/internal/config/remote/RemoteConfig.kt b/embrace-android-payload/src/main/kotlin/io/embrace/android/embracesdk/internal/config/remote/RemoteConfig.kt index ae3511e88b..e3cedd9c27 100644 --- a/embrace-android-payload/src/main/kotlin/io/embrace/android/embracesdk/internal/config/remote/RemoteConfig.kt +++ b/embrace-android-payload/src/main/kotlin/io/embrace/android/embracesdk/internal/config/remote/RemoteConfig.kt @@ -103,4 +103,7 @@ data class RemoteConfig( */ @Json(name = "pct_network_callback_connectivity_service_enabled") val pctNetworkCallbackConnectivityServiceEnabled: Float? = null, + + @Json(name = "pct_navigation_state_capture_enabled") + val pctNavigationStateCaptureEnabled: Float? = null, )