Loading packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java +23 −2 Original line number Diff line number Diff line Loading @@ -23,11 +23,18 @@ import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import androidx.annotation.NonNull; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import org.json.JSONException; import org.json.JSONObject; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; Loading @@ -43,7 +50,7 @@ import javax.inject.Inject; * To restore a flag back to its default, leave the `--ez value <0|1>` off of the command. */ @SysUISingleton public class FeatureFlagManager implements FlagReader, FlagWriter { public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable { private static final String TAG = "SysUIFlags"; private static final String SYSPROP_PREFIX = "persist.systemui.flag_"; Loading @@ -58,11 +65,13 @@ public class FeatureFlagManager implements FlagReader, FlagWriter { private final Map<Integer, Boolean> mBooleanFlagCache = new HashMap<>(); @Inject public FeatureFlagManager(SystemPropertiesHelper systemPropertiesHelper, Context context) { public FeatureFlagManager(SystemPropertiesHelper systemPropertiesHelper, Context context, DumpManager dumpManager) { mSystemPropertiesHelper = systemPropertiesHelper; IntentFilter filter = new IntentFilter(ACTION_SET_FLAG); context.registerReceiver(mReceiver, filter, FLAGS_PERMISSION, null); dumpManager.registerDumpable(TAG, this); } /** Return a {@link BooleanFlag}'s value. */ Loading Loading @@ -186,4 +195,16 @@ public class FeatureFlagManager implements FlagReader, FlagWriter { } } }; @Override public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { ArrayList<String> flagStrings = new ArrayList<>(mBooleanFlagCache.size()); for (Map.Entry<Integer, Boolean> entry : mBooleanFlagCache.entrySet()) { flagStrings.add(" sysui_flag_" + entry.getKey() + ": " + entry.getValue()); } flagStrings.sort(String.CASE_INSENSITIVE_ORDER); for (String flagString : flagStrings) { pw.println(flagString); } } } packages/SystemUI/src/com/android/systemui/flags/FeatureFlagManager.java +27 −2 Original line number Diff line number Diff line Loading @@ -16,23 +16,48 @@ package com.android.systemui.flags; import android.util.SparseBooleanArray; import androidx.annotation.NonNull; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import java.io.FileDescriptor; import java.io.PrintWriter; import javax.inject.Inject; /** * Default implementation of the a Flag manager that returns default values for release builds * * There's a version of this file in src-debug which allows overriding, and has documentation about * how to set flags. */ @SysUISingleton public class FeatureFlagManager implements FlagReader, FlagWriter { public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable { SparseBooleanArray mAccessedFlags = new SparseBooleanArray(); @Inject public FeatureFlagManager() {} public FeatureFlagManager(DumpManager dumpManager) { dumpManager.registerDumpable("SysUIFlags", this); } public boolean isEnabled(String key, boolean defaultValue) { return defaultValue; } public boolean isEnabled(int key, boolean defaultValue) { mAccessedFlags.append(key, defaultValue); return defaultValue; } public void setEnabled(String key, boolean value) {} public void setEnabled(int key, boolean value) {} @Override public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { int size = mAccessedFlags.size(); for (int i = 0; i < size; i++) { pw.println(" sysui_flag_" + mAccessedFlags.keyAt(i) + ": " + mAccessedFlags.valueAt(i)); } } } packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagManagerTest.java +40 −1 Original line number Diff line number Diff line Loading @@ -18,23 +18,35 @@ package com.android.systemui.flags; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.FileDescriptor; import java.io.PrintWriter; import java.io.StringWriter; @SmallTest public class FeatureFlagManagerTest extends SysuiTestCase { FeatureFlagManager mFeatureFlagManager; @Mock private DumpManager mDumpManager; @Before public void setup() { MockitoAnnotations.initMocks(this); mFeatureFlagManager = new FeatureFlagManager(); mFeatureFlagManager = new FeatureFlagManager(mDumpManager); } @Test Loading @@ -43,4 +55,31 @@ public class FeatureFlagManagerTest extends SysuiTestCase { // Again, nothing changes. assertThat(mFeatureFlagManager.isEnabled(1, false)).isFalse(); } @Test public void testDump() { // Even if a flag is set before mFeatureFlagManager.setEnabled(1, true); // WHEN the flags have been accessed assertFalse(mFeatureFlagManager.isEnabled(1, false)); assertTrue(mFeatureFlagManager.isEnabled(2, true)); // Even if a flag is set after mFeatureFlagManager.setEnabled(2, false); // THEN the dump contains the flags and the default values String dump = dumpToString(); assertThat(dump).contains(" sysui_flag_1: false\n"); assertThat(dump).contains(" sysui_flag_2: true\n"); } private String dumpToString() { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); mFeatureFlagManager.dump(mock(FileDescriptor.class), pw, new String[0]); pw.flush(); String dump = sw.toString(); return dump; } } Loading
packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java +23 −2 Original line number Diff line number Diff line Loading @@ -23,11 +23,18 @@ import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import androidx.annotation.NonNull; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import org.json.JSONException; import org.json.JSONObject; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; Loading @@ -43,7 +50,7 @@ import javax.inject.Inject; * To restore a flag back to its default, leave the `--ez value <0|1>` off of the command. */ @SysUISingleton public class FeatureFlagManager implements FlagReader, FlagWriter { public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable { private static final String TAG = "SysUIFlags"; private static final String SYSPROP_PREFIX = "persist.systemui.flag_"; Loading @@ -58,11 +65,13 @@ public class FeatureFlagManager implements FlagReader, FlagWriter { private final Map<Integer, Boolean> mBooleanFlagCache = new HashMap<>(); @Inject public FeatureFlagManager(SystemPropertiesHelper systemPropertiesHelper, Context context) { public FeatureFlagManager(SystemPropertiesHelper systemPropertiesHelper, Context context, DumpManager dumpManager) { mSystemPropertiesHelper = systemPropertiesHelper; IntentFilter filter = new IntentFilter(ACTION_SET_FLAG); context.registerReceiver(mReceiver, filter, FLAGS_PERMISSION, null); dumpManager.registerDumpable(TAG, this); } /** Return a {@link BooleanFlag}'s value. */ Loading Loading @@ -186,4 +195,16 @@ public class FeatureFlagManager implements FlagReader, FlagWriter { } } }; @Override public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { ArrayList<String> flagStrings = new ArrayList<>(mBooleanFlagCache.size()); for (Map.Entry<Integer, Boolean> entry : mBooleanFlagCache.entrySet()) { flagStrings.add(" sysui_flag_" + entry.getKey() + ": " + entry.getValue()); } flagStrings.sort(String.CASE_INSENSITIVE_ORDER); for (String flagString : flagStrings) { pw.println(flagString); } } }
packages/SystemUI/src/com/android/systemui/flags/FeatureFlagManager.java +27 −2 Original line number Diff line number Diff line Loading @@ -16,23 +16,48 @@ package com.android.systemui.flags; import android.util.SparseBooleanArray; import androidx.annotation.NonNull; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import java.io.FileDescriptor; import java.io.PrintWriter; import javax.inject.Inject; /** * Default implementation of the a Flag manager that returns default values for release builds * * There's a version of this file in src-debug which allows overriding, and has documentation about * how to set flags. */ @SysUISingleton public class FeatureFlagManager implements FlagReader, FlagWriter { public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable { SparseBooleanArray mAccessedFlags = new SparseBooleanArray(); @Inject public FeatureFlagManager() {} public FeatureFlagManager(DumpManager dumpManager) { dumpManager.registerDumpable("SysUIFlags", this); } public boolean isEnabled(String key, boolean defaultValue) { return defaultValue; } public boolean isEnabled(int key, boolean defaultValue) { mAccessedFlags.append(key, defaultValue); return defaultValue; } public void setEnabled(String key, boolean value) {} public void setEnabled(int key, boolean value) {} @Override public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { int size = mAccessedFlags.size(); for (int i = 0; i < size; i++) { pw.println(" sysui_flag_" + mAccessedFlags.keyAt(i) + ": " + mAccessedFlags.valueAt(i)); } } }
packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagManagerTest.java +40 −1 Original line number Diff line number Diff line Loading @@ -18,23 +18,35 @@ package com.android.systemui.flags; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.FileDescriptor; import java.io.PrintWriter; import java.io.StringWriter; @SmallTest public class FeatureFlagManagerTest extends SysuiTestCase { FeatureFlagManager mFeatureFlagManager; @Mock private DumpManager mDumpManager; @Before public void setup() { MockitoAnnotations.initMocks(this); mFeatureFlagManager = new FeatureFlagManager(); mFeatureFlagManager = new FeatureFlagManager(mDumpManager); } @Test Loading @@ -43,4 +55,31 @@ public class FeatureFlagManagerTest extends SysuiTestCase { // Again, nothing changes. assertThat(mFeatureFlagManager.isEnabled(1, false)).isFalse(); } @Test public void testDump() { // Even if a flag is set before mFeatureFlagManager.setEnabled(1, true); // WHEN the flags have been accessed assertFalse(mFeatureFlagManager.isEnabled(1, false)); assertTrue(mFeatureFlagManager.isEnabled(2, true)); // Even if a flag is set after mFeatureFlagManager.setEnabled(2, false); // THEN the dump contains the flags and the default values String dump = dumpToString(); assertThat(dump).contains(" sysui_flag_1: false\n"); assertThat(dump).contains(" sysui_flag_2: true\n"); } private String dumpToString() { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); mFeatureFlagManager.dump(mock(FileDescriptor.class), pw, new String[0]); pw.flush(); String dump = sw.toString(); return dump; } }