Merge "Update preference screen title."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3362a43..4bc2c6d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -219,6 +219,12 @@
                   android:theme="@style/Theme.Settings.NoActionBar">
         </activity>
 
+        <activity android:name=".search.SearchResultTrampoline"
+                  android:theme="@android:style/Theme.NoDisplay"
+                  android:excludeFromRecents="true"
+                  android:exported="true">
+        </activity>
+
         <!-- Top-level settings -->
 
         <activity android:name="Settings$WifiSettingsActivity"
diff --git a/res/layout/dialog_hardware_info.xml b/res/layout/dialog_hardware_info.xml
index f9d52b8..9431961 100644
--- a/res/layout/dialog_hardware_info.xml
+++ b/res/layout/dialog_hardware_info.xml
@@ -40,6 +40,20 @@
             android:textAppearance="@android:style/TextAppearance.Material.Body2" />
 
         <TextView
+            android:id="@+id/serial_number_label"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="@android:style/TextAppearance.Material.Body1"
+            android:textColor="?android:attr/textColorSecondary"
+            android:text="@string/status_serial_number" />
+        <TextView
+            android:id="@+id/serial_number_value"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingBottom="24dp"
+            android:textAppearance="@android:style/TextAppearance.Material.Body2" />
+
+        <TextView
             android:id="@+id/hardware_rev_label"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
diff --git a/res/layout/search_panel.xml b/res/layout/search_panel.xml
index 48a1d4c..42fbefb 100644
--- a/res/layout/search_panel.xml
+++ b/res/layout/search_panel.xml
@@ -76,7 +76,7 @@
             android:id="@+id/no_results_layout"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:paddingTop="96dp"
+            android:paddingTop="35dp"
             android:orientation="vertical"
             android:visibility="gone">
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b6b860d..ad64069 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2368,8 +2368,15 @@
     <string name="display_settings">Display</string>
     <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
     <string name="accelerometer_title">Auto-rotate screen</string>
-    <!-- Display settings screen, vivid (or vibrant or saturated) color mode switch label [CHAR LIMIT=30] -->
-    <string name="color_mode_title">Vivid colors</string>
+    <!-- Display settings screen, Color mode settings title [CHAR LIMIT=30] -->
+    <string name="color_mode_title">Colors</string>
+    <!-- Display settings screen, Color mode option for "natural(sRGB) color"  [CHAR LIMIT=45] -->
+    <string name="color_mode_option_natural">Natural</string>
+    <!-- Display settings screen, Color mode option for "Boosted(sRGB + 10%) color"  [CHAR LIMIT=45] -->
+    <string name="color_mode_option_boosted">Boosted</string>
+    <!-- Display settings screen, Color mode option for "Saturated color"  [CHAR LIMIT=45] -->
+    <string name="color_mode_option_saturated">Saturated</string>
+
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
     <string name="accelerometer_summary_on" product="tablet">Switch orientation automatically when rotating tablet</string>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
@@ -2619,6 +2626,8 @@
     <string name="security_patch">Android security patch level</string>
     <!-- About phone screen, status item label  [CHAR LIMIT=40] -->
     <string name="model_info">Model</string>
+    <!-- About phone screen, status item summary  [CHAR LIMIT=40] -->
+    <string name="model_summary">Model&#58; %1$s</string>
     <!-- About phone screen, dialog title for showing hardware information such as model, serial number, etc.[CHAR LIMIT=60] -->
     <string name="hardware_info">Model &amp; hardware</string>
     <!-- Label for device's hardware revision value [CHAR LIMIT=40] -->
diff --git a/res/xml/device_info_settings_v2.xml b/res/xml/device_info_settings_v2.xml
index 4f66b4c..0553f1e 100644
--- a/res/xml/device_info_settings_v2.xml
+++ b/res/xml/device_info_settings_v2.xml
@@ -36,7 +36,7 @@
 
     <!-- Model & hardware -->
     <Preference
-        android:key="model_and_hardware"
+        android:key="device_model"
         android:title="@string/hardware_info"
         android:summary="@string/summary_placeholder"/>
 
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 27ef869..87d3e5e 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -64,9 +64,11 @@
         android:key="auto_rotate"
         android:title="@string/accelerometer_title" />
 
-    <SwitchPreference
+    <Preference
         android:key="color_mode"
-        android:title="@string/color_mode_title" />
+        android:title="@string/color_mode_title"
+        android:fragment="com.android.settings.display.ColorModePreferenceFragment"
+        settings:keywords="@string/keywords_color_mode" />
 
     <Preference
         android:key="font_size"
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 41eb6c6..630b67e 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -49,10 +49,11 @@
 
 public class DeviceInfoSettings extends DashboardFragment implements Indexable {
 
+    public static final String DEVICE_INFO_V2_FEATURE_FLAG = "device_info_v2";
+
     private static final String LOG_TAG = "DeviceInfoSettings";
 
     private static final String KEY_LEGAL_CONTAINER = "legal_container";
-    private static final String DEVICE_INFO_V2_FEATURE_FLAG = "device_info_v2";
 
     @Override
     public int getMetricsCategory() {
@@ -127,7 +128,7 @@
 
             // SIM status
 
-            // Model & hardware
+            controllers.add(new DeviceModelPreferenceController(context, fragment));
 
             // IMEI
 
diff --git a/src/com/android/settings/OwnerInfoSettings.java b/src/com/android/settings/OwnerInfoSettings.java
index 18cfb8e..3128dfe 100644
--- a/src/com/android/settings/OwnerInfoSettings.java
+++ b/src/com/android/settings/OwnerInfoSettings.java
@@ -67,6 +67,7 @@
         mOwnerInfo = (EditText) mView.findViewById(R.id.owner_info_edit_text);
         if (!TextUtils.isEmpty(info)) {
             mOwnerInfo.setText(info);
+            mOwnerInfo.setSelection(info.length());
         }
     }
 
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 8a832a9..b108c62 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -25,7 +25,6 @@
 import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.app.AppGlobals;
-import android.app.AppOpsManager;
 import android.app.Dialog;
 import android.app.Fragment;
 import android.app.IActivityManager;
@@ -103,9 +102,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.AnimationUtils;
 import android.widget.EditText;
 import android.widget.ListView;
 import android.widget.TabWidget;
@@ -114,8 +110,8 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.UserIcons;
 import com.android.internal.widget.LockPatternUtils;
-import com.android.settings.wrapper.FingerprintManagerWrapper;
 import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.FingerprintManagerWrapper;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -242,12 +238,6 @@
         return telephony != null && telephony.isVoiceCapable();
     }
 
-    public static boolean isWifiOnly(Context context) {
-        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
-                Context.CONNECTIVITY_SERVICE);
-        return (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false);
-    }
-
     /**
      * Returns the WIFI IP Addresses, if any, taking into account IPv4 and IPv6 style addresses.
      * @param context the application context
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 1df3aef..8b8f9cf 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -348,7 +348,7 @@
             enabled = false;
             mActionButtons.setButton1Visible(false);
         }
-        mActionButtons.setButton1Text(R.string.uninstall_text);
+        mActionButtons.setButton1Text(R.string.uninstall_text).setButton1Positive(false);
         return enabled;
     }
 
diff --git a/src/com/android/settings/datausage/DataPlanUsageSummary.java b/src/com/android/settings/datausage/DataPlanUsageSummary.java
index 1905deb..912db0a 100644
--- a/src/com/android/settings/datausage/DataPlanUsageSummary.java
+++ b/src/com/android/settings/datausage/DataPlanUsageSummary.java
@@ -27,7 +27,6 @@
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.os.UserManager;
-import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
@@ -44,14 +43,12 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
 import com.android.settingslib.NetworkPolicyEditor;
 import com.android.settingslib.net.DataUsageController;
 import java.util.ArrayList;
 import java.util.List;
 
-public class DataPlanUsageSummary extends DataUsageBase implements Indexable {
+public class DataPlanUsageSummary extends DataUsageBase {
 
     public static final String KEY_DATA_PLAN_USAGE = "data_plan_usage";
 
@@ -353,50 +350,5 @@
 
     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
             = SummaryProvider::new;
-
-    /**
-     * For search
-     */
-    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                        boolean enabled) {
-                    List<SearchIndexableResource> resources = new ArrayList<>();
-                    SearchIndexableResource resource = new SearchIndexableResource(context);
-                    resource.xmlResId = R.xml.data_usage;
-                    resources.add(resource);
-
-                    resource = new SearchIndexableResource(context);
-                    resource.xmlResId = R.xml.data_plan_usage_cell_data_preference_screen;
-                    resources.add(resource);
-
-                    resource = new SearchIndexableResource(context);
-                    resource.xmlResId = R.xml.data_usage_wifi;
-                    resources.add(resource);
-
-                    return resources;
-                }
-
-                @Override
-                public List<String> getNonIndexableKeys(Context context) {
-                    List<String> keys = super.getNonIndexableKeys(context);
-
-                    if (!DataUsageUtils.hasMobileData(context)) {
-                        keys.add(KEY_MOBILE_USAGE_TITLE);
-                        keys.add(KEY_MOBILE_DATA_USAGE_TOGGLE);
-                    }
-
-                    if (!DataUsageUtils.hasWifiRadio(context)) {
-                        keys.add(KEY_WIFI_DATA_USAGE);
-                        keys.add(KEY_NETWORK_RESTRICTIONS);
-                    }
-
-                    keys.add(KEY_WIFI_USAGE_TITLE);
-
-                    return keys;
-                }
-            };
 }
 
diff --git a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
index 8a9568a..d4bd59b 100644
--- a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
+++ b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
@@ -21,8 +21,8 @@
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 
-import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.Utils;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 public class AutoTimeZonePreferenceController extends AbstractPreferenceController
diff --git a/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java b/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java
index 39b6db2..a5390cc 100644
--- a/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java
+++ b/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java
@@ -104,6 +104,6 @@
     }
 
     private boolean isHalHdrplusEnabled() {
-        return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, false);
+        return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, true);
     }
 }
diff --git a/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2.java b/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2.java
similarity index 95%
rename from src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2.java
rename to src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2.java
index cb03bfc..b8828fe 100644
--- a/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2.java
+++ b/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2.java
@@ -29,7 +29,7 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.development.DeveloperOptionsPreferenceController;
 
-public class CameraHalHdrPlusPreferenceControllerV2 extends
+public class CameraHalHdrplusPreferenceControllerV2 extends
         DeveloperOptionsPreferenceController implements
         Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
 
@@ -45,7 +45,7 @@
 
     private SwitchPreference mPreference;
 
-    public CameraHalHdrPlusPreferenceControllerV2(Context context) {
+    public CameraHalHdrplusPreferenceControllerV2(Context context) {
         super(context);
     }
 
@@ -95,6 +95,6 @@
     }
 
     private boolean isHalHdrplusEnabled() {
-        return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, false /* default */);
+        return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, true /* default */);
     }
 }
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index fa89ba4..d532136 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -376,7 +376,7 @@
         controllers.add(new LogPersistPreferenceControllerV2(context, fragment, lifecycle));
         controllers.add(new ConnectivityMonitorPreferenceControllerV2(context));
         controllers.add(new CameraLaserSensorPreferenceControllerV2(context));
-        controllers.add(new CameraHalHdrPlusPreferenceControllerV2(context));
+        controllers.add(new CameraHalHdrplusPreferenceControllerV2(context));
         controllers.add(new WifiDisplayCertificationPreferenceController(context));
         controllers.add(new WifiVerboseLoggingPreferenceController(context));
         controllers.add(new WifiAggressiveHandoverPreferenceController(context));
diff --git a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
index 018a068..90d4c11 100644
--- a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
@@ -20,8 +20,8 @@
 import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.Utils;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 public class BasebandVersionPreferenceController extends AbstractPreferenceController implements
diff --git a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
index f1dc415..e7fab5a 100644
--- a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
@@ -21,7 +21,10 @@
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
 
+import com.android.settings.DeviceInfoSettings;
+import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.DeviceInfoUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -48,7 +51,12 @@
         super.displayPreference(screen);
         final Preference pref = screen.findPreference(KEY_DEVICE_MODEL);
         if (pref != null) {
-            pref.setSummary(getDeviceModel());
+            if (FeatureFlagUtils.isEnabled(DeviceInfoSettings.DEVICE_INFO_V2_FEATURE_FLAG)) {
+                pref.setSummary(mContext.getResources().getString(R.string.model_summary,
+                        getDeviceModel()));
+            } else {
+                pref.setSummary(getDeviceModel());
+            }
         }
     }
 
diff --git a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
index 60082c7..3d825b9 100644
--- a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
@@ -18,15 +18,18 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.SystemProperties;
 import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.TextView;
 
 import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.DeviceInfoSettings;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
@@ -54,6 +57,15 @@
         // Model
         setText(content, R.id.model_label, R.id.model_value,
                 DeviceModelPreferenceController.getDeviceModel());
+
+        // Serial number
+        if (FeatureFlagUtils.isEnabled(DeviceInfoSettings.DEVICE_INFO_V2_FEATURE_FLAG)) {
+            setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber());
+        } else {
+            content.findViewById(R.id.serial_number_label).setVisibility(View.GONE);
+            content.findViewById(R.id.serial_number_value).setVisibility(View.GONE);
+        }
+
         // Hardware rev
         setText(content, R.id.hardware_rev_label, R.id.hardware_rev_value,
                 SystemProperties.get("ro.boot.hardware.revision"));
@@ -77,4 +89,9 @@
             valueView.setVisibility(View.GONE);
         }
     }
+
+    @VisibleForTesting
+    String getSerialNumber() {
+        return Build.getSerial();
+    }
 }
diff --git a/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java
index 8db70c7..f564734 100644
--- a/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java
@@ -17,13 +17,11 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
-import android.os.UserManager;
 
-import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
 
-public class ImeiInfoPreferenceController extends AbstractPreferenceController
+public class ImeiInfoPreferenceController extends AbstractSimStatusImeiInfoPreferenceController
         implements PreferenceControllerMixin {
 
     private static final String KEY_IMEI_INFO = "imei_info";
@@ -33,12 +31,6 @@
     }
 
     @Override
-    public boolean isAvailable() {
-        return ((UserManager) mContext.getSystemService(Context.USER_SERVICE)).isAdminUser()
-                && !Utils.isWifiOnly(mContext);
-    }
-
-    @Override
     public String getPreferenceKey() {
         return KEY_IMEI_INFO;
     }
diff --git a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
index 31b905e..e466bbf 100644
--- a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
@@ -24,7 +24,10 @@
 
 /**
  * Preference controller for displaying device serial number. Wraps {@link Build#getSerial()}.
+ *
+ * deprecated because this preference is no longer used in About Phone V2
  */
+@Deprecated
 public class SerialNumberPreferenceController extends
         AbstractSerialNumberPreferenceController implements
         PreferenceControllerMixin {
diff --git a/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java
index 9dfc95b..99441b5 100644
--- a/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java
@@ -17,13 +17,11 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
-import android.os.UserManager;
 
-import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
 
-public class SimStatusPreferenceController extends AbstractPreferenceController
+public class SimStatusPreferenceController extends AbstractSimStatusImeiInfoPreferenceController
         implements PreferenceControllerMixin {
 
     private static final String KEY_SIM_STATUS = "sim_status";
@@ -33,12 +31,6 @@
     }
 
     @Override
-    public boolean isAvailable() {
-        return ((UserManager) mContext.getSystemService(Context.USER_SERVICE)).isAdminUser()
-                && !Utils.isWifiOnly(mContext);
-    }
-
-    @Override
     public String getPreferenceKey() {
         return KEY_SIM_STATUS;
     }
diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
index 280098d..2fb538e 100644
--- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
@@ -94,7 +94,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 AmbientDisplaySettings.class.getName(), KEY_ALWAYS_ON,
                 mContext.getString(R.string.ambient_display_screen_title));
 
diff --git a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
index c1af133..68a21ce 100644
--- a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
@@ -13,6 +13,9 @@
  */
 package com.android.settings.display;
 
+import static android.provider.Settings.Secure.DOZE_ENABLED;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
+
 import android.content.Context;
 import android.content.Intent;
 import android.os.UserHandle;
@@ -30,9 +33,6 @@
 import com.android.settings.search.ResultPayload;
 import com.android.settingslib.core.AbstractPreferenceController;
 
-import static android.provider.Settings.Secure.DOZE_ENABLED;
-import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
-
 public class AmbientDisplayNotificationsPreferenceController extends
         AbstractPreferenceController implements PreferenceControllerMixin,
         Preference.OnPreferenceChangeListener {
@@ -86,7 +86,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 AmbientDisplaySettings.class.getName(), KEY_AMBIENT_DISPLAY_NOTIFICATIONS,
                 mContext.getString(R.string.ambient_display_screen_title));
 
diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
index e74a1a0..f242022 100644
--- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java
+++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
@@ -73,7 +73,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 DisplaySettings.class.getName(), mAutoBrightnessKey,
                 mContext.getString(R.string.display_settings));
 
diff --git a/src/com/android/settings/display/ColorModePreferenceController.java b/src/com/android/settings/display/ColorModePreferenceController.java
index 2d669d0..2ab2ec9 100644
--- a/src/com/android/settings/display/ColorModePreferenceController.java
+++ b/src/com/android/settings/display/ColorModePreferenceController.java
@@ -18,36 +18,24 @@
 import android.os.Parcel;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.os.SystemProperties;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.TwoStatePreference;
 import android.util.Log;
+
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 public class ColorModePreferenceController extends AbstractPreferenceController implements
-        PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
+        PreferenceControllerMixin {
     private static final String TAG = "ColorModePreference";
-
     private static final String KEY_COLOR_MODE = "color_mode";
 
-    @VisibleForTesting
-    static final float COLOR_SATURATION_DEFAULT = 1.0f;
-    @VisibleForTesting
-    static final float COLOR_SATURATION_VIVID = 1.1f;
+    private static final int SURFACE_FLINGER_TRANSACTION_QUERY_WIDE_COLOR = 1024;
 
-    private static final int SURFACE_FLINGER_TRANSACTION_SATURATION = 1022;
-    @VisibleForTesting
-    static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation";
-
-    private final IBinder mSurfaceFlinger;
     private final ConfigurationWrapper mConfigWrapper;
 
     public ColorModePreferenceController(Context context) {
         super(context);
-        mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
-        mConfigWrapper = new ConfigurationWrapper(context);
+        mConfigWrapper = new ConfigurationWrapper();
     }
 
     @Override
@@ -56,64 +44,35 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        TwoStatePreference colorMode = (TwoStatePreference) preference;
-        colorMode.setChecked(getSaturationValue() > 1.0f);
-    }
-
-    @Override
     public boolean isAvailable() {
         return mConfigWrapper.isScreenWideColorGamut();
     }
 
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        float saturation = (boolean) newValue
-                ? COLOR_SATURATION_VIVID : COLOR_SATURATION_DEFAULT;
-
-        SystemProperties.set(PERSISTENT_PROPERTY_SATURATION, Float.toString(saturation));
-        applySaturation(saturation);
-
-        return true;
-    }
-
-    /**
-     * Propagates the provided saturation to the SurfaceFlinger.
-     */
-    private void applySaturation(float saturation) {
-        if (mSurfaceFlinger != null) {
-            final Parcel data = Parcel.obtain();
-            data.writeInterfaceToken("android.ui.ISurfaceComposer");
-            data.writeFloat(saturation);
-            try {
-                mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_SATURATION, data, null, 0);
-            } catch (RemoteException ex) {
-                Log.e(TAG, "Failed to set saturation", ex);
-            } finally {
-                data.recycle();
-            }
-        }
-    }
-
-    private static float getSaturationValue() {
-        try {
-            return Float.parseFloat(SystemProperties.get(
-                    PERSISTENT_PROPERTY_SATURATION, Float.toString(COLOR_SATURATION_DEFAULT)));
-        } catch (NumberFormatException e) {
-            return COLOR_SATURATION_DEFAULT;
-        }
-    }
-
     @VisibleForTesting
     static class ConfigurationWrapper {
-        private final Context mContext;
+        private final IBinder mSurfaceFlinger;
 
-        ConfigurationWrapper(Context context) {
-            mContext = context;
+        ConfigurationWrapper() {
+            mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
         }
 
         boolean isScreenWideColorGamut() {
-            return mContext.getResources().getConfiguration().isScreenWideColorGamut();
+            if (mSurfaceFlinger != null) {
+                final Parcel data = Parcel.obtain();
+                final Parcel reply = Parcel.obtain();
+                data.writeInterfaceToken("android.ui.ISurfaceComposer");
+                try {
+                    mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_QUERY_WIDE_COLOR,
+                            data, reply, 0);
+                    return reply.readBoolean();
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "Failed to query wide color support", ex);
+                } finally {
+                    data.recycle();
+                    reply.recycle();
+                }
+            }
+            return false;
         }
     }
 }
diff --git a/src/com/android/settings/display/ColorModePreferenceFragment.java b/src/com/android/settings/display/ColorModePreferenceFragment.java
new file mode 100644
index 0000000..7c8b841
--- /dev/null
+++ b/src/com/android/settings/display/ColorModePreferenceFragment.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.display;
+
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.android.settings.R;
+import com.android.settings.widget.RadioButtonPickerFragment;
+
+import java.util.Arrays;
+import java.util.List;
+
+@SuppressWarnings("WeakerAccess")
+public class ColorModePreferenceFragment extends RadioButtonPickerFragment {
+    private static final String TAG = "ColorModePreferenceFragment";
+
+    @VisibleForTesting
+    static final float COLOR_SATURATION_NATURAL = 1.0f;
+    @VisibleForTesting
+    static final float COLOR_SATURATION_BOOSTED = 1.1f;
+
+    private static final int SURFACE_FLINGER_TRANSACTION_SATURATION = 1022;
+    private static final int SURFACE_FLINGER_TRANSACTION_NATIVE_MODE = 1023;
+
+    @VisibleForTesting
+    static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation";
+    @VisibleForTesting
+    static final String PERSISTENT_PROPERTY_NATIVE_MODE = "persist.sys.sf.native_mode";
+
+    @VisibleForTesting
+    static final String KEY_COLOR_MODE_NATURAL = "color_mode_natural";
+    @VisibleForTesting
+    static final String KEY_COLOR_MODE_BOOSTED = "color_mode_boosted";
+    @VisibleForTesting
+    static final String KEY_COLOR_MODE_SATURATED = "color_mode_saturated";
+
+    private IBinder mSurfaceFlinger;
+    private IActivityManager mActivityManager;
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
+        mActivityManager = ActivityManager.getService();
+    }
+
+    @Override
+    protected List<? extends CandidateInfo> getCandidates() {
+        Context c = getContext();
+        return Arrays.asList(
+            new ColorModeCandidateInfo(c.getString(R.string.color_mode_option_natural),
+                    KEY_COLOR_MODE_NATURAL),
+            new ColorModeCandidateInfo(c.getString(R.string.color_mode_option_boosted),
+                    KEY_COLOR_MODE_BOOSTED),
+            new ColorModeCandidateInfo(c.getString(R.string.color_mode_option_saturated),
+                    KEY_COLOR_MODE_SATURATED)
+        );
+    }
+
+    @Override
+    protected String getDefaultKey() {
+        if (isNativeModeEnabled()) {
+            return KEY_COLOR_MODE_SATURATED;
+        }
+        if (getSaturationValue() > COLOR_SATURATION_NATURAL) {
+            return KEY_COLOR_MODE_BOOSTED;
+        }
+        return KEY_COLOR_MODE_NATURAL;
+    }
+
+    @Override
+    protected boolean setDefaultKey(String key) {
+        switch (key) {
+            case KEY_COLOR_MODE_NATURAL:
+                applySaturation(COLOR_SATURATION_NATURAL);
+                setNativeMode(false);
+                break;
+            case KEY_COLOR_MODE_BOOSTED:
+                applySaturation(COLOR_SATURATION_BOOSTED);
+                setNativeMode(false);
+                break;
+            case KEY_COLOR_MODE_SATURATED:
+                applySaturation(COLOR_SATURATION_NATURAL);
+                setNativeMode(true);
+                break;
+        }
+
+        updateConfiguration();
+
+        return true;
+    }
+
+    @VisibleForTesting
+    void updateConfiguration() {
+        try {
+            mActivityManager.updateConfiguration(null);
+        } catch (RemoteException e) {
+            Log.d(TAG, "Could not update configuration", e);
+        }
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.COLOR_MODE_SETTINGS;
+    }
+
+    /**
+     * Propagates the provided saturation to the SurfaceFlinger.
+     */
+    private void applySaturation(float saturation) {
+        SystemProperties.set(PERSISTENT_PROPERTY_SATURATION, Float.toString(saturation));
+        if (mSurfaceFlinger != null) {
+            final Parcel data = Parcel.obtain();
+            data.writeInterfaceToken("android.ui.ISurfaceComposer");
+            data.writeFloat(saturation);
+            try {
+                mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_SATURATION, data, null, 0);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "Failed to set saturation", ex);
+            } finally {
+                data.recycle();
+            }
+        }
+    }
+
+    private static float getSaturationValue() {
+        try {
+            return Float.parseFloat(SystemProperties.get(
+                    PERSISTENT_PROPERTY_SATURATION, Float.toString(COLOR_SATURATION_NATURAL)));
+        } catch (NumberFormatException e) {
+            return COLOR_SATURATION_NATURAL;
+        }
+    }
+
+    /**
+     * Toggles native mode on/off in SurfaceFlinger.
+     */
+    private void setNativeMode(boolean enabled) {
+        SystemProperties.set(PERSISTENT_PROPERTY_NATIVE_MODE, enabled ? "1" : "0");
+        if (mSurfaceFlinger != null) {
+            final Parcel data = Parcel.obtain();
+            data.writeInterfaceToken("android.ui.ISurfaceComposer");
+            data.writeInt(enabled ? 1 : 0);
+            try {
+                mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_NATIVE_MODE, data, null, 0);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "Failed to set native mode", ex);
+            } finally {
+                data.recycle();
+            }
+        }
+    }
+
+    private static boolean isNativeModeEnabled() {
+        return SystemProperties.getBoolean(PERSISTENT_PROPERTY_NATIVE_MODE, false);
+    }
+
+    @VisibleForTesting
+    static class ColorModeCandidateInfo extends CandidateInfo {
+        private final CharSequence mLabel;
+        private final String mKey;
+
+        ColorModeCandidateInfo(CharSequence label, String key) {
+            super(true);
+            mLabel = label;
+            mKey = key;
+        }
+
+        @Override
+        public CharSequence loadLabel() {
+            return mLabel;
+        }
+
+        @Override
+        public Drawable loadIcon() {
+            return null;
+        }
+
+        @Override
+        public String getKey() {
+            return mKey;
+        }
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
index e9a2250..d44f9f8 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
@@ -38,8 +38,10 @@
 import android.util.TimeUtils;
 import android.util.TypedValue;
 import android.view.View;
+
 import com.android.settings.R;
 import com.android.settings.Utils;
+
 import libcore.icu.LocaleData;
 
 import java.util.ArrayList;
@@ -577,7 +579,7 @@
                     || (aggrStates&(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG
                     |HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG
                     |HistoryItem.STATE_WIFI_SCAN_FLAG)) != 0;
-            if (!com.android.settings.Utils.isWifiOnly(getContext())) {
+            if (!com.android.settingslib.Utils.isWifiOnly(getContext())) {
                 mHavePhoneSignal = true;
             }
             if (mHistEnd <= mHistStart) mHistEnd = mHistStart+1;
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
index 88dab49..f00b952 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
@@ -25,6 +25,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.PowerManager;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings.Global;
 import android.support.annotation.VisibleForTesting;
 import android.util.Log;
@@ -38,10 +39,16 @@
 import com.android.settings.dashboard.conditional.BatterySaverCondition;
 import com.android.settings.dashboard.conditional.ConditionManager;
 import com.android.settings.notification.SettingPref;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 import com.android.settings.widget.SwitchBar;
 
+import java.util.Arrays;
+import java.util.List;
+
 public class BatterySaverSettings extends SettingsPreferenceFragment
-        implements SwitchBar.OnSwitchChangeListener, BatterySaverReceiver.BatterySaverListener {
+        implements SwitchBar.OnSwitchChangeListener, BatterySaverReceiver.BatterySaverListener,
+        Indexable {
     private static final String TAG = "BatterySaverSettings";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
     private static final String KEY_TURN_ON_AUTOMATICALLY = "turn_on_automatically";
@@ -89,7 +96,7 @@
             protected String getCaption(Resources res, int value) {
                 if (value > 0 && value < 100) {
                     return res.getString(R.string.battery_saver_turn_on_automatically_pct,
-                                         Utils.formatPercentage(value));
+                            Utils.formatPercentage(value));
                 }
                 return res.getString(R.string.battery_saver_turn_on_automatically_never);
             }
@@ -219,4 +226,18 @@
             }
         }
     }
+
+    /**
+     * For Search.
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.battery_saver_settings;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
index bf6ee8c..1ecba0d 100644
--- a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
+++ b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
@@ -162,7 +162,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 AssistGestureSettings.class.getName(), mAssistGesturePrefKey,
                 mContext.getString(R.string.display_settings));
 
diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index bee9893..049ee18 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -89,7 +89,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 DoubleTapPowerSettings.class.getName(), mDoubleTapPowerKey,
                 mContext.getString(R.string.display_settings));
 
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index 9ec06ae..deffa97 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -89,7 +89,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 DoubleTapScreenSettings.class.getName(), mDoubleTapScreenPrefKey,
                 mContext.getString(R.string.display_settings));
 
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index e1b444c..314cbc3 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -95,7 +95,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 PickupGestureSettings.class.getName(), mPickUpPrefKey,
                 mContext.getString(R.string.display_settings));
 
diff --git a/src/com/android/settings/location/LocationPreferenceController.java b/src/com/android/settings/location/LocationPreferenceController.java
index 225100f..9b68848 100644
--- a/src/com/android/settings/location/LocationPreferenceController.java
+++ b/src/com/android/settings/location/LocationPreferenceController.java
@@ -127,7 +127,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 LocationSettings.class.getName(), KEY_LOCATION,
                 mContext.getString(R.string.location_settings_title));
 
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index d66b310..39d5f6d 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -27,6 +27,7 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.SearchIndexableResource;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceGroup;
@@ -40,6 +41,8 @@
 import com.android.settings.Utils;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
@@ -47,6 +50,7 @@
 import com.android.settingslib.location.RecentLocationApps;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -77,7 +81,7 @@
  * implementation.
  */
 public class LocationSettings extends LocationSettingsBase
-        implements SwitchBar.OnSwitchChangeListener {
+        implements SwitchBar.OnSwitchChangeListener, Indexable {
 
     private static final String TAG = "LocationSettings";
 
@@ -455,4 +459,18 @@
             return new SummaryProvider(activity, summaryLoader);
         }
     };
+
+    /**
+     * For Search.
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.location_settings;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/location/ScanningSettings.java b/src/com/android/settings/location/ScanningSettings.java
index fd5a7fd..5c34b62 100644
--- a/src/com/android/settings/location/ScanningSettings.java
+++ b/src/com/android/settings/location/ScanningSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.location;
 
+import android.content.Context;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings.Global;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
@@ -24,11 +26,16 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * A page that configures the background scanning settings for Wi-Fi and Bluetooth.
  */
-public class ScanningSettings extends SettingsPreferenceFragment {
+public class ScanningSettings extends SettingsPreferenceFragment implements Indexable {
     private static final String KEY_WIFI_SCAN_ALWAYS_AVAILABLE = "wifi_always_scanning";
     private static final String KEY_BLUETOOTH_SCAN_ALWAYS_AVAILABLE = "bluetooth_always_scanning";
 
@@ -56,13 +63,13 @@
 
     private void initPreferences() {
         final SwitchPreference wifiScanAlwaysAvailable =
-            (SwitchPreference) findPreference(KEY_WIFI_SCAN_ALWAYS_AVAILABLE);
+                (SwitchPreference) findPreference(KEY_WIFI_SCAN_ALWAYS_AVAILABLE);
         wifiScanAlwaysAvailable.setChecked(Global.getInt(getContentResolver(),
-                    Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1);
+                Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1);
         final SwitchPreference bleScanAlwaysAvailable =
-            (SwitchPreference) findPreference(KEY_BLUETOOTH_SCAN_ALWAYS_AVAILABLE);
+                (SwitchPreference) findPreference(KEY_BLUETOOTH_SCAN_ALWAYS_AVAILABLE);
         bleScanAlwaysAvailable.setChecked(Global.getInt(getContentResolver(),
-                    Global.BLE_SCAN_ALWAYS_AVAILABLE, 0) == 1);
+                Global.BLE_SCAN_ALWAYS_AVAILABLE, 0) == 1);
     }
 
     @Override
@@ -81,4 +88,18 @@
         }
         return true;
     }
+
+    /**
+     * For Search.
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.location_scanning;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 1199400..1670b0d 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -15,6 +15,9 @@
  */
 package com.android.settings.network;
 
+import static android.os.UserHandle.myUserId;
+import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+
 import android.content.Context;
 import android.os.UserManager;
 import android.support.annotation.VisibleForTesting;
@@ -24,17 +27,14 @@
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 
-import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.wrapper.RestrictedLockUtilsWrapper;
+import com.android.settingslib.Utils;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
-import static android.os.UserHandle.myUserId;
-import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
-
 public class MobileNetworkPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause {
 
diff --git a/src/com/android/settings/network/MobilePlanPreferenceController.java b/src/com/android/settings/network/MobilePlanPreferenceController.java
index d5ff924..6556113 100644
--- a/src/com/android/settings/network/MobilePlanPreferenceController.java
+++ b/src/com/android/settings/network/MobilePlanPreferenceController.java
@@ -15,6 +15,13 @@
  */
 package com.android.settings.network;
 
+import static android.content.Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.os.UserHandle.myUserId;
+import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+
+import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
+
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
@@ -30,8 +37,8 @@
 import android.util.Log;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.Utils;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnCreate;
@@ -39,12 +46,6 @@
 
 import java.util.List;
 
-import static android.content.Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-import static android.os.UserHandle.myUserId;
-import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
-import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
-
 
 public class MobilePlanPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnSaveInstanceState {
diff --git a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
index 94eccf9..18efd43 100644
--- a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
@@ -133,7 +133,7 @@
 
     @Override
     public ResultPayload getResultPayload() {
-        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+        final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
                 ConfigureNotificationSettings.class.getName(), KEY_NOTIFICATION_BADGING,
                 mContext.getString(R.string.configure_notification_settings));
 
diff --git a/src/com/android/settings/notification/ZenModeBehaviorSettings.java b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
index 1b5e69f..d03b015 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorSettings.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
@@ -18,7 +18,9 @@
 
 import android.app.NotificationManager;
 import android.app.NotificationManager.Policy;
+import android.content.Context;
 import android.os.Bundle;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.service.notification.ZenModeConfig;
 import android.support.v14.preference.SwitchPreference;
@@ -30,8 +32,13 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 
-public class ZenModeBehaviorSettings extends ZenModeSettingsBase {
+import java.util.Arrays;
+import java.util.List;
+
+public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
     private static final String KEY_ALARMS = "zen_mode_alarms";
     private static final String KEY_MEDIA = "zen_mode_media";
     private static final String KEY_REMINDERS = "zen_mode_reminders";
@@ -303,4 +310,18 @@
         NotificationManager.from(mContext).setNotificationPolicy(mPolicy);
     }
 
+    /**
+     * For Search.
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.zen_mode_behavior_settings;
+                    return Arrays.asList(sir);
+                }
+            };
+
 }
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index f112c1b..7f9a7c3 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -29,6 +29,7 @@
 import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.service.notification.ConditionProviderService;
 import android.service.notification.ZenModeConfig;
@@ -41,6 +42,8 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 import com.android.settings.utils.ManagedServiceSettings;
 import com.android.settings.utils.ZenServiceListing;
 import com.android.settingslib.TwoTargetPreference;
@@ -52,7 +55,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
-public class ZenModeSettings extends ZenModeSettingsBase {
+public class ZenModeSettings extends ZenModeSettingsBase implements Indexable {
 
     public static final String KEY_VISUAL_SETTINGS = "zen_mode_visual_interruptions_settings";
     private static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_behavior_settings";
@@ -499,4 +502,17 @@
                     return type + rule.getName().toString();
                 }
             };
+    /**
+     * For Search.
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.zen_mode_settings;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java b/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
index aa27848..474992c 100644
--- a/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
+++ b/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
@@ -18,7 +18,9 @@
 
 import android.app.NotificationManager;
 import android.app.NotificationManager.Policy;
+import android.content.Context;
 import android.os.Bundle;
+import android.provider.SearchIndexableResource;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
@@ -26,8 +28,13 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 
-public class ZenModeVisualInterruptionSettings extends ZenModeSettingsBase {
+import java.util.Arrays;
+import java.util.List;
+
+public class ZenModeVisualInterruptionSettings extends ZenModeSettingsBase implements Indexable {
 
     private static final String KEY_SCREEN_OFF = "screenOff";
     private static final String KEY_SCREEN_ON = "screenOn";
@@ -122,4 +129,18 @@
                 suppressedVisualEffects);
         NotificationManager.from(mContext).setNotificationPolicy(mPolicy);
     }
+
+    /**
+     * For Search.
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.zen_mode_visual_interruptions_settings;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/search/AccessibilityServiceResultLoader.java b/src/com/android/settings/search/AccessibilityServiceResultLoader.java
index 64cceb7..345ab30 100644
--- a/src/com/android/settings/search/AccessibilityServiceResultLoader.java
+++ b/src/com/android/settings/search/AccessibilityServiceResultLoader.java
@@ -102,7 +102,7 @@
             }
             final String componentName = new ComponentName(serviceInfo.packageName,
                     serviceInfo.name).flattenToString();
-            final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(context,
+            final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
                     AccessibilitySettings.class.getName(), componentName, screenTitle);
 
             results.add(new SearchResult.Builder()
diff --git a/src/com/android/settings/search/DatabaseIndexingUtils.java b/src/com/android/settings/search/DatabaseIndexingUtils.java
index ce58256..8d63ea5 100644
--- a/src/com/android/settings/search/DatabaseIndexingUtils.java
+++ b/src/com/android/settings/search/DatabaseIndexingUtils.java
@@ -46,21 +46,28 @@
             "SEARCH_INDEX_DATA_PROVIDER";
 
     /**
-     * Builds intent into a subsetting.
+     * Builds intent that launches the search destination as a sub-setting.
      */
-    public static Intent buildSubsettingIntent(Context context, String className, String key,
+    public static Intent buildSearchResultPageIntent(Context context, String className, String key,
             String screenTitle) {
+        return buildSearchResultPageIntent(context, className, key, screenTitle,
+                MetricsProto.MetricsEvent.DASHBOARD_SEARCH_RESULTS);
+    }
+
+    public static Intent  buildSearchResultPageIntent(Context context, String className, String key,
+            String screenTitle, int sourceMetricsCategory) {
         final Bundle args = new Bundle();
         args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
-        return Utils.onBuildStartFragmentIntent(context,
-                className, args, null, 0, screenTitle, false,
-                MetricsProto.MetricsEvent.DASHBOARD_SEARCH_RESULTS);
+        final Intent searchDestination = Utils.onBuildStartFragmentIntent(context,
+                className, args, null, 0, screenTitle, false, sourceMetricsCategory);
+        searchDestination.putExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
+        searchDestination.setClass(context, SearchResultTrampoline.class);
+        return searchDestination;
     }
 
     /**
      * @param className which wil provide the map between from {@link Uri}s to
-     * {@link PreferenceControllerMixin}
-     * @param context
+     *                  {@link PreferenceControllerMixin}
      * @return A map between {@link Uri}s and {@link PreferenceControllerMixin}s to get the payload
      * types for Settings.
      */
@@ -85,7 +92,7 @@
         List<AbstractPreferenceController> controllers =
                 provider.getPreferenceControllers(context);
 
-        if (controllers == null ) {
+        if (controllers == null) {
             return null;
         }
 
@@ -106,7 +113,7 @@
     /**
      * @param uriMap Map between the {@link PreferenceControllerMixin} keys
      *               and the controllers themselves.
-     * @param key The look-up key
+     * @param key    The look-up key
      * @return The Payload from the {@link PreferenceControllerMixin} specified by the key,
      * if it exists. Otherwise null.
      */
diff --git a/src/com/android/settings/search/InputDeviceResultLoader.java b/src/com/android/settings/search/InputDeviceResultLoader.java
index 61e1ad1..e5e6553 100644
--- a/src/com/android/settings/search/InputDeviceResultLoader.java
+++ b/src/com/android/settings/search/InputDeviceResultLoader.java
@@ -107,7 +107,7 @@
                     : context.getString(R.string.keyboard_layout_default_label);
             final String key = deviceName;
 
-            final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(context,
+            final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
                     PHYSICAL_KEYBOARD_FRAGMENT, key, screenTitle);
             results.add(new SearchResult.Builder()
                     .setTitle(deviceName)
@@ -140,7 +140,7 @@
             final ServiceInfo serviceInfo = info.getServiceInfo();
             final String key = new ComponentName(serviceInfo.packageName, serviceInfo.name)
                     .flattenToString();
-            final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(context,
+            final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
                     VIRTUAL_KEYBOARD_FRAGMENT, key, screenTitle);
             results.add(new SearchResult.Builder()
                     .setTitle(title)
diff --git a/src/com/android/settings/search/IntentSearchViewHolder.java b/src/com/android/settings/search/IntentSearchViewHolder.java
index 711d08e..8f6aa2c 100644
--- a/src/com/android/settings/search/IntentSearchViewHolder.java
+++ b/src/com/android/settings/search/IntentSearchViewHolder.java
@@ -20,6 +20,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.UserHandle;
+import android.support.annotation.VisibleForTesting;
 import android.util.Log;
 import android.view.View;
 
@@ -34,6 +35,8 @@
 public class IntentSearchViewHolder extends SearchViewHolder {
 
     private static final String TAG = "IntentSearchViewHolder";
+    @VisibleForTesting
+    static final int REQUEST_CODE_NO_OP = 0;
 
     public IntentSearchViewHolder(View view) {
         super(view);
@@ -60,7 +63,7 @@
                 final PackageManager pm = fragment.getActivity().getPackageManager();
                 final List<ResolveInfo> info = pm.queryIntentActivities(intent, 0 /* flags */);
                 if (info != null && !info.isEmpty()) {
-                    fragment.startActivity(intent);
+                    fragment.startActivityForResult(intent, REQUEST_CODE_NO_OP);
                 } else {
                     Log.e(TAG, "Cannot launch search result, title: "
                             + result.title + ", " + intent);
diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java
index 956808d..4df8203 100644
--- a/src/com/android/settings/search/SearchFeatureProvider.java
+++ b/src/com/android/settings/search/SearchFeatureProvider.java
@@ -16,6 +16,8 @@
  */
 package com.android.settings.search;
 
+import android.annotation.NonNull;
+import android.content.ComponentName;
 import android.content.Context;
 import android.view.View;
 
@@ -33,6 +35,15 @@
     boolean isEnabled(Context context);
 
     /**
+     * Ensures the caller has necessary privilege to launch search result page.
+     *
+     * @throws IllegalArgumentException when caller is null
+     * @throws SecurityException        when caller is not allowed to launch search result page
+     */
+    void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller)
+            throws SecurityException, IllegalArgumentException;
+
+    /**
      * Returns a new loader to search in index database.
      */
     DatabaseResultLoader getDatabaseSearchLoader(Context context, String query);
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java
index 420b847..8c4883e 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java
@@ -17,6 +17,7 @@
 
 package com.android.settings.search;
 
+import android.content.ComponentName;
 import android.content.Context;
 import android.text.TextUtils;
 import android.util.Log;
@@ -43,6 +44,18 @@
     }
 
     @Override
+    public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) {
+        if (caller == null) {
+            throw new IllegalArgumentException("ExternalSettingsTrampoline intents "
+                    + "must be called with startActivityForResult");
+        }
+        final String packageName = caller.getPackageName();
+        if (!TextUtils.equals(packageName, context.getPackageName())) {
+            throw new SecurityException("Only Settings app can launch search result page");
+        }
+    }
+
+    @Override
     public DatabaseResultLoader getDatabaseSearchLoader(Context context, String query) {
         return new DatabaseResultLoader(context, cleanQuery(query), getSiteMapManager());
     }
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 1774615..7252e2d 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -17,7 +17,6 @@
 package com.android.settings.search;
 
 import android.provider.SearchIndexableResource;
-import android.support.annotation.DrawableRes;
 import android.support.annotation.VisibleForTesting;
 import android.support.annotation.XmlRes;
 import android.text.TextUtils;
@@ -27,7 +26,6 @@
 import com.android.settings.DisplaySettings;
 import com.android.settings.EncryptionAndCredential;
 import com.android.settings.LegalSettings;
-import com.android.settings.R;
 import com.android.settings.ScreenPinningSettings;
 import com.android.settings.SecuritySettings;
 import com.android.settings.accessibility.AccessibilitySettings;
@@ -42,7 +40,6 @@
 import com.android.settings.backup.BackupSettingsFragment;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
-import com.android.settings.datausage.DataPlanUsageSummary;
 import com.android.settings.datausage.DataUsageMeteredSettings;
 import com.android.settings.datausage.DataUsageSummary;
 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
@@ -104,23 +101,21 @@
     public static final String SUBSETTING_TARGET_PACKAGE = "subsetting_target_package";
 
     @XmlRes
-    public static final int NO_DATA_RES_ID = 0;
+    public static final int NO_RES_ID = 0;
 
     @VisibleForTesting
     static final HashMap<String, SearchIndexableResource> sResMap = new HashMap<>();
 
     @VisibleForTesting
-    static void addIndex(Class<?> indexClass, @XmlRes int xmlResId,
-            @DrawableRes int iconResId) {
-        addIndex(indexClass, xmlResId, iconResId, null /* targetAction */);
+    static void addIndex(Class<?> indexClass) {
+        addIndex(indexClass, null /* targetAction */);
     }
 
     @VisibleForTesting
-    static void addIndex(Class<?> indexClass, @XmlRes int xmlResId,
-            @DrawableRes int iconResId, String targetAction) {
+    static void addIndex(Class<?> indexClass, String targetAction) {
         String className = indexClass.getName();
-        SearchIndexableResource resource =
-                new SearchIndexableResource(0, xmlResId, className, iconResId);
+        SearchIndexableResource resource = new SearchIndexableResource(
+                0 /* rank */, NO_RES_ID, className, NO_RES_ID);
 
         if (!TextUtils.isEmpty(targetAction)) {
             resource.intentAction = targetAction;
@@ -131,98 +126,73 @@
     }
 
     static {
-        addIndex(WifiSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless);
-        addIndex(NetworkDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless);
-        addIndex(ConfigureWifiSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless);
-        addIndex(SavedAccessPointsWifiSettings.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_wireless);
-        addIndex(BluetoothSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_bluetooth);
-        addIndex(SimSettings.class, NO_DATA_RES_ID, R.drawable.ic_sim_sd);
-        addIndex(DataPlanUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
-        addIndex(DataUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
-        addIndex(DataUsageMeteredSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
-        addIndex(ScreenZoomSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
-        addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display,
-                "android.settings.DISPLAY_SETTINGS");
-        addIndex(AmbientDisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
-        addIndex(WallpaperTypeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
-        addIndex(ConfigureNotificationSettings.class,
-                R.xml.configure_notification_settings, R.drawable.ic_settings_notifications);
-        addIndex(AppAndNotificationDashboardFragment.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_applications);
-        addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound,
-                "android.settings.SOUND_SETTINGS");
-        addIndex(ZenModeSettings.class,
-                R.xml.zen_mode_settings, R.drawable.ic_settings_notifications);
-        addIndex(ZenModeBehaviorSettings.class,
-                R.xml.zen_mode_behavior_settings, R.drawable.ic_settings_notifications);
-        addIndex(StorageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
-        addIndex(PowerUsageSummary.class,
-                R.xml.power_usage_summary, R.drawable.ic_settings_battery);
-        addIndex(PowerUsageAdvanced.class, NO_DATA_RES_ID, R.drawable.ic_settings_battery);
-        addIndex(BatterySaverSettings.class,
-                R.xml.battery_saver_settings, R.drawable.ic_settings_battery);
-        addIndex(DefaultAppSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
-        addIndex(ManageAssist.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
-        addIndex(SpecialAccessSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
-        addIndex(UserSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_multiuser);
-        addIndex(AssistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
-        addIndex(PickupGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
-        addIndex(DoubleTapScreenSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
-        addIndex(DoubleTapPowerSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
-        addIndex(DoubleTwistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
-        addIndex(SwipeToNotificationSettings.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_gestures);
-        addIndex(GestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
-        addIndex(LanguageAndInputSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
-        addIndex(LocationSettings.class, R.xml.location_settings, R.drawable.ic_settings_location);
-        addIndex(ScanningSettings.class, R.xml.location_scanning, R.drawable.ic_settings_location);
-        addIndex(SecuritySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
-        addIndex(EncryptionAndCredential.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
-        addIndex(ScreenPinningSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
-        addIndex(UserAndAccountDashboardFragment.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_accounts);
-        addIndex(VirtualKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
-        addIndex(AvailableVirtualKeyboardFragment.class,
-                NO_DATA_RES_ID, R.drawable.ic_settings_language);
-        addIndex(PhysicalKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
-        addIndex(BackupSettingsActivity.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup);
-        addIndex(BackupSettingsFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup);
-        addIndex(DateTimeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_date_time);
-        addIndex(AccessibilitySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility);
-        addIndex(PrintSettingsFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_print);
-        addIndex(DevelopmentSettingsDashboardFragment.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_development);
-        addIndex(DeviceInfoSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
-        addIndex(Status.class, NO_DATA_RES_ID, 0 /* icon */);
-        addIndex(LegalSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
-        addIndex(ZenModeVisualInterruptionSettings.class,
-                R.xml.zen_mode_visual_interruptions_settings,
-                R.drawable.ic_settings_notifications);
-        addIndex(SystemDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
-        addIndex(ResetDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_restore);
-        addIndex(StorageDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
-        addIndex(ConnectedDeviceDashboardFragment.class, NO_DATA_RES_ID,
-                R.drawable.ic_devices_other);
-        addIndex(EnterprisePrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
-        addIndex(PaymentSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_nfc_payment);
-        addIndex(TextToSpeechSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility);
-        addIndex(
-                TtsEnginePreferenceFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
-        addIndex(LockscreenDashboardFragment.class, R.xml.security_lockscreen_settings,
-                R.drawable.ic_settings_security);
-        addIndex(MagnificationPreferenceFragment.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_accessibility);
-        addIndex(AccessibilityShortcutPreferenceFragment.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_accessibility);
-        addIndex(ChannelImportanceSettings.class, NO_DATA_RES_ID,
-                R.drawable.ic_settings_notifications);
-        addIndex(DreamSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
-        addIndex(SupportDashboardActivity.class, NO_DATA_RES_ID, R.drawable.ic_help);
-        addIndex(
-                AutomaticStorageManagerSettings.class,
-                NO_DATA_RES_ID,
-                R.drawable.ic_settings_storage);
+        addIndex(WifiSettings.class);
+        addIndex(NetworkDashboardFragment.class);
+        addIndex(ConfigureWifiSettings.class);
+        addIndex(SavedAccessPointsWifiSettings.class);
+        addIndex(BluetoothSettings.class);
+        addIndex(SimSettings.class);
+        addIndex(DataUsageSummary.class);
+        addIndex(DataUsageMeteredSettings.class);
+        addIndex(ScreenZoomSettings.class);
+        addIndex(DisplaySettings.class, "android.settings.DISPLAY_SETTINGS");
+        addIndex(AmbientDisplaySettings.class);
+        addIndex(WallpaperTypeSettings.class);
+        addIndex(AppAndNotificationDashboardFragment.class);
+        addIndex(SoundSettings.class, "android.settings.SOUND_SETTINGS");
+        addIndex(ZenModeSettings.class);
+        addIndex(StorageSettings.class);
+        addIndex(PowerUsageAdvanced.class);
+        addIndex(DefaultAppSettings.class);
+        addIndex(ManageAssist.class);
+        addIndex(SpecialAccessSettings.class);
+        addIndex(UserSettings.class);
+        addIndex(AssistGestureSettings.class);
+        addIndex(PickupGestureSettings.class);
+        addIndex(DoubleTapScreenSettings.class);
+        addIndex(DoubleTapPowerSettings.class);
+        addIndex(DoubleTwistGestureSettings.class);
+        addIndex(SwipeToNotificationSettings.class);
+        addIndex(GestureSettings.class);
+        addIndex(LanguageAndInputSettings.class);
+        addIndex(LocationSettings.class);
+        addIndex(ScanningSettings.class);
+        addIndex(SecuritySettings.class);
+        addIndex(EncryptionAndCredential.class);
+        addIndex(ScreenPinningSettings.class);
+        addIndex(UserAndAccountDashboardFragment.class);
+        addIndex(VirtualKeyboardFragment.class);
+        addIndex(AvailableVirtualKeyboardFragment.class);
+        addIndex(PhysicalKeyboardFragment.class);
+        addIndex(BackupSettingsActivity.class);
+        addIndex(BackupSettingsFragment.class);
+        addIndex(DateTimeSettings.class);
+        addIndex(AccessibilitySettings.class);
+        addIndex(PrintSettingsFragment.class);
+        addIndex(DevelopmentSettingsDashboardFragment.class);
+        addIndex(DeviceInfoSettings.class);
+        addIndex(Status.class);
+        addIndex(LegalSettings.class);
+        addIndex(SystemDashboardFragment.class);
+        addIndex(ResetDashboardFragment.class);
+        addIndex(StorageDashboardFragment.class);
+        addIndex(ConnectedDeviceDashboardFragment.class);
+        addIndex(EnterprisePrivacySettings.class);
+        addIndex(PaymentSettings.class);
+        addIndex(TextToSpeechSettings.class);
+        addIndex(TtsEnginePreferenceFragment.class);
+        addIndex(MagnificationPreferenceFragment.class);
+        addIndex(AccessibilityShortcutPreferenceFragment.class);
+        addIndex(ChannelImportanceSettings.class);
+        addIndex(DreamSettings.class);
+        addIndex(SupportDashboardActivity.class);
+        addIndex(AutomaticStorageManagerSettings.class);
+        addIndex(ConfigureNotificationSettings.class);
+        addIndex(PowerUsageSummary.class);
+        addIndex(BatterySaverSettings.class);
+        addIndex(LockscreenDashboardFragment.class);
+        addIndex(ZenModeBehaviorSettings.class);
+        addIndex(ZenModeVisualInterruptionSettings.class);
     }
 
     private SearchIndexableResources() {
diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java
new file mode 100644
index 0000000..3bbe6bd
--- /dev/null
+++ b/src/com/android/settings/search/SearchResultTrampoline.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search;
+
+import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.SubSettings;
+import com.android.settings.overlay.FeatureFactory;
+
+/**
+ * A trampoline activity that launches setting result page.
+ */
+public class SearchResultTrampoline extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // First make sure caller has privilege to launch a search result page.
+        FeatureFactory.getFactory(this)
+                .getSearchFeatureProvider()
+                .verifyLaunchSearchResultPageCaller(this, getCallingActivity());
+        // Didn't crash, proceed and launch the result as a subsetting.
+        final Intent intent = getIntent();
+
+        // Hack to take EXTRA_FRAGMENT_ARG_KEY from intent and set into
+        // EXTRA_SHOW_FRAGMENT_ARGUMENTS. This is necessary because intent could be from external
+        // caller and args may not persisted.
+        final String settingKey = intent.getStringExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
+        final Bundle args = new Bundle();
+        args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, settingKey);
+        intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
+
+        // Reroute request to SubSetting.
+        intent.setClass(this /* context */, SubSettings.class)
+                .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+        startActivity(intent);
+
+        // Done.
+        finish();
+    }
+
+}
diff --git a/src/com/android/settings/search/indexing/IndexData.java b/src/com/android/settings/search/indexing/IndexData.java
index 0e1fa2d..9dad3fe 100644
--- a/src/com/android/settings/search/indexing/IndexData.java
+++ b/src/com/android/settings/search/indexing/IndexData.java
@@ -273,7 +273,7 @@
                     || TextUtils.equals(mIntentTargetPackage,
                     SearchIndexableResources.SUBSETTING_TARGET_PACKAGE)) {
                 // Action is null, we will launch it as a sub-setting
-                intent = DatabaseIndexingUtils.buildSubsettingIntent(context, mClassName, mKey,
+                intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context, mClassName, mKey,
                         mScreenTitle);
             } else {
                 intent = new Intent(mIntentAction);
diff --git a/src/com/android/settings/search/indexing/IndexDataConverter.java b/src/com/android/settings/search/indexing/IndexDataConverter.java
index 8010db9..2b875c3 100644
--- a/src/com/android/settings/search/indexing/IndexDataConverter.java
+++ b/src/com/android/settings/search/indexing/IndexDataConverter.java
@@ -30,7 +30,6 @@
 import android.util.Xml;
 
 import com.android.settings.core.PreferenceControllerMixin;
-
 import com.android.settings.search.DatabaseIndexingUtils;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.ResultPayload;
@@ -44,7 +43,6 @@
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -310,8 +308,8 @@
         } catch (XmlPullParserException e) {
             Log.w(LOG_TAG, "XML Error parsing PreferenceScreen: ", e);
         } catch (IOException e) {
-            Log.w(LOG_TAG, "IO Error parsing PreferenceScreen: " , e);
-        } catch (Resources.NotFoundException e ) {
+            Log.w(LOG_TAG, "IO Error parsing PreferenceScreen: ", e);
+        } catch (Resources.NotFoundException e) {
             Log.w(LOG_TAG, "Resoucre not found error parsing PreferenceScreen: ", e);
         } finally {
             if (parser != null) parser.close();
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 9ff2c4f..8ee340a 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -60,7 +60,7 @@
 
 import com.android.settings.ProxySelector;
 import com.android.settings.R;
-import com.android.settings.Utils;
+import com.android.settingslib.Utils;
 import com.android.settingslib.wifi.AccessPoint;
 
 import java.net.Inet4Address;
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index d4a8d2d..091ba12 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -1,5 +1,4 @@
 com.android.settings.location.LocationMode
-com.android.settings.notification.ZenModeVisualInterruptionSettings
 com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment
 com.android.settings.deviceinfo.SimStatus
 com.android.settings.deviceinfo.PrivateVolumeForget
@@ -23,18 +22,16 @@
 com.android.settings.notification.ChannelNotificationSettings
 com.android.settings.notification.ChannelGroupNotificationSettings
 com.android.settings.datausage.AppDataUsage
+com.android.settings.datausage.DataPlanUsageSummary
 com.android.settings.accessibility.FontSizePreferenceFragmentForSetupWizard
 com.android.settings.applications.ManageDomainUrls
 com.android.settings.applications.WriteSettingsDetails
-com.android.settings.location.LocationSettings
 com.android.settings.applications.ProcessStatsSummary
 com.android.settings.users.RestrictedProfileSettings
 com.android.settings.accounts.ChooseAccountActivity
 com.android.settings.accounts.ManagedProfileSettings
 com.android.settings.accessibility.ToggleAutoclickPreferenceFragment
 com.android.settings.applications.AppLaunchSettings
-com.android.settings.fuelgauge.BatterySaverSettings
-com.android.settings.location.ScanningSettings
 com.android.settings.applications.ProcessStatsUi
 com.android.settings.notification.ZenModeScheduleRuleSettings
 com.android.settings.datausage.BillingCycleSettings
@@ -68,8 +65,6 @@
 com.android.settings.applications.UsageAccessDetails
 com.android.settings.applications.AppStorageSettings
 com.android.settings.notification.NotificationAccessSettings
-com.android.settings.notification.ZenModeSettings
-com.android.settings.notification.ZenModeBehaviorSettings
 com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
 com.android.settings.localepicker.LocaleListEditor
 com.android.settings.applications.ExternalSourcesDetails
diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
index c5a1833..09ee15f 100644
--- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -17,26 +17,25 @@
 package com.android.settings;
 
 import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.os.Build;
-import android.os.UserManager;
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settingslib.DeviceInfoUtils;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
@@ -48,17 +47,13 @@
 @Config(
     manifest = TestConfig.MANIFEST_PATH,
     sdk = TestConfig.SDK_VERSION,
-    shadows = ShadowUtils.class
+    shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
 )
 public class DeviceInfoSettingsTest {
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
     @Mock
     private PreferenceScreen mScreen;
     @Mock
-    private UserManager mUserManager;
-    @Mock
     private SummaryLoader mSummaryLoader;
 
     private DeviceInfoSettings mSettings;
@@ -66,7 +61,6 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
         mSettings = spy(new DeviceInfoSettings());
         doReturn(mScreen).when(mSettings).getPreferenceScreen();
     }
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
index 93f364b..58a9577 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
@@ -564,6 +564,21 @@
                 mAppDetail.mBatteryCallbacks);
     }
 
+    @Test
+    public void initUninstallButtonForUserApp_shouldSetNegativeButton() {
+        final ApplicationInfo info = new ApplicationInfo();
+        info.flags = ApplicationInfo.FLAG_INSTALLED;
+        info.enabled = true;
+        final PackageInfo packageInfo = mock(PackageInfo.class);
+        packageInfo.applicationInfo = info;
+        ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+
+        mAppDetail.initUninstallButtonForUserApp();
+
+        verify(mAppDetail.mActionButtons).setButton1Positive(false);
+    }
+
     @Implements(Utils.class)
     public static class ShadowUtils {
         @Implementation
diff --git a/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
index 6c8ad9b..c71bc29 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
@@ -16,14 +16,21 @@
 
 package com.android.settings.applications.assist;
 
+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.content.ContentResolver;
 import android.content.Context;
 import android.provider.Settings;
 import android.support.v7.preference.PreferenceScreen;
 import android.support.v7.preference.TwoStatePreference;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
@@ -35,13 +42,6 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
-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)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class AssistContextPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
index 72e0b10..748c317 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
@@ -33,17 +33,13 @@
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.testutils.XmlTestUtils;
-import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
 import com.android.settingslib.NetworkPolicyEditor;
 import java.util.ArrayList;
-import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.util.ReflectionHelpers;
@@ -128,53 +124,6 @@
         assertThat(mDataUsageSummary.isMetered(mWifiConfiguration)).isFalse();
     }
 
-    @Test
-    @Config(shadows = ShadowDataUsageUtils.class)
-    public void testNonIndexableKeys_existInXmlLayout() {
-        final Context context = RuntimeEnvironment.application;
-        ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true;
-        ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true;
-        final List<String> niks = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER
-                .getNonIndexableKeys(context);
-        final List<String> keys = new ArrayList<>();
-
-        keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage_wifi));
-        keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage));
-        keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context,
-                R.xml.data_plan_usage_cell_data_preference_screen));
-
-        assertThat(keys).containsAllIn(niks);
-    }
-
-    @Test
-    @Config(shadows = ShadowDataUsageUtils.class)
-    public void testNonIndexableKeys_hasMobileData_hasWifi_allNonIndexableKeysAdded() {
-        ShadowDataUsageUtils.IS_WIFI_SUPPORTED = false;
-        ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = false;
-        List<String> keys = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER
-                .getNonIndexableKeys(mContext);
-
-        // Mobile data keys
-        assertThat(keys).contains(DataPlanUsageSummary.KEY_MOBILE_USAGE_TITLE);
-        assertThat(keys).contains(DataPlanUsageSummary.KEY_MOBILE_DATA_USAGE_TOGGLE);
-
-        // Wifi keys
-        assertThat(keys).contains(DataPlanUsageSummary.KEY_WIFI_DATA_USAGE);
-        assertThat(keys).contains(DataPlanUsageSummary.KEY_NETWORK_RESTRICTIONS);
-        assertThat(keys).contains(DataPlanUsageSummary.KEY_WIFI_USAGE_TITLE);
-    }
-
-    @Test
-    @Config(shadows = ShadowDataUsageUtils.class)
-    public void testNonIndexableKeys_noMobile_noWifi_limitedNonIndexableKeys() {
-        ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true;
-        ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true;
-        List<String> keys = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER
-                .getNonIndexableKeys(mContext);
-
-        assertThat(keys).containsExactly(DataPlanUsageSummary.KEY_WIFI_USAGE_TITLE);
-    }
-
     private void initTest() {
         mDataUsageSummary = new DataPlanUsageSummary();
         mPolicyEditor = mock(NetworkPolicyEditor.class);
diff --git a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
index 41bff93..5cbef72 100644
--- a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
@@ -16,35 +16,34 @@
 
 package com.android.settings.datetime;
 
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.robolectric.shadow.api.Shadow.extract;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+        shadows = ShadowConnectivityManager.class)
 public class AutoTimeZonePreferenceControllerTest {
 
     @Mock
-    private Context mMockContext;
-    @Mock
-    private ConnectivityManager mCm;
-    @Mock
     private UpdateTimeAndDateCallback mCallback;
 
     private Context mContext;
@@ -55,17 +54,17 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        ShadowApplication.getInstance().setSystemService(Context.CONNECTIVITY_SERVICE, mCm);
-        mContext = ShadowApplication.getInstance().getApplicationContext();
+        mContext = RuntimeEnvironment.application;
         mPreference = new Preference(mContext);
-        when(mMockContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(mCm);
-        when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
+        ShadowConnectivityManager connectivityManager =
+                extract(mContext.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);
     }
 
     @Test
     public void isFromSUW_notAvailable() {
         mController = new AutoTimeZonePreferenceController(
-                mMockContext, null /* callback */, true /* isFromSUW */);
+                mContext, null /* callback */, true /* isFromSUW */);
 
         assertThat(mController.isAvailable()).isFalse();
     }
@@ -73,17 +72,19 @@
     @Test
     public void notFromSUW_isAvailable() {
         mController = new AutoTimeZonePreferenceController(
-                mMockContext, null /* callback */, false /* isFromSUW */);
+                mContext, null /* callback */, false /* isFromSUW */);
 
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
     public void isWifiOnly_notAvailable() {
-        when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
+        ShadowConnectivityManager connectivityManager =
+                extract(mContext.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
 
         mController = new AutoTimeZonePreferenceController(
-                mMockContext, null /* callback */, false /* isFromSUW */);
+                mContext, null /* callback */, false /* isFromSUW */);
 
         assertThat(mController.isAvailable()).isFalse();
     }
@@ -91,17 +92,19 @@
     @Test
     public void isFromSUW_notEnable() {
         mController = new AutoTimeZonePreferenceController(
-            mMockContext, null /* callback */, true /* isFromSUW */);
+                mContext, null /* callback */, true /* isFromSUW */);
 
         assertThat(mController.isEnabled()).isFalse();
     }
 
     @Test
     public void isWifiOnly_notEnable() {
-        when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
+        ShadowConnectivityManager connectivityManager =
+                extract(mContext.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
 
         mController = new AutoTimeZonePreferenceController(
-            mMockContext, null /* callback */, false /* isFromSUW */);
+                mContext, null /* callback */, false /* isFromSUW */);
 
         assertThat(mController.isEnabled()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2Test.java
similarity index 75%
rename from tests/robotests/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2Test.java
rename to tests/robotests/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2Test.java
index f28fd6e..e0e137c 100644
--- a/tests/robotests/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2Test.java
@@ -42,7 +42,7 @@
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
         shadows = {SettingsShadowSystemProperties.class})
-public class CameraHalHdrPlusPreferenceControllerV2Test {
+public class CameraHalHdrplusPreferenceControllerV2Test {
 
     @Mock
     private PreferenceScreen mScreen;
@@ -50,7 +50,7 @@
     private SwitchPreference mPreference;
 
     private Context mContext;
-    private CameraHalHdrPlusPreferenceControllerV2 mController;
+    private CameraHalHdrplusPreferenceControllerV2 mController;
 
     static final String USERDEBUG_BUILD = "userdebug";
 
@@ -58,7 +58,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
-        mController = new CameraHalHdrPlusPreferenceControllerV2(mContext);
+        mController = new CameraHalHdrplusPreferenceControllerV2(mContext);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
         when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
         mController.displayPreference(mScreen);
@@ -73,18 +73,18 @@
     @Config(qualifiers = "mcc999")
     public void isAvailable_withConfigNoShowAndUserDebugBuild_shouldReturnFalse() {
         SettingsShadowSystemProperties.set(
-                CameraHalHdrPlusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
+                CameraHalHdrplusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
 
         assertThat(mController.isAvailable()).isFalse();
     }
 
     @Test
-    public void updateState_cameraHalHdrPlusEnabled_shouldCheckedPreference() {
+    public void updateState_cameraHalHdrplusEnabled_shouldCheckedPreference() {
         SettingsShadowSystemProperties.set(
-                CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
-                CameraHalHdrPlusPreferenceControllerV2.ENABLED);
+                CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+                CameraHalHdrplusPreferenceControllerV2.ENABLED);
         SettingsShadowSystemProperties.set(
-                CameraHalHdrPlusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
+                CameraHalHdrplusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
 
         mController.updateState(mPreference);
 
@@ -92,12 +92,12 @@
     }
 
     @Test
-    public void updateState_cameraHalHdrPlusEnabled_shouldUncheckedPreference() {
+    public void updateState_cameraHalHdrplusEnabled_shouldUncheckedPreference() {
         SettingsShadowSystemProperties.set(
-                CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
-                CameraHalHdrPlusPreferenceControllerV2.DISABLED);
+                CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+                CameraHalHdrplusPreferenceControllerV2.DISABLED);
         SettingsShadowSystemProperties.set(
-                CameraHalHdrPlusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
+                CameraHalHdrplusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
 
         mController.updateState(mPreference);
 
@@ -108,20 +108,20 @@
     public void onPreferenceChange_preferenceChecked_shouldEnableCameraHalHdrplus() {
         mController.onPreferenceChange(mPreference, true /* new value */);
 
-        assertThat(CameraHalHdrPlusPreferenceControllerV2.ENABLED).isEqualTo(
+        assertThat(CameraHalHdrplusPreferenceControllerV2.ENABLED).isEqualTo(
                 SystemProperties.get(
-                        CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
-                        CameraHalHdrPlusPreferenceControllerV2.DISABLED));
+                        CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+                        CameraHalHdrplusPreferenceControllerV2.DISABLED));
     }
 
     @Test
     public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableCameraHalHdrplus() {
         mController.onPreferenceChange(mPreference, false /* new value */);
 
-        assertThat(CameraHalHdrPlusPreferenceControllerV2.DISABLED).isEqualTo(
+        assertThat(CameraHalHdrplusPreferenceControllerV2.DISABLED).isEqualTo(
                 SystemProperties.get(
-                        CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
-                        CameraHalHdrPlusPreferenceControllerV2.DISABLED));
+                        CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+                        CameraHalHdrplusPreferenceControllerV2.DISABLED));
     }
 
     @Test
@@ -137,9 +137,9 @@
 
         verify(mPreference).setEnabled(false);
         verify(mPreference).setChecked(false);
-        assertThat(CameraHalHdrPlusPreferenceControllerV2.DISABLED).isEqualTo(
+        assertThat(CameraHalHdrplusPreferenceControllerV2.DISABLED).isEqualTo(
                 SystemProperties.get(
-                        CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
-                        CameraHalHdrPlusPreferenceControllerV2.DISABLED));
+                        CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+                        CameraHalHdrplusPreferenceControllerV2.DISABLED));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java
index 3bba438..a7d7355 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java
@@ -15,35 +15,33 @@
  */
 package com.android.settings.deviceinfo;
 
-import android.content.Context;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.robolectric.shadow.api.Shadow.extract;
+
 import android.net.ConnectivityManager;
 import android.support.v7.preference.Preference;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+        shadows = ShadowConnectivityManager.class)
 public class BasebandVersionPreferenceControllerTest {
 
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
-    @Mock
-    private ConnectivityManager mCm;
     @Mock
     private Preference mPreference;
 
@@ -52,19 +50,22 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mController = new BasebandVersionPreferenceController(mContext);
-        when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(mCm);
+        mController = new BasebandVersionPreferenceController(RuntimeEnvironment.application);
     }
 
     @Test
     public void isAvailable_wifiOnly_shouldReturnFalse() {
-        when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
+        ShadowConnectivityManager connectivityManager =
+                extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
         assertThat(mController.isAvailable()).isFalse();
     }
 
     @Test
     public void isAvailable_hasMobile_shouldReturnTrue() {
-        when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
+        ShadowConnectivityManager connectivityManager =
+                extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);
         assertThat(mController.isAvailable()).isTrue();
     }
 
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
index 8e8da51..15461cc2 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
@@ -16,13 +16,20 @@
 
 package com.android.settings.deviceinfo;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
 import android.app.Activity;
 import android.os.SystemProperties;
 import android.view.View;
 
 import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -30,12 +37,6 @@
 import org.robolectric.Robolectric;
 import org.robolectric.annotation.Config;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class HardwareInfoDialogFragmentTest {
@@ -53,6 +54,7 @@
         SystemProperties.set("ro.boot.hardware.revision", TEST_HARDWARE_REV);
 
         final HardwareInfoDialogFragment fragment = spy(HardwareInfoDialogFragment.newInstance());
+        doReturn("").when(fragment).getSerialNumber();
         fragment.show(mActivity.getFragmentManager(), HardwareInfoDialogFragment.TAG);
 
         verify(fragment).setText(
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/ImeiInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/ImeiInfoPreferenceControllerTest.java
deleted file mode 100644
index 733ef48..0000000
--- a/tests/robotests/src/com/android/settings/deviceinfo/ImeiInfoPreferenceControllerTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.deviceinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.net.ConnectivityManager;
-import android.os.UserManager;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ImeiInfoPreferenceControllerTest {
-    @Mock
-    private Context mContext;
-    @Mock
-    private UserManager mUserManager;
-    @Mock
-    private ConnectivityManager mConnectivityManager;
-
-    private ImeiInfoPreferenceController mController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(
-                mConnectivityManager);
-        mController = new ImeiInfoPreferenceController(mContext);
-    }
-
-    @Test
-    public void testIsAvailable_isAdminAndHasMobile_shouldReturnTrue() {
-        when(mUserManager.isAdminUser()).thenReturn(true);
-        when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
-                .thenReturn(true);
-
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
-    public void testIsAvailable_isAdminButNoMobile_shouldReturnFalse() {
-        when(mUserManager.isAdminUser()).thenReturn(true);
-        when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
-                .thenReturn(false);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
-    public void testIsAvailable_isNotAdmin_shouldReturnFalse() {
-        when(mUserManager.isAdminUser()).thenReturn(false);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/SimStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/SimStatusPreferenceControllerTest.java
deleted file mode 100644
index 6a3c05b..0000000
--- a/tests/robotests/src/com/android/settings/deviceinfo/SimStatusPreferenceControllerTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.deviceinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.net.ConnectivityManager;
-import android.os.UserManager;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class SimStatusPreferenceControllerTest {
-
-    @Mock
-    private Context mContext;
-    @Mock
-    private UserManager mUserManager;
-    @Mock
-    private ConnectivityManager mConnectivityManager;
-
-    private SimStatusPreferenceController mController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(
-                mConnectivityManager);
-        mController = new SimStatusPreferenceController(mContext);
-    }
-
-    @Test
-    public void testIsAvailable_isAdminAndHasMobile_shouldReturnTrue() {
-        when(mUserManager.isAdminUser()).thenReturn(true);
-        when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
-                .thenReturn(true);
-
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
-    public void testIsAvailable_isAdminButNoMobile_shouldReturnFalse() {
-        when(mUserManager.isAdminUser()).thenReturn(true);
-        when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
-                .thenReturn(false);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
-    public void testIsAvailable_isNotAdmin_shouldReturnFalse() {
-        when(mUserManager.isAdminUser()).thenReturn(false);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
index 3869807..dfe81db 100644
--- a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
@@ -17,7 +17,6 @@
 package com.android.settings.display;
 
 import static com.google.common.truth.Truth.assertThat;
-
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java
index 242a05d..e1ce694 100644
--- a/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java
@@ -17,9 +17,7 @@
 package com.android.settings.display;
 
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
-
 import static com.google.common.truth.Truth.assertThat;
-
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
@@ -33,11 +31,11 @@
 import android.support.v14.preference.SwitchPreference;
 
 import com.android.internal.hardware.AmbientDisplayConfiguration;
+import com.android.settings.TestConfig;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.search.InlinePayload;
 import com.android.settings.search.InlineSwitchPayload;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
index 02f46f2..b46441d 100644
--- a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
@@ -16,14 +16,20 @@
 
 package com.android.settings.display;
 
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+import static com.google.common.truth.Truth.assertThat;
+
 import android.content.ContentResolver;
 import android.content.Context;
 import android.provider.Settings;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
 import com.android.settings.TestConfig;
 import com.android.settings.search.InlinePayload;
 import com.android.settings.search.InlineSwitchPayload;
 import com.android.settings.search.ResultPayload;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -34,11 +40,6 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-import static com.google.common.truth.Truth.assertThat;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class AutoBrightnessPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java
deleted file mode 100644
index 00d910e..0000000
--- a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.display;
-
-import android.content.Context;
-import android.os.IBinder;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.PreferenceScreen;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ColorModePreferenceControllerTest {
-    @Mock
-    private ColorModePreferenceController.ConfigurationWrapper mConfigWrapper;
-    @Mock
-    private SwitchPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private Context mContext;
-    @Mock
-    private IBinder mSurfaceFlinger;
-
-    private ColorModePreferenceController mController;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        SettingsShadowSystemProperties.clear();
-
-        mController = new ColorModePreferenceController(mContext);
-        ReflectionHelpers.setField(mController, "mSurfaceFlinger", mSurfaceFlinger);
-        ReflectionHelpers.setField(mController, "mConfigWrapper", mConfigWrapper);
-
-        when(mConfigWrapper.isScreenWideColorGamut()).thenReturn(true);
-
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
-    }
-
-    @Config(shadows = {SettingsShadowSystemProperties.class})
-    @Test
-    public void shouldCheckPreference() {
-        SettingsShadowSystemProperties.set(
-                ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION,
-                Float.toString(ColorModePreferenceController.COLOR_SATURATION_VIVID));
-
-        mController.updateState(mPreference);
-
-        verify(mPreference).setChecked(true);
-    }
-
-    @Config(shadows = {SettingsShadowSystemProperties.class})
-    @Test
-    public void shouldUncheckPreference() {
-        SettingsShadowSystemProperties.set(
-                ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION,
-                Float.toString(ColorModePreferenceController.COLOR_SATURATION_DEFAULT));
-
-        mController.updateState(mPreference);
-
-        verify(mPreference).setChecked(false);
-    }
-
-    @Config(shadows = {SettingsShadowSystemProperties.class})
-    @Test
-    public void shouldBoostSaturationOnCheck() {
-        mController.onPreferenceChange(mPreference, true);
-
-        String saturation = SettingsShadowSystemProperties
-                .get(ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION);
-        assertThat(saturation)
-                .isEqualTo(Float.toString(ColorModePreferenceController.COLOR_SATURATION_VIVID));
-    }
-
-    @Config(shadows = {SettingsShadowSystemProperties.class})
-    @Test
-    public void shouldResetSaturationOnUncheck() {
-        mController.onPreferenceChange(mPreference, false);
-
-        String saturation = SettingsShadowSystemProperties
-                .get(ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION);
-        assertThat(saturation)
-                .isEqualTo(Float.toString(ColorModePreferenceController.COLOR_SATURATION_DEFAULT));
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
new file mode 100644
index 0000000..435f4f2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.app.IActivityManager;
+import android.content.res.Configuration;
+import android.os.IBinder;
+import android.os.RemoteException;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+import com.android.settings.widget.RadioButtonPickerFragment;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ColorModePreferenceFragmentTest {
+    @Mock
+    private IBinder mSurfaceFlinger;
+    @Mock
+    private IActivityManager mActivityManager;
+
+    private ColorModePreferenceFragment mFragment;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        SettingsShadowSystemProperties.clear();
+
+        mFragment = spy(new ColorModePreferenceFragment());
+        doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
+        doNothing().when(mFragment).updateConfiguration();
+
+        ReflectionHelpers.setField(mFragment, "mSurfaceFlinger", mSurfaceFlinger);
+        ReflectionHelpers.setField(mFragment, "mActivityManager", mActivityManager);
+    }
+
+    @Test
+    public void verifyMetricsConstant() {
+        assertThat(mFragment.getMetricsCategory())
+                .isEqualTo(MetricsProto.MetricsEvent.COLOR_MODE_SETTINGS);
+    }
+
+    @Test
+    public void getCandidates() {
+        List<? extends RadioButtonPickerFragment.CandidateInfo> candidates =
+                mFragment.getCandidates();
+
+        assertThat(candidates.size()).isEqualTo(3);
+        assertThat(candidates.get(0).getKey())
+                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
+        assertThat(candidates.get(1).getKey())
+                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
+        assertThat(candidates.get(2).getKey())
+                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void getKey_natural() {
+        SettingsShadowSystemProperties.set(
+                ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION,
+                Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_NATURAL));
+        SettingsShadowSystemProperties.set(
+                ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE, "0");
+
+        assertThat(mFragment.getDefaultKey())
+                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void getKey_boosted() {
+        SettingsShadowSystemProperties.set(
+                ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION,
+                Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_BOOSTED));
+        SettingsShadowSystemProperties.set(
+                ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE, "0");
+
+        assertThat(mFragment.getDefaultKey())
+                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void getKey_saturated() {
+        SettingsShadowSystemProperties.set(
+                ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE, "1");
+
+        assertThat(mFragment.getDefaultKey())
+                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void setKey_natural() {
+        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
+
+        String saturation = SettingsShadowSystemProperties
+                .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION);
+        assertThat(saturation)
+                .isEqualTo(Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_NATURAL));
+
+        String nativeMode = SettingsShadowSystemProperties
+                .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE);
+        assertThat(nativeMode).isEqualTo("0");
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void setKey_boosted() {
+        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
+
+        String saturation = SettingsShadowSystemProperties
+                .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION);
+        assertThat(saturation)
+                .isEqualTo(Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_BOOSTED));
+
+        String nativeMode = SettingsShadowSystemProperties
+                .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE);
+        assertThat(nativeMode).isEqualTo("0");
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void setKey_saturated() {
+        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
+
+        String saturation = SettingsShadowSystemProperties
+                .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION);
+        assertThat(saturation)
+                .isEqualTo(Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_NATURAL));
+
+        String nativeMode = SettingsShadowSystemProperties
+                .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE);
+        assertThat(nativeMode).isEqualTo("1");
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java
index 1e173a2..0e32f6b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java
@@ -18,7 +18,9 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
+import android.provider.SearchIndexableResource;
 
+import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.widget.SwitchBar;
@@ -30,6 +32,8 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
+import java.util.List;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class BatterySaverSettingsTest {
@@ -58,4 +62,13 @@
 
         assertThat(mBatterySaverSettings.mSwitchBar.isEnabled()).isTrue();
     }
+
+    @Test
+    public void searchProvider_shouldIndexDefaultXml() {
+        final List<SearchIndexableResource> sir = mBatterySaverSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getXmlResourcesToIndex(mContext, true /* enabled */);
+
+        assertThat(sir).hasSize(1);
+        assertThat(sir.get(0).xmlResId).isEqualTo(R.xml.battery_saver_settings);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
index 0c804b3..1f5ca20 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
@@ -35,7 +35,6 @@
 import com.android.settings.search.ResultPayload;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 
 import org.junit.After;
diff --git a/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java
index 87691a5..355d6d0 100644
--- a/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java
@@ -16,7 +16,6 @@
 package com.android.settings.location;
 
 import static com.google.common.truth.Truth.assertThat;
-
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.verify;
@@ -34,11 +33,11 @@
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.TestConfig;
 import com.android.settings.search.InlineListPayload;
 import com.android.settings.search.InlinePayload;
 import com.android.settings.search.ResultPayload;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
diff --git a/tests/robotests/src/com/android/settings/location/ScanningSettingsTest.java b/tests/robotests/src/com/android/settings/location/ScanningSettingsTest.java
new file mode 100644
index 0000000..47b81bf
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/location/ScanningSettingsTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.location;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ScanningSettingsTest {
+
+    private Context mContext;
+    private ScanningSettings mSettings;
+
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mSettings = new ScanningSettings();
+    }
+
+    @Test
+    public void searchProvider_shouldIndexDefaultXml() {
+        final List<SearchIndexableResource> sir = mSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getXmlResourcesToIndex(mContext, true /* enabled */);
+
+        assertThat(sir).hasSize(1);
+        assertThat(sir.get(0).xmlResId).isEqualTo(R.xml.location_scanning);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
index 2c11e0c..1a66dcc 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
@@ -15,51 +15,48 @@
  */
 package com.android.settings.network;
 
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.robolectric.shadow.api.Shadow.extract;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
-import android.os.UserHandle;
 import android.os.UserManager;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 import android.telephony.PhoneStateListener;
 import android.telephony.TelephonyManager;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsWrapper;
+import com.android.settings.testutils.shadow.ShadowUserManager;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 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.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(
     manifest = TestConfig.MANIFEST_PATH,
     sdk = TestConfig.SDK_VERSION,
-    shadows = ShadowRestrictedLockUtilsWrapper.class
+    shadows = {ShadowRestrictedLockUtilsWrapper.class, ShadowConnectivityManager.class,
+            ShadowUserManager.class}
 )
 public class MobileNetworkPreferenceControllerTest {
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private UserManager mUserManager;
-    @Mock
-    private ConnectivityManager mConnectivityManager;
     @Mock
     private TelephonyManager mTelephonyManager;
     @Mock
@@ -71,21 +68,19 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
         mLifecycle = new Lifecycle();
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
-                .thenReturn(mConnectivityManager);
         when(mContext.getSystemService(Context.TELEPHONY_SERVICE))
                 .thenReturn(mTelephonyManager);
     }
 
     @Test
     public void secondaryUser_prefIsNotAvailable() {
-        when(mUserManager.isAdminUser()).thenReturn(false);
-        when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class)))
-                .thenReturn(false);
-        when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
-                .thenReturn(true);
+        ShadowUserManager userManager = extract(mContext.getSystemService(UserManager.class));
+        userManager.setIsAdminUser(false);
+        ShadowConnectivityManager connectivityManager =
+                extract(mContext.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);
 
         mController = new MobileNetworkPreferenceController(mContext);
         assertThat(mController.isAvailable()).isFalse();
@@ -93,11 +88,11 @@
 
     @Test
     public void wifiOnly_prefIsNotAvailable() {
-        when(mUserManager.isAdminUser()).thenReturn(true);
-        when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class)))
-                .thenReturn(false);
-        when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
-                .thenReturn(false);
+        ShadowUserManager userManager = extract(mContext.getSystemService(UserManager.class));
+        userManager.setIsAdminUser(true);
+        ShadowConnectivityManager connectivityManager =
+                extract(mContext.getSystemService(ConnectivityManager.class));
+        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
 
         mController = new MobileNetworkPreferenceController(mContext);
         assertThat(mController.isAvailable()).isFalse();
@@ -142,5 +137,4 @@
         // Carrier name should be set.
         verify(mPreference).setSummary(testCarrierName);
     }
-
 }
diff --git a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
index c1a7d05..ac158b6 100644
--- a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
@@ -16,6 +16,14 @@
 
 package com.android.settings.notification;
 
+import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 import android.content.ContentResolver;
 import android.content.Context;
 import android.provider.Settings;
@@ -38,16 +46,6 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 
-import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 @RunWith(RobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class BadgingNotificationPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
index 1135d7c..fa2c6b9 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
@@ -22,6 +22,7 @@
 
 import android.app.NotificationManager;
 import android.content.Context;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 
 import com.android.settings.R;
@@ -34,16 +35,20 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
+import java.util.List;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class ZenModeSettingsTest {
 
     private ZenModeSettings.SummaryBuilder mBuilder;
     private Context mContext;
+    private ZenModeSettings mSettings;
 
     @Before
     public void setUp() {
         mContext = RuntimeEnvironment.application.getApplicationContext();
+        mSettings = new ZenModeSettings();
         mBuilder = new ZenModeSettings.SummaryBuilder(mContext);
     }
 
@@ -72,4 +77,13 @@
                 && result.indexOf(reminders) < result.indexOf(events));
     }
 
+    @Test
+    public void searchProvider_shouldIndexDefaultXml() {
+        final List<SearchIndexableResource> sir = mSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getXmlResourcesToIndex(mContext, true /* enabled */);
+
+        assertThat(sir).hasSize(1);
+        assertThat(sir.get(0).xmlResId).isEqualTo(R.xml.zen_mode_settings);
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
index 3bfa936..126abb9 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
@@ -23,10 +23,10 @@
 import android.util.ArrayMap;
 
 import com.android.internal.hardware.AmbientDisplayConfiguration;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.deviceinfo.SystemUpdatePreferenceController;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
index a3826f6..4ec080c 100644
--- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
@@ -221,7 +221,8 @@
         assertThat(mHolder.summaryView.getText()).isEqualTo(SUMMARY);
         assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.VISIBLE);
         verify(mFragment).onSearchResultClicked(eq(mHolder), any(SearchResult.class));
-        verify(mFragment).startActivity(result.payload.getIntent());
+        verify(mFragment).startActivityForResult(result.payload.getIntent(),
+                IntentSearchViewHolder.REQUEST_CODE_NO_OP);
     }
 
     @Test
@@ -237,7 +238,8 @@
         assertThat(mHolder.summaryView.getText()).isEqualTo(SUMMARY);
         assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.VISIBLE);
         verify(mFragment).onSearchResultClicked(eq(mHolder), any(SearchResult.class));
-        verify(mFragment, never()).startActivity(any(Intent.class));
+        verify(mFragment, never()).startActivityForResult(result.payload.getIntent(),
+                IntentSearchViewHolder.REQUEST_CODE_NO_OP);
     }
 
     private SearchResult getSearchResult(String title, String summary, Drawable icon) {
diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
index 30ffaf8..050d7aa 100644
--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
@@ -17,8 +17,10 @@
 
 package com.android.settings.search;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import android.app.Activity;
-import android.view.Menu;
+import android.content.ComponentName;
 
 import com.android.settings.TestConfig;
 import com.android.settings.dashboard.SiteMapManager;
@@ -27,23 +29,16 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.annotation.Config;
 
-import static com.google.common.truth.Truth.assertThat;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class SearchFeatureProviderImplTest {
     private SearchFeatureProviderImpl mProvider;
     private Activity mActivity;
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Menu menu;
-
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -76,4 +71,20 @@
         assertThat(loader.mQuery).isEqualTo(query.trim());
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void verifyLaunchSearchResultPageCaller_nullCaller_shouldCrash() {
+        mProvider.verifyLaunchSearchResultPageCaller(mActivity, null /* caller */);
+    }
+
+    @Test(expected = SecurityException.class)
+    public void everifyLaunchSearchResultPageCaller_badCaller_shouldCrash() {
+        final ComponentName cn = new ComponentName("pkg", "class");
+        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
+    }
+
+    @Test
+    public void verifyLaunchSearchResultPageCaller_goodCaller_shouldNotCrash() {
+        final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class");
+        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
index 1ddff90..0e3ce50 100644
--- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
@@ -17,20 +17,16 @@
 package com.android.settings.search;
 
 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
-import static com.android.settings.search.SearchIndexableResources.NO_DATA_RES_ID;
-
+import static com.android.settings.search.SearchIndexableResources.NO_RES_ID;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.spy;
 
-import android.annotation.DrawableRes;
-import android.annotation.XmlRes;
 import android.database.Cursor;
 import android.provider.SearchIndexableResource;
-
 import android.text.TextUtils;
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.wifi.WifiSettings;
 
 import org.junit.After;
@@ -46,11 +42,6 @@
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class SearchIndexableResourcesTest {
 
-    @XmlRes
-    private static final int XML_RES_ID = R.xml.physical_keyboard_settings;
-    @DrawableRes
-    private static final int ICON_RES_ID = R.drawable.ic_settings_language;
-
     Map<String, SearchIndexableResource> sResMapCopy;
 
     @Before
@@ -72,14 +63,14 @@
         assertThat(SearchIndexableResources.getResourceByName("java.lang.String")).isNull();
         final int beforeCount = SearchIndexableResources.values().size();
 
-        SearchIndexableResources.addIndex(java.lang.String.class, XML_RES_ID, ICON_RES_ID);
+        SearchIndexableResources.addIndex(java.lang.String.class);
         final SearchIndexableResource index = SearchIndexableResources
                 .getResourceByName("java.lang.String");
 
         assertThat(index).isNotNull();
         assertThat(index.className).isEqualTo("java.lang.String");
-        assertThat(index.xmlResId).isEqualTo(XML_RES_ID);
-        assertThat(index.iconResId).isEqualTo(ICON_RES_ID);
+        assertThat(index.xmlResId).isEqualTo(NO_RES_ID);
+        assertThat(index.iconResId).isEqualTo(NO_RES_ID);
         final int afterCount = SearchIndexableResources.values().size();
         assertThat(afterCount).isEqualTo(beforeCount + 1);
     }
@@ -91,20 +82,20 @@
 
         assertThat(index).isNotNull();
         assertThat(index.className).isEqualTo(WifiSettings.class.getName());
-        assertThat(index.xmlResId).isEqualTo(NO_DATA_RES_ID);
-        assertThat(index.iconResId).isEqualTo(R.drawable.ic_settings_wireless);
+        assertThat(index.xmlResId).isEqualTo(NO_RES_ID);
+        assertThat(index.iconResId).isEqualTo(NO_RES_ID);
     }
 
     @Test
     public void testNonIndexableKeys_GetsKeyFromProvider() {
         SearchIndexableResources.sResMap.clear();
-        SearchIndexableResources.addIndex(FakeIndexProvider.class, 0, 0);
+        SearchIndexableResources.addIndex(FakeIndexProvider.class);
 
         SettingsSearchIndexablesProvider provider = spy(new SettingsSearchIndexablesProvider());
 
         Cursor cursor = provider.queryNonIndexableKeys(null);
         boolean hasTestKey = false;
-        while(cursor.moveToNext()) {
+        while (cursor.moveToNext()) {
             String key = cursor.getString(COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE);
             if (TextUtils.equals(key, FakeIndexProvider.KEY)) {
                 hasTestKey = true;
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
index 4c05665..742fbf8 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
@@ -17,6 +17,7 @@
 package com.android.settings.testutils.shadow;
 
 import android.net.ConnectivityManager;
+import android.util.SparseBooleanArray;
 
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
@@ -24,14 +25,14 @@
 @Implements(ConnectivityManager.class)
 public class ShadowConnectivityManager extends org.robolectric.shadows.ShadowConnectivityManager {
 
-    private static boolean mIsNetworkSupported;
+    private final SparseBooleanArray mSupportedNetworkTypes = new SparseBooleanArray();
+
+    public void setNetworkSupported(int networkType, boolean supported) {
+        mSupportedNetworkTypes.put(networkType, supported);
+    }
 
     @Implementation
     public boolean isNetworkSupported(int networkType) {
-        return mIsNetworkSupported;
-    }
-
-    public static void setIsNetworkSupported(boolean isNetworkSupported) {
-        mIsNetworkSupported = isNetworkSupported;
+        return mSupportedNetworkTypes.get(networkType);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
index 4d4fd62..888fa36 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
@@ -37,6 +37,16 @@
 public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager {
 
     private SparseArray<UserInfo> mUserInfos = new SparseArray<>();
+    private boolean mAdminUser;
+
+    public void setIsAdminUser(boolean isAdminUser) {
+        mAdminUser = isAdminUser;
+    }
+
+    @Implementation
+    public boolean isAdminUser() {
+        return mAdminUser;
+    }
 
     public void setUserInfo(int userHandle, UserInfo userInfo) {
         mUserInfos.put(userHandle, userInfo);
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
index bfeb3c7..0691086 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
@@ -55,11 +55,6 @@
         sIsDemoUser = false;
     }
 
-    @Implementation
-    public static boolean isWifiOnly(Context context) {
-        return true;
-    }
-
     public static void setIsDemoUser(boolean isDemoUser) {
         sIsDemoUser = isDemoUser;
     }