Improve FeatureFlagService API.

This commit is contained in:
Benoit Marty 2025-10-17 10:59:17 +02:00 committed by Benoit Marty
parent d2dfad7726
commit de2a4bc8c6
6 changed files with 21 additions and 9 deletions

View file

@ -35,7 +35,12 @@ interface FeatureFlagService {
suspend fun setFeatureEnabled(feature: Feature, enabled: Boolean): Boolean
/**
* @return the list of available (not finished) features that can be toggled.
* @return the list of available features that can be toggled.
* @param includeFinishFeatures whether to include finished features, default is false
* @param isInLabs whether the user is in labs (to include lab features), default is false
*/
fun getAvailableFeatures(): List<Feature>
fun getAvailableFeatures(
includeFinishFeatures: Boolean = false,
isInLabs: Boolean = false,
): List<Feature>
}

View file

@ -40,7 +40,13 @@ class DefaultFeatureFlagService(
?: false
}
override fun getAvailableFeatures(): List<Feature> {
return FeatureFlags.entries.filter { !it.isFinished }
override fun getAvailableFeatures(
includeFinishFeatures: Boolean,
isInLabs: Boolean,
): List<Feature> {
return FeatureFlags.entries.filter { flag ->
(includeFinishFeatures || !flag.isFinished) &&
flag.isInLabs == isInLabs
}
}
}

View file

@ -33,7 +33,10 @@ class FakeFeatureFlagService(
return enabledFeatures.getOrPut(feature.key) { MutableStateFlow(feature.defaultValue(buildMeta)) }
}
override fun getAvailableFeatures(): List<Feature> {
override fun getAvailableFeatures(
includeFinishFeatures: Boolean,
isInLabs: Boolean,
): List<Feature> {
return providedAvailableFeatures
}
}