diff --git a/res/values/config.xml b/res/values/config.xml
index 92c11f6..f964d5e 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -44,6 +44,9 @@
     <!-- Whether to show Camera HAL HDR+ switch in Developer Options -->
     <bool name="config_show_camera_hal_hdrplus">false</bool>
 
+    <!-- Whether to show Camera laser sensor switch in Developer Options -->
+    <bool name="config_show_camera_laser_sensor">false</bool>
+
     <!-- Fully-qualified class name for the implementation of the FeatureFactory to be instantiated. -->
     <string name="config_featureFactory" translatable="false">com.android.settings.overlay.FeatureFactoryImpl</string>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 51305b5..e278176 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8256,6 +8256,9 @@
     <!-- Toast message letting the user know how to enable Camera HAL HDR+ -->
     <string name="camera_hal_hdrplus_toast">To apply Camera HAL HDR+ change, reboot device</string>
 
+    <!-- Title for Camera laser sensor switch [CHAR LIMIT=NONE] -->
+    <string name="camera_laser_sensor_switch">Camera Laser Sensor</string>
+
     <!-- Name of the setting to disable the automatic update -->
     <string name="ota_disable_automatic_update">Automatic system updates</string>
 
diff --git a/res/xml/apn_editor.xml b/res/xml/apn_editor.xml
index eac78e9..b1e332b 100644
--- a/res/xml/apn_editor.xml
+++ b/res/xml/apn_editor.xml
@@ -22,6 +22,7 @@
         android:key="apn_name"
         android:singleLine="true"
         android:inputType="text"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_apn"
@@ -29,6 +30,7 @@
         android:key="apn_apn"
         android:singleLine="true"
         android:inputType="textEmailAddress"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_http_proxy"
@@ -36,6 +38,7 @@
         android:key="apn_http_proxy"
         android:singleLine="true"
         android:inputType="textUri"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_http_port"
@@ -43,6 +46,7 @@
         android:key="apn_http_port"
         android:singleLine="true"
         android:inputType="number"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_user"
@@ -50,6 +54,7 @@
         android:key="apn_user"
         android:singleLine="true"
         android:inputType="textEmailAddress"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_password"
@@ -57,6 +62,7 @@
         android:key="apn_password"
         android:singleLine="true"
         android:inputType="textPassword"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_server"
@@ -64,6 +70,7 @@
         android:key="apn_server"
         android:singleLine="true"
         android:inputType="textUri"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_mmsc"
@@ -71,6 +78,7 @@
         android:key="apn_mmsc"
         android:singleLine="true"
         android:inputType="textUri"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_mms_proxy"
@@ -78,6 +86,7 @@
         android:key="apn_mms_proxy"
         android:singleLine="true"
         android:inputType="textUri"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_mms_port"
@@ -85,6 +94,7 @@
         android:key="apn_mms_port"
         android:singleLine="true"
         android:inputType="number"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_mcc"
@@ -92,6 +102,7 @@
         android:key="apn_mcc"
         android:singleLine="true"
         android:inputType="number"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_mnc"
@@ -99,12 +110,14 @@
         android:key="apn_mnc"
         android:singleLine="true"
         android:inputType="number"
+        android:persistent="false"
         />
     <ListPreference
         android:title="@string/apn_auth_type"
         android:key="auth_type"
         android:entries="@array/apn_auth_entries"
         android:entryValues="@array/apn_auth_values"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/apn_type"
@@ -112,6 +125,7 @@
         android:key="apn_type"
         android:singleLine="true"
         android:inputType="textNoSuggestions"
+        android:persistent="false"
         />
     <ListPreference
         android:title="@string/apn_protocol"
@@ -119,6 +133,7 @@
         android:key="apn_protocol"
         android:entries="@array/apn_protocol_entries"
         android:entryValues="@array/apn_protocol_values"
+        android:persistent="false"
         />
     <ListPreference
         android:title="@string/apn_roaming_protocol"
@@ -126,6 +141,7 @@
         android:key="apn_roaming_protocol"
         android:entries="@array/apn_protocol_entries"
         android:entryValues="@array/apn_protocol_values"
+        android:persistent="false"
         />
     <SwitchPreference
         android:title="@string/carrier_enabled"
@@ -133,18 +149,21 @@
         android:enabled="false"
         android:summaryOn="@string/carrier_enabled_summaryOn"
         android:summaryOff="@@string/carrier_enabled_summaryOff"
+        android:persistent="false"
         />
     <MultiSelectListPreference
         android:title="@string/bearer"
         android:key="bearer_multi"
         android:entries="@array/bearer_entries"
         android:entryValues="@array/bearer_values"
+        android:persistent="false"
         />
     <ListPreference
         android:title="@string/mvno_type"
         android:key="mvno_type"
         android:entries="@array/mvno_type_entries"
         android:entryValues="@array/mvno_type_values"
+        android:persistent="false"
         />
     <EditTextPreference
         android:title="@string/mvno_match_data"
@@ -152,5 +171,6 @@
         android:key="mvno_match_data"
         android:singleLine="true"
         android:inputType="text"
+        android:persistent="false"
         />
 </PreferenceScreen>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 11a579a..64d43ad 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -164,6 +164,10 @@
             android:summary="@string/telephony_monitor_switch_summary"/>
 
         <SwitchPreference
+            android:key="camera_laser_sensor_switch"
+            android:title="@string/camera_laser_sensor_switch" />
+
+        <SwitchPreference
             android:key="camera_hal_hdrplus_switch"
             android:title="@string/camera_hal_hdrplus_switch" />
 
diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml
index 6fe43ec..3456f91 100644
--- a/res/xml/device_info_status.xml
+++ b/res/xml/device_info_status.xml
@@ -23,13 +23,13 @@
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/battery_status_title"
-        android:summary="@string/device_info_not_available" />
+        android:summary="@string/summary_placeholder" />
     <Preference
         android:key="battery_level"
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/battery_level_title"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="sim_status"
@@ -52,42 +52,42 @@
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/wifi_advanced_ip_address_title"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="wifi_mac_address"
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/status_wifi_mac_address"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="bt_address"
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/status_bt_address"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="serial_number"
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/status_serial_number"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="up_time"
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/status_up_time"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="wimax_mac_address"
         android:enabled="false"
         android:shouldDisableView="false"
         android:title="@string/status_wimax_mac_address"
-        android:summary="@string/device_info_not_available"
+        android:summary="@string/summary_placeholder"
         android:persistent="false" />
     <Preference
         android:key="ims_reg_state"
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
index e61f959..50a7a77 100644
--- a/src/com/android/settings/ApnEditor.java
+++ b/src/com/android/settings/ApnEditor.java
@@ -297,6 +297,11 @@
             getPreferenceScreen().getPreference(i).setOnPreferenceChangeListener(this);
         }
 
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
         fillUi();
     }
 
diff --git a/src/com/android/settings/development/CameraLaserSensorPreferenceController.java b/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
new file mode 100644
index 0000000..26bfc80
--- /dev/null
+++ b/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
@@ -0,0 +1,104 @@
+/*
+ * 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.development;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.widget.Toast;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+public class CameraLaserSensorPreferenceController extends AbstractPreferenceController
+        implements PreferenceControllerMixin {
+
+    private static final String KEY_CAMERA_LASER_SENSOR_SWITCH = "camera_laser_sensor_switch";
+    @VisibleForTesting
+    static final String BUILD_TYPE = "ro.build.type";
+    @VisibleForTesting
+    static final String PROPERTY_CAMERA_LASER_SENSOR = "persist.camera.stats.disablehaf";
+    @VisibleForTesting
+    static final int ENABLED = 0;
+    @VisibleForTesting
+    static final int DISABLED = 2;
+
+    private SwitchPreference mPreference;
+
+    public CameraLaserSensorPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = (SwitchPreference) screen.findPreference(KEY_CAMERA_LASER_SENSOR_SWITCH);
+        updatePreference();
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_CAMERA_LASER_SENSOR_SWITCH;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        String buildType = SystemProperties.get(BUILD_TYPE);
+        return mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor) &&
+               (buildType.equals("userdebug") || buildType.equals("eng"));
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        updatePreference();
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (KEY_CAMERA_LASER_SENSOR_SWITCH.equals(preference.getKey())) {
+            final SwitchPreference switchPreference = (SwitchPreference)preference;
+            String value = Integer.toString(switchPreference.isChecked() ? ENABLED : DISABLED);
+            SystemProperties.set(PROPERTY_CAMERA_LASER_SENSOR, value);
+            return true;
+        }
+        return false;
+    }
+
+    public void enablePreference(boolean enabled) {
+        if (isAvailable()) {
+            mPreference.setEnabled(enabled);
+        }
+    }
+
+    public boolean updatePreference() {
+        if (!isAvailable()) {
+            return false;
+        }
+        final boolean enabled = isLaserSensorEnabled();
+        mPreference.setChecked(enabled);
+        return enabled;
+    }
+
+    private boolean isLaserSensorEnabled() {
+        String prop = SystemProperties.get(PROPERTY_CAMERA_LASER_SENSOR, Integer.toString(ENABLED));
+        return prop.equals(Integer.toString(ENABLED));
+    }
+}
diff --git a/src/com/android/settings/development/DevelopmentSettings.java b/src/com/android/settings/development/DevelopmentSettings.java
index 3115dc4..d96adf4 100644
--- a/src/com/android/settings/development/DevelopmentSettings.java
+++ b/src/com/android/settings/development/DevelopmentSettings.java
@@ -332,6 +332,7 @@
     private BugReportInPowerPreferenceController mBugReportInPowerController;
     private TelephonyMonitorPreferenceController mTelephonyMonitorController;
     private CameraHalHdrplusPreferenceController mCameraHalHdrplusController;
+    private CameraLaserSensorPreferenceController mCameraLaserSensorController;
 
     private BroadcastReceiver mEnableAdbReceiver;
 
@@ -379,6 +380,7 @@
         mWebViewAppPrefController = new WebViewAppPreferenceController(getActivity());
         mVerifyAppsOverUsbController = new VerifyAppsOverUsbPreferenceController(getActivity());
         mCameraHalHdrplusController = new CameraHalHdrplusPreferenceController(getActivity());
+        mCameraLaserSensorController = new CameraLaserSensorPreferenceController(getActivity());
 
         setIfOnlyAvailableForAdmins(true);
         if (isUiRestricted() || !Utils.isDeviceProvisioned(getActivity())) {
@@ -417,6 +419,8 @@
         mCameraHalHdrplusController.displayPreference(preferenceScreen);
         mEnableAdbController.displayPreference(preferenceScreen);
 
+        mCameraLaserSensorController.displayPreference(getPreferenceScreen());
+
         mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON);
         mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG);
         mEnableOemUnlock = (RestrictedSwitchPreference) findAndInitSwitchPref(ENABLE_OEM_UNLOCK);
@@ -625,6 +629,7 @@
         mLogpersistController.enablePreference(enabled);
         mWebViewAppPrefController.enablePreference(enabled);
         mCameraHalHdrplusController.enablePreference(enabled);
+        mCameraLaserSensorController.enablePreference(enabled);
         updateAllOptions();
     }
 
@@ -771,6 +776,7 @@
         mHaveDebugSettings |= mBugReportInPowerController.updatePreference();
         mHaveDebugSettings |= mTelephonyMonitorController.updatePreference();
         mHaveDebugSettings |= mCameraHalHdrplusController.updatePreference();
+        mHaveDebugSettings |= mCameraLaserSensorController.updatePreference();
         updateSwitchPreference(mKeepScreenOn, Settings.Global.getInt(cr,
                 Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
         updateSwitchPreference(mBtHciSnoopLog, SystemProperties.getBoolean(
@@ -2224,6 +2230,10 @@
             return true;
         }
 
+        if (mCameraLaserSensorController.handlePreferenceTreeClick(preference)) {
+            return true;
+        }
+
         if (preference == mClearAdbKeys) {
             if (mAdbKeysDialog != null) dismissDialogs();
             mAdbKeysDialog = new AlertDialog.Builder(getActivity())
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index faa4134..228774f 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -32,6 +32,7 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserManager;
+import android.provider.SearchIndexableResource;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 import android.telephony.CarrierConfigManager;
@@ -44,13 +45,17 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 
 import java.lang.ref.WeakReference;
+import java.util.Arrays;
+import java.util.List;
 
 import static android.content.Context.CONNECTIVITY_SERVICE;
 import static android.content.Context.WIFI_SERVICE;
 
-public class Status extends SettingsPreferenceFragment {
+public class Status extends SettingsPreferenceFragment implements Indexable {
 
     private static final String KEY_BATTERY_STATUS = "battery_status";
     private static final String KEY_BATTERY_LEVEL = "battery_level";
@@ -330,4 +335,19 @@
 
         return h + ":" + pad(m) + ":" + pad(s);
     }
+
+    /**
+     * For Search.
+     */
+    public static final 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.device_info_status;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 044a00c..c946d46 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -46,6 +46,7 @@
 import com.android.settings.datausage.DataUsageSummary;
 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
 import com.android.settings.development.DevelopmentSettings;
+import com.android.settings.deviceinfo.Status;
 import com.android.settings.deviceinfo.StorageDashboardFragment;
 import com.android.settings.deviceinfo.StorageSettings;
 import com.android.settings.display.AmbientDisplaySettings;
@@ -190,6 +191,7 @@
         addIndex(PrintSettingsFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_print);
         addIndex(DevelopmentSettings.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,
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 43f25f1..4199a6d 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -19,6 +19,8 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 import android.net.NetworkScoreManager;
 import android.net.wifi.WifiManager;
 import android.provider.SearchIndexableResource;
@@ -42,6 +44,8 @@
 
     private static final String TAG = "ConfigureWifiSettings";
 
+    public static final String KEY_IP_ADDRESS = "current_ip_address";
+
     private WifiWakeupPreferenceController mWifiWakeupPreferenceController;
     private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController;
 
@@ -114,5 +118,22 @@
                     sir.xmlResId = R.xml.wifi_configure_settings;
                     return Arrays.asList(sir);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys =  super.getNonIndexableKeys(context);
+
+                    // If connected to WiFi, this IP address will be the same as the Status IP.
+                    // Or, if there is no connection they will say unavailable.
+                    ConnectivityManager cm = (ConnectivityManager)
+                            context.getSystemService(Context.CONNECTIVITY_SERVICE);
+                    NetworkInfo info = cm.getActiveNetworkInfo();
+                    if (info == null
+                            || info.getType() == ConnectivityManager.TYPE_WIFI) {
+                        keys.add(KEY_IP_ADDRESS);
+                    }
+
+                    return keys;
+                }
             };
 }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
index 37da38e..5a08c58 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.wifi.tether;
 
+import static android.net.wifi.WifiConfiguration.AP_BAND_2GHZ;
+import static android.net.wifi.WifiConfiguration.AP_BAND_5GHZ;
+
 import android.content.Context;
 import android.net.wifi.WifiConfiguration;
 import android.support.v7.preference.ListPreference;
@@ -24,9 +27,6 @@
 
 import com.android.settings.R;
 
-import static android.net.wifi.WifiConfiguration.AP_BAND_2GHZ;
-import static android.net.wifi.WifiConfiguration.AP_BAND_5GHZ;
-
 public class WifiTetherApBandPreferenceController extends WifiTetherBasePreferenceController {
 
     private static final String PREF_KEY = "wifi_tether_network_ap_band";
@@ -41,10 +41,14 @@
         super(context, listener);
         mBandEntries = mContext.getResources().getStringArray(R.array.wifi_ap_band_config_full);
         final WifiConfiguration config = mWifiManager.getWifiApConfiguration();
-        if (config != null) {
+        if (config == null) {
+            mBandIndex = 0;
+        } else if (is5GhzBandSupported()) {
             mBandIndex = config.apBand;
         } else {
-            mBandIndex = 0;
+            config.apBand = 0;
+            mWifiManager.setWifiApConfiguration(config);
+            mBandIndex = config.apBand;
         }
     }
 
@@ -77,10 +81,11 @@
     }
 
     private boolean is5GhzBandSupported() {
-        if (mBandIndex > 0) {
-            return true;
+        final String countryCode = mWifiManager.getCountryCode();
+        if (!mWifiManager.isDualBandSupported() || countryCode == null) {
+            return false;
         }
-        return mWifiManager.is5GHzBandSupported();
+        return true;
     }
 
     public int getBandIndex() {
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index e38064a..bbb4bb2 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -20,7 +20,6 @@
 com.android.settings.wifi.WifiInfo
 com.android.settings.applications.VrListenerSettings
 com.android.settings.inputmethod.UserDictionaryList
-com.android.settings.deviceinfo.Status
 com.android.settings.datausage.DataSaverSummary
 com.android.settings.notification.ChannelNotificationSettings
 com.android.settings.notification.ChannelGroupNotificationSettings
diff --git a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
new file mode 100644
index 0000000..7aab99d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
@@ -0,0 +1,175 @@
+/*
+ * 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.development;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+
+import org.junit.After;
+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.annotation.Config;
+import org.robolectric.RuntimeEnvironment;
+
+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,
+        shadows = {SettingsShadowSystemProperties.class})
+public class CameraLaserSensorPreferenceControllerTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private SwitchPreference mPreference;
+
+    static final String USERDEBUG_BUILD = "userdebug";
+    static final String ENG_BUILD = "eng";
+    static final String USER_BUILD = "user";
+
+    private CameraLaserSensorPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mController = new CameraLaserSensorPreferenceController(mContext);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
+    }
+
+    @After
+    public void tearDown() {
+        SettingsShadowSystemProperties.clear();
+    }
+
+    @Test
+    public void isAvailable_withConfigNoShow_shouldReturnFalse() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(false);
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void isAvailable_withUserdebugBuild_shouldReturnTrue() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_withEngBuild_shouldReturnTrue() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.BUILD_TYPE, ENG_BUILD);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_withUserBuild_shouldReturnFalse() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.BUILD_TYPE, USER_BUILD);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_cameraLaserSensorEnabled_shouldCheckedPreference() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
+                Integer.toString(CameraLaserSensorPreferenceController.ENABLED));
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setChecked(true);
+    }
+
+    @Test
+    public void displayPreference_cameraLaserSensorEnabled_shouldUncheckedPreference() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
+                Integer.toString(CameraLaserSensorPreferenceController.DISABLED));
+        SettingsShadowSystemProperties.set(
+                CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setChecked(false);
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_preferenceChecked_shouldEnableCameraLaserSensor() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        when(mPreference.isChecked()).thenReturn(true);
+
+        mController.handlePreferenceTreeClick(mPreference);
+
+        assertThat(Integer.toString(CameraLaserSensorPreferenceController.ENABLED).equals(
+            SystemProperties.get(
+                        CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
+                        Integer.toString(CameraLaserSensorPreferenceController.ENABLED)))).isTrue();
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableCameraLaserSensor() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
+                .thenReturn(true);
+
+        when(mPreference.isChecked()).thenReturn(false);
+
+        mController.handlePreferenceTreeClick(mPreference);
+
+        assertThat(Integer.toString(CameraLaserSensorPreferenceController.DISABLED).equals(
+                SystemProperties.get(
+                        CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
+                        Integer.toString(CameraLaserSensorPreferenceController.ENABLED)))).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
new file mode 100644
index 0000000..687287b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
@@ -0,0 +1,83 @@
+package com.android.settings.wifi;
+
+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.when;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.XmlTestUtils;
+
+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 ConfigureWifiSettingsTest {
+
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        mContext = spy(RuntimeEnvironment.application);
+    }
+
+    @Test
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final List<String> niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+        final int xmlId = new ConfigureWifiSettings().getPreferenceScreenResId();
+
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId);
+
+        assertThat(keys).containsAllIn(niks);
+    }
+
+    @Test
+    public void testNonIndexableKeys_noConnection_blocksIP() {
+        ConnectivityManager manager = mock(ConnectivityManager.class);
+        when(manager.getActiveNetworkInfo()).thenReturn(null);
+        doReturn(manager).when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE);
+
+        final List<String> niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+        assertThat(niks).contains(ConfigureWifiSettings.KEY_IP_ADDRESS);
+    }
+
+    @Test
+    public void testNonIndexableKeys_wifiConnection_blocksIP() {
+        ConnectivityManager manager = mock(ConnectivityManager.class);
+        NetworkInfo info = mock(NetworkInfo.class);
+        when(info.getType()).thenReturn(ConnectivityManager.TYPE_WIFI);
+        when(manager.getActiveNetworkInfo()).thenReturn(info);
+        doReturn(manager).when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE);
+
+        final List<String> niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+        assertThat(niks).contains(ConfigureWifiSettings.KEY_IP_ADDRESS);
+    }
+
+    @Test
+    public void testNonIndexableKeys_mobileConnection_blocksIP() {
+        ConnectivityManager manager = mock(ConnectivityManager.class);
+        NetworkInfo info = mock(NetworkInfo.class);
+        when(info.getType()).thenReturn(ConnectivityManager.TYPE_MOBILE);
+        when(manager.getActiveNetworkInfo()).thenReturn(info);
+        doReturn(manager).when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE);
+
+        final List<String> niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+        assertThat(niks).doesNotContain(ConfigureWifiSettings.KEY_IP_ADDRESS);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
index a7e00ab..8f0b143 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
@@ -16,6 +16,12 @@
 
 package com.android.settings.wifi.tether;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.wifi.WifiManager;
@@ -35,12 +41,6 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-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 WifiTetherApBandPreferenceControllerTest {
@@ -75,7 +75,8 @@
 
     @Test
     public void display_5GhzSupported_shouldDisplayFullList() {
-        when(mWifiManager.is5GHzBandSupported()).thenReturn(true);
+        when(mWifiManager.getCountryCode()).thenReturn("US");
+        when(mWifiManager.isDualBandSupported()).thenReturn(true);
 
         mController.displayPreference(mScreen);
 
@@ -83,8 +84,21 @@
     }
 
     @Test
+    public void display_noCountryCode_shouldDisable() {
+        when(mWifiManager.getCountryCode()).thenReturn(null);
+        when(mWifiManager.isDualBandSupported()).thenReturn(true);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mListPreference.getEntries()).isNull();
+        assertThat(mListPreference.isEnabled()).isFalse();
+        assertThat(mListPreference.getSummary())
+                .isEqualTo(RuntimeEnvironment.application.getString(R.string.wifi_ap_choose_2G));
+    }
+
+    @Test
     public void display_5GhzNotSupported_shouldDisable() {
-        when(mWifiManager.is5GHzBandSupported()).thenReturn(false);
+        when(mWifiManager.isDualBandSupported()).thenReturn(false);
 
         mController.displayPreference(mScreen);
 
