diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt index 7ae7a53963..87d7e36ed5 100644 --- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt +++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt @@ -16,8 +16,11 @@ package im.vector.app.features.debug.features +import androidx.datastore.preferences.core.Preferences import im.vector.app.features.DefaultVectorFeatures +import im.vector.app.features.VectorFeatures import javax.inject.Inject +import kotlin.reflect.KFunction1 class DebugFeaturesStateFactory @Inject constructor( private val debugFeatures: DebugVectorFeatures, @@ -31,18 +34,23 @@ class DebugFeaturesStateFactory @Inject constructor( featureOverride = debugFeatures.onboardingVariant(), featureDefault = defaultFeatures.onboardingVariant() ), - - Feature.BooleanFeature( + createBooleanFeature( label = "FTUE Splash - I already have an account", - featureOverride = debugFeatures.isAlreadyHaveAccountSplashEnabled().takeIf { - debugFeatures.hasOverride(DebugFeatureKeys.alreadyHaveAnAccount) - }, - featureDefault = defaultFeatures.isAlreadyHaveAccountSplashEnabled(), + factory = VectorFeatures::isAlreadyHaveAccountSplashEnabled, key = DebugFeatureKeys.alreadyHaveAnAccount ) )) } + private fun createBooleanFeature(key: Preferences.Key, label: String, factory: KFunction1): Feature { + return Feature.BooleanFeature( + label = label, + featureOverride = factory.invoke(debugFeatures).takeIf { debugFeatures.hasOverride(key) }, + featureDefault = factory.invoke(defaultFeatures), + key = key + ) + } + private inline fun > createEnumFeature(label: String, featureOverride: T, featureDefault: T): Feature { return Feature.EnumFeature( label = label, diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt index daab981956..2e11017ef3 100644 --- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt +++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt @@ -43,9 +43,11 @@ class DebugVectorFeatures( return readPreferences().getEnum() ?: vectorFeatures.onboardingVariant() } - override fun isAlreadyHaveAccountSplashEnabled(): Boolean = readPreferences()[DebugFeatureKeys.alreadyHaveAnAccount] + override fun isAlreadyHaveAccountSplashEnabled(): Boolean = read(DebugFeatureKeys.alreadyHaveAnAccount) ?: vectorFeatures.isAlreadyHaveAccountSplashEnabled() + override fun isSplashCarouselEnabled(): Boolean = read(DebugFeatureKeys.splashCarousel) ?: vectorFeatures.isSplashCarouselEnabled() + fun override(value: T?, key: Preferences.Key) = updatePreferences { if (value == null) { it.remove(key) @@ -66,6 +68,8 @@ class DebugVectorFeatures( } } + private fun read(key: Preferences.Key): Boolean? = readPreferences()[key] + private fun readPreferences() = runBlocking { dataStore.data.first() } private fun updatePreferences(block: (MutablePreferences) -> Unit) = runBlocking { @@ -92,6 +96,6 @@ private inline fun > enumPreferencesKey() = enumPreferencesK private fun > enumPreferencesKey(type: KClass) = stringPreferencesKey("enum-${type.simpleName}") object DebugFeatureKeys { - val alreadyHaveAnAccount = booleanPreferencesKey("already-have-an-account") + val splashCarousel = booleanPreferencesKey("splash-carousel") } diff --git a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt index 0349b15c4d..7a12ae7547 100644 --- a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt +++ b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt @@ -24,19 +24,17 @@ interface VectorFeatures { fun isAlreadyHaveAccountSplashEnabled(): Boolean + fun isSplashCarouselEnabled(): Boolean + enum class OnboardingVariant { LEGACY, LOGIN_2, FTUE_AUTH } - - enum class NotificationSettingsVersion { - V1, - V2 - } } class DefaultVectorFeatures : VectorFeatures { override fun onboardingVariant(): VectorFeatures.OnboardingVariant = BuildConfig.ONBOARDING_VARIANT override fun isAlreadyHaveAccountSplashEnabled() = true + override fun isSplashCarouselEnabled() = true }