Skip to content

Commit 1bc6dc4

Browse files
abdulraqeeb33AR Abdul Azeez
andauthored
feat: SDK-4210: Standardize BACKGROUND_THREADING feature flag key naming (#2598)
Co-authored-by: AR Abdul Azeez <abdul@onesignal.com>
1 parent c779475 commit 1bc6dc4

File tree

9 files changed

+50
-17
lines changed

9 files changed

+50
-17
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/features/FeatureFlag.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,23 @@ internal enum class FeatureActivationMode {
2020
*/
2121
internal enum class FeatureFlag(
2222
val key: String,
23-
val activationMode: FeatureActivationMode,
23+
val activationMode: FeatureActivationMode
2424
) {
2525
// Threading mode is selected once per app startup to avoid mixed-mode behavior mid-session.
26-
BACKGROUND_THREADING("BACKGROUND_THREADING", FeatureActivationMode.APP_STARTUP),
26+
//
27+
// Naming convention:
28+
// SDK_<MMmmpp>_<FEATURE_DESCRIPTION>
29+
//
30+
// Example:
31+
// SDK_050800_BACKGROUND_THREADING
32+
//
33+
SDK_050800_BACKGROUND_THREADING(
34+
"SDK_050800_BACKGROUND_THREADING",
35+
FeatureActivationMode.APP_STARTUP
36+
),
37+
;
38+
39+
fun isEnabledIn(enabledKeys: Set<String>): Boolean {
40+
return enabledKeys.contains(key)
41+
}
2742
}

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/features/FeatureManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ internal class FeatureManager(
7575
val nextStates = featureStates.toMutableMap()
7676

7777
for (feature in FeatureFlag.entries) {
78-
val desiredState = enabledFeatureKeys.contains(feature.key)
78+
val desiredState = feature.isEnabledIn(enabledFeatureKeys)
7979
when (feature.activationMode) {
8080
FeatureActivationMode.IMMEDIATE -> {
8181
nextStates[feature] = desiredState
@@ -108,7 +108,7 @@ internal class FeatureManager(
108108
enabled: Boolean,
109109
) {
110110
when (feature) {
111-
FeatureFlag.BACKGROUND_THREADING ->
111+
FeatureFlag.SDK_050800_BACKGROUND_THREADING ->
112112
ThreadingMode.updateUseBackgroundThreading(
113113
enabled = enabled,
114114
source = "FeatureManager:${feature.activationMode}"

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/StartupService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ internal class StartupService(
1919
val useBackgroundThreading =
2020
try {
2121
val featureManager = services.getService<IFeatureManager>()
22-
featureManager.isEnabled(FeatureFlag.BACKGROUND_THREADING)
22+
featureManager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING)
2323
} catch (t: Throwable) {
2424
Logging.warn("OneSignal: Failed to resolve BACKGROUND_THREADING in StartupService. Falling back to legacy thread.", t)
2525
false

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/debug/internal/crash/OneSignalCrashUploaderWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ internal class OneSignalCrashUploaderWrapper(
5050
@Suppress("TooGenericExceptionCaught")
5151
override fun start() {
5252
if (!OtelSdkSupport.isSupported) return
53-
if (featureManager.isEnabled(FeatureFlag.BACKGROUND_THREADING)) {
53+
if (featureManager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING)) {
5454
OneSignalDispatchers.launchOnIO {
5555
try {
5656
uploader.start()

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ internal class OneSignalImp(
180180
}
181181

182182
return try {
183-
featureManager.isEnabled(FeatureFlag.BACKGROUND_THREADING)
183+
featureManager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING)
184184
} catch (t: Throwable) {
185185
Logging.warn("OneSignal: Failed to resolve BACKGROUND_THREADING feature, defaulting to legacy mode.", t)
186186
false
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.onesignal.core.internal.features
2+
3+
import io.kotest.core.spec.style.FunSpec
4+
import io.kotest.matchers.shouldBe
5+
6+
class FeatureFlagTests : FunSpec({
7+
test("feature flags use SDK_050800 style key naming") {
8+
val keyPattern = Regex("^SDK_[0-9]{6}_[A-Z0-9_]+$")
9+
10+
FeatureFlag.entries.forEach { feature ->
11+
keyPattern.matches(feature.key) shouldBe true
12+
}
13+
}
14+
15+
test("BACKGROUND_THREADING uses the expected canonical key") {
16+
FeatureFlag.SDK_050800_BACKGROUND_THREADING.key shouldBe "SDK_050800_BACKGROUND_THREADING"
17+
}
18+
})

OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/features/FeatureManagerTests.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class FeatureManagerTests : FunSpec({
1919
test("initial state should enable BACKGROUND_THREADING when feature is present") {
2020
// Given
2121
val initialModel = mockk<ConfigModel>()
22-
every { initialModel.features } returns listOf(FeatureFlag.BACKGROUND_THREADING.key)
22+
every { initialModel.features } returns listOf(FeatureFlag.SDK_050800_BACKGROUND_THREADING.key)
2323
val configModelStore = mockk<ConfigModelStore>()
2424
every { configModelStore.model } returns initialModel
2525
every { configModelStore.subscribe(any()) } just runs
@@ -28,7 +28,7 @@ class FeatureManagerTests : FunSpec({
2828
val manager = FeatureManager(configModelStore)
2929

3030
// Then
31-
manager.isEnabled(FeatureFlag.BACKGROUND_THREADING) shouldBe true
31+
manager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING) shouldBe true
3232
ThreadingMode.useBackgroundThreading shouldBe true
3333
}
3434

@@ -42,13 +42,13 @@ class FeatureManagerTests : FunSpec({
4242
val manager = FeatureManager(configModelStore)
4343

4444
val updatedModel = mockk<ConfigModel>()
45-
every { updatedModel.features } returns listOf(FeatureFlag.BACKGROUND_THREADING.key)
45+
every { updatedModel.features } returns listOf(FeatureFlag.SDK_050800_BACKGROUND_THREADING.key)
4646

4747
// When
4848
manager.onModelReplaced(updatedModel, ModelChangeTags.HYDRATE)
4949

5050
// Then
51-
manager.isEnabled(FeatureFlag.BACKGROUND_THREADING) shouldBe false
51+
manager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING) shouldBe false
5252
ThreadingMode.useBackgroundThreading shouldBe false
5353
}
5454

@@ -61,7 +61,7 @@ class FeatureManagerTests : FunSpec({
6161
every { configModelStore.subscribe(any()) } just runs
6262
val manager = FeatureManager(configModelStore)
6363

64-
every { model.features } returns listOf(FeatureFlag.BACKGROUND_THREADING.key)
64+
every { model.features } returns listOf(FeatureFlag.SDK_050800_BACKGROUND_THREADING.key)
6565

6666
// When
6767
manager.onModelUpdated(
@@ -72,14 +72,14 @@ class FeatureManagerTests : FunSpec({
7272
)
7373

7474
// Then
75-
manager.isEnabled(FeatureFlag.BACKGROUND_THREADING) shouldBe false
75+
manager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING) shouldBe false
7676
ThreadingMode.useBackgroundThreading shouldBe false
7777
}
7878

7979
test("onModelUpdated should keep startup mode when initial mode is enabled") {
8080
// Given
8181
val model = mockk<ConfigModel>()
82-
every { model.features } returns listOf(FeatureFlag.BACKGROUND_THREADING.key)
82+
every { model.features } returns listOf(FeatureFlag.SDK_050800_BACKGROUND_THREADING.key)
8383
val configModelStore = mockk<ConfigModelStore>()
8484
every { configModelStore.model } returns model
8585
every { configModelStore.subscribe(any()) } just runs
@@ -96,7 +96,7 @@ class FeatureManagerTests : FunSpec({
9696
)
9797

9898
// Then
99-
manager.isEnabled(FeatureFlag.BACKGROUND_THREADING) shouldBe true
99+
manager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING) shouldBe true
100100
ThreadingMode.useBackgroundThreading shouldBe true
101101
}
102102
})

OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/startup/StartupServiceTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class StartupServiceTests : FunSpec({
2626
backgroundThreadingEnabled: Boolean = true,
2727
): ServiceProvider {
2828
val featureManager = mockk<IFeatureManager>()
29-
every { featureManager.isEnabled(FeatureFlag.BACKGROUND_THREADING) } returns backgroundThreadingEnabled
29+
every { featureManager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING) } returns backgroundThreadingEnabled
3030

3131
val serviceBuilder = ServiceBuilder()
3232
serviceBuilder.register(featureManager).provides<IFeatureManager>()

OneSignalSDK/onesignal/core/src/test/java/com/onesignal/debug/internal/crash/OneSignalCrashUploaderWrapperTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class OneSignalCrashUploaderWrapperTest : FunSpec({
4141

4242
fun mockFeatureManager(backgroundThreadingEnabled: Boolean = true): IFeatureManager {
4343
val featureManager = mockk<IFeatureManager>()
44-
every { featureManager.isEnabled(FeatureFlag.BACKGROUND_THREADING) } returns backgroundThreadingEnabled
44+
every { featureManager.isEnabled(FeatureFlag.SDK_050800_BACKGROUND_THREADING) } returns backgroundThreadingEnabled
4545
return featureManager
4646
}
4747

0 commit comments

Comments
 (0)