For #26884 - Merge FeatureSettingsHelper with activity rules
parent
ddf0dc3b4d
commit
0442695972
@ -0,0 +1,159 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.helpers
|
||||
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.getPreferenceKey
|
||||
import org.mozilla.fenix.helpers.ETPPolicy.CUSTOM
|
||||
import org.mozilla.fenix.helpers.ETPPolicy.STANDARD
|
||||
import org.mozilla.fenix.helpers.ETPPolicy.STRICT
|
||||
import org.mozilla.fenix.helpers.FeatureSettingsHelper.Companion.settings
|
||||
import org.mozilla.fenix.helpers.TestHelper.appContext
|
||||
import org.mozilla.fenix.onboarding.FenixOnboarding
|
||||
import org.mozilla.fenix.utils.Settings
|
||||
|
||||
/**
|
||||
* Helper for querying the status and modifying various features and settings in the application.
|
||||
*/
|
||||
class FeatureSettingsHelperDelegate : FeatureSettingsHelper {
|
||||
/**
|
||||
* The current feature flags used inside the app before the tests start.
|
||||
* These will be restored when the tests end.
|
||||
*/
|
||||
private val initialFeatureFlags = FeatureFlags(
|
||||
isHomeOnboardingDialogEnabled = settings.showHomeOnboardingDialog,
|
||||
homeOnboardingDialogVersion = getHomeOnboardingVersion(),
|
||||
isPocketEnabled = settings.showPocketRecommendationsFeature,
|
||||
isJumpBackInCFREnabled = settings.shouldShowJumpBackInCFR,
|
||||
isRecentTabsFeatureEnabled = settings.showRecentTabsFeature,
|
||||
isRecentlyVisitedFeatureEnabled = settings.historyMetadataUIFeature,
|
||||
isPWAsPromptEnabled = !settings.userKnowsAboutPwas,
|
||||
isTCPCFREnabled = settings.shouldShowTotalCookieProtectionCFR,
|
||||
isWallpaperOnboardingEnabled = settings.showWallpaperOnboarding,
|
||||
isDeleteSitePermissionsEnabled = settings.deleteSitePermissions,
|
||||
etpPolicy = getETPPolicy(settings),
|
||||
)
|
||||
|
||||
/**
|
||||
* The current feature flags updated in tests.
|
||||
*/
|
||||
private var updatedFeatureFlags = initialFeatureFlags.copy()
|
||||
|
||||
override var isHomeOnboardingDialogEnabled: Boolean
|
||||
get() = updatedFeatureFlags.isHomeOnboardingDialogEnabled &&
|
||||
FenixOnboarding(appContext).userHasBeenOnboarded()
|
||||
set(value) {
|
||||
updatedFeatureFlags.isHomeOnboardingDialogEnabled = value
|
||||
updatedFeatureFlags.homeOnboardingDialogVersion = when (value) {
|
||||
true -> FenixOnboarding.CURRENT_ONBOARDING_VERSION
|
||||
false -> 0
|
||||
}
|
||||
}
|
||||
override var isPocketEnabled: Boolean by updatedFeatureFlags::isPocketEnabled
|
||||
override var isJumpBackInCFREnabled: Boolean by updatedFeatureFlags::isJumpBackInCFREnabled
|
||||
override var isWallpaperOnboardingEnabled: Boolean by updatedFeatureFlags::isWallpaperOnboardingEnabled
|
||||
override var isRecentTabsFeatureEnabled: Boolean by updatedFeatureFlags::isRecentTabsFeatureEnabled
|
||||
override var isRecentlyVisitedFeatureEnabled: Boolean by updatedFeatureFlags::isRecentlyVisitedFeatureEnabled
|
||||
override var isPWAsPromptEnabled: Boolean by updatedFeatureFlags::isPWAsPromptEnabled
|
||||
override var isTCPCFREnabled: Boolean by updatedFeatureFlags::isTCPCFREnabled
|
||||
override var etpPolicy: ETPPolicy by updatedFeatureFlags::etpPolicy
|
||||
|
||||
override fun applyFlagUpdates() {
|
||||
applyFeatureFlags(updatedFeatureFlags)
|
||||
}
|
||||
|
||||
override fun resetAllFeatureFlags() {
|
||||
applyFeatureFlags(initialFeatureFlags)
|
||||
}
|
||||
override var isDeleteSitePermissionsEnabled: Boolean by updatedFeatureFlags::isDeleteSitePermissionsEnabled
|
||||
|
||||
private fun applyFeatureFlags(featureFlags: FeatureFlags) {
|
||||
settings.showHomeOnboardingDialog = featureFlags.isHomeOnboardingDialogEnabled
|
||||
setHomeOnboardingVersion(featureFlags.homeOnboardingDialogVersion)
|
||||
settings.showPocketRecommendationsFeature = featureFlags.isPocketEnabled
|
||||
settings.shouldShowJumpBackInCFR = featureFlags.isJumpBackInCFREnabled
|
||||
settings.showRecentTabsFeature = featureFlags.isRecentTabsFeatureEnabled
|
||||
settings.historyMetadataUIFeature = featureFlags.isRecentlyVisitedFeatureEnabled
|
||||
settings.userKnowsAboutPwas = !featureFlags.isPWAsPromptEnabled
|
||||
settings.shouldShowTotalCookieProtectionCFR = featureFlags.isTCPCFREnabled
|
||||
settings.showWallpaperOnboarding = featureFlags.isWallpaperOnboardingEnabled
|
||||
settings.deleteSitePermissions = featureFlags.isDeleteSitePermissionsEnabled
|
||||
setETPPolicy(featureFlags.etpPolicy)
|
||||
}
|
||||
}
|
||||
|
||||
private data class FeatureFlags(
|
||||
var isHomeOnboardingDialogEnabled: Boolean,
|
||||
var homeOnboardingDialogVersion: Int,
|
||||
var isPocketEnabled: Boolean,
|
||||
var isJumpBackInCFREnabled: Boolean,
|
||||
var isRecentTabsFeatureEnabled: Boolean,
|
||||
var isRecentlyVisitedFeatureEnabled: Boolean,
|
||||
var isPWAsPromptEnabled: Boolean,
|
||||
var isTCPCFREnabled: Boolean,
|
||||
var isWallpaperOnboardingEnabled: Boolean,
|
||||
var isDeleteSitePermissionsEnabled: Boolean,
|
||||
var etpPolicy: ETPPolicy,
|
||||
)
|
||||
|
||||
internal fun getETPPolicy(settings: Settings): ETPPolicy {
|
||||
return when {
|
||||
settings.useStrictTrackingProtection -> STRICT
|
||||
settings.useCustomTrackingProtection -> CUSTOM
|
||||
else -> STANDARD
|
||||
}
|
||||
}
|
||||
|
||||
private fun setETPPolicy(policy: ETPPolicy) {
|
||||
when (policy) {
|
||||
STRICT -> settings.setStrictETP()
|
||||
// The following two cases update ETP in the same way "setStrictETP" does.
|
||||
STANDARD -> {
|
||||
settings.preferences.edit()
|
||||
.putBoolean(
|
||||
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_strict_default),
|
||||
false,
|
||||
)
|
||||
.putBoolean(
|
||||
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_custom_option),
|
||||
false,
|
||||
)
|
||||
.putBoolean(
|
||||
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_standard_option),
|
||||
true,
|
||||
)
|
||||
.commit()
|
||||
}
|
||||
CUSTOM -> {
|
||||
settings.preferences.edit()
|
||||
.putBoolean(
|
||||
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_strict_default),
|
||||
false,
|
||||
)
|
||||
.putBoolean(
|
||||
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_standard_option),
|
||||
true,
|
||||
)
|
||||
.putBoolean(
|
||||
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_custom_option),
|
||||
true,
|
||||
)
|
||||
.commit()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getHomeOnboardingVersion(): Int {
|
||||
return FenixOnboarding(appContext)
|
||||
.preferences
|
||||
.getInt(FenixOnboarding.LAST_VERSION_ONBOARDING_KEY, 0)
|
||||
}
|
||||
|
||||
private fun setHomeOnboardingVersion(version: Int) {
|
||||
FenixOnboarding(appContext)
|
||||
.preferences.edit()
|
||||
.putInt(FenixOnboarding.LAST_VERSION_ONBOARDING_KEY, version)
|
||||
.commit()
|
||||
}
|
Loading…
Reference in New Issue