Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app-k9mail/src/debug/kotlin/app/k9mail/dev/DebugConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,5 +16,5 @@ fun Module.developmentModuleAdditions() {
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
listOf(DemoAutoDiscovery())
}
single<FeatureFlagOverrides> { FeatureFlagOverrides() }
single<FeatureFlagOverrides> { DefaultFeatureFlagOverrides() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ fun Module.developmentModuleAdditions() {
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
emptyList()
}
single<FeatureFlagOverrides> { NoOpFeatureFlagOverrides }
single<FeatureFlagOverrides> { NoOpFeatureFlagOverrides() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -12,4 +14,6 @@ fun Module.developmentModuleAdditions() {
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
emptyList()
}

single<FeatureFlagOverrides> { NoOpFeatureFlagOverrides() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,5 +16,5 @@ fun Module.developmentModuleAdditions() {
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
listOf(DemoAutoDiscovery())
}
single<FeatureFlagOverrides> { FeatureFlagOverrides() }
single<FeatureFlagOverrides> { DefaultFeatureFlagOverrides() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,5 +16,5 @@ fun Module.developmentModuleAdditions() {
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
listOf(DemoAutoDiscovery())
}
single<FeatureFlagOverrides> { FeatureFlagOverrides() }
single<FeatureFlagOverrides> { DefaultFeatureFlagOverrides() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ fun Module.developmentModuleAdditions() {
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
emptyList()
}
single<FeatureFlagOverrides> { NoOpFeatureFlagOverrides }
single<FeatureFlagOverrides> { NoOpFeatureFlagOverrides() }
}
Original file line number Diff line number Diff line change
@@ -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<FeatureFlagKey, Boolean> = emptyMap(),
) : FeatureFlagOverrides {
private val _overrides = MutableStateFlow(initialOverrides)
override val overrides: StateFlow<Map<FeatureFlagKey, Boolean>> = _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() }
}
}
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -64,37 +61,3 @@ interface FeatureFlagOverrides {
*/
fun clearAll()
}

fun FeatureFlagOverrides(
initialOverrides: Map<FeatureFlagKey, Boolean> = emptyMap(),
): FeatureFlagOverrides = object : FeatureFlagOverrides {
private val _overrides = MutableStateFlow(initialOverrides)
override val overrides: StateFlow<Map<FeatureFlagKey, Boolean>> = _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<Map<FeatureFlagKey, Boolean>> =
MutableStateFlow(emptyMap<FeatureFlagKey, Boolean>()).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
}
Original file line number Diff line number Diff line change
@@ -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<Map<FeatureFlagKey, Boolean>> =
MutableStateFlow(emptyMap<FeatureFlagKey, Boolean>()).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
}
Loading