Send context object to FeatureFlagUtils.

Bug: 36222960
Test: robotests
Change-Id: I9ca2d8c679474e545988f518eaf32acf459abd2c
This commit is contained in:
Fan Zhang
2017-11-13 17:37:53 -08:00
parent 4f74ed2d07
commit 06b0d5b564
19 changed files with 61 additions and 63 deletions

View File

@@ -89,7 +89,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable {
@Override @Override
protected int getPreferenceScreenResId() { protected int getPreferenceScreenResId() {
return FeatureFlagUtils.isEnabled(DEVICE_INFO_V2) return FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2)
? R.xml.device_info_settings_v2 : R.xml.device_info_settings; ? R.xml.device_info_settings_v2 : R.xml.device_info_settings;
} }
@@ -126,7 +126,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable {
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Activity activity, Fragment fragment, Lifecycle lifecycle) { Activity activity, Fragment fragment, Lifecycle lifecycle) {
if (FeatureFlagUtils.isEnabled(DEVICE_INFO_V2)) { if (FeatureFlagUtils.isEnabled(context, DEVICE_INFO_V2)) {
final List<AbstractPreferenceController> controllers = new ArrayList<>(); final List<AbstractPreferenceController> controllers = new ArrayList<>();
// Device name // Device name

View File

@@ -67,7 +67,7 @@ public class Settings extends SettingsActivity {
@Deprecated @Deprecated
public static class DevelopmentSettingsActivity extends SettingsActivity { public static class DevelopmentSettingsActivity extends SettingsActivity {
public static final boolean isEnabled() { public static final boolean isEnabled() {
return FeatureFlagUtils.isEnabled(DEV_OPTION_V1); return FeatureFlagUtils.isEnabled(null /* context */, DEV_OPTION_V1);
} }
} }
public static class DevelopmentSettingsDashboardActivity extends SettingsActivity { /* empty */ } public static class DevelopmentSettingsDashboardActivity extends SettingsActivity { /* empty */ }

View File

@@ -21,7 +21,6 @@ import android.os.Bundle;
import android.support.annotation.XmlRes; import android.support.annotation.XmlRes;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log; import android.util.Log;
import com.android.settings.core.instrumentation.Instrumentable; import com.android.settings.core.instrumentation.Instrumentable;

View File

@@ -73,7 +73,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
final ActivityManager am = final ActivityManager am =
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
boolean isLowRamDevice = am.isLowRamDevice(); boolean isLowRamDevice = am.isLowRamDevice();
return !isLowRamDevice && !isV2Enabled(); return !isLowRamDevice && !isV2Enabled(context);
} }
@Override @Override
@@ -81,7 +81,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
final ActivityManager am = final ActivityManager am =
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
boolean isLowRamDevice = am.isLowRamDevice(); boolean isLowRamDevice = am.isLowRamDevice();
return !isLowRamDevice && isV2Enabled(); return !isLowRamDevice && isV2Enabled(context);
} }
@Override @Override
@@ -91,8 +91,8 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
"com.android.settings.intelligence.suggestions.SuggestionService"); "com.android.settings.intelligence.suggestions.SuggestionService");
} }
private static boolean isV2Enabled() { private static boolean isV2Enabled(Context context) {
return FeatureFlagUtils.isEnabled(SUGGESTIONS_V2) || true; return FeatureFlagUtils.isEnabled(context, SUGGESTIONS_V2) || true;
} }
@Override @Override

View File

@@ -29,7 +29,7 @@ public class FeatureFlagPreference extends SwitchPreference {
mKey = key; mKey = key;
setKey(key); setKey(key);
setTitle(key); setTitle(key);
setCheckedInternal(FeatureFlagUtils.isEnabled(mKey)); setCheckedInternal(FeatureFlagUtils.isEnabled(context, mKey));
} }
@Override @Override

View File

@@ -51,7 +51,7 @@ public class DeviceModelPreferenceController extends AbstractPreferenceControlle
super.displayPreference(screen); super.displayPreference(screen);
final Preference pref = screen.findPreference(KEY_DEVICE_MODEL); final Preference pref = screen.findPreference(KEY_DEVICE_MODEL);
if (pref != null) { if (pref != null) {
if (FeatureFlagUtils.isEnabled(FeatureFlags.DEVICE_INFO_V2)) { if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DEVICE_INFO_V2)) {
pref.setSummary(mContext.getResources().getString(R.string.model_summary, pref.setSummary(mContext.getResources().getString(R.string.model_summary,
getDeviceModel())); getDeviceModel()));
} else { } else {

View File

@@ -59,7 +59,7 @@ public class HardwareInfoDialogFragment extends InstrumentedDialogFragment {
DeviceModelPreferenceController.getDeviceModel()); DeviceModelPreferenceController.getDeviceModel());
// Serial number // Serial number
if (FeatureFlagUtils.isEnabled(FeatureFlags.DEVICE_INFO_V2)) { if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.DEVICE_INFO_V2)) {
setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber()); setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber());
} else { } else {
content.findViewById(R.id.serial_number_label).setVisibility(View.GONE); content.findViewById(R.id.serial_number_label).setVisibility(View.GONE);

View File

@@ -17,6 +17,7 @@
package com.android.settings.search; package com.android.settings.search;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.app.Activity;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -167,18 +168,18 @@ public interface SearchFeatureProvider {
/** /**
* Initializes the search toolbar. * Initializes the search toolbar.
*/ */
default void initSearchToolbar(Context context, Toolbar toolbar) { default void initSearchToolbar(Activity activity, Toolbar toolbar) {
if (context == null || toolbar == null) { if (activity == null || toolbar == null) {
return; return;
} }
toolbar.setOnClickListener(tb -> { toolbar.setOnClickListener(tb -> {
final Intent intent; final Intent intent;
if (FeatureFlagUtils.isEnabled(FeatureFlags.SEARCH_V2)) { if (FeatureFlagUtils.isEnabled(activity, FeatureFlags.SEARCH_V2)) {
intent = new Intent("com.android.settings.action.SETTINGS_SEARCH"); intent = new Intent("com.android.settings.action.SETTINGS_SEARCH");
} else { } else {
intent = new Intent(context, SearchActivity.class); intent = new Intent(activity, SearchActivity.class);
} }
context.startActivity(intent); activity.startActivityForResult(intent, 0 /* requestCode */);
}); });
} }
} }

View File

@@ -16,6 +16,7 @@
package android.util; package android.util;
import android.content.Context;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.text.TextUtils; import android.text.TextUtils;
@@ -35,7 +36,7 @@ public class FeatureFlagUtils {
* @param feature the flag name * @param feature the flag name
* @return true if the flag is enabled (either by default in system, or override by user) * @return true if the flag is enabled (either by default in system, or override by user)
*/ */
public static boolean isEnabled(String feature) { public static boolean isEnabled(Context context, String feature) {
// Tries to get feature flag from system property. // Tries to get feature flag from system property.
// Step 1: check if feature flag has any override. Flag name: sys.fflag.override.<feature> // Step 1: check if feature flag has any override. Flag name: sys.fflag.override.<feature>
String value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature); String value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature);
@@ -54,7 +55,6 @@ public class FeatureFlagUtils {
SystemProperties.set(FFLAG_OVERRIDE_PREFIX + feature, enabled ? "true" : "false"); SystemProperties.set(FFLAG_OVERRIDE_PREFIX + feature, enabled ? "true" : "false");
} }
public static Map<String, String> getAllFeatureFlags() { public static Map<String, String> getAllFeatureFlags() {
final Map<String, String> features = new HashMap<>(); final Map<String, String> features = new HashMap<>();
features.put(FFLAG_PREFIX + "abc", "false"); features.put(FFLAG_PREFIX + "abc", "false");

View File

@@ -46,7 +46,7 @@ import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config( @Config(
manifest = TestConfig.MANIFEST_PATH, manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION, sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowUtils.class, ShadowConnectivityManager.class} shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
) )
public class DeviceInfoSettingsTest { public class DeviceInfoSettingsTest {

View File

@@ -35,7 +35,7 @@ import java.util.List;
* for conformance. * for conformance.
*/ */
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
assetDir = "/tests/robotests/assets") assetDir = "/tests/robotests/assets")
public class CodeInspectionTest { public class CodeInspectionTest {

View File

@@ -15,18 +15,20 @@
*/ */
package com.android.settings.core.instrumentation; package com.android.settings.core.instrumentation;
import static com.google.common.truth.Truth.assertThat;
import android.os.Bundle; import android.os.Bundle;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication;
import static com.google.common.truth.Truth.assertThat;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class InstrumentedDialogFragmentTest { public class InstrumentedDialogFragmentTest {
public static class TestDialogFragment extends InstrumentedDialogFragment { public static class TestDialogFragment extends InstrumentedDialogFragment {

View File

@@ -15,15 +15,22 @@
*/ */
package com.android.settings.core.instrumentation; package com.android.settings.core.instrumentation;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Pair; import android.util.Pair;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -39,15 +46,8 @@ import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class MetricsFeatureProviderTest { public class MetricsFeatureProviderTest {
private static int CATEGORY = 10; private static int CATEGORY = 10;
private static boolean SUBTYPE_BOOLEAN = true; private static boolean SUBTYPE_BOOLEAN = true;

View File

@@ -15,13 +15,24 @@
*/ */
package com.android.settings.core.instrumentation; package com.android.settings.core.instrumentation;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_SETTINGS_PREFERENCE_CHANGE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_FLOAT_VALUE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.util.Pair; import android.util.Pair;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.google.common.truth.Platform; import com.google.common.truth.Platform;
@@ -34,23 +45,8 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.ACTION_SETTINGS_PREFERENCE_CHANGE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.FIELD_SETTINGS_PREFERENCE_CHANGE_FLOAT_VALUE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SharedPreferenceLoggerTest { public class SharedPreferenceLoggerTest {
private static final String TEST_TAG = "tag"; private static final String TEST_TAG = "tag";

View File

@@ -44,7 +44,7 @@ import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class VisibilityLoggerMixinTest { public class VisibilityLoggerMixinTest {
@Mock @Mock

View File

@@ -37,7 +37,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class FeatureFlagPreferenceControllerTest { public class FeatureFlagPreferenceControllerTest {
@Mock @Mock

View File

@@ -30,7 +30,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class FeatureFlagPreferenceTest { public class FeatureFlagPreferenceTest {
private static final String KEY = "feature_key"; private static final String KEY = "feature_key";

View File

@@ -16,13 +16,20 @@
package com.android.settings.deviceinfo; package com.android.settings.deviceinfo;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -32,15 +39,8 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DeviceModelPreferenceControllerTest { public class DeviceModelPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)

View File

@@ -38,7 +38,7 @@ import org.robolectric.Robolectric;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class HardwareInfoDialogFragmentTest { public class HardwareInfoDialogFragmentTest {
private Activity mActivity; private Activity mActivity;