RESTRICT AUTOMERGE Read flag resource overrides. am: 923cd9e73e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16682031

Change-Id: I785f97b354d39b005feef3c3f2d8502e3cc18847
This commit is contained in:
Dave Mankoff
2022-01-20 19:31:15 +00:00
committed by Automerger Merge Worker
2 changed files with 43 additions and 7 deletions

View File

@@ -16,12 +16,15 @@
package com.android.systemui.flags; package com.android.systemui.flags;
import android.content.res.Resources;
import android.util.SparseBooleanArray; import android.util.SparseBooleanArray;
import androidx.annotation.BoolRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.systemui.Dumpable; import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import java.io.FileDescriptor; import java.io.FileDescriptor;
@@ -38,8 +41,11 @@ import javax.inject.Inject;
@SysUISingleton @SysUISingleton
public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable { public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable {
SparseBooleanArray mAccessedFlags = new SparseBooleanArray(); SparseBooleanArray mAccessedFlags = new SparseBooleanArray();
private Resources mResources;
@Inject @Inject
public FeatureFlagManager(DumpManager dumpManager) { public FeatureFlagManager(DumpManager dumpManager, @Main Resources resources) {
mResources = resources;
dumpManager.registerDumpable("SysUIFlags", this); dumpManager.registerDumpable("SysUIFlags", this);
} }
@@ -51,7 +57,20 @@ public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable {
@Override @Override
public boolean isEnabled(BooleanFlag flag) { public boolean isEnabled(BooleanFlag flag) {
return isEnabled(flag.getId(), flag.getDefault()); boolean def = flag.getDefault();
if (flag.hasResourceOverride()) {
try {
def = isEnabledInOverlay(flag.getResourceOverride());
} catch (Resources.NotFoundException e) {
// no-op
}
}
return isEnabled(flag.getId(), def);
}
private boolean isEnabledInOverlay(@BoolRes int resId) {
return mResources.getBoolean(resId);
} }
@Override @Override

View File

@@ -25,15 +25,14 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.res.Resources;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.util.settings.SecureSettings;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -53,14 +52,14 @@ import java.io.StringWriter;
public class FeatureFlagManagerTest extends SysuiTestCase { public class FeatureFlagManagerTest extends SysuiTestCase {
FeatureFlagManager mFeatureFlagManager; FeatureFlagManager mFeatureFlagManager;
@Mock private Context mContext;
@Mock private DumpManager mDumpManager; @Mock private DumpManager mDumpManager;
@Mock private Resources mResources;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mFeatureFlagManager = new FeatureFlagManager(mDumpManager); mFeatureFlagManager = new FeatureFlagManager(mDumpManager, mResources);
} }
@After @After
@@ -70,6 +69,24 @@ public class FeatureFlagManagerTest extends SysuiTestCase {
verifyNoMoreInteractions(mDumpManager); verifyNoMoreInteractions(mDumpManager);
} }
@Test
public void testSimpleFlag() {
BooleanFlag flagA = new BooleanFlag(100, false);
BooleanFlag flagB = new BooleanFlag(200, true);
assertThat(mFeatureFlagManager.isEnabled(flagA)).isFalse();
assertThat(mFeatureFlagManager.isEnabled(flagB)).isTrue();
}
@Test
public void testResourceOverride() {
when(mResources.getBoolean(1)).thenReturn(true);
BooleanFlag flag = new BooleanFlag(100, false, 1);
assertThat(mFeatureFlagManager.isEnabled(flag)).isTrue();
}
@Test @Test
public void testIsEnabled() { public void testIsEnabled() {
mFeatureFlagManager.setEnabled(1, true); mFeatureFlagManager.setEnabled(1, true);