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

Commit 344072e2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Check Settings.Global before sysprop in FeatureFlagUtils."

parents e8f0660c aa1387c6
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.util;

import android.content.Context;
import android.os.SystemProperties;
import android.provider.Settings;
import android.text.TextUtils;

import java.util.Map;
@@ -39,13 +40,24 @@ public class FeatureFlagUtils {
     * @return true if the flag is enabled (either by default in system, or override by user)
     */
    public static boolean isEnabled(Context context, String feature) {
        // Tries to get feature flag from system property.
        // Step 1: check if feature flag has any override. Flag name: sys.fflag.override.<feature>
        String value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature);
        // Override precedence:
        // Settings.Global -> sys.fflag.override.* -> sys.fflag.*

        // Step 1: check if feature flag is set in Settings.Global.
        String value;
        if (context != null) {
            value = Settings.Global.getString(context.getContentResolver(), feature);
            if (!TextUtils.isEmpty(value)) {
                return Boolean.parseBoolean(value);
            }
        }

        // Step 2: check if feature flag has any override. Flag name: sys.fflag.override.<feature>
        value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature);
        if (!TextUtils.isEmpty(value)) {
            return Boolean.parseBoolean(value);
        }
        // Step 2: check if feature flag has any default value. Flag name: sys.fflag.<feature>
        // Step 3: check if feature flag has any default value. Flag name: sys.fflag.<feature>
        value = SystemProperties.get(FFLAG_PREFIX + feature);
        return Boolean.parseBoolean(value);
    }
@@ -53,7 +65,7 @@ public class FeatureFlagUtils {
    /**
     * Override feature flag to new state.
     */
    public static void setEnabled(String feature, boolean enabled) {
    public static void setEnabled(Context context, String feature, boolean enabled) {
        SystemProperties.set(FFLAG_OVERRIDE_PREFIX + feature, enabled ? "true" : "false");
    }

+14 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static junit.framework.Assert.assertTrue;

import android.content.Context;
import android.os.SystemProperties;
import android.provider.Settings;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
@@ -51,6 +52,7 @@ public class FeatureFlagUtilsTest {
    }

    private void cleanup() {
        Settings.Global.putString(mContext.getContentResolver(), TEST_FEATURE_NAME, "");
        SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "");
        SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, "");
    }
@@ -63,18 +65,28 @@ public class FeatureFlagUtilsTest {
    }

    @Test
    public void testGetFlag_override_shouldReturnTrue() {
    public void testGetFlag_adb_override_shouldReturnTrue() {
        SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "false");
        SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, "true");

        assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME));
    }

    @Test
    public void testGetFlag_settings_override_shouldReturnTrue() {
        SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "false");
        SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, "false");

        Settings.Global.putString(mContext.getContentResolver(), TEST_FEATURE_NAME, "true");

        assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME));
    }

    @Test
    public void testSetEnabled_shouldSetOverrideFlag() {
        assertFalse(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME));

        FeatureFlagUtils.setEnabled(TEST_FEATURE_NAME, true);
        FeatureFlagUtils.setEnabled(null /* context */, TEST_FEATURE_NAME, true);

        assertEquals(SystemProperties.get(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, null),
                "");