adding debug feature flag for the splash carousel
This commit is contained in:
parent
2541c3f6a5
commit
773d335add
|
@ -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,
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue