diff --git a/kmp/src/commonMain/kotlin/com/onesignal/features/FeatureFlag.kt b/kmp/src/commonMain/kotlin/com/onesignal/features/FeatureFlag.kt index 4b36df6..4bd51df 100644 --- a/kmp/src/commonMain/kotlin/com/onesignal/features/FeatureFlag.kt +++ b/kmp/src/commonMain/kotlin/com/onesignal/features/FeatureFlag.kt @@ -59,6 +59,15 @@ enum class FeatureFlag( "sdk_device_gesture_disabled", FeatureActivationMode.IMMEDIATE, ), + + /** + * Builds SDK dispatchers on a bootstrap thread instead of the first caller. + * APP_STARTUP because the pools live for the process. Absent means off. + */ + SDK_DISPATCHER_BOOTSTRAP( + "sdk_dispatcher_bootstrap", + FeatureActivationMode.APP_STARTUP, + ), ; fun isEnabledIn(enabledKeys: Set): Boolean = enabledKeys.contains(key) diff --git a/kmp/src/commonTest/kotlin/com/onesignal/features/FeatureManagerTest.kt b/kmp/src/commonTest/kotlin/com/onesignal/features/FeatureManagerTest.kt index b114788..03d65b9 100644 --- a/kmp/src/commonTest/kotlin/com/onesignal/features/FeatureManagerTest.kt +++ b/kmp/src/commonTest/kotlin/com/onesignal/features/FeatureManagerTest.kt @@ -49,6 +49,18 @@ class FeatureFlagTest { FeatureFlag.SDK_DEVICE_GESTURE_DISABLED.activationMode, ) } + + @Test + fun dispatcherBootstrapIsAppStartupAndOffWhenAbsent() { + assertEquals("sdk_dispatcher_bootstrap", FeatureFlag.SDK_DISPATCHER_BOOTSTRAP.key) + assertEquals( + FeatureActivationMode.APP_STARTUP, + FeatureFlag.SDK_DISPATCHER_BOOTSTRAP.activationMode, + ) + val manager = FeatureManager() + manager.refresh(emptyList(), applyAppStartupFlags = true) + assertFalse(manager.isEnabled(FeatureFlag.SDK_DISPATCHER_BOOTSTRAP)) + } } class FeatureManagerTest {