diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 86dada9..89d696d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -352,7 +352,7 @@
         </activity>
 
         <activity android:name=".EnableWifiTether"
-            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+            android:theme="@style/Transparent"
             android:excludeFromRecents="true" />
 
         <activity android:name="Settings$TetherSettingsActivity"
@@ -1143,7 +1143,7 @@
         <activity android:name="SetupChooseLockGeneric"
             android:taskAffinity="com.android.wizard"
             android:theme="@style/SetupWizardDisableAppStartingTheme"
-            android:label="@string/lockpassword_choose_lock_generic_header">
+            android:label="@string/lock_settings_picker_title">
             <intent-filter>
                 <action android:name="com.android.settings.SETUP_LOCK_SCREEN" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -2042,7 +2042,6 @@
                 android:label="@string/sim_settings_title">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
 
diff --git a/res/drawable-hdpi/setup_illustration_lock_screen.jpg b/res/drawable-hdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..db697a0
--- /dev/null
+++ b/res/drawable-hdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-hdpi/setup_illustration_wifi.jpg b/res/drawable-hdpi/setup_illustration_wifi.jpg
new file mode 100644
index 0000000..d38551e
--- /dev/null
+++ b/res/drawable-hdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-mdpi/setup_illustration_lock_screen.jpg b/res/drawable-mdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..95e2b8c
--- /dev/null
+++ b/res/drawable-mdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-mdpi/setup_illustration_wifi.jpg b/res/drawable-mdpi/setup_illustration_wifi.jpg
new file mode 100644
index 0000000..a497bf5
--- /dev/null
+++ b/res/drawable-mdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/setup_illustration_lock_screen.jpg b/res/drawable-sw600dp-hdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..03cd9d9
--- /dev/null
+++ b/res/drawable-sw600dp-hdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-hdpi/setup_illustration_wifi_wide_image.jpg b/res/drawable-sw600dp-hdpi/setup_illustration_wifi.jpg
similarity index 100%
rename from res/drawable-hdpi/setup_illustration_wifi_wide_image.jpg
rename to res/drawable-sw600dp-hdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/setup_illustration_lock_screen.jpg b/res/drawable-sw600dp-mdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..4a7ab38
--- /dev/null
+++ b/res/drawable-sw600dp-mdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-mdpi/setup_illustration_wifi_wide_image.jpg b/res/drawable-sw600dp-mdpi/setup_illustration_wifi.jpg
similarity index 100%
rename from res/drawable-mdpi/setup_illustration_wifi_wide_image.jpg
rename to res/drawable-sw600dp-mdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/setup_illustration_lock_screen.jpg b/res/drawable-sw600dp-xhdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..05f7725
--- /dev/null
+++ b/res/drawable-sw600dp-xhdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/setup_illustration_wifi_wide_image.jpg b/res/drawable-sw600dp-xhdpi/setup_illustration_wifi.jpg
similarity index 100%
rename from res/drawable-xhdpi/setup_illustration_wifi_wide_image.jpg
rename to res/drawable-sw600dp-xhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/setup_illustration_lock_screen.jpg b/res/drawable-sw600dp-xxhdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..da3f7d9
--- /dev/null
+++ b/res/drawable-sw600dp-xxhdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-xxhdpi/setup_illustration_wifi_wide_image.jpg b/res/drawable-sw600dp-xxhdpi/setup_illustration_wifi.jpg
similarity index 100%
rename from res/drawable-xxhdpi/setup_illustration_wifi_wide_image.jpg
rename to res/drawable-sw600dp-xxhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/setup_illustration_lock_screen.jpg b/res/drawable-sw600dp-xxxhdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..fd5da99
--- /dev/null
+++ b/res/drawable-sw600dp-xxxhdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-xxxhdpi/setup_illustration_wifi_wide_image.jpg b/res/drawable-sw600dp-xxxhdpi/setup_illustration_wifi.jpg
similarity index 100%
rename from res/drawable-xxxhdpi/setup_illustration_wifi_wide_image.jpg
rename to res/drawable-sw600dp-xxxhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-sw600dp/setup_illustration.xml b/res/drawable-sw600dp/setup_illustration.xml
new file mode 100644
index 0000000..c0e54e2
--- /dev/null
+++ b/res/drawable-sw600dp/setup_illustration.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2014 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+    android:autoMirrored="true">
+
+    <item>
+        <bitmap android:src="@drawable/setup_illustration_horizontal_tile"
+            android:gravity="top"
+            android:tileModeX="repeat"
+            android:tileModeY="disabled" />
+    </item>
+
+    <item android:id="@+id/illustration_image">
+        <bitmap android:src="@drawable/setup_illustration_wifi"
+            android:gravity="top|start" />
+    </item>
+
+</layer-list>
diff --git a/res/drawable-xhdpi/setup_illustration_lock_screen.jpg b/res/drawable-xhdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..b6b856e
--- /dev/null
+++ b/res/drawable-xhdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/setup_illustration_wifi.jpg b/res/drawable-xhdpi/setup_illustration_wifi.jpg
new file mode 100644
index 0000000..a399c19
--- /dev/null
+++ b/res/drawable-xhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-xxhdpi/setup_illustration_lock_screen.jpg b/res/drawable-xxhdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..4cb0c63
--- /dev/null
+++ b/res/drawable-xxhdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-nodpi/setup_illustration_wifi_image.jpg b/res/drawable-xxhdpi/setup_illustration_wifi.jpg
similarity index 100%
rename from res/drawable-nodpi/setup_illustration_wifi_image.jpg
rename to res/drawable-xxhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-xxxhdpi/setup_illustration_lock_screen.jpg b/res/drawable-xxxhdpi/setup_illustration_lock_screen.jpg
new file mode 100644
index 0000000..13821f3
--- /dev/null
+++ b/res/drawable-xxxhdpi/setup_illustration_lock_screen.jpg
Binary files differ
diff --git a/res/drawable-xxxhdpi/setup_illustration_wifi.jpg b/res/drawable-xxxhdpi/setup_illustration_wifi.jpg
new file mode 100644
index 0000000..56c19b6
--- /dev/null
+++ b/res/drawable-xxxhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable/setup_illustration_wifi_wide.xml b/res/drawable/setup_illustration.xml
similarity index 71%
rename from res/drawable/setup_illustration_wifi_wide.xml
rename to res/drawable/setup_illustration.xml
index 33ee2f6..f8d96d5 100644
--- a/res/drawable/setup_illustration_wifi_wide.xml
+++ b/res/drawable/setup_illustration.xml
@@ -18,16 +18,9 @@
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
     android:autoMirrored="true">
 
-    <item>
-        <bitmap android:src="@drawable/setup_illustration_horizontal_tile"
-            android:gravity="top"
-            android:tileModeX="repeat"
-            android:tileModeY="disabled" />
-    </item>
-
     <item android:id="@+id/illustration_image">
-        <bitmap android:src="@drawable/setup_illustration_wifi_wide_image"
-            android:gravity="top|start" />
+        <bitmap android:src="@drawable/setup_illustration_wifi"
+            android:gravity="fill" />
     </item>
 
-</layer-list>
\ No newline at end of file
+</layer-list>
diff --git a/res/drawable/setup_illustration_wifi.xml b/res/drawable/setup_illustration_wifi.xml
deleted file mode 100644
index 9db2f13..0000000
--- a/res/drawable/setup_illustration_wifi.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:autoMirrored="true"
-    android:src="@drawable/setup_illustration_wifi_image" />
diff --git a/res/layout-sw600dp-land/setup_preference.xml b/res/layout-sw600dp-land/setup_preference.xml
index 431ac29..814bc91 100644
--- a/res/layout-sw600dp-land/setup_preference.xml
+++ b/res/layout-sw600dp-land/setup_preference.xml
@@ -22,10 +22,11 @@
     android:orientation="vertical">
 
     <com.android.settings.widget.SetupWizardIllustration
+        android:id="@+id/setup_illustration"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_weight="1"
-        android:foreground="@drawable/setup_illustration_wifi_wide"
+        android:foreground="@drawable/setup_illustration"
         android:background="@drawable/setup_illustration_bg">
 
         <LinearLayout
diff --git a/res/layout-sw600dp-land/setup_template.xml b/res/layout-sw600dp-land/setup_template.xml
index 33c31a5..a58dd3d 100644
--- a/res/layout-sw600dp-land/setup_template.xml
+++ b/res/layout-sw600dp-land/setup_template.xml
@@ -21,12 +21,12 @@
     android:orientation="vertical">
 
     <com.android.settings.widget.SetupWizardIllustration
-        android:id="@+id/illustration_tablet"
+        android:id="@+id/setup_illustration"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
         android:background="@drawable/setup_illustration_bg"
-        android:foreground="@drawable/setup_illustration_wifi_wide">
+        android:foreground="@drawable/setup_illustration">
 
         <LinearLayout
             android:layout_width="match_parent"
diff --git a/res/layout-sw600dp/setup_preference.xml b/res/layout-sw600dp/setup_preference.xml
index 1e772d9..ec6d2ac 100644
--- a/res/layout-sw600dp/setup_preference.xml
+++ b/res/layout-sw600dp/setup_preference.xml
@@ -21,12 +21,12 @@
     android:orientation="vertical">
 
     <com.android.settings.widget.SetupWizardIllustration
-        android:id="@+id/title_area"
+        android:id="@+id/setup_illustration"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
         android:background="@drawable/setup_illustration_bg"
-        android:foreground="@drawable/setup_illustration_wifi_wide">
+        android:foreground="@drawable/setup_illustration">
 
         <LinearLayout
             android:layout_width="match_parent"
diff --git a/res/layout-sw600dp/setup_template.xml b/res/layout-sw600dp/setup_template.xml
index eb210b7..297e9fb 100644
--- a/res/layout-sw600dp/setup_template.xml
+++ b/res/layout-sw600dp/setup_template.xml
@@ -21,12 +21,12 @@
     android:orientation="vertical">
 
     <com.android.settings.widget.SetupWizardIllustration
-        android:id="@+id/illustration_tablet"
+        android:id="@+id/setup_illustration"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
         android:background="@drawable/setup_illustration_bg"
-        android:foreground="@drawable/setup_illustration_wifi_wide">
+        android:foreground="@drawable/setup_illustration">
 
         <LinearLayout
             android:layout_width="match_parent"
diff --git a/res/layout/setup_choose_lock_password.xml b/res/layout/setup_choose_lock_password.xml
index b1ac02b..59fa523 100644
--- a/res/layout/setup_choose_lock_password.xml
+++ b/res/layout/setup_choose_lock_password.xml
@@ -38,7 +38,7 @@
         android:layout_marginEnd="30dip"
         android:gravity="center"
         android:inputType="textPassword"
-        android:imeOptions="actionNext"
+        android:imeOptions="actionNext|flagNoExtractUi"
         android:textSize="24sp"
         style="@style/TextAppearance.PasswordEntry"/>
 
@@ -52,6 +52,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
+        android:visibility="gone"
         style="@style/SecurityPreferenceButtonContainer">
 
         <!-- left : cancel -->
diff --git a/res/layout/setup_choose_lock_pattern.xml b/res/layout/setup_choose_lock_pattern.xml
index 5992126..a906826 100644
--- a/res/layout/setup_choose_lock_pattern.xml
+++ b/res/layout/setup_choose_lock_pattern.xml
@@ -44,11 +44,22 @@
             android:layout_weight="4"
             android:background="@color/lock_pattern_background"/>
 
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_horizontal"
+        android:orientation="horizontal">
+
+        <Button android:id="@+id/retryButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/lockpattern_retry_button_text"/>
+
         <TextView android:id="@+id/footerText"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
             android:minHeight="50dp"
             android:textSize="14sp"/>
 
@@ -59,6 +70,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
+        android:visibility="gone"
         style="@style/SecurityPreferenceButtonContainer">
 
         <!-- left : cancel, or re-try -->
diff --git a/res/layout/setup_template.xml b/res/layout/setup_template.xml
index 7d8ffc8..0623e25 100644
--- a/res/layout/setup_template.xml
+++ b/res/layout/setup_template.xml
@@ -35,12 +35,12 @@
             android:clipChildren="false">
 
             <com.android.settings.widget.SetupWizardIllustration
-                android:id="@+id/illustration_phone"
+                android:id="@+id/setup_illustration"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:elevation="@dimen/setup_wizard_title_area_elevation"
                 android:background="@drawable/setup_illustration_bg"
-                android:foreground="@drawable/setup_illustration_wifi"
+                android:foreground="@drawable/setup_illustration"
                 android:tag="stickyContainer"
                 settings:aspectRatio="2.22">
 
@@ -58,7 +58,7 @@
                 android:id="@+id/setup_content"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_below="@id/illustration_phone"
+                android:layout_below="@id/setup_illustration"
                 android:clipChildren="false"/>
 
         </RelativeLayout>
diff --git a/res/layout/setup_wizard_header.xml b/res/layout/setup_wizard_header.xml
index c38a68d..b030ad1 100644
--- a/res/layout/setup_wizard_header.xml
+++ b/res/layout/setup_wizard_header.xml
@@ -18,12 +18,12 @@
 <com.android.settings.widget.SetupWizardIllustration
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-    android:id="@+id/title_area"
+    android:id="@+id/setup_illustration"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@drawable/setup_illustration_bg"
     android:elevation="@dimen/setup_wizard_title_area_elevation"
-    android:foreground="@drawable/setup_illustration_wifi"
+    android:foreground="@drawable/setup_illustration"
     android:tag="stickyContainer"
     settings:aspectRatio="2.22">
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a5abbbe..70fc4a0 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -40,6 +40,12 @@
     <color name="title_color">@android:color/holo_blue_light</color>
     <color name="setup_divider_color_dark">#33ffffff</color>
     <color name="setup_divider_color_light">#33000000</color>
+    <color name="setup_lock_pattern_view_regular_color_dark">#ffbdbdbd</color>
+    <color name="setup_lock_pattern_view_regular_color_light">@color/lock_pattern_view_regular_color</color>
+    <color name="setup_lock_pattern_view_success_color_dark">#ff84ffff</color>
+    <color name="setup_lock_pattern_view_success_color_light">@color/setup_wizard_color_accent_light</color>
+    <color name="setup_lock_pattern_view_error_color_dark">#fff44336</color>
+    <color name="setup_lock_pattern_view_error_color_light">@color/lock_pattern_view_error_color</color>
     <color name="setup_wizard_color_accent_dark">#ff00e4ff</color>
     <color name="setup_wizard_color_accent_light">#ff00828e</color>
     <color name="setup_wizard_wifi_color_dark">#ff00e4ff</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3e115ad..74062ae 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5573,7 +5573,7 @@
     <!-- This is a divider in the SIM cards preferences that is the header of various settings where the user chooses which SIM to use for phone calls, data, and SMS messages [CHAR LIMIT=50] -->
     <string name="sim_pref_divider">Preferred SIM for</string>
     <!-- When a user chooses this "Ask first" preference for the SIM to use for phone calls, they'll be prompted to choose a SIM every time they initiate a call [CHAR LIMIT=50] -->
-    <string name="sim_calls_ask_first_prefs_title">Ask everytime</string>
+    <string name="sim_calls_ask_first_prefs_title">Ask every time</string>
     <!-- When a SIM preference hasn't been selected yet, this string is displayed as the pref summary until the user chooses a SIM subscription from the preference list [CHAR LIMIT=50] -->
     <string name="sim_selection_required_pref">Selection required</string>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
index b426c00..f7aeb15 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -46,6 +46,11 @@
         <item name="wifi_signal_color">@color/setup_wizard_wifi_color_dark</item>
         <item name="wifi_signal">@drawable/wifi_signal_teal</item>
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
+
+        <!-- LockPatternView colors -->
+        <item name="@*android:regularColor">@color/setup_lock_pattern_view_regular_color_dark</item>
+        <item name="@*android:successColor">@color/setup_lock_pattern_view_success_color_dark</item>
+        <item name="@*android:errorColor">@color/setup_lock_pattern_view_error_color_dark</item>
     </style>
 
     <style name="SetupWizardTheme.Light" parent="android:Theme.Material.Light.NoActionBar">
@@ -65,6 +70,11 @@
         <item name="wifi_signal_color">@color/setup_wizard_wifi_color_light</item>
         <item name="wifi_signal">@drawable/wifi_signal_teal</item>
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
+
+        <!-- LockPatternView colors -->
+        <item name="@*android:regularColor">@color/setup_lock_pattern_view_regular_color_light</item>
+        <item name="@*android:successColor">@color/setup_lock_pattern_view_success_color_light</item>
+        <item name="@*android:errorColor">@color/setup_lock_pattern_view_error_color_light</item>
     </style>
 
     <style name="Animation.SetupWizard" parent="@android:style/Animation.Activity">
diff --git a/res/xml/sim_settings.xml b/res/xml/sim_settings.xml
index 45d8225..63e4ba4 100644
--- a/res/xml/sim_settings.xml
+++ b/res/xml/sim_settings.xml
@@ -15,13 +15,10 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+    android:key="sim_cards"
     android:title="@string/sim_settings_title">
 
     <PreferenceCategory
-            android:key="sim_cards"
-            android:title="@string/sim_settings_title" />
-
-    <PreferenceCategory
             android:key="sim_activities"
             android:title="@string/sim_pref_divider" >
 
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index f64a9df..b289e7a 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -288,14 +288,30 @@
         }
 
         /***
+         * Disables preferences that are less secure than required quality. The actual
+         * implementation is in disableUnusablePreferenceImpl.
+         *
+         * @param quality the requested quality.
+         * @param allowBiometric whether to allow biometic screen lock.
+         */
+        protected void disableUnusablePreferences(final int quality,
+                MutableBoolean allowBiometric) {
+            disableUnusablePreferencesImpl(quality, allowBiometric, false /* hideDisabled */);
+        }
+
+        /***
          * Disables preferences that are less secure than required quality.
          *
          * @param quality the requested quality.
+         * @param allowBiometric whether to allow biometic screen lock.
+         * @param hideDisabled whether to hide disable screen lock options.
          */
-        private void disableUnusablePreferences(final int quality, MutableBoolean allowBiometric) {
+        protected void disableUnusablePreferencesImpl(final int quality,
+                MutableBoolean allowBiometric, boolean hideDisabled) {
             final PreferenceScreen entries = getPreferenceScreen();
-            final boolean onlyShowFallback = getActivity().getIntent()
-                    .getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false);
+            final Intent intent = getActivity().getIntent();
+            final boolean onlyShowFallback = intent.getBooleanExtra(
+                    LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false);
             final boolean weakBiometricAvailable =
                     mChooseLockSettingsHelper.utils().isBiometricWeakInstalled();
 
@@ -326,6 +342,9 @@
                     } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) {
                         enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
                     }
+                    if (hideDisabled) {
+                        visible = visible && enabled;
+                    }
                     if (!visible || (onlyShowFallback && !allowedForFallback(key))) {
                         entries.removePreference(pref);
                     } else if (!enabled) {
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 2c05986..fa1c678 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -24,14 +24,12 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.admin.DevicePolicyManager;
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.inputmethodservice.KeyboardView;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.provider.Settings;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.Selection;
@@ -416,7 +414,7 @@
             return null;
         }
 
-        private void handleNext() {
+        public void handleNext() {
             if (mDone) return;
 
             final String pin = mPasswordEntry.getText().toString();
@@ -460,6 +458,14 @@
             }
         }
 
+        protected void setNextEnabled(boolean enabled) {
+            mNextButton.setEnabled(enabled);
+        }
+
+        protected void setNextText(int text) {
+            mNextButton.setText(text);
+        }
+
         public void onClick(View v) {
             switch (v.getId()) {
                 case R.id.next_button:
@@ -502,22 +508,22 @@
                     String msg = getString(mIsAlphaMode ? R.string.lockpassword_password_too_short
                             : R.string.lockpassword_pin_too_short, mPasswordMinLength);
                     mHeaderText.setText(msg);
-                    mNextButton.setEnabled(false);
+                    setNextEnabled(false);
                 } else {
                     String error = validatePassword(password);
                     if (error != null) {
                         mHeaderText.setText(error);
-                        mNextButton.setEnabled(false);
+                        setNextEnabled(false);
                     } else {
                         mHeaderText.setText(R.string.lockpassword_press_continue);
-                        mNextButton.setEnabled(true);
+                        setNextEnabled(true);
                     }
                 }
             } else {
                 mHeaderText.setText(mIsAlphaMode ? mUiStage.alphaHint : mUiStage.numericHint);
-                mNextButton.setEnabled(length > 0);
+                setNextEnabled(length > 0);
             }
-            mNextButton.setText(mUiStage.buttonText);
+            setNextText(mUiStage.buttonText);
         }
 
         public void afterTextChanged(Editable s) {
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index 85694b1..e454ed1 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -150,6 +150,14 @@
             }
         }
 
+        protected void setRightButtonEnabled(boolean enabled) {
+            mFooterRightButton.setEnabled(enabled);
+        }
+
+        protected void setRightButtonText(int text) {
+            mFooterRightButton.setText(text);
+        }
+
         /**
          * The pattern listener that responds according to a user choosing a new
          * lock pattern.
@@ -390,43 +398,51 @@
             return RedactionInterstitial.createStartIntent(context);
         }
 
+        public void handleLeftButton() {
+            if (mUiStage.leftMode == LeftButtonMode.Retry) {
+                mChosenPattern = null;
+                mLockPatternView.clearPattern();
+                updateStage(Stage.Introduction);
+            } else if (mUiStage.leftMode == LeftButtonMode.Cancel) {
+                // They are canceling the entire wizard
+                getActivity().setResult(RESULT_FINISHED);
+                getActivity().finish();
+            } else {
+                throw new IllegalStateException("left footer button pressed, but stage of " +
+                        mUiStage + " doesn't make sense");
+            }
+        }
+
+        public void handleRightButton() {
+            if (mUiStage.rightMode == RightButtonMode.Continue) {
+                if (mUiStage != Stage.FirstChoiceValid) {
+                    throw new IllegalStateException("expected ui stage "
+                            + Stage.FirstChoiceValid + " when button is "
+                            + RightButtonMode.Continue);
+                }
+                updateStage(Stage.NeedToConfirm);
+            } else if (mUiStage.rightMode == RightButtonMode.Confirm) {
+                if (mUiStage != Stage.ChoiceConfirmed) {
+                    throw new IllegalStateException("expected ui stage " + Stage.ChoiceConfirmed
+                            + " when button is " + RightButtonMode.Confirm);
+                }
+                saveChosenPatternAndFinish();
+            } else if (mUiStage.rightMode == RightButtonMode.Ok) {
+                if (mUiStage != Stage.HelpScreen) {
+                    throw new IllegalStateException("Help screen is only mode with ok button, "
+                            + "but stage is " + mUiStage);
+                }
+                mLockPatternView.clearPattern();
+                mLockPatternView.setDisplayMode(DisplayMode.Correct);
+                updateStage(Stage.Introduction);
+            }
+        }
+
         public void onClick(View v) {
             if (v == mFooterLeftButton) {
-                if (mUiStage.leftMode == LeftButtonMode.Retry) {
-                    mChosenPattern = null;
-                    mLockPatternView.clearPattern();
-                    updateStage(Stage.Introduction);
-                } else if (mUiStage.leftMode == LeftButtonMode.Cancel) {
-                    // They are canceling the entire wizard
-                    getActivity().setResult(RESULT_FINISHED);
-                    getActivity().finish();
-                } else {
-                    throw new IllegalStateException("left footer button pressed, but stage of " +
-                        mUiStage + " doesn't make sense");
-                }
+                handleLeftButton();
             } else if (v == mFooterRightButton) {
-
-                if (mUiStage.rightMode == RightButtonMode.Continue) {
-                    if (mUiStage != Stage.FirstChoiceValid) {
-                        throw new IllegalStateException("expected ui stage " + Stage.FirstChoiceValid
-                                + " when button is " + RightButtonMode.Continue);
-                    }
-                    updateStage(Stage.NeedToConfirm);
-                } else if (mUiStage.rightMode == RightButtonMode.Confirm) {
-                    if (mUiStage != Stage.ChoiceConfirmed) {
-                        throw new IllegalStateException("expected ui stage " + Stage.ChoiceConfirmed
-                                + " when button is " + RightButtonMode.Confirm);
-                    }
-                    saveChosenPatternAndFinish();
-                } else if (mUiStage.rightMode == RightButtonMode.Ok) {
-                    if (mUiStage != Stage.HelpScreen) {
-                        throw new IllegalStateException("Help screen is only mode with ok button, but " +
-                                "stage is " + mUiStage);
-                    }
-                    mLockPatternView.clearPattern();
-                    mLockPatternView.setDisplayMode(DisplayMode.Correct);
-                    updateStage(Stage.Introduction);
-                }
+                handleRightButton();
             }
         }
 
@@ -489,8 +505,8 @@
                 mFooterLeftButton.setEnabled(stage.leftMode.enabled);
             }
 
-            mFooterRightButton.setText(stage.rightMode.text);
-            mFooterRightButton.setEnabled(stage.rightMode.enabled);
+            setRightButtonText(stage.rightMode.text);
+            setRightButtonEnabled(stage.rightMode.enabled);
 
             // same for whether the patten is enabled
             if (stage.patternEnabled) {
@@ -555,8 +571,8 @@
             final boolean required = getActivity().getIntent().getBooleanExtra(
                     EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true);
             utils.setCredentialRequiredToDecrypt(required);
-            utils.saveLockPattern(mChosenPattern, isFallback);
             utils.setLockPatternEnabled(true);
+            utils.saveLockPattern(mChosenPattern, isFallback);
 
             if (lockVirgin) {
                 utils.setVisiblePatternEnabled(true);
diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java
index bc22637..334d18f 100644
--- a/src/com/android/settings/DeviceAdminSettings.java
+++ b/src/com/android/settings/DeviceAdminSettings.java
@@ -16,7 +16,6 @@
 
 package com.android.settings;
 
-import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
 import android.app.Activity;
@@ -25,9 +24,11 @@
 import android.app.admin.DeviceAdminInfo;
 import android.app.admin.DeviceAdminReceiver;
 import android.app.admin.DevicePolicyManager;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
@@ -49,14 +50,13 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
-import java.util.Collection;
 
 public class DeviceAdminSettings extends ListFragment {
     static final String TAG = "DeviceAdminSettings";
 
-    static final int DIALOG_WARNING = 1;
     private DevicePolicyManager mDPM;
     private UserManager mUm;
 
@@ -70,6 +70,18 @@
     private String mDeviceOwnerPkg;
     private SparseArray<ComponentName> mProfileOwnerComponents = new SparseArray<ComponentName>();
 
+    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            // Refresh the list, if state change has been received. It could be that checkboxes
+            // need to be updated
+            if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED.equals(
+                    intent.getAction())) {
+                updateList();
+            }
+        }
+    };
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -93,6 +105,10 @@
     @Override
     public void onResume() {
         super.onResume();
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
+        getActivity().registerReceiverAsUser(
+                mBroadcastReceiver, UserHandle.ALL, filter, null, null);
         mDeviceOwnerPkg = mDPM.getDeviceOwner();
         if (mDeviceOwnerPkg != null && !mDPM.isDeviceOwner(mDeviceOwnerPkg)) {
             mDeviceOwnerPkg = null;
@@ -107,6 +123,12 @@
         updateList();
     }
 
+    @Override
+    public void onPause() {
+        getActivity().unregisterReceiver(mBroadcastReceiver);
+        super.onPause();
+    }
+
     /**
      * Update the internal collection of available admins for all profiles associated with the
      * current user.
@@ -264,6 +286,10 @@
                     && (isDeviceOwner(info) || isProfileOwner(info))) {
                 return false;
             }
+            // Disable item if admin is being removed
+            if (isRemovingAdmin(info)) {
+                return false;
+            }
             return true;
         }
 
@@ -340,6 +366,10 @@
         return mDPM.isAdminActiveAsUser(item.getComponent(), getUserId(item));
     }
 
+    private boolean isRemovingAdmin(DeviceAdminInfo item) {
+        return mDPM.isRemovingAdmin(item.getComponent(), getUserId(item));
+    }
+
     /**
      * Add device admins to the internal collection that belong to a profile.
      *
diff --git a/src/com/android/settings/EnableWifiTether.java b/src/com/android/settings/EnableWifiTether.java
index a67250d..329d92e 100644
--- a/src/com/android/settings/EnableWifiTether.java
+++ b/src/com/android/settings/EnableWifiTether.java
@@ -38,31 +38,16 @@
         super.onCreate(icicle);
         mProvisionApp = getResources().getStringArray(
                 com.android.internal.R.array.config_mobile_hotspot_provision_app);
-        setContentView(R.layout.settings_main_dashboard);
-        startProvisioningIfNecessary();
+        startProvisioning();
     }
 
-    private static boolean isProvisioningNeeded(String[] provisionApp) {
-        if (SystemProperties.getBoolean("net.tethering.noprovisioning", false)
-                || provisionApp == null) {
-            return false;
-        }
-        return (provisionApp.length == 2);
-    }
-
-    private void startProvisioningIfNecessary() {
-
-        if (isProvisioningNeeded(mProvisionApp)) {
-            Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-            sendBroadcast(closeDialog);
-            Intent intent = new Intent(Intent.ACTION_MAIN);
-            intent.setClassName(mProvisionApp[0], mProvisionApp[1]);
-            intent.putExtra(TETHER_CHOICE, WIFI_TETHERING);
-            startActivityForResult(intent, PROVISION_REQUEST);
-        } else {
-            enableTethering();
-            finish();
-        }
+    private void startProvisioning() {
+        Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+        sendBroadcast(closeDialog);
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.setClassName(mProvisionApp[0], mProvisionApp[1]);
+        intent.putExtra(TETHER_CHOICE, WIFI_TETHERING);
+        startActivityForResult(intent, PROVISION_REQUEST);
     }
 
     public void onActivityResult(int requestCode, int resultCode, Intent intent) {
@@ -72,8 +57,8 @@
             if (resultCode == Activity.RESULT_OK) {
                 enableTethering();
             }
+            finish();
         }
-        finish();
     }
 
     private void enableTethering() {
diff --git a/src/com/android/settings/EncryptionInterstitial.java b/src/com/android/settings/EncryptionInterstitial.java
index 554f848..dfbed77 100644
--- a/src/com/android/settings/EncryptionInterstitial.java
+++ b/src/com/android/settings/EncryptionInterstitial.java
@@ -41,7 +41,7 @@
 
 public class EncryptionInterstitial extends SettingsActivity {
 
-    private static final String EXTRA_PASSWORD_QUALITY = "extra_password_quality";
+    protected static final String EXTRA_PASSWORD_QUALITY = "extra_password_quality";
     public static final String EXTRA_REQUIRE_PASSWORD = "extra_require_password";
 
     @Override
diff --git a/src/com/android/settings/SetupChooseLockGeneric.java b/src/com/android/settings/SetupChooseLockGeneric.java
index 2894f85..42e2baa 100644
--- a/src/com/android/settings/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/SetupChooseLockGeneric.java
@@ -18,11 +18,13 @@
 
 import com.android.setupwizard.navigationbar.SetupWizardNavBar;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.preference.PreferenceFragment;
+import android.util.MutableBoolean;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -87,9 +89,32 @@
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
+            SetupWizardUtils.setIllustration(getActivity(),
+                    R.drawable.setup_illustration_lock_screen);
             SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle());
         }
 
+        /***
+         * Disables preferences that are less secure than required quality and shows only secure
+         * screen lock options here.
+         *
+         * @param quality the requested quality.
+         * @param allowBiometric whether to allow biometic screen lock
+         */
+        @Override
+        protected void disableUnusablePreferences(final int quality,
+                MutableBoolean allowBiometric) {
+            // At this part of the flow, the user has already indicated they want to add a pin,
+            // pattern or password, so don't show "None" or "Slide". We disable them here and set
+            // the HIDE_DISABLED flag to true to hide them. This only happens for setup wizard.
+            // We do the following max check here since the device may already have a Device Admin
+            // installed with a policy we need to honor.
+            final int newQuality = Math.max(quality,
+                    DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+            super.disableUnusablePreferencesImpl(newQuality, allowBiometric,
+                    true /* hideDisabled */);
+        }
+
         @Override
         protected Intent getLockPasswordIntent(Context context, int quality, boolean isFallback,
                 int minLength, int maxLength, boolean requirePasswordToDecrypt,
diff --git a/src/com/android/settings/SetupChooseLockPassword.java b/src/com/android/settings/SetupChooseLockPassword.java
index ed6fab4..0c7e57f 100644
--- a/src/com/android/settings/SetupChooseLockPassword.java
+++ b/src/com/android/settings/SetupChooseLockPassword.java
@@ -47,6 +47,9 @@
         return intent;
     }
 
+    private SetupWizardNavBar mNavigationBar;
+    private SetupChooseLockPasswordFragment mFragment;
+
     @Override
     protected boolean isValidFragment(String fragmentName) {
         return SetupChooseLockPasswordFragment.class.getName().equals(fragmentName);
@@ -65,6 +68,7 @@
 
     @Override
     public void onNavigationBarCreated(SetupWizardNavBar bar) {
+        mNavigationBar = bar;
         SetupWizardUtils.setImmersiveMode(this, bar);
     }
 
@@ -75,6 +79,17 @@
 
     @Override
     public void onNavigateNext() {
+        if (mFragment != null) {
+            mFragment.handleNext();
+        }
+    }
+
+    @Override
+    public void onAttachFragment(Fragment fragment) {
+        super.onAttachFragment(fragment);
+        if (fragment instanceof SetupChooseLockPasswordFragment) {
+            mFragment = (SetupChooseLockPasswordFragment) fragment;
+        }
     }
 
     public static class SetupChooseLockPasswordFragment extends ChooseLockPasswordFragment {
@@ -91,6 +106,8 @@
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
+            SetupWizardUtils.setIllustration(getActivity(),
+                    R.drawable.setup_illustration_lock_screen);
             SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle());
         }
 
@@ -100,5 +117,17 @@
             SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
             return intent;
         }
+
+        @Override
+        protected void setNextEnabled(boolean enabled) {
+            SetupChooseLockPassword activity = (SetupChooseLockPassword) getActivity();
+            activity.mNavigationBar.getNextButton().setEnabled(enabled);
+        }
+
+        @Override
+        protected void setNextText(int text) {
+            SetupChooseLockPassword activity = (SetupChooseLockPassword) getActivity();
+            activity.mNavigationBar.getNextButton().setText(text);
+        }
     }
 }
diff --git a/src/com/android/settings/SetupChooseLockPattern.java b/src/com/android/settings/SetupChooseLockPattern.java
index b44dea1..7f2480b 100644
--- a/src/com/android/settings/SetupChooseLockPattern.java
+++ b/src/com/android/settings/SetupChooseLockPattern.java
@@ -26,6 +26,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
 
 /**
  * Setup Wizard's version of ChooseLockPattern screen. It inherits the logic and basic structure
@@ -45,6 +46,9 @@
         return intent;
     }
 
+    private SetupWizardNavBar mNavigationBar;
+    private SetupChooseLockPatternFragment mFragment;
+
     @Override
     protected boolean isValidFragment(String fragmentName) {
         return SetupChooseLockPatternFragment.class.getName().equals(fragmentName);
@@ -63,6 +67,7 @@
 
     @Override
     public void onNavigationBarCreated(SetupWizardNavBar bar) {
+        mNavigationBar = bar;
         SetupWizardUtils.setImmersiveMode(this, bar);
     }
 
@@ -73,10 +78,23 @@
 
     @Override
     public void onNavigateNext() {
+        if (mFragment != null) {
+            mFragment.handleRightButton();
+        }
+    }
+
+    @Override
+    public void onAttachFragment(Fragment fragment) {
+        super.onAttachFragment(fragment);
+        if (fragment instanceof ChooseLockPatternFragment) {
+            mFragment = (SetupChooseLockPatternFragment) fragment;
+        }
     }
 
     public static class SetupChooseLockPatternFragment extends ChooseLockPatternFragment {
 
+        private Button mRetryButton;
+
         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
@@ -88,7 +106,11 @@
 
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
+            mRetryButton = (Button) view.findViewById(R.id.retryButton);
+            mRetryButton.setOnClickListener(this);
             super.onViewCreated(view, savedInstanceState);
+            SetupWizardUtils.setIllustration(getActivity(),
+                    R.drawable.setup_illustration_lock_screen);
             SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle());
         }
 
@@ -98,5 +120,33 @@
             SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
             return intent;
         }
+
+        @Override
+        public void onClick(View v) {
+            if (v == mRetryButton) {
+                handleLeftButton();
+            } else {
+                super.onClick(v);
+            }
+        }
+
+        @Override
+        protected void setRightButtonEnabled(boolean enabled) {
+            SetupChooseLockPattern activity = (SetupChooseLockPattern) getActivity();
+            activity.mNavigationBar.getNextButton().setEnabled(enabled);
+        }
+
+        @Override
+        protected void setRightButtonText(int text) {
+            SetupChooseLockPattern activity = (SetupChooseLockPattern) getActivity();
+            activity.mNavigationBar.getNextButton().setText(text);
+        }
+
+        @Override
+        protected void updateStage(Stage stage) {
+            super.updateStage(stage);
+            // Only enable the button for retry
+            mRetryButton.setEnabled(stage == Stage.FirstChoiceValid);
+        }
     }
 }
diff --git a/src/com/android/settings/SetupEncryptionInterstitial.java b/src/com/android/settings/SetupEncryptionInterstitial.java
index 53548bd..41782da 100644
--- a/src/com/android/settings/SetupEncryptionInterstitial.java
+++ b/src/com/android/settings/SetupEncryptionInterstitial.java
@@ -18,6 +18,7 @@
 
 import com.android.setupwizard.navigationbar.SetupWizardNavBar;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -93,10 +94,27 @@
             return view;
         }
 
+        private int getHeaderTextResource() {
+            final int quality = getActivity().getIntent().getIntExtra(EXTRA_PASSWORD_QUALITY, 0);
+            switch (quality) {
+                case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
+                    return R.string.unlock_set_unlock_pattern_title;
+                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
+                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
+                    return R.string.unlock_set_unlock_pin_title;
+                default:
+                    return R.string.unlock_set_unlock_password_title;
+            }
+        }
+
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
-            SetupWizardUtils.setHeaderText(getActivity(), R.string.encryption_interstitial_header);
+            SetupWizardUtils.setIllustration(getActivity(),
+                    R.drawable.setup_illustration_lock_screen);
+            final int title = getHeaderTextResource();
+            getActivity().setTitle(title);
+            SetupWizardUtils.setHeaderText(getActivity(), title);
         }
     }
 }
diff --git a/src/com/android/settings/SetupRedactionInterstitial.java b/src/com/android/settings/SetupRedactionInterstitial.java
index 96f4dff..453e729 100644
--- a/src/com/android/settings/SetupRedactionInterstitial.java
+++ b/src/com/android/settings/SetupRedactionInterstitial.java
@@ -22,7 +22,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
-import android.graphics.Color;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -96,6 +95,8 @@
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
+            SetupWizardUtils.setIllustration(getActivity(),
+                    R.drawable.setup_illustration_lock_screen);
             SetupWizardUtils.setHeaderText(getActivity(), R.string.notification_section_header);
         }
     }
diff --git a/src/com/android/settings/SetupWizardUtils.java b/src/com/android/settings/SetupWizardUtils.java
index 0f54e63..3d44125 100644
--- a/src/com/android/settings/SetupWizardUtils.java
+++ b/src/com/android/settings/SetupWizardUtils.java
@@ -16,12 +16,17 @@
 
 package com.android.settings;
 
+import com.android.settings.widget.SetupWizardIllustration;
 import com.android.setupwizard.navigationbar.SetupWizardNavBar;
 
 
 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.Color;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.view.Gravity;
 import android.view.Window;
 import android.widget.TextView;
 
@@ -109,4 +114,24 @@
         toIntent.putExtra(EXTRA_USE_IMMERSIVE_MODE,
                 fromIntent.getBooleanExtra(EXTRA_USE_IMMERSIVE_MODE, false));
     }
+
+    public static void setIllustration(Activity activity, int asset) {
+        SetupWizardIllustration illustration =
+                (SetupWizardIllustration) activity.findViewById(R.id.setup_illustration);
+        if (illustration != null) {
+            Drawable drawable = activity.getDrawable(R.drawable.setup_illustration);
+            Drawable newIllustration = activity.getDrawable(asset);
+            if (drawable instanceof LayerDrawable) {
+                LayerDrawable layers = (LayerDrawable) drawable;
+                Drawable oldIllustration = layers.findDrawableByLayerId(R.id.illustration_image);
+                if (newIllustration instanceof BitmapDrawable
+                        && oldIllustration instanceof BitmapDrawable) {
+                    final int gravity = ((BitmapDrawable) oldIllustration).getGravity();
+                    ((BitmapDrawable) newIllustration).setGravity(gravity);
+                }
+                layers.setDrawableByLayerId(R.id.illustration_image, newIllustration);
+                illustration.setForeground(layers);
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialog.java b/src/com/android/settings/bluetooth/BluetoothPairingDialog.java
index fd8489b..be031ea 100755
--- a/src/com/android/settings/bluetooth/BluetoothPairingDialog.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDialog.java
@@ -17,12 +17,14 @@
 package com.android.settings.bluetooth;
 
 import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothUuid;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
+import android.os.ParcelUuid;
 import android.text.Editable;
 import android.text.Html;
 import android.text.InputFilter;
@@ -111,6 +113,7 @@
 
         mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
         mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
+        mDevice.fetchUuidsWithSdp();
 
         switch (mType) {
             case BluetoothDevice.PAIRING_VARIANT_PIN:
@@ -318,7 +321,7 @@
         }
     }
 
-    private void allowPhonebookAccess() {
+    private void processPhonebookAccess() {
         CachedBluetoothDevice cachedDevice = mCachedDeviceManager.findDevice(mDevice);
         if (cachedDevice == null) {
             cachedDevice = mCachedDeviceManager.addDevice(
@@ -326,11 +329,14 @@
                     mBluetoothManager.getProfileManager(),
                     mDevice);
         }
-        cachedDevice.setPhonebookPermissionChoice(CachedBluetoothDevice.ACCESS_ALLOWED);
+        ParcelUuid[] uuids = mDevice.getUuids();
+        if (BluetoothUuid.containsAnyUuid(uuids, PbapServerProfile.PBAB_CLIENT_UUIDS)) {
+            cachedDevice.setPhonebookPermissionChoice(CachedBluetoothDevice.ACCESS_ALLOWED);
+        }
     }
 
     private void onPair(String value) {
-        allowPhonebookAccess();
+        processPhonebookAccess();
 
         switch (mType) {
             case BluetoothDevice.PAIRING_VARIANT_PIN:
diff --git a/src/com/android/settings/bluetooth/PbapServerProfile.java b/src/com/android/settings/bluetooth/PbapServerProfile.java
index 87e51a5..6e48b12 100755
--- a/src/com/android/settings/bluetooth/PbapServerProfile.java
+++ b/src/com/android/settings/bluetooth/PbapServerProfile.java
@@ -21,7 +21,9 @@
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothPbap;
 import android.bluetooth.BluetoothProfile;
+import android.bluetooth.BluetoothUuid;
 import android.content.Context;
+import android.os.ParcelUuid;
 import android.util.Log;
 
 import com.android.settings.R;
@@ -44,6 +46,13 @@
     // Order of this profile in device profiles list
     private static final int ORDINAL = 6;
 
+    // The UUIDs indicate that remote device might access pbap server
+    static final ParcelUuid[] PBAB_CLIENT_UUIDS = {
+        BluetoothUuid.HSP,
+        BluetoothUuid.Handsfree,
+        BluetoothUuid.PBAP_PCE
+    };
+
     // These callbacks run on the main thread.
     private final class PbapServiceListener
             implements BluetoothPbap.ServiceListener {
diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java
index 2afdb84..2d1da40 100644
--- a/src/com/android/settings/deviceinfo/SimStatus.java
+++ b/src/com/android/settings/deviceinfo/SimStatus.java
@@ -153,7 +153,7 @@
             }
         }
 
-        mSir = mSelectableSubInfos.get(0);
+        mSir = mSelectableSubInfos.size() > 0 ? mSelectableSubInfos.get(0) : null;
         if (mSelectableSubInfos.size() > 1) {
             setContentView(R.layout.sim_information);
 
@@ -343,7 +343,7 @@
             }
         }
 
-        String rawNumber = mPhone.getLine1Number();  // may be null or empty
+        String rawNumber = mTelephonyManager.getLine1Number();  // may be null or empty
         String formattedNumber = null;
         if (!TextUtils.isEmpty(rawNumber)) {
             formattedNumber = PhoneNumberUtils.formatNumber(rawNumber);
@@ -353,9 +353,7 @@
         final String imei = mPhone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
                 ? mPhone.getImei() : mPhone.getDeviceId();
         setSummaryText(KEY_IMEI, imei);
-        setSummaryText(KEY_IMEI_SV,
-                ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
-                .getDeviceSoftwareVersion(/*slotId*/));
+        setSummaryText(KEY_IMEI_SV, mTelephonyManager.getDeviceSoftwareVersion(/*slotId*/));
 
         if (!mShowLatestAreaInfo) {
             removePreferenceFromScreen(KEY_LATEST_AREA_INFO);
@@ -363,33 +361,35 @@
     }
 
     private void updatePhoneInfos() {
-        final Phone phone = PhoneFactory.getPhone(SubscriptionManager.getPhoneId(
+        if (mSir != null) {
+            final Phone phone = PhoneFactory.getPhone(SubscriptionManager.getPhoneId(
                         mSir.getSubscriptionId()));
-        if (UserHandle.myUserId() == UserHandle.USER_OWNER
-                && mSir.getSubscriptionId() != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
-            if (phone == null) {
-                Log.e(TAG, "Unable to locate a phone object for the given Subscription ID.");
-                return;
+            if (UserHandle.myUserId() == UserHandle.USER_OWNER
+                    && mSir.getSubscriptionId() != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+                if (phone == null) {
+                    Log.e(TAG, "Unable to locate a phone object for the given Subscription ID.");
+                    return;
+                }
+
+                mPhone = phone;
+                mPhoneStateListener = new PhoneStateListener(mSir.getSubscriptionId()) {
+                    @Override
+                    public void onDataConnectionStateChanged(int state) {
+                        updateDataState();
+                        updateNetworkType();
+                    }
+
+                    @Override
+                    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
+                        updateSignalStrength(signalStrength);
+                    }
+
+                    @Override
+                    public void onServiceStateChanged(ServiceState serviceState) {
+                        updateServiceState(serviceState);
+                    }
+                };
             }
-
-            mPhone = phone;
-            mPhoneStateListener = new PhoneStateListener(mSir.getSubscriptionId()) {
-                @Override
-                public void onDataConnectionStateChanged(int state) {
-                    updateDataState();
-                    updateNetworkType();
-                }
-
-                @Override
-                public void onSignalStrengthsChanged(SignalStrength signalStrength) {
-                    updateSignalStrength(signalStrength);
-                }
-
-                @Override
-                public void onServiceStateChanged(ServiceState serviceState) {
-                    updateServiceState(serviceState);
-                }
-            };
         }
     }
     private OnTabChangeListener mTabListener = new OnTabChangeListener() {
diff --git a/src/com/android/settings/sim/SimSettings.java b/src/com/android/settings/sim/SimSettings.java
index 6c3ddb5..f993b8a 100644
--- a/src/com/android/settings/sim/SimSettings.java
+++ b/src/com/android/settings/sim/SimSettings.java
@@ -30,7 +30,6 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.preference.Preference;
-import android.preference.PreferenceCategory;
 import android.preference.PreferenceScreen;
 import android.provider.SearchIndexableResource;
 import android.provider.Telephony;
@@ -118,7 +117,7 @@
     private SubscriptionInfo mCalls = null;
     private SubscriptionInfo mSMS = null;
 
-    private PreferenceCategory mSimCards = null;
+    private PreferenceScreen mSimCards = null;
 
     private SubscriptionManager mSubscriptionManager;
     private Utils mUtils;
@@ -151,14 +150,16 @@
 
         addPreferencesFromResource(R.xml.sim_settings);
 
-        mSimCards = (PreferenceCategory)findPreference(SIM_CARD_CATEGORY);
+        mSimCards = (PreferenceScreen)findPreference(SIM_CARD_CATEGORY);
 
         final int numSlots = tm.getSimCount();
         mAvailableSubInfos = new ArrayList<SubscriptionInfo>(numSlots);
         mSelectableSubInfos = new ArrayList<SubscriptionInfo>();
         for (int i = 0; i < numSlots; ++i) {
             final SubscriptionInfo sir = Utils.findRecordBySlotId(getActivity(), i);
-            mSimCards.addPreference(new SimPreference(getActivity(), sir, i));
+            SimPreference simPreference = new SimPreference(getActivity(), sir, i);
+            simPreference.setOrder(i-numSlots);
+            mSimCards.addPreference(simPreference);
             mAvailableSubInfos.add(sir);
             if (sir != null) {
                 mSelectableSubInfos.add(sir);
@@ -246,7 +247,7 @@
 
         simPref.setTitle(R.string.calls_title);
         simPref.setSummary(phoneAccount == null
-                ? getResources().getString(R.string.sim_selection_required_pref)
+                ? getResources().getString(R.string.sim_calls_ask_first_prefs_title)
                 : (String)telecomManager.getPhoneAccount(phoneAccount).getLabel());
     }
 
@@ -418,7 +419,7 @@
             } else {
                 sir = mSelectableSubInfos.get(position);
                 holder.title.setText(sir.getDisplayName());
-                holder.summary.setText(sir.getNumber());
+                holder.summary.setText(getPhoneNumber(sir));
                 holder.icon.setImageBitmap(sir.createIconBitmap(mContext));
             }
             return rowView;
@@ -458,11 +459,11 @@
             setTitle(String.format(getResources()
                     .getString(R.string.sim_editor_title), (mSlotId + 1)));
             if (mSubInfoRecord != null) {
-                if (TextUtils.isEmpty(mSubInfoRecord.getNumber())) {
+                if (TextUtils.isEmpty(getPhoneNumber(mSubInfoRecord))) {
                    setSummary(mSubInfoRecord.getDisplayName());
                 } else {
                     setSummary(mSubInfoRecord.getDisplayName() + " - " +
-                            mSubInfoRecord.getNumber());
+                            getPhoneNumber(mSubInfoRecord));
                     setEnabled(true);
                 }
                 setIcon(new BitmapDrawable(res, (mSubInfoRecord.createIconBitmap(mContext))));
@@ -517,7 +518,7 @@
             });
 
             TextView numberView = (TextView)dialogLayout.findViewById(R.id.number);
-            final String rawNumber = mSubInfoRecord.getNumber();
+            final String rawNumber = getPhoneNumber(mSubInfoRecord);
             if (TextUtils.isEmpty(rawNumber)) {
                 numberView.setText(res.getString(com.android.internal.R.string.unknownName));
             } else {
@@ -635,6 +636,14 @@
 
     }
 
+    // Returns the line1Number. Line1number should always be read from TelephonyManager since it can
+    // be overridden for display purposes.
+    private String getPhoneNumber(SubscriptionInfo info) {
+        final TelephonyManager tm =
+            (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
+        return tm.getLine1NumberForSubscriber(info.getSubscriptionId());
+    }
+
     private void log(String s) {
         Log.d(TAG, s);
     }
diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java
index 45c3a5b..1bf1a5c 100644
--- a/src/com/android/settings/wifi/AccessPoint.java
+++ b/src/com/android/settings/wifi/AccessPoint.java
@@ -595,7 +595,7 @@
      * For ephemeral connections (networkId is invalid), this returns false if the network is
      * disconnected.
      */
-    private boolean isActive() {
+    boolean isActive() {
         return mNetworkInfo != null &&
                 (networkId != WifiConfiguration.INVALID_NETWORK_ID ||
                  mNetworkInfo.getState() != State.DISCONNECTED);
@@ -617,7 +617,8 @@
         StringBuilder summary = new StringBuilder();
 
         if (isActive()) { // This is the active connection
-            summary.append(Summary.get(context, getState()));
+            summary.append(Summary.get(context, getState(),
+                    networkId == WifiConfiguration.INVALID_NETWORK_ID));
         } else if (mConfig != null
                 && mConfig.hasNoInternetAccess()) {
             summary.append(context.getString(R.string.wifi_no_internet));
diff --git a/src/com/android/settings/wifi/Summary.java b/src/com/android/settings/wifi/Summary.java
index d96d23e..123f64a 100644
--- a/src/com/android/settings/wifi/Summary.java
+++ b/src/com/android/settings/wifi/Summary.java
@@ -22,7 +22,12 @@
 import android.net.NetworkInfo.DetailedState;
 
 class Summary {
-    static String get(Context context, String ssid, DetailedState state) {
+    static String get(Context context, String ssid, DetailedState state, boolean isEphemeral) {
+        if (state == DetailedState.CONNECTED && isEphemeral && ssid == null) {
+            // Special case for connected + ephemeral networks.
+            return context.getString(R.string.connected_via_wfa);
+        }
+
         String[] formats = context.getResources().getStringArray((ssid == null)
                 ? R.array.wifi_status : R.array.wifi_status_with_ssid);
         int index = state.ordinal();
@@ -33,7 +38,7 @@
         return String.format(formats[index], ssid);
     }
 
-    static String get(Context context, DetailedState state) {
-        return get(context, null, state);
+    static String get(Context context, DetailedState state, boolean isEphemeral) {
+        return get(context, null, state, isEphemeral);
     }
 }
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index b00faf1..5462d26 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -242,7 +242,8 @@
                 }
             }
 
-            if (mAccessPoint.networkId == INVALID_NETWORK_ID || mEdit) {
+            if ((mAccessPoint.networkId == INVALID_NETWORK_ID && !mAccessPoint.isActive())
+                    || mEdit) {
                 showSecurityFields();
                 showIpConfigFields();
                 showProxyFields();
@@ -266,7 +267,8 @@
                 } else {
                     if (state != null) {
                         addRow(group, R.string.wifi_status, Summary.get(mConfigUi.getContext(),
-                                state));
+                                state, mAccessPoint.networkId ==
+                                WifiConfiguration.INVALID_NETWORK_ID));
                     }
 
                     if (signalLevel != null) {
@@ -300,7 +302,7 @@
                     addRow(group, R.string.wifi_security, mAccessPoint.getSecurityString(false));
                     mView.findViewById(R.id.ip_fields).setVisibility(View.GONE);
                 }
-                if (mAccessPoint.networkId != INVALID_NETWORK_ID
+                if ((mAccessPoint.networkId != INVALID_NETWORK_ID || mAccessPoint.isActive())
                         && ActivityManager.getCurrentUser() == UserHandle.USER_OWNER) {
                     mConfigUi.setForgetButton(res.getString(R.string.wifi_forget));
                 }
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 9dfd201..8eab1c7 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -502,26 +502,21 @@
                 mSelectedAccessPoint = (AccessPoint) preference;
                 menu.setHeaderTitle(mSelectedAccessPoint.ssid);
                 if (mSelectedAccessPoint.getLevel() != -1) {
-                    int connectStringRes = 0;
                     if (mSelectedAccessPoint.getState() == null) {
-                        connectStringRes = R.string.wifi_menu_connect;
-                    } else if (mSelectedAccessPoint.networkId == INVALID_NETWORK_ID &&
-                            mSelectedAccessPoint.getNetworkInfo().getState()
-                                != State.DISCONNECTED) {
-                        // State is non-null (and not disconnected) but this network has no
-                        // configuration, which means it is ephemeral. Allow the user to save the
-                        // configuration permanently (but still issue this as a CONNECT command).
-                        connectStringRes = R.string.wifi_menu_remember;
-                    }
-
-                    if (connectStringRes != 0) {
-                        menu.add(Menu.NONE, MENU_ID_CONNECT, 0, connectStringRes);
+                        menu.add(Menu.NONE, MENU_ID_CONNECT, 0, R.string.wifi_menu_connect);
                     }
                 }
+
+                if (ActivityManager.getCurrentUser() == UserHandle.USER_OWNER &&
+                        (mSelectedAccessPoint.networkId != INVALID_NETWORK_ID ||
+                        (mSelectedAccessPoint.getNetworkInfo() != null &&
+                        mSelectedAccessPoint.getNetworkInfo().getState() != State.DISCONNECTED))) {
+                    // Allow forgetting a network if the current user is the owner and either the
+                    // network is saved or ephemerally connected. (In the latter case, "forget"
+                    // blacklists the network so it won't be used again, ephemerally).
+                    menu.add(Menu.NONE, MENU_ID_FORGET, 0, R.string.wifi_menu_forget);
+                }
                 if (mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) {
-                    if (ActivityManager.getCurrentUser() == UserHandle.USER_OWNER) {
-                        menu.add(Menu.NONE, MENU_ID_FORGET, 0, R.string.wifi_menu_forget);
-                    }
                     menu.add(Menu.NONE, MENU_ID_MODIFY, 0, R.string.wifi_menu_modify);
 
                     if (mSelectedAccessPoint.security != AccessPoint.SECURITY_NONE) {
@@ -552,7 +547,7 @@
                 return true;
             }
             case MENU_ID_FORGET: {
-                mWifiManager.forget(mSelectedAccessPoint.networkId, mForgetListener);
+                forget();
                 return true;
             }
             case MENU_ID_MODIFY: {
@@ -571,9 +566,10 @@
     public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
         if (preference instanceof AccessPoint) {
             mSelectedAccessPoint = (AccessPoint) preference;
-            /** Bypass dialog for unsecured, unsaved networks */
+            /** Bypass dialog for unsecured, unsaved, and inactive networks */
             if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE &&
-                    mSelectedAccessPoint.networkId == INVALID_NETWORK_ID) {
+                    mSelectedAccessPoint.networkId == INVALID_NETWORK_ID &&
+                    !mSelectedAccessPoint.isActive()) {
                 mSelectedAccessPoint.generateOpenNetworkConfig();
                 if (!savedNetworksExist) {
                     savedNetworksExist = true;
@@ -903,12 +899,19 @@
 
     /* package */ void forget() {
         if (mSelectedAccessPoint.networkId == INVALID_NETWORK_ID) {
-            // Should not happen, but a monkey seems to trigger it
-            Log.e(TAG, "Failed to forget invalid network " + mSelectedAccessPoint.getConfig());
-            return;
+            if (mSelectedAccessPoint.getNetworkInfo().getState() != State.DISCONNECTED) {
+                // Network is active but has no network ID - must be ephemeral.
+                mWifiManager.disableEphemeralNetwork(
+                        AccessPoint.convertToQuotedString(mSelectedAccessPoint.ssid));
+            } else {
+                // Should not happen, but a monkey seems to trigger it
+                Log.e(TAG, "Failed to forget invalid network " + mSelectedAccessPoint.getConfig());
+                return;
+            }
+        } else {
+            mWifiManager.forget(mSelectedAccessPoint.networkId, mForgetListener);
         }
 
-        mWifiManager.forget(mSelectedAccessPoint.networkId, mForgetListener);
 
         if (mWifiManager.isWifiEnabled()) {
             mScanner.resume();
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index bc387cb..2588309 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -285,7 +285,7 @@
         default:  // DISCONNECTED, FAILED
             if (mScreenState != SCREEN_STATE_CONNECTED &&
                     mWifiSettings.getAccessPointsCount() > 0) {
-                showDisconnectedState(Summary.get(this, state));
+                showDisconnectedState(Summary.get(this, state, false /* isEphemeral */));
             }
             break;
         }
diff --git a/src/com/android/settings/wifi/WifiStatusTest.java b/src/com/android/settings/wifi/WifiStatusTest.java
index 1b23834..dbd8eec 100644
--- a/src/com/android/settings/wifi/WifiStatusTest.java
+++ b/src/com/android/settings/wifi/WifiStatusTest.java
@@ -17,12 +17,16 @@
 package com.android.settings.wifi;
 
 import com.android.settings.R;
+
 import android.net.wifi.ScanResult;
+
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.DefaultHttpClient;
+
 import java.util.List;
+
 import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -30,6 +34,7 @@
 import android.content.IntentFilter;
 import android.net.NetworkInfo;
 import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
@@ -40,6 +45,7 @@
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.TextView;
+
 import java.io.IOException;
 import java.net.UnknownHostException;
 
@@ -294,8 +300,9 @@
 
     private void handleNetworkStateChanged(NetworkInfo networkInfo) {
         if (mWifiManager.isWifiEnabled()) {
-            String summary = Summary.get(this, mWifiManager.getConnectionInfo().getSSID(),
-                    networkInfo.getDetailedState());
+            WifiInfo info = mWifiManager.getConnectionInfo();
+            String summary = Summary.get(this, info.getSSID(), networkInfo.getDetailedState(),
+                    info.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID);
             mNetworkState.setText(summary);
         }
     }
