Make gradle build use debuggable FeatureFlagManager

Fixes: 204129347
Test: gradle build & dump
Change-Id: I06ba95f4cc21b06519e676afee4bb6ae9c44c03e
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index c6cca5a..721b432 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -52,12 +52,18 @@
 
 filegroup {
     name: "ReleaseJavaFiles",
-    srcs: ["src/com/android/systemui/flags/FeatureFlagManager.java"],
+    srcs: [
+        "src-release/**/*.kt",
+        "src-release/**/*.java",
+    ],
 }
 
 filegroup {
     name: "DebugJavaFiles",
-    srcs: ["src-debug/com/android/systemui/flags/FeatureFlagManager.java"],
+    srcs: [
+        "src-debug/**/*.kt",
+        "src-debug/**/*.java",
+    ],
 }
 
 android_library {
@@ -66,6 +72,8 @@
         "src/**/*.kt",
         "src/**/*.java",
         "src/**/I*.aidl",
+        "src-release/**/*.kt",
+        "src-release/**/*.java",
     ],
     product_variables: {
         debuggable: {
@@ -159,6 +167,8 @@
         "src/**/*.kt",
         "src/**/*.java",
         "src/**/I*.aidl",
+        "src-release/**/*.kt",
+        "src-release/**/*.java",
     ],
     static_libs: [
         "SystemUIAnimationLib",
diff --git a/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java b/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java
index 3a8ee29..1eeb516 100644
--- a/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java
+++ b/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java
@@ -75,6 +75,7 @@
     }
 
     /** Return a {@link BooleanFlag}'s value. */
+    @Override
     public boolean isEnabled(int id, boolean defaultValue) {
         if (!mBooleanFlagCache.containsKey(id)) {
             Boolean result = isEnabledInternal(id);
@@ -105,6 +106,7 @@
     }
 
     /** Set whether a given {@link BooleanFlag} is enabled or not. */
+    @Override
     public void setEnabled(int id, boolean value) {
         Boolean currentValue = isEnabledInternal(id);
         if (currentValue != null && currentValue == value) {
@@ -136,8 +138,10 @@
         Log.i(TAG, "Erase id " + id);
     }
 
+    @Override
     public void addListener(Listener run) {}
 
+    @Override
     public void removeListener(Listener run) {}
 
     private void restartSystemUI() {
@@ -198,6 +202,7 @@
 
     @Override
     public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
+        pw.println("can override: true");
         ArrayList<String> flagStrings = new ArrayList<>(mBooleanFlagCache.size());
         for (Map.Entry<Integer, Boolean> entry : mBooleanFlagCache.entrySet()) {
             flagStrings.add("  sysui_flag_" + entry.getKey() + ": " + entry.getValue());
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagManager.java b/packages/SystemUI/src-release/com/android/systemui/flags/FeatureFlagManager.java
similarity index 89%
rename from packages/SystemUI/src/com/android/systemui/flags/FeatureFlagManager.java
rename to packages/SystemUI/src-release/com/android/systemui/flags/FeatureFlagManager.java
index 78f0b5f..e501a07 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagManager.java
+++ b/packages/SystemUI/src-release/com/android/systemui/flags/FeatureFlagManager.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.flags;
 
+import android.content.Context;
 import android.util.SparseBooleanArray;
 
 import androidx.annotation.NonNull;
@@ -39,21 +40,21 @@
 public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable {
     SparseBooleanArray mAccessedFlags = new SparseBooleanArray();
     @Inject
-    public FeatureFlagManager(DumpManager dumpManager) {
+    public FeatureFlagManager(SystemPropertiesHelper systemPropertiesHelper, Context context,
+            DumpManager dumpManager) {
         dumpManager.registerDumpable("SysUIFlags", this);
     }
-    public boolean isEnabled(String key, boolean defaultValue) {
-        return defaultValue;
-    }
+    @Override
     public boolean isEnabled(int key, boolean defaultValue) {
         mAccessedFlags.append(key, defaultValue);
         return defaultValue;
     }
-    public void setEnabled(String key, boolean value) {}
+    @Override
     public void setEnabled(int key, boolean value) {}
 
     @Override
     public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
+        pw.println("can override: false");
         int size = mAccessedFlags.size();
         for (int i = 0; i < size; i++) {
             pw.println("  sysui_flag_" + mAccessedFlags.keyAt(i)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagManagerTest.java
index b3c098c..8243be8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagManagerTest.java
@@ -20,13 +20,21 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import android.content.Context;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dump.DumpManager;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -36,17 +44,33 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 
+/**
+ * NOTE: This test is for the version of FeatureFlagManager in src-release, which should not allow
+ * overriding, and should never return any value other than the one provided as the default.
+ */
 @SmallTest
 public class FeatureFlagManagerTest extends SysuiTestCase {
     FeatureFlagManager mFeatureFlagManager;
 
+    @Mock private SystemPropertiesHelper mProps;
+    @Mock private Context mContext;
     @Mock private DumpManager mDumpManager;
 
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
 
-        mFeatureFlagManager = new FeatureFlagManager(mDumpManager);
+        mFeatureFlagManager = new FeatureFlagManager(mProps, mContext, mDumpManager);
+    }
+
+    @After
+    public void onFinished() {
+        // SystemPropertiesHelper and Context are provided for constructor consistency with the
+        // debug version of the FeatureFlagManager, but should never be used.
+        verifyZeroInteractions(mProps, mContext);
+        // The dump manager should be registered with even for the release version, but that's it.
+        verify(mDumpManager).registerDumpable(anyString(), any());
+        verifyNoMoreInteractions(mDumpManager);
     }
 
     @Test