Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 923cd9e7 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

RESTRICT AUTOMERGE Read flag resource overrides.

We were only reading resource overrides on debug builds, not
release builds.

This issue is already addressed in the main branch.

Fixes: 210114714
Test: atest SystemUITests
Change-Id: I40eb02d73faa4c2476d2a4e136e08c6dcd7795a2
parent fd16e8c3
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -16,12 +16,15 @@

package com.android.systemui.flags;

import android.content.res.Resources;
import android.util.SparseBooleanArray;

import androidx.annotation.BoolRes;
import androidx.annotation.NonNull;

import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;

import java.io.FileDescriptor;
@@ -38,8 +41,11 @@ import javax.inject.Inject;
@SysUISingleton
public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable {
    SparseBooleanArray mAccessedFlags = new SparseBooleanArray();
    private Resources mResources;

    @Inject
    public FeatureFlagManager(DumpManager dumpManager) {
    public FeatureFlagManager(DumpManager dumpManager, @Main Resources resources) {
        mResources = resources;
        dumpManager.registerDumpable("SysUIFlags", this);
    }

@@ -51,7 +57,20 @@ public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable {

    @Override
    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
+22 −5
Original line number Diff line number Diff line
@@ -25,15 +25,14 @@ 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 static org.mockito.Mockito.when;

import android.content.Context;
import android.content.res.Resources;

import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.util.settings.SecureSettings;

import org.junit.After;
import org.junit.Before;
@@ -53,14 +52,14 @@ import java.io.StringWriter;
public class FeatureFlagManagerTest extends SysuiTestCase {
    FeatureFlagManager mFeatureFlagManager;

    @Mock private Context mContext;
    @Mock private DumpManager mDumpManager;
    @Mock private Resources mResources;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);

        mFeatureFlagManager = new FeatureFlagManager(mDumpManager);
        mFeatureFlagManager = new FeatureFlagManager(mDumpManager, mResources);
    }

    @After
@@ -70,6 +69,24 @@ public class FeatureFlagManagerTest extends SysuiTestCase {
        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
    public void testIsEnabled() {
        mFeatureFlagManager.setEnabled(1, true);