diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 10b91cb..7b853cc 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -272,7 +272,7 @@
                 android:configChanges="orientation|keyboardHidden|screenSize"
                 android:parentActivityName="Settings$WifiSettingsActivity">
             <intent-filter android:priority="1">
-                <action android:name="android.settings.CONFIGURE_WIFI_SETTINGS" />
+                <action android:name="android.settings.WIFI_IP_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ba919ce..11aa84c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -744,10 +744,12 @@
     <string name="security_settings_title">Security &amp; screen lock</string>
     <!-- Security Settings screen setting option title for the item to take you to the encryption and credential screen -->
     <string name="encryption_and_credential_settings_title">Encryption &amp; credentials</string>
+    <!-- Security Settings screen Encryption and crendential summary -->
+    <string name="encryption_and_credential_settings_summary">Phone encrypted</string>
     <!-- Security Settings screen setting option title for the item to take you to the lock screen preference screen [CHAR LIMIT=60] -->
     <string name="lockscreen_settings_title">Lock screen preferences</string>
     <!-- Security Settings screen setting option summary for the item to take you to the lock screen preference screen -->
-    <string name="lockscreen_settings_summary">Access settings in lock screen</string>
+    <string name="lockscreen_settings_summary">Show all notification content</string>
 
     <!-- Main Settings screen setting option summary text for the item tot ake you to the security and location screen -->
     <string name="security_settings_summary">Set My Location, screen unlock, SIM card lock, credential storage lock</string>
@@ -1069,6 +1071,12 @@
     <!--  Title for PreferenceScreen to launch picker for security method when there is none [CHAR LIMIT=22] -->
     <string name="unlock_set_unlock_launch_picker_title">Screen lock</string>
 
+    <!--  Summary for PreferenceScreen to launch picker for security method when there is none [CHAR LIMIT=NONE] -->
+    <string name="unlock_set_unlock_launch_picker_summary_lock_immediately"><xliff:g id="unlock_method" example="PIN">%1$s</xliff:g> / Immediately after sleep</string>
+
+    <!--  Summary for PreferenceScreen to launch picker for security method when there is none [CHAR LIMIT=NONE] -->
+    <string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout"><xliff:g id="unlock_method" example="PIN">%1$s</xliff:g> / <xliff:g id="timeout_string">%2$s</xliff:g> after sleep</string>
+
     <!--  Profile Security lock settings --><skip />
     <!--  Title for PreferenceScreen to launch picker for security method for the managed profile when there is none [CHAR LIMIT=22] -->
     <string name="unlock_set_unlock_launch_picker_title_profile">Work profile lock</string>
@@ -1320,8 +1328,14 @@
     <!-- Summary shown when trust agent settings is disabled because the user hasn't set up primary security -->
     <string name="disabled_because_no_backup_security">To use, first set a screen lock</string>
 
-    <!-- Summary of preference to manage device policies -->
-    <string name="manage_trust_agents_summary">View or deactivate trust agents</string>
+    <!-- Summary of preference to manage device policies when there is no trust agents-->
+    <string name="manage_trust_agents_summary">None</string>
+
+    <!-- Summary of preference to manage device policies when there is trust agent-->
+    <plurals name="manage_trust_agents_summary_on">
+        <item quantity="one">1 active trust agent</item>
+        <item quantity="other"><xliff:g id="count" example="3">%d</xliff:g> active trust agents</item>
+    </plurals>
 
     <!-- Bluetooth settings -->
     <!-- Bluetooth settings check box title on Main Settings screen -->
@@ -2318,8 +2332,12 @@
 
     <!-- SIM lock settings title  [CHAR LIMIT=40] -->
     <string name="sim_lock_settings">SIM card lock settings</string>
-    <!-- Security & location settings screen, setting option name  [CHAR LIMIT=40] -->
-    <string name="sim_lock_settings_category">Set up SIM card lock</string>
+    <!-- Security & screen lock settings screen, SIM card lock setting option name  [CHAR LIMIT=40] -->
+    <string name="sim_lock_settings_category">SIM card lock</string>
+    <!-- Security & screen lock settings screen, SIM card lock setting summary when off [CHAR LIMIT=NONE] -->
+    <string name="sim_lock_settings_summary_off">Off</string>
+    <!-- Security & screen lock settings screen, SIM card lock setting summary when on [CHAR LIMIT=NONE] -->
+    <string name="sim_lock_settings_summary_on">Locked</string>
     <!-- Security & location settings screen, section heading for settings related to sim card locking  [CHAR LIMIT=40] -->
     <string name="sim_lock_settings_title">SIM card lock</string>
     <!-- SIM card lock settings screen, setting check box label  [CHAR LIMIT=40] -->
@@ -4253,12 +4271,12 @@
     <string name="print_settings">Printing</string>
 
     <!-- Print setting summary in settings screen [CHAR LIMIT=50] -->
-    <string name="print_settings_summary_no_service">No print service</string>
+    <string name="print_settings_summary_no_service">Off</string>
 
     <!-- Print setting summary in settings screen [CHAR LIMIT=50] -->
     <plurals name="print_settings_summary">
-        <item quantity="one">1 print service</item>
-        <item quantity="other"><xliff:g id="count">%1$d</xliff:g> print services</item>
+        <item quantity="one">1 print service on</item>
+        <item quantity="other"><xliff:g id="count">%1$d</xliff:g> print services on</item>
     </plurals>
 
     <!-- Title for print service settings screen [CHAR LIMIT=25] -->
@@ -6392,15 +6410,6 @@
     <!-- Notification Settings: Title for the option managing notifications per application. [CHAR LIMIT=30] -->
     <string name="app_notifications_title">Notifications</string>
 
-    <!-- Notification Settings: Summary for managing notifications when notifications is on for all apps. [CHAR LIMIT=60] -->
-    <string name="app_notifications_summary_on">On for all apps</string>
-
-    <!-- Notification Settings: Summary for managing notifications when notifications is off for some apps. [CHAR LIMIT=60] -->
-    <plurals name="app_notifications_summary_off">
-        <item quantity="one">Off for 1 app</item>
-        <item quantity="other">Off for <xliff:g id="off_count" example="10">%d</xliff:g> apps</item>
-    </plurals>
-
     <!-- [CHAR LIMIT=100] Notification importance slider title -->
     <string name="notification_importance_title">Importance</string>
 
@@ -7198,13 +7207,12 @@
     <string name="high_power_desc">Don\u2019t apply battery optimization. May drain your battery more quickly.</string>
 
     <!-- Title of prompt dialog app can invoke to turn off optimization [CHAR LIMIT=NONE] -->
-    <string name="high_power_prompt_title">Ignore battery optimizations?</string>
+    <string name="high_power_prompt_title">Let app always run in background?</string>
 
     <!-- Body text of prompt dialog app can invoke to turn off optimization [CHAR LIMIT=NONE] -->
-    <string name="high_power_prompt_body">Let app
-        <xliff:g id="app_name" example="Settings">%1$s</xliff:g> stay connected in the
-        background?  This may use more battery.</string>
-
+    <string name="high_power_prompt_body">
+        Allowing <xliff:g id="app_name" example="Settings">%1$s</xliff:g> to always run in the background may reduce battery life.
+        \n\nYou can change this later from Settings > Apps &amp; notifications.</string>
     <!-- Summary of power usage for an app [CHAR LIMIT=NONE] -->
     <string name="battery_summary"><xliff:g id="percentage" example="2">%1$d</xliff:g>%% use since last full charge</string>
 
@@ -7242,7 +7250,7 @@
     <!-- Title of one of the choices in a dialog (with title defined in usb_use) that lets the user
          select what the USB connection for this device should be used for. This choice
          is for charging only. -->
-    <string name="usb_use_charging_only">Charge this device</string>
+    <string name="usb_use_charging_only">Charging this device</string>
     <!-- Decription of one of the choices in a dialog (with title defined in usb_use) that lets the
          user select what the USB connection for this device should be used for. This choice
          is for charging only. -->
@@ -7250,7 +7258,7 @@
     <!-- Title of one of the choices in a dialog (with title defined in usb_use) that lets the user
          select what the USB connection for this device should be used for. This choice
          is for powering the other device only. -->
-    <string name="usb_use_power_only">Supply power</string>
+    <string name="usb_use_power_only">Supplying power</string>
     <!-- Decription of one of the choices in a dialog (with title defined in usb_use) that lets the
          user select what the USB connection for this device should be used for. This choice
          is for powering the other device. -->
@@ -7538,12 +7546,12 @@
 
     <!-- Summary of notifications [CHAR LIMIT=NONE] -->
     <plurals name="notification_summary">
-        <item quantity="one"><xliff:g id="count" example="1">%d</xliff:g> app blocked from sending</item>
-        <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps blocked from sending</item>
+        <item quantity="one">Off for 1 app</item>
+        <item quantity="other">Off for <xliff:g id="count" example="10">%d</xliff:g> apps</item>
     </plurals>
 
     <!-- Summary of notifications when no apps are blocked [CHAR LIMIT=NONE] -->
-    <string name="notification_summary_none">All apps allowed to send</string>
+    <string name="notification_summary_none">On for all apps</string>
 
     <!-- Summary of apps [CHAR LIMIT=NONE] -->
     <string name="apps_summary"><xliff:g id="count" example="24">%1$d</xliff:g> apps installed</string>
@@ -7913,7 +7921,13 @@
     <string name="notification_log_details_ranking_none">Ranking object doesn\'t contain this key.</string>
 
     <!-- [CHAR_LIMIT=60] Label for special access screen -->
-    <string name="special_access">Special access</string>
+    <string name="special_access">Special app access</string>
+
+    <!-- Summary for special access settings [CHAR_LIMIT=NONE] -->
+    <plurals name="special_access_summary">
+        <item quantity="one">1 app can use unrestricted data</item>
+        <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps can use unrestricted data</item>
+    </plurals>
 
     <!-- Developer option to convert to file encryption - final warning -->
     <string name="confirm_convert_to_fbe_warning">Really wipe user data and convert to file encryption?</string>
@@ -7953,9 +7967,12 @@
     <!-- Title of screen controlling which apps have access to send premium SMS messages [CHAR LIMIT=60] -->
     <string name="premium_sms_access">Premium SMS access</string>
 
-    <!-- Bluetooth is disabled. -->
+    <!-- Summary for Bluetooth when disabled. [CHAR LIMIT=NONE] -->
     <string name="bluetooth_disabled">Not visible to other devices</string>
 
+    <!-- Summary for Bluetooth when connected. [CHAR LIMIT=NONE] -->
+    <string name="bluetooth_connected_summary">Connected to </string>
+
     <!-- [CHAR LIMIT=60] Name of dev option called "System UI demo mode" -->
     <string name="demo_mode">System UI demo mode</string>
 
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index b4ab7df..c5e5e93 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -14,115 +14,116 @@
      limitations under the License.
 -->
 
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-        android:title="@string/display_settings"
-        settings:keywords="@string/keywords_display">
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+    android:title="@string/display_settings"
+    settings:keywords="@string/keywords_display">
 
-        <Preference
-                android:key="brightness"
-                android:title="@string/brightness"
-                settings:keywords="@string/keywords_display_brightness_level">
-            <intent android:action="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
-        </Preference>
+    <Preference
+        android:key="brightness"
+        android:title="@string/brightness"
+        settings:keywords="@string/keywords_display_brightness_level">
+        <intent android:action="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
+    </Preference>
 
-        <com.android.settingslib.RestrictedPreference
-            android:key="wallpaper"
-            android:title="@string/wallpaper_settings_title"
-            settings:keywords="@string/keywords_display_wallpaper"
-            settings:useAdminDisabledSummary="true" >
-                <intent
-                    android:targetPackage="@string/config_wallpaper_picker_package"
-                    android:targetClass="@string/config_wallpaper_picker_class" />
-        </com.android.settingslib.RestrictedPreference>
+    <com.android.settingslib.RestrictedPreference
+        android:key="wallpaper"
+        android:title="@string/wallpaper_settings_title"
+        settings:keywords="@string/keywords_display_wallpaper"
+        settings:useAdminDisabledSummary="true">
+        <intent
+            android:targetPackage="@string/config_wallpaper_picker_package"
+            android:targetClass="@string/config_wallpaper_picker_class" />
+    </com.android.settingslib.RestrictedPreference>
 
-        <com.android.settings.display.NightDisplayPreference
-            android:key="night_display"
-            android:title="@string/night_display_title"
-            android:fragment="com.android.settings.display.NightDisplaySettings"
-            settings:widgetLayout="@null"
-            settings:keywords="@string/keywords_display_night_display" />
+    <com.android.settings.display.NightDisplayPreference
+        android:key="night_display"
+        android:title="@string/night_display_title"
+        android:fragment="com.android.settings.display.NightDisplaySettings"
+        settings:widgetLayout="@null"
+        settings:keywords="@string/keywords_display_night_display" />
 
-        <com.android.settings.TimeoutListPreference
-            android:key="screen_timeout"
-            android:title="@string/screen_timeout"
-            android:summary="@string/screen_timeout_summary"
-            android:entries="@array/screen_timeout_entries"
-            android:entryValues="@array/screen_timeout_values" />
+    <com.android.settings.TimeoutListPreference
+        android:key="screen_timeout"
+        android:title="@string/screen_timeout"
+        android:summary="@string/screen_timeout_summary"
+        android:entries="@array/screen_timeout_entries"
+        android:entryValues="@array/screen_timeout_values" />
 
-        <DropDownPreference
-            android:key="auto_rotate"
-            android:summary="%s"
-            android:title="@string/display_auto_rotate_title" />
+    <DropDownPreference
+        android:key="auto_rotate"
+        android:summary="%s"
+        android:title="@string/display_auto_rotate_title" />
 
-        <SwitchPreference
-            android:key="auto_brightness"
-            android:title="@string/auto_brightness_title"
-            settings:keywords="@string/keywords_display_auto_brightness"
-            android:summary="@string/auto_brightness_summary" />
+    <SwitchPreference
+        android:key="auto_brightness"
+        android:title="@string/auto_brightness_title"
+        settings:keywords="@string/keywords_display_auto_brightness"
+        android:summary="@string/auto_brightness_summary" />
 
-        <Preference
-            android:key="font_size"
-            android:title="@string/title_font_size"
-            android:fragment="com.android.settings.accessibility.ToggleFontSizePreferenceFragment"
-            settings:keywords="@string/keywords_display_font_size" />
+    <Preference
+        android:key="font_size"
+        android:title="@string/title_font_size"
+        android:fragment="com.android.settings.accessibility.ToggleFontSizePreferenceFragment"
+        settings:keywords="@string/keywords_display_font_size" />
 
-        <com.android.settings.display.ScreenZoomPreference
-            android:key="screen_zoom"
-            android:title="@string/screen_zoom_title"
-            settings:keywords="@string/screen_zoom_keywords" />
+    <com.android.settings.display.ScreenZoomPreference
+        android:key="screen_zoom"
+        android:title="@string/screen_zoom_title"
+        settings:keywords="@string/screen_zoom_keywords" />
 
-        <Preference
-            android:key="screensaver"
-            android:title="@string/screensaver_settings_title"
-            android:fragment="com.android.settings.DreamSettings" />
+    <Preference
+        android:key="screensaver"
+        android:title="@string/screensaver_settings_title"
+        android:fragment="com.android.settings.DreamSettings" />
 
-        <!-- Hide night mode for now
-        <ListPreference
-            android:key="night_mode"
-            android:title="@string/night_mode_title"
-            settings:keywords="@string/keywords_display_night_mode"
-            android:summary="@string/night_mode_summary"
-            android:entries="@array/night_mode_entries"
-            android:entryValues="@array/night_mode_values" /> -->
+    <!-- Hide night mode for now
+    <ListPreference
+        android:key="night_mode"
+        android:title="@string/night_mode_title"
+        settings:keywords="@string/keywords_display_night_mode"
+        android:summary="@string/night_mode_summary"
+        android:entries="@array/night_mode_entries"
+        android:entryValues="@array/night_mode_values" /> -->
 
-        <SwitchPreference
-            android:key="camera_gesture"
-            android:title="@string/camera_gesture_title"
-            android:summary="@string/camera_gesture_desc" />
+    <SwitchPreference
+        android:key="camera_gesture"
+        android:title="@string/camera_gesture_title"
+        android:summary="@string/camera_gesture_desc" />
 
-        <SwitchPreference
-            android:key="lift_to_wake"
-            android:title="@string/lift_to_wake_title" />
+    <SwitchPreference
+        android:key="lift_to_wake"
+        android:title="@string/lift_to_wake_title" />
 
-        <Preference
-            android:key="gesture_double_tap_screen"
-            android:title="@string/ambient_display_title"
-            android:fragment="com.android.settings.gestures.DoubleTapScreenSettings"/>
+    <Preference
+        android:key="gesture_double_tap_screen"
+        android:title="@string/ambient_display_title"
+        android:fragment="com.android.settings.gestures.DoubleTapScreenSettings" />
 
-        <Preference
-            android:key="gesture_pick_up"
-            android:title="@string/ambient_display_pickup_title"
-            android:fragment="com.android.settings.gestures.PickupGestureSettings"/>
+    <Preference
+        android:key="gesture_pick_up"
+        android:title="@string/ambient_display_pickup_title"
+        android:fragment="com.android.settings.gestures.PickupGestureSettings" />
 
-        <SwitchPreference
-            android:key="doze"
-            android:title="@string/doze_title"
-            android:summary="@string/doze_summary" />
+    <SwitchPreference
+        android:key="doze"
+        android:title="@string/doze_title"
+        android:summary="@string/doze_summary" />
 
-        <SwitchPreference
-            android:key="tap_to_wake"
-            android:title="@string/tap_to_wake"
-            android:summary="@string/tap_to_wake_summary" />
+    <SwitchPreference
+        android:key="tap_to_wake"
+        android:title="@string/tap_to_wake"
+        android:summary="@string/tap_to_wake_summary" />
 
-        <ListPreference
-            android:key="theme"
-            android:title="@string/device_theme"
-            android:summary="%s" />
+    <ListPreference
+        android:key="theme"
+        android:title="@string/device_theme"
+        android:summary="%s" />
 
-        <DropDownPreference
-            android:key="vr_display_pref"
-            android:summary="%s"
-            android:title="@string/display_vr_pref_title" />
+    <Preference
+        android:key="vr_display_pref"
+        android:title="@string/display_vr_pref_title"
+        android:fragment="com.android.settings.display.VrDisplayPreferencePicker" />
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
index dc37efc..282f613 100644
--- a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
@@ -98,13 +98,13 @@
         }
         switch (mConnectionState) {
             case BluetoothAdapter.STATE_CONNECTED:
-                return mContext.getString(R.string.bluetooth_connected);
+                return mContext.getString(R.string.bluetooth_connected_summary);
             case BluetoothAdapter.STATE_CONNECTING:
                 return mContext.getString(R.string.bluetooth_connecting);
             case BluetoothAdapter.STATE_DISCONNECTING:
                 return mContext.getString(R.string.bluetooth_disconnecting);
             default:
-                return mContext.getString(R.string.bluetooth_disconnected);
+                return mContext.getString(R.string.disconnected);
         }
     }
 
diff --git a/src/com/android/settings/display/VrDisplayPreferenceController.java b/src/com/android/settings/display/VrDisplayPreferenceController.java
index 0eb1c88..4fef987 100644
--- a/src/com/android/settings/display/VrDisplayPreferenceController.java
+++ b/src/com/android/settings/display/VrDisplayPreferenceController.java
@@ -17,17 +17,13 @@
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.provider.Settings;
-import android.support.v7.preference.DropDownPreference;
 import android.support.v7.preference.Preference;
-import android.util.Log;
 
 import com.android.settings.R;
 import com.android.settings.core.PreferenceController;
 
-public class VrDisplayPreferenceController extends PreferenceController implements
-        Preference.OnPreferenceChangeListener {
+public class VrDisplayPreferenceController extends PreferenceController {
 
-    private static final String TAG = "VrDisplayPrefContr";
     private static final String KEY_VR_DISPLAY_PREF = "vr_display_pref";
 
     public VrDisplayPreferenceController(Context context) {
@@ -47,31 +43,14 @@
 
     @Override
     public void updateState(Preference preference) {
-        final DropDownPreference pref = (DropDownPreference) preference;
-        pref.setEntries(new CharSequence[]{
-                mContext.getString(R.string.display_vr_pref_low_persistence),
-                mContext.getString(R.string.display_vr_pref_off),
-        });
-        pref.setEntryValues(new CharSequence[]{"0", "1"});
-
         int currentUser = ActivityManager.getCurrentUser();
         int current = Settings.Secure.getIntForUser(mContext.getContentResolver(),
-                Settings.Secure.VR_DISPLAY_MODE,
-                            /*default*/Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
+                Settings.Secure.VR_DISPLAY_MODE, Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
                 currentUser);
-        pref.setValueIndex(current);
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        int i = Integer.parseInt((String) newValue);
-        int u = ActivityManager.getCurrentUser();
-        if (!Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                Settings.Secure.VR_DISPLAY_MODE,
-                i, u)) {
-            Log.e(TAG, "Could not change setting for " +
-                    Settings.Secure.VR_DISPLAY_MODE);
+        if (current == 0) {
+            preference.setSummary(R.string.display_vr_pref_low_persistence);
+        } else {
+            preference.setSummary(R.string.display_vr_pref_off);
         }
-        return true;
     }
 }
diff --git a/src/com/android/settings/display/VrDisplayPreferencePicker.java b/src/com/android/settings/display/VrDisplayPreferencePicker.java
new file mode 100644
index 0000000..bccdaa5
--- /dev/null
+++ b/src/com/android/settings/display/VrDisplayPreferencePicker.java
@@ -0,0 +1,99 @@
+/*
+ * 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.graphics.drawable.Drawable;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.widget.RadioButtonPickerFragment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VrDisplayPreferencePicker extends RadioButtonPickerFragment {
+
+    static final String PREF_KEY_PREFIX = "vr_display_pref_";
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.VR_DISPLAY_PREFERENCE;
+    }
+
+    @Override
+    protected List<VrCandidateInfo> getCandidates() {
+        List<VrCandidateInfo> candidates = new ArrayList<>();
+        final Context context = getContext();
+        candidates.add(new VrCandidateInfo(context, 0, R.string.display_vr_pref_low_persistence));
+        candidates.add(new VrCandidateInfo(context, 1, R.string.display_vr_pref_off));
+        return candidates;
+    }
+
+    @Override
+    protected String getDefaultKey() {
+        int current = Settings.Secure.getIntForUser(getContext().getContentResolver(),
+                Settings.Secure.VR_DISPLAY_MODE, Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
+                mUserId);
+        return PREF_KEY_PREFIX + current;
+    }
+
+    @Override
+    protected boolean setDefaultKey(String key) {
+        if (TextUtils.isEmpty(key)) {
+            return false;
+        }
+        switch (key) {
+            case PREF_KEY_PREFIX + 0:
+                return Settings.Secure.putIntForUser(getContext().getContentResolver(),
+                        Settings.Secure.VR_DISPLAY_MODE, 0, mUserId);
+            case PREF_KEY_PREFIX + 1:
+                return Settings.Secure.putIntForUser(getContext().getContentResolver(),
+                        Settings.Secure.VR_DISPLAY_MODE, 1, mUserId);
+        }
+        return false;
+    }
+
+    static class VrCandidateInfo extends CandidateInfo {
+
+        public final String label;
+        public final int value;
+
+        public VrCandidateInfo(Context context, int value, int resId) {
+            super(true);
+            this.value = value;
+            label = context.getString(resId);
+        }
+
+        @Override
+        public CharSequence loadLabel() {
+            return label;
+        }
+
+        @Override
+        public Drawable loadIcon() {
+            return null;
+        }
+
+        @Override
+        public String getKey() {
+            return PREF_KEY_PREFIX + value;
+        }
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
index b16fd18..27bd889 100644
--- a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
+++ b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
@@ -91,8 +91,8 @@
         final AlertController.AlertParams p = mAlertParams;
         p.mTitle = getText(R.string.high_power_prompt_title);
         p.mMessage = getString(R.string.high_power_prompt_body, ai.loadLabel(getPackageManager()));
-        p.mPositiveButtonText = getText(R.string.yes);
-        p.mNegativeButtonText = getText(R.string.no);
+        p.mPositiveButtonText = getText(R.string.allow);
+        p.mNegativeButtonText = getText(R.string.deny);
         p.mPositiveButtonListener = this;
         p.mNegativeButtonListener = this;
         setupAlert();
diff --git a/src/com/android/settings/users/UserPreference.java b/src/com/android/settings/users/UserPreference.java
index 7b13597..8b53dd4 100644
--- a/src/com/android/settings/users/UserPreference.java
+++ b/src/com/android/settings/users/UserPreference.java
@@ -20,7 +20,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
 import android.os.UserManager;
-import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
 import android.view.View;
@@ -87,6 +86,20 @@
     }
 
     @Override
+    protected boolean shouldHideSecondTarget() {
+        if (isDisabledByAdmin()) {
+            // Disabled by admin, show no secondary target.
+            return true;
+        }
+        if (canDeleteUser()) {
+            // Need to show delete user target so don't hide.
+            return false;
+        }
+        // Hide if don't have advanced setting listener.
+        return mSettingsClickListener == null;
+    }
+
+    @Override
     public void onBindViewHolder(PreferenceViewHolder view) {
         super.onBindViewHolder(view);
         final boolean disabledByAdmin = isDisabledByAdmin();
@@ -96,14 +109,11 @@
             userDeleteWidget.setVisibility(disabledByAdmin ? View.GONE : View.VISIBLE);
         }
         if (!disabledByAdmin) {
-            UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
             View deleteDividerView = view.findViewById(R.id.divider_delete);
             View manageDividerView = view.findViewById(R.id.divider_manage);
             View deleteView = view.findViewById(R.id.trash_user);
             if (deleteView != null) {
-                if (mDeleteClickListener != null
-                        && !RestrictedLockUtils.hasBaseUserRestriction(getContext(),
-                                UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId())) {
+                if (canDeleteUser()) {
                     deleteView.setVisibility(View.VISIBLE);
                     deleteDividerView.setVisibility(View.VISIBLE);
                     deleteView.setOnClickListener(mDeleteClickListener);
@@ -129,6 +139,12 @@
         }
     }
 
+    private boolean canDeleteUser() {
+        return mDeleteClickListener != null
+                && !RestrictedLockUtils.hasBaseUserRestriction(getContext(),
+                UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId());
+    }
+
     private int getSerialNumber() {
         if (mUserId == UserHandle.myUserId()) return Integer.MIN_VALUE;
         if (mSerialNumber < 0) {
diff --git a/src/com/android/settings/widget/RadioButtonPickerFragment.java b/src/com/android/settings/widget/RadioButtonPickerFragment.java
index 52e8c53..2444539 100644
--- a/src/com/android/settings/widget/RadioButtonPickerFragment.java
+++ b/src/com/android/settings/widget/RadioButtonPickerFragment.java
@@ -141,8 +141,7 @@
         }
         for (Map.Entry<String, CandidateInfo> app : mCandidates.entrySet()) {
             RadioButtonPreference pref = new RadioButtonPreference(getPrefContext());
-            bindPreference(
-                    pref, app.getKey(), app.getValue(), defaultKey);
+            bindPreference(pref, app.getKey(), app.getValue(), defaultKey);
             bindPreferenceExtra(pref, app.getKey(), app.getValue(), defaultKey, systemDefaultKey);
             screen.addPreference(pref);
         }
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
index 2c88179..2d9ae9b 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
@@ -17,7 +17,6 @@
 package com.android.settings.applications.defaultapps;
 
 
-import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
index a2770a0..cc059ad 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
@@ -86,7 +86,8 @@
     public void register_true_shouldSendSummaryChange() {
         mSummaryUpdater.register(true);
 
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connected));
+        verify(mListener).onSummaryChanged(
+            mContext.getString(R.string.bluetooth_connected_summary));
     }
 
     @Test
@@ -102,7 +103,8 @@
         mSummaryUpdater.register(true);
         mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_ON);
 
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connected));
+        verify(mListener).onSummaryChanged(
+            mContext.getString(R.string.bluetooth_connected_summary));
     }
 
     @Test
@@ -111,7 +113,8 @@
         mSummaryUpdater.register(true);
         mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_TURNING_ON);
 
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disconnected));
+        verify(mListener).onSummaryChanged(
+            mContext.getString(R.string.disconnected));
     }
 
     @Test
@@ -128,7 +131,8 @@
         mSummaryUpdater.onConnectionStateChanged(null /* device */,
             BluetoothAdapter.STATE_CONNECTED);
 
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connected));
+        verify(mListener).onSummaryChanged(
+            mContext.getString(R.string.bluetooth_connected_summary));
     }
 
     @Test
@@ -137,7 +141,8 @@
         mSummaryUpdater.onConnectionStateChanged(null /* device */,
             BluetoothAdapter.STATE_CONNECTED);
 
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disconnected));
+        verify(mListener).onSummaryChanged(
+            mContext.getString(R.string.disconnected));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/display/VrDisplayPreferencePickerTest.java b/tests/robotests/src/com/android/settings/display/VrDisplayPreferencePickerTest.java
new file mode 100644
index 0000000..56d4c47
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/VrDisplayPreferencePickerTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.ContentResolver;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.shadow.ShadowSecureSettings;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+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 VrDisplayPreferencePickerTest {
+
+    private VrDisplayPreferencePicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mPicker = spy(new VrDisplayPreferencePicker());
+        doReturn(RuntimeEnvironment.application).when(mPicker).getContext();
+    }
+
+    @Test
+    public void verifyMetricsConstant() {
+        assertThat(mPicker.getMetricsCategory())
+                .isEqualTo(MetricsProto.MetricsEvent.VR_DISPLAY_PREFERENCE);
+    }
+
+    @Test
+    public void getCandidates_shouldReturnTwoCandidates() {
+        List<VrDisplayPreferencePicker.VrCandidateInfo> candidates = mPicker.getCandidates();
+
+        assertThat(candidates.size()).isEqualTo(2);
+        assertThat(candidates.get(0).getKey())
+                .isEqualTo(VrDisplayPreferencePicker.PREF_KEY_PREFIX + 0);
+        assertThat(candidates.get(1).getKey())
+                .isEqualTo(VrDisplayPreferencePicker.PREF_KEY_PREFIX + 1);
+    }
+
+    @Test
+    @Config(shadows = ShadowSecureSettings.class)
+    public void getKey_shouldGetFromSettingsProvider() {
+        final ContentResolver cr = RuntimeEnvironment.application.getContentResolver();
+        Settings.Secure.putIntForUser(cr, Settings.Secure.VR_DISPLAY_MODE, 1,
+                UserHandle.myUserId());
+
+        assertThat(mPicker.getDefaultKey())
+                .isEqualTo(VrDisplayPreferencePicker.PREF_KEY_PREFIX + 1);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java
index 5dd54c0..fd4d0d2 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java
@@ -53,6 +53,17 @@
     }
 
     @Implementation
+    public static boolean putIntForUser(ContentResolver cr, String name, int value,
+            int userHandle) {
+        return putInt(cr, name, value);
+    }
+
+    @Implementation
+    public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) {
+        return getInt(cr, name, def);
+    }
+
+    @Implementation
     public static int getInt(ContentResolver resolver, String name, int defaultValue) {
         Integer value = (Integer) mValueMap.get(name);
         return value == null ? defaultValue : value;
diff --git a/tests/robotests/src/com/android/settings/users/UserPreferenceTest.java b/tests/robotests/src/com/android/settings/users/UserPreferenceTest.java
new file mode 100644
index 0000000..031cd77
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/users/UserPreferenceTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.users;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.view.View;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settingslib.RestrictedPreferenceHelper;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class UserPreferenceTest {
+
+    @Mock
+    private RestrictedPreferenceHelper mRestrictedPreferenceHelper;
+    private Context mContext;
+    private UserPreference mUserPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mUserPreference = new UserPreference(mContext, null /* attrs */, UserHandle.USER_CURRENT,
+                null /* settingsListener */, null /* deleteListener */);
+        ReflectionHelpers.setField(mUserPreference, "mHelper", mRestrictedPreferenceHelper);
+    }
+
+    @Test
+    public void testShouldHideSecondTarget_noListener_shouldHide() {
+        assertThat(mUserPreference.shouldHideSecondTarget()).isTrue();
+    }
+
+    @Test
+    public void testShouldHideSecondTarget_disabledByAdmin_shouldHide() {
+        when(mRestrictedPreferenceHelper.isDisabledByAdmin()).thenReturn(true);
+
+        assertThat(mUserPreference.shouldHideSecondTarget()).isTrue();
+    }
+
+    @Test
+    public void testShouldHideSecondTarget_hasSettingListener_shouldNotHide() {
+        ReflectionHelpers.setField(mUserPreference, "mSettingsClickListener",
+                mock(View.OnClickListener.class));
+
+        assertThat(mUserPreference.shouldHideSecondTarget()).isFalse();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
new file mode 100644
index 0000000..ed95175
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.users;
+
+import android.app.Activity;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.dashboard.SummaryLoader;
+
+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.Robolectric;
+
+import static org.mockito.Matchers.anyInt;
+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)
+public class UserSettingsTest {
+
+    @Mock private UserManager mUserManager;
+    @Mock private SummaryLoader mSummaryLoader;
+    private Activity mActivity;
+    private SummaryLoader.SummaryProvider mSummaryProvider;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mActivity = spy(Robolectric.buildActivity(Activity.class).get());
+        when((Object) mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
+
+        mSummaryProvider = UserSettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(
+            mActivity, mSummaryLoader);
+    }
+
+    @Test
+    public void setListening_shouldSetSummaryWithUserName() {
+        final String name = "John";
+        final UserInfo userInfo = new UserInfo();
+        userInfo.name = name;
+        when(mUserManager.getUserInfo(anyInt())).thenReturn(userInfo);
+
+        mSummaryProvider.setListening(true);
+
+        verify(mSummaryLoader).setSummary(mSummaryProvider,
+            mActivity.getString(R.string.users_summary, name));
+    }
+
+}
