From 5b2c76f7ffb7d132ebd0c06fcf3047ab91707a8e Mon Sep 17 00:00:00 2001 From: Etan Cohen Date: Wed, 4 Nov 2020 15:16:29 -0800 Subject: [PATCH] Make provider feature flag persistent Bug: 167474581 Test: compile, set flag + reboot - verify persistent Change-Id: I3e91a448d18b9588f7b8c88dcf824662d9e9ddcc --- core/java/android/util/FeatureFlagUtils.java | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index c20b0639b1c4b..a5ca9ef5b887b 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -23,7 +23,9 @@ import android.provider.Settings; import android.text.TextUtils; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; /** * Util class to get feature flag information. @@ -70,6 +72,12 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_PROVIDER_MODEL, "false"); } + private static final Set PERSISTENT_FLAGS; + static { + PERSISTENT_FLAGS = new HashSet<>(); + PERSISTENT_FLAGS.add(SETTINGS_PROVIDER_MODEL); + } + /** * Whether or not a flag is enabled. * @@ -89,8 +97,9 @@ public class FeatureFlagUtils { } } - // Step 2: check if feature flag has any override. Flag name: sys.fflag.override. - value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature); + // Step 2: check if feature flag has any override. + // Flag name: [persist.]sys.fflag.override. + value = SystemProperties.get(getSystemPropertyPrefix(feature) + feature); if (!TextUtils.isEmpty(value)) { return Boolean.parseBoolean(value); } @@ -103,7 +112,8 @@ public class FeatureFlagUtils { * Override feature flag to new state. */ public static void setEnabled(Context context, String feature, boolean enabled) { - SystemProperties.set(FFLAG_OVERRIDE_PREFIX + feature, enabled ? "true" : "false"); + SystemProperties.set(getSystemPropertyPrefix(feature) + feature, + enabled ? "true" : "false"); } /** @@ -112,4 +122,8 @@ public class FeatureFlagUtils { public static Map getAllFeatureFlags() { return DEFAULT_FLAGS; } + + private static String getSystemPropertyPrefix(String feature) { + return PERSISTENT_FLAGS.contains(feature) ? PERSIST_PREFIX : FFLAG_OVERRIDE_PREFIX; + } }