Improve FeatureFlagService API.
This commit is contained in:
parent
6854f014b0
commit
b7ac322d18
6 changed files with 21 additions and 9 deletions
|
|
@ -90,7 +90,6 @@ class DeveloperSettingsPresenter(
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
featureFlagService.getAvailableFeatures()
|
featureFlagService.getAvailableFeatures()
|
||||||
.filter { it.isInLabs.not() && it.isFinished.not() }
|
|
||||||
.run {
|
.run {
|
||||||
// Never display room directory search in release builds for Play Store
|
// Never display room directory search in release builds for Play Store
|
||||||
if (buildMeta.flavorDescription == "GooglePlay" && buildMeta.buildType == BuildType.RELEASE) {
|
if (buildMeta.flavorDescription == "GooglePlay" && buildMeta.buildType == BuildType.RELEASE) {
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,7 @@ class LabsPresenter(
|
||||||
override fun present(): LabsState {
|
override fun present(): LabsState {
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
val features = remember {
|
val features = remember {
|
||||||
val entries = featureFlagService.getAvailableFeatures()
|
val entries = featureFlagService.getAvailableFeatures(isInLabs = true)
|
||||||
.filter { it.isInLabs && !it.isFinished }
|
|
||||||
.map { it.key to it }
|
.map { it.key to it }
|
||||||
mutableStateMapOf(*entries.toTypedArray())
|
mutableStateMapOf(*entries.toTypedArray())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ class PreferencesRootPresenter(
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
val showLabsItem = remember { featureFlagService.getAvailableFeatures().any { it.isInLabs && !it.isFinished } }
|
val showLabsItem = remember { featureFlagService.getAvailableFeatures(isInLabs = true).isNotEmpty() }
|
||||||
|
|
||||||
val directLogoutState = directLogoutPresenter.present()
|
val directLogoutState = directLogoutPresenter.present()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,12 @@ interface FeatureFlagService {
|
||||||
suspend fun setFeatureEnabled(feature: Feature, enabled: Boolean): Boolean
|
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>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,13 @@ class DefaultFeatureFlagService(
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAvailableFeatures(): List<Feature> {
|
override fun getAvailableFeatures(
|
||||||
return FeatureFlags.entries.filter { !it.isFinished }
|
includeFinishFeatures: Boolean,
|
||||||
|
isInLabs: Boolean,
|
||||||
|
): List<Feature> {
|
||||||
|
return FeatureFlags.entries.filter { flag ->
|
||||||
|
(includeFinishFeatures || !flag.isFinished) &&
|
||||||
|
flag.isInLabs == isInLabs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,10 @@ class FakeFeatureFlagService(
|
||||||
return enabledFeatures.getOrPut(feature.key) { MutableStateFlow(feature.defaultValue(buildMeta)) }
|
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
|
return providedAvailableFeatures
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue