Improve FeatureFlagService API.

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

View File

@@ -90,7 +90,6 @@ class DeveloperSettingsPresenter(
LaunchedEffect(Unit) {
featureFlagService.getAvailableFeatures()
.filter { it.isInLabs.not() && it.isFinished.not() }
.run {
// Never display room directory search in release builds for Play Store
if (buildMeta.flavorDescription == "GooglePlay" && buildMeta.buildType == BuildType.RELEASE) {

View File

@@ -43,8 +43,7 @@ class LabsPresenter(
override fun present(): LabsState {
val coroutineScope = rememberCoroutineScope()
val features = remember {
val entries = featureFlagService.getAvailableFeatures()
.filter { it.isInLabs && !it.isFinished }
val entries = featureFlagService.getAvailableFeatures(isInLabs = true)
.map { it.key to it }
mutableStateMapOf(*entries.toTypedArray())
}

View File

@@ -112,7 +112,7 @@ class PreferencesRootPresenter(
.launchIn(this)
}
val showLabsItem = remember { featureFlagService.getAvailableFeatures().any { it.isInLabs && !it.isFinished } }
val showLabsItem = remember { featureFlagService.getAvailableFeatures(isInLabs = true).isNotEmpty() }
val directLogoutState = directLogoutPresenter.present()

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
}
}