adding debug feature flag for the splash carousel

This commit is contained in:
Adam Brown 2021-12-13 14:21:00 +00:00
parent 2541c3f6a5
commit 773d335add
3 changed files with 23 additions and 13 deletions

View File

@ -16,8 +16,11 @@
package im.vector.app.features.debug.features package im.vector.app.features.debug.features
import androidx.datastore.preferences.core.Preferences
import im.vector.app.features.DefaultVectorFeatures import im.vector.app.features.DefaultVectorFeatures
import im.vector.app.features.VectorFeatures
import javax.inject.Inject import javax.inject.Inject
import kotlin.reflect.KFunction1
class DebugFeaturesStateFactory @Inject constructor( class DebugFeaturesStateFactory @Inject constructor(
private val debugFeatures: DebugVectorFeatures, private val debugFeatures: DebugVectorFeatures,
@ -31,18 +34,23 @@ class DebugFeaturesStateFactory @Inject constructor(
featureOverride = debugFeatures.onboardingVariant(), featureOverride = debugFeatures.onboardingVariant(),
featureDefault = defaultFeatures.onboardingVariant() featureDefault = defaultFeatures.onboardingVariant()
), ),
createBooleanFeature(
Feature.BooleanFeature(
label = "FTUE Splash - I already have an account", label = "FTUE Splash - I already have an account",
featureOverride = debugFeatures.isAlreadyHaveAccountSplashEnabled().takeIf { factory = VectorFeatures::isAlreadyHaveAccountSplashEnabled,
debugFeatures.hasOverride(DebugFeatureKeys.alreadyHaveAnAccount)
},
featureDefault = defaultFeatures.isAlreadyHaveAccountSplashEnabled(),
key = DebugFeatureKeys.alreadyHaveAnAccount key = DebugFeatureKeys.alreadyHaveAnAccount
) )
)) ))
} }
private fun createBooleanFeature(key: Preferences.Key<Boolean>, label: String, factory: KFunction1<VectorFeatures, Boolean>): Feature {
return Feature.BooleanFeature(
label = label,
featureOverride = factory.invoke(debugFeatures).takeIf { debugFeatures.hasOverride(key) },
featureDefault = factory.invoke(defaultFeatures),
key = key
)
}
private inline fun <reified T : Enum<T>> createEnumFeature(label: String, featureOverride: T, featureDefault: T): Feature { private inline fun <reified T : Enum<T>> createEnumFeature(label: String, featureOverride: T, featureDefault: T): Feature {
return Feature.EnumFeature( return Feature.EnumFeature(
label = label, label = label,

View File

@ -43,9 +43,11 @@ class DebugVectorFeatures(
return readPreferences().getEnum<VectorFeatures.OnboardingVariant>() ?: vectorFeatures.onboardingVariant() return readPreferences().getEnum<VectorFeatures.OnboardingVariant>() ?: vectorFeatures.onboardingVariant()
} }
override fun isAlreadyHaveAccountSplashEnabled(): Boolean = readPreferences()[DebugFeatureKeys.alreadyHaveAnAccount] override fun isAlreadyHaveAccountSplashEnabled(): Boolean = read(DebugFeatureKeys.alreadyHaveAnAccount)
?: vectorFeatures.isAlreadyHaveAccountSplashEnabled() ?: vectorFeatures.isAlreadyHaveAccountSplashEnabled()
override fun isSplashCarouselEnabled(): Boolean = read(DebugFeatureKeys.splashCarousel) ?: vectorFeatures.isSplashCarouselEnabled()
fun <T> override(value: T?, key: Preferences.Key<T>) = updatePreferences { fun <T> override(value: T?, key: Preferences.Key<T>) = updatePreferences {
if (value == null) { if (value == null) {
it.remove(key) it.remove(key)
@ -66,6 +68,8 @@ class DebugVectorFeatures(
} }
} }
private fun read(key: Preferences.Key<Boolean>): Boolean? = readPreferences()[key]
private fun readPreferences() = runBlocking { dataStore.data.first() } private fun readPreferences() = runBlocking { dataStore.data.first() }
private fun updatePreferences(block: (MutablePreferences) -> Unit) = runBlocking { private fun updatePreferences(block: (MutablePreferences) -> Unit) = runBlocking {
@ -92,6 +96,6 @@ private inline fun <reified T : Enum<T>> enumPreferencesKey() = enumPreferencesK
private fun <T : Enum<T>> enumPreferencesKey(type: KClass<T>) = stringPreferencesKey("enum-${type.simpleName}") private fun <T : Enum<T>> enumPreferencesKey(type: KClass<T>) = stringPreferencesKey("enum-${type.simpleName}")
object DebugFeatureKeys { object DebugFeatureKeys {
val alreadyHaveAnAccount = booleanPreferencesKey("already-have-an-account") val alreadyHaveAnAccount = booleanPreferencesKey("already-have-an-account")
val splashCarousel = booleanPreferencesKey("splash-carousel")
} }

View File

@ -24,19 +24,17 @@ interface VectorFeatures {
fun isAlreadyHaveAccountSplashEnabled(): Boolean fun isAlreadyHaveAccountSplashEnabled(): Boolean
fun isSplashCarouselEnabled(): Boolean
enum class OnboardingVariant { enum class OnboardingVariant {
LEGACY, LEGACY,
LOGIN_2, LOGIN_2,
FTUE_AUTH FTUE_AUTH
} }
enum class NotificationSettingsVersion {
V1,
V2
}
} }
class DefaultVectorFeatures : VectorFeatures { class DefaultVectorFeatures : VectorFeatures {
override fun onboardingVariant(): VectorFeatures.OnboardingVariant = BuildConfig.ONBOARDING_VARIANT override fun onboardingVariant(): VectorFeatures.OnboardingVariant = BuildConfig.ONBOARDING_VARIANT
override fun isAlreadyHaveAccountSplashEnabled() = true override fun isAlreadyHaveAccountSplashEnabled() = true
override fun isSplashCarouselEnabled() = true
} }