From 85f1024f44b9e67399bc1403ce09fc45513e6dce Mon Sep 17 00:00:00 2001 From: Stefan Andonian Date: Tue, 11 Apr 2023 23:23:03 +0000 Subject: [PATCH] Make all debug feature flags boot aware. Bug: 276090194 Test: FeatureFlags worked on device. Change-Id: I710801d63e6f4283bf15daea2b5be5874de21cc8 --- .../uioverrides/flags/FlagTogglerPrefUi.java | 18 +++++-------- .../uioverrides/flags/FlagsFactory.java | 25 +++++++++++++------ .../launcher3/config/FeatureFlags.java | 2 -- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/flags/FlagTogglerPrefUi.java b/quickstep/src/com/android/launcher3/uioverrides/flags/FlagTogglerPrefUi.java index 9c59361431..87c836bbac 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/flags/FlagTogglerPrefUi.java +++ b/quickstep/src/com/android/launcher3/uioverrides/flags/FlagTogglerPrefUi.java @@ -16,12 +16,10 @@ package com.android.launcher3.uioverrides.flags; -import static com.android.launcher3.config.FeatureFlags.FLAGS_PREF_NAME; import static com.android.launcher3.config.FeatureFlags.FlagState.TEAMFOOD; import static com.android.launcher3.uioverrides.flags.FlagsFactory.TEAMFOOD_FLAG; import android.content.Context; -import android.content.SharedPreferences; import android.os.Handler; import android.os.Process; import android.text.Html; @@ -52,31 +50,27 @@ public final class FlagTogglerPrefUi { private final PreferenceFragmentCompat mFragment; private final Context mContext; - private final SharedPreferences mSharedPreferences; - private final PreferenceDataStore mDataStore = new PreferenceDataStore() { @Override public void putBoolean(String key, boolean value) { - mSharedPreferences.edit().putBoolean(key, value).apply(); + FlagsFactory.getSharedPreferences().edit().putBoolean(key, value).apply(); updateMenu(); } @Override public boolean getBoolean(String key, boolean defaultValue) { - return mSharedPreferences.getBoolean(key, defaultValue); + return FlagsFactory.getSharedPreferences().getBoolean(key, defaultValue); } }; public FlagTogglerPrefUi(PreferenceFragmentCompat fragment) { mFragment = fragment; mContext = fragment.getActivity(); - mSharedPreferences = mContext.getSharedPreferences( - FLAGS_PREF_NAME, Context.MODE_PRIVATE); } public void applyTo(PreferenceGroup parent) { - Set modifiedPrefs = mSharedPreferences.getAll().keySet(); + Set modifiedPrefs = FlagsFactory.getSharedPreferences().getAll().keySet(); List flags = FlagsFactory.getDebugFlags(); flags.sort((f1, f2) -> { // Sort first by any prefs that the user has changed, then alphabetically. @@ -102,7 +96,7 @@ public final class FlagTogglerPrefUi { public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); holder.itemView.setOnLongClickListener(v -> { - mSharedPreferences.edit().remove(flag.key).apply(); + FlagsFactory.getSharedPreferences().edit().remove(flag.key).apply(); setChecked(getFlagStateFromSharedPrefs(flag)); updateSummary(this, flag); updateMenu(); @@ -133,7 +127,7 @@ public final class FlagTogglerPrefUi { private void updateSummary(SwitchPreference switchPreference, DebugFlag flag) { String summary = flag.defaultValue == TEAMFOOD ? "[TEAMFOOD] " : ""; - if (mSharedPreferences.contains(flag.key)) { + if (FlagsFactory.getSharedPreferences().contains(flag.key)) { summary += "[OVERRIDDEN] "; } if (!TextUtils.isEmpty(summary)) { @@ -156,7 +150,7 @@ public final class FlagTogglerPrefUi { public void onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_apply_flags) { - mSharedPreferences.edit().commit(); + FlagsFactory.getSharedPreferences().edit().commit(); Log.e(TAG, "Killing launcher process " + Process.myPid() + " to apply new flag values"); System.exit(0); diff --git a/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java b/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java index d066abe335..a68e753589 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java +++ b/quickstep/src/com/android/launcher3/uioverrides/flags/FlagsFactory.java @@ -21,7 +21,6 @@ import static android.app.ActivityThread.currentApplication; import static com.android.launcher3.BuildConfig.IS_DEBUG_DEVICE; import static com.android.launcher3.config.FeatureFlags.FlagState.DISABLED; import static com.android.launcher3.config.FeatureFlags.FlagState.ENABLED; -import static com.android.launcher3.config.FeatureFlags.FlagState.TEAMFOOD; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.content.Context; @@ -30,6 +29,8 @@ import android.provider.DeviceConfig; import android.provider.DeviceConfig.Properties; import android.util.Log; +import androidx.annotation.NonNull; + import com.android.launcher3.config.FeatureFlags.BooleanFlag; import com.android.launcher3.config.FeatureFlags.FlagState; import com.android.launcher3.config.FeatureFlags.IntFlag; @@ -52,10 +53,11 @@ public class FlagsFactory { private static final FlagsFactory INSTANCE = new FlagsFactory(); private static final boolean FLAG_AUTO_APPLY_ENABLED = true; - public static final String FLAGS_PREF_NAME = "featureFlags"; + private static final String FLAGS_PREF_NAME = "featureFlags"; public static final String NAMESPACE_LAUNCHER = "launcher"; private static final List sDebugFlags = new ArrayList<>(); + private static SharedPreferences sSharedPreferences; static final BooleanFlag TEAMFOOD_FLAG = getReleaseFlag( 0, "LAUNCHER_TEAMFOOD", DISABLED, "Enable this flag to opt-in all team food flags"); @@ -93,10 +95,8 @@ public class FlagsFactory { public static BooleanFlag getDebugFlag( int bugId, String key, FlagState flagState, String description) { if (IS_DEBUG_DEVICE) { - SharedPreferences prefs = currentApplication() - .getSharedPreferences(FLAGS_PREF_NAME, Context.MODE_PRIVATE); boolean defaultValue = getEnabledValue(flagState); - boolean currentValue = prefs.getBoolean(key, defaultValue); + boolean currentValue = getSharedPreferences().getBoolean(key, defaultValue); DebugFlag flag = new DebugFlag(key, description, flagState, currentValue); sDebugFlags.add(flag); return flag; @@ -115,9 +115,7 @@ public class FlagsFactory { boolean defaultValueInCode = getEnabledValue(flagState); boolean defaultValue = DeviceConfig.getBoolean(NAMESPACE_LAUNCHER, key, defaultValueInCode); if (IS_DEBUG_DEVICE) { - SharedPreferences prefs = currentApplication() - .getSharedPreferences(FLAGS_PREF_NAME, Context.MODE_PRIVATE); - boolean currentValue = prefs.getBoolean(key, defaultValue); + boolean currentValue = getSharedPreferences().getBoolean(key, defaultValue); DebugFlag flag = new DeviceFlag(key, description, flagState, currentValue, defaultValueInCode); sDebugFlags.add(flag); @@ -145,6 +143,17 @@ public class FlagsFactory { } } + /** Returns the SharedPreferences instance backing Debug FeatureFlags. */ + @NonNull + static SharedPreferences getSharedPreferences() { + if (sSharedPreferences == null) { + sSharedPreferences = currentApplication() + .createDeviceProtectedStorageContext() + .getSharedPreferences(FLAGS_PREF_NAME, Context.MODE_PRIVATE); + } + return sSharedPreferences; + } + /** * Dumps the current flags state to the print writer */ diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 14cd964a94..bcc9ccf4df 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -39,8 +39,6 @@ import java.util.function.ToIntFunction; */ public final class FeatureFlags { - public static final String FLAGS_PREF_NAME = "featureFlags"; - @VisibleForTesting public static Predicate sBooleanReader = f -> f.mCurrentValue; @VisibleForTesting