diff --git a/app-k9mail/src/debug/kotlin/app/k9mail/dev/DebugConfig.kt b/app-k9mail/src/debug/kotlin/app/k9mail/dev/DebugConfig.kt index bf1554a4468..1b110fcc241 100644 --- a/app-k9mail/src/debug/kotlin/app/k9mail/dev/DebugConfig.kt +++ b/app-k9mail/src/debug/kotlin/app/k9mail/dev/DebugConfig.kt @@ -3,6 +3,7 @@ package app.k9mail.dev import app.k9mail.autodiscovery.api.AutoDiscovery import app.k9mail.autodiscovery.demo.DemoAutoDiscovery import com.fsck.k9.backend.BackendFactory +import net.thunderbird.core.featureflag.DefaultFeatureFlagOverrides import net.thunderbird.core.featureflag.FeatureFlagOverrides import org.koin.core.module.Module import org.koin.core.qualifier.named @@ -15,5 +16,5 @@ fun Module.developmentModuleAdditions() { single>(named("extraAutoDiscoveries")) { listOf(DemoAutoDiscovery()) } - single { FeatureFlagOverrides() } + single { DefaultFeatureFlagOverrides() } } diff --git a/app-k9mail/src/release/kotlin/app/k9mail/dev/ReleaseConfig.kt b/app-k9mail/src/release/kotlin/app/k9mail/dev/ReleaseConfig.kt index 51481df9bd4..3b558251a3c 100644 --- a/app-k9mail/src/release/kotlin/app/k9mail/dev/ReleaseConfig.kt +++ b/app-k9mail/src/release/kotlin/app/k9mail/dev/ReleaseConfig.kt @@ -14,5 +14,5 @@ fun Module.developmentModuleAdditions() { single>(named("extraAutoDiscoveries")) { emptyList() } - single { NoOpFeatureFlagOverrides } + single { NoOpFeatureFlagOverrides() } } diff --git a/app-thunderbird/src/beta/kotlin/net/thunderbird/android/dev/BetaConfig.kt b/app-thunderbird/src/beta/kotlin/net/thunderbird/android/dev/BetaConfig.kt index 2df3a5d5b13..f94819de776 100644 --- a/app-thunderbird/src/beta/kotlin/net/thunderbird/android/dev/BetaConfig.kt +++ b/app-thunderbird/src/beta/kotlin/net/thunderbird/android/dev/BetaConfig.kt @@ -2,6 +2,8 @@ package net.thunderbird.android.dev import app.k9mail.autodiscovery.api.AutoDiscovery import com.fsck.k9.backend.BackendFactory +import net.thunderbird.core.featureflag.FeatureFlagOverrides +import net.thunderbird.core.featureflag.NoOpFeatureFlagOverrides import org.koin.core.module.Module import org.koin.core.qualifier.named @@ -12,4 +14,6 @@ fun Module.developmentModuleAdditions() { single>(named("extraAutoDiscoveries")) { emptyList() } + + single { NoOpFeatureFlagOverrides() } } diff --git a/app-thunderbird/src/daily/kotlin/net/thunderbird/android/dev/DailyConfig.kt b/app-thunderbird/src/daily/kotlin/net/thunderbird/android/dev/DailyConfig.kt index 0195dc74ee2..5975ed5ebfd 100644 --- a/app-thunderbird/src/daily/kotlin/net/thunderbird/android/dev/DailyConfig.kt +++ b/app-thunderbird/src/daily/kotlin/net/thunderbird/android/dev/DailyConfig.kt @@ -3,6 +3,7 @@ package net.thunderbird.android.dev import app.k9mail.autodiscovery.api.AutoDiscovery import app.k9mail.autodiscovery.demo.DemoAutoDiscovery import com.fsck.k9.backend.BackendFactory +import net.thunderbird.core.featureflag.DefaultFeatureFlagOverrides import net.thunderbird.core.featureflag.FeatureFlagOverrides import org.koin.core.module.Module import org.koin.core.qualifier.named @@ -15,5 +16,5 @@ fun Module.developmentModuleAdditions() { single>(named("extraAutoDiscoveries")) { listOf(DemoAutoDiscovery()) } - single { FeatureFlagOverrides() } + single { DefaultFeatureFlagOverrides() } } diff --git a/app-thunderbird/src/debug/kotlin/net/thunderbird/android/dev/DebugConfig.kt b/app-thunderbird/src/debug/kotlin/net/thunderbird/android/dev/DebugConfig.kt index 0195dc74ee2..5975ed5ebfd 100644 --- a/app-thunderbird/src/debug/kotlin/net/thunderbird/android/dev/DebugConfig.kt +++ b/app-thunderbird/src/debug/kotlin/net/thunderbird/android/dev/DebugConfig.kt @@ -3,6 +3,7 @@ package net.thunderbird.android.dev import app.k9mail.autodiscovery.api.AutoDiscovery import app.k9mail.autodiscovery.demo.DemoAutoDiscovery import com.fsck.k9.backend.BackendFactory +import net.thunderbird.core.featureflag.DefaultFeatureFlagOverrides import net.thunderbird.core.featureflag.FeatureFlagOverrides import org.koin.core.module.Module import org.koin.core.qualifier.named @@ -15,5 +16,5 @@ fun Module.developmentModuleAdditions() { single>(named("extraAutoDiscoveries")) { listOf(DemoAutoDiscovery()) } - single { FeatureFlagOverrides() } + single { DefaultFeatureFlagOverrides() } } diff --git a/app-thunderbird/src/release/kotlin/net/thunderbird/android/dev/ReleaseConfig.kt b/app-thunderbird/src/release/kotlin/net/thunderbird/android/dev/ReleaseConfig.kt index 10a84b7cdea..bb8f60d279b 100644 --- a/app-thunderbird/src/release/kotlin/net/thunderbird/android/dev/ReleaseConfig.kt +++ b/app-thunderbird/src/release/kotlin/net/thunderbird/android/dev/ReleaseConfig.kt @@ -14,5 +14,5 @@ fun Module.developmentModuleAdditions() { single>(named("extraAutoDiscoveries")) { emptyList() } - single { NoOpFeatureFlagOverrides } + single { NoOpFeatureFlagOverrides() } } diff --git a/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/DefaultFeatureFlagOverrides.kt b/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/DefaultFeatureFlagOverrides.kt new file mode 100644 index 00000000000..6277b0dc020 --- /dev/null +++ b/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/DefaultFeatureFlagOverrides.kt @@ -0,0 +1,28 @@ +package net.thunderbird.core.featureflag + +import kotlin.collections.plus +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update + +class DefaultFeatureFlagOverrides( + initialOverrides: Map = emptyMap(), +) : FeatureFlagOverrides { + private val _overrides = MutableStateFlow(initialOverrides) + override val overrides: StateFlow> = _overrides.asStateFlow() + + override fun get(key: FeatureFlagKey): Boolean? = overrides.value[key] + + override fun set(key: FeatureFlagKey, value: Boolean) { + _overrides.update { it + (key to value) } + } + + override fun clear(key: FeatureFlagKey) { + _overrides.update { it - key } + } + + override fun clearAll() { + _overrides.update { emptyMap() } + } +} diff --git a/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/FeatureFlagOverrides.kt b/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/FeatureFlagOverrides.kt index 549bfa804a6..03c27db64be 100644 --- a/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/FeatureFlagOverrides.kt +++ b/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/FeatureFlagOverrides.kt @@ -1,9 +1,6 @@ package net.thunderbird.core.featureflag -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update /** * Defines a contract for managing local overrides of feature flags. @@ -64,37 +61,3 @@ interface FeatureFlagOverrides { */ fun clearAll() } - -fun FeatureFlagOverrides( - initialOverrides: Map = emptyMap(), -): FeatureFlagOverrides = object : FeatureFlagOverrides { - private val _overrides = MutableStateFlow(initialOverrides) - override val overrides: StateFlow> = _overrides.asStateFlow() - - override fun get(key: FeatureFlagKey): Boolean? = overrides.value[key] - - override fun set(key: FeatureFlagKey, value: Boolean) { - _overrides.update { it + (key to value) } - } - - override fun clear(key: FeatureFlagKey) { - _overrides.update { it - key } - } - - override fun clearAll() { - _overrides.update { emptyMap() } - } -} - -object NoOpFeatureFlagOverrides : FeatureFlagOverrides { - override val overrides: StateFlow> = - MutableStateFlow(emptyMap()).asStateFlow() - - override fun get(key: FeatureFlagKey): Boolean? = false - - override fun set(key: FeatureFlagKey, value: Boolean) = Unit - - override fun clear(key: FeatureFlagKey) = Unit - - override fun clearAll() = Unit -} diff --git a/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/NoOpFeatureFlagOverrides.kt b/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/NoOpFeatureFlagOverrides.kt new file mode 100644 index 00000000000..fee6a67847b --- /dev/null +++ b/core/featureflag/src/commonMain/kotlin/net/thunderbird/core/featureflag/NoOpFeatureFlagOverrides.kt @@ -0,0 +1,18 @@ +package net.thunderbird.core.featureflag + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +class NoOpFeatureFlagOverrides : FeatureFlagOverrides { + override val overrides: StateFlow> = + MutableStateFlow(emptyMap()).asStateFlow() + + override fun get(key: FeatureFlagKey): Boolean? = false + + override fun set(key: FeatureFlagKey, value: Boolean) = Unit + + override fun clear(key: FeatureFlagKey) = Unit + + override fun clearAll() = Unit +}