Move feature flags that have been changed to the top of the list.
Bug: 259270717
Test: change flag, check that its at the top of the sorted list
Change-Id: Ib10882e8de625471ef430a2f3162b85f9c6e1c1d
diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java
index 3a58020..526e93d 100644
--- a/src/com/android/launcher3/config/FeatureFlags.java
+++ b/src/com/android/launcher3/config/FeatureFlags.java
@@ -17,6 +17,7 @@
package com.android.launcher3.config;
import android.content.Context;
+import android.content.SharedPreferences;
import com.android.launcher3.BuildConfig;
import com.android.launcher3.Utilities;
@@ -331,7 +332,15 @@
for (DebugFlag flag : sDebugFlags) {
flag.initialize(context);
}
- sDebugFlags.sort((f1, f2) -> f1.key.compareToIgnoreCase(f2.key));
+
+ sDebugFlags.sort((f1, f2) -> {
+ // Sort first by any prefs that the user has changed, then alphabetically.
+ int changeComparison = Boolean.compare(f2.mHasBeenChangedAtLeastOnce,
+ f1.mHasBeenChangedAtLeastOnce);
+ return changeComparison != 0
+ ? changeComparison
+ : f1.key.compareToIgnoreCase(f2.key);
+ });
}
}
@@ -387,6 +396,7 @@
public static class DebugFlag extends BooleanFlag {
public final String description;
+ protected boolean mHasBeenChangedAtLeastOnce;
protected boolean mCurrentValue;
public DebugFlag(String key, boolean defaultValue, String description) {
@@ -404,8 +414,10 @@
}
public void initialize(Context context) {
- mCurrentValue = context.getSharedPreferences(FLAGS_PREF_NAME, Context.MODE_PRIVATE)
- .getBoolean(key, defaultValue);
+ SharedPreferences prefs =
+ context.getSharedPreferences(FLAGS_PREF_NAME, Context.MODE_PRIVATE);
+ mHasBeenChangedAtLeastOnce = prefs.contains(key);
+ mCurrentValue = prefs.getBoolean(key, defaultValue);
}
@Override
diff --git a/src/com/android/launcher3/config/FlagTogglerPrefUi.java b/src/com/android/launcher3/config/FlagTogglerPrefUi.java
index 6729f74..2eb6e6d 100644
--- a/src/com/android/launcher3/config/FlagTogglerPrefUi.java
+++ b/src/com/android/launcher3/config/FlagTogglerPrefUi.java
@@ -52,12 +52,17 @@
public void putBoolean(String key, boolean value) {
for (DebugFlag flag : FeatureFlags.getDebugFlags()) {
if (flag.key.equals(key)) {
- SharedPreferences.Editor editor = mContext.getSharedPreferences(
- FLAGS_PREF_NAME, Context.MODE_PRIVATE).edit();
- if (value == flag.defaultValue) {
+ SharedPreferences prefs = mContext.getSharedPreferences(
+ FLAGS_PREF_NAME, Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = prefs.edit();
+ // We keep the key in the prefs even if it has the default value, because it's a
+ // signal that it has been changed at one point.
+ if (!prefs.contains(key) && value == flag.defaultValue) {
editor.remove(key).apply();
+ flag.mHasBeenChangedAtLeastOnce = false;
} else {
editor.putBoolean(key, value).apply();
+ flag.mHasBeenChangedAtLeastOnce = true;
}
updateMenu();
}