Merge "Fix 3296883: Hide PIN characters in ChooseLockPassword" into honeycomb
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index bc58a7e..0f2390c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -110,7 +110,6 @@
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.settings.WIFI_SETTINGS" />
-                <action android:name="android.net.wifi.PICK_WIFI_NETWORK" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="com.android.settings.SHORTCUT" />
@@ -125,6 +124,16 @@
                 android:value="com.android.settings.Settings$WirelessSettingsActivity" />
         </activity>
 
+        <activity android:name=".wifi.WifiPickerActivity"
+                  android:theme="@android:style/Theme.Holo"
+                  android:clearTaskOnLaunch="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.net.wifi.PICK_WIFI_NETWORK" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity android:name=".wifi.WifiSettingsForSetupWizardXL"
                   android:theme="@android:style/Theme.Holo.NoActionBar"
                   android:clearTaskOnLaunch="true"
diff --git a/res/layout-xlarge/date_time_settings_setupwizard.xml b/res/layout-xlarge/date_time_settings_setupwizard.xml
index 600cdbd..483b66a 100644
--- a/res/layout-xlarge/date_time_settings_setupwizard.xml
+++ b/res/layout-xlarge/date_time_settings_setupwizard.xml
@@ -158,10 +158,8 @@
 
     <Button
         android:id="@+id/next_button"
-        android:layout_width="208dip"
-        android:layout_height="48dip"
+        style="@style/setup_wizard_button"
         android:layout_alignParentBottom="true"
         android:layout_alignParentRight="true"
-        android:text="@string/next_label"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
+        android:text="@string/next_label" />
 </RelativeLayout>
diff --git a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
index d3af1f8..29427d4 100644
--- a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
+++ b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
@@ -19,46 +19,43 @@
     android:orientation="horizontal"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:paddingTop="120dip"
+    android:paddingTop="60dip"
     android:paddingLeft="128dip"
     android:paddingRight="128dip"
     android:paddingBottom="0dip" >
 
-    <RelativeLayout
-        android:id="@+id/title_bar"
+    <FrameLayout
+        android:id="@+id/top_padding_layout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:minHeight="48dip"
         android:layout_alignParentTop="true">
+        <!-- Set to gone when software keyboard appears -->
+        <View
+             android:id="@+id/top_padding"
+             android:layout_width="match_parent"
+             android:layout_height="94dip" />
+    </FrameLayout>
 
-        <TextView
-            android:id="@+id/wifi_setup_title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:layout_centerVertical="true"
-            android:layout_marginLeft="16dip"
-            android:textSize="30dip"
-            android:textColor="#FF99cc00"
-            android:text="@string/wifi_setup_title"/>
-
-        <TextView
-            android:id="@+id/scanning_progress_text"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true"
-            android:layout_centerVertical="true"
-            android:layout_marginRight="16dip"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="#6699cc00" />
-    </RelativeLayout>
+    <TextView
+        android:id="@+id/wifi_setup_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:minHeight="48dip"
+        android:layout_alignParentLeft="true"
+        android:layout_centerVertical="true"
+        android:layout_marginLeft="16dip"
+        android:layout_below="@id/top_padding_layout"
+        android:textSize="30dip"
+        android:textColor="#ff99cc00"
+        android:text="@string/wifi_setup_title"
+        android:gravity="bottom"/>
 
     <!-- Divider -->
     <RelativeLayout
         android:id="@+id/top_divider"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_below="@id/title_bar">
+        android:layout_below="@id/wifi_setup_title">
         <ProgressBar
             android:id="@+id/scanning_progress_bar"
             android:layout_width="match_parent"
@@ -66,35 +63,19 @@
             style="?android:attr/progressBarStyleHorizontal" />
     </RelativeLayout>
 
-    <TextView
-        android:id="@+id/wifi_setup_status"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/top_divider"
-        android:layout_alignParentLeft="true"
-        android:layout_marginLeft="16dip"
-        android:layout_marginTop="16dip"
-        android:layout_marginBottom="0dip"
-        android:text="@string/wifi_setup_status_select_network"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-
-    <FrameLayout
+    <RelativeLayout
         android:id="@+id/content"
-        android:layout_width="wrap_content"
+        android:layout_width="716dip"
         android:layout_height="wrap_content"
-        android:minHeight="138dip"
-        android:layout_below="@+id/wifi_setup_status"
-        android:layout_alignParentLeft="true"
-        android:layout_marginTop="0dip"
-        android:layout_marginLeft="16dip"
-        android:layout_marginRight="16dip"
+        android:layout_below="@id/top_divider"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="10dip"
         android:layout_marginBottom="0dip">
 
         <FrameLayout
             android:id="@+id/wifi_setup"
-            android:layout_width="416dip"
-            android:layout_height="383dip"
-            android:paddingTop="16dip">
+            android:layout_width="match_parent"
+            android:layout_height="360dip">
             <fragment
                 class="com.android.settings.wifi.WifiSettings"
                 android:id="@+id/wifi_setup_fragment"
@@ -103,74 +84,76 @@
         </FrameLayout>
         <FrameLayout
             android:id="@+id/wifi_config_ui"
-            android:layout_width="416dip"
+            android:layout_width="wrap_content"
+            android:minWidth="406dip"
             android:layout_height="wrap_content"
-            android:paddingTop="16dip"
+            android:minHeight="176dip"
+            android:layout_alignParentLeft="true"
             android:visibility="gone" />
-    </FrameLayout>
+        <View
+            android:id="@+id/wifi_config_padding"
+            android:layout_width="match_parent"
+            android:layout_height="360dip"
+            android:visibility="gone" />
+    </RelativeLayout>
 
-    <LinearLayout
-        android:id="@+id/right_buttons"
-        android:layout_width="wrap_content"
+    <!-- Divider -->
+    <View
+        android:id="@+id/bottom_divider"
+        android:layout_width="match_parent"
+        android:layout_height="3dip"
+        android:layout_marginBottom="16dip"
+        android:layout_below="@id/content"
+        android:layout_alignLeft="@id/content"
+        android:background="@color/divider_color" />  <!-- TODO: fix this -->
+
+    <RelativeLayout
+        android:id="@+id/bottom_buttons"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical"
+        android:layout_below="@id/bottom_divider"
+        android:layout_alignLeft="@id/bottom_divider"
         android:layout_alignParentRight="true"
-        android:layout_marginRight="16dip"
-        android:layout_alignBottom="@+id/content"
-        android:layout_marginBottom="16dip">
+        android:layout_alignParentBottom="true">
 
-        <Button android:id="@+id/wifi_setup_forget"
-                android:layout_width="208dip"
-                android:layout_height="48dip"
-                android:layout_marginLeft="16dip"
-                android:text="@string/wifi_setup_forget"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:visibility="gone" />
+        <Button
+            android:id="@+id/wifi_setup_add_network"
+            style="@style/setup_wizard_button"
+            android:layout_alignParentLeft="true"
+            android:text="@string/wifi_setup_add_network"
+            android:enabled="false" />
 
-        <Button android:id="@+id/wifi_setup_connect"
-                android:layout_width="208dip"
-                android:layout_height="48dip"
-                android:layout_marginTop="96dip"
-                android:layout_marginLeft="16dip"
-                android:text="@string/wifi_setup_connect"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:enabled="false"
-                android:visibility="gone" />
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:orientation="horizontal">
 
-        <Button android:id="@+id/wifi_setup_add_network"
-                android:layout_width="208dip"
-                android:layout_height="48dip"
-                android:layout_marginLeft="16dip"
-                android:text="@string/wifi_setup_add_network"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:enabled="false" />
+            <!-- This misleading name is for keeping consistency between non-XL
+                 layouts -->
+            <Button android:id="@+id/wifi_setup_cancel"
+                    style="@style/setup_wizard_button"
+                    android:text="@string/wifi_setup_back"
+                    android:visibility="gone" />
 
-        <Button android:id="@+id/wifi_setup_refresh_list"
-                android:layout_width="208dip"
-                android:layout_height="48dip"
-                android:layout_marginLeft="16dip"
-                android:text="@string/wifi_setup_refresh_list"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:enabled="false" />
+            <Button android:id="@+id/wifi_setup_connect"
+                    style="@style/setup_wizard_button"
+                    android:layout_marginLeft="16dip"
+                    android:text="@string/wifi_setup_connect"
+                    android:enabled="false"
+                    android:visibility="gone" />
 
-        <Button android:id="@+id/wifi_setup_skip_or_next"
-                android:layout_width="208dip"
-                android:layout_height="48dip"
-                android:layout_marginTop="96dip"
-                android:layout_marginLeft="16dip"
-                android:text="@string/wifi_setup_skip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:enabled="false" />
-    </LinearLayout>
+            <Button android:id="@+id/wifi_setup_refresh_list"
+                    style="@style/setup_wizard_button"
+                    android:layout_marginLeft="16dip"
+                    android:text="@string/wifi_setup_refresh_list"
+                    android:enabled="false" />
 
-    <!-- This misleading name is for keeping consistency between non-XL layouts -->
-    <Button android:id="@+id/wifi_setup_cancel"
-            android:layout_width="208dip"
-            android:layout_height="48dip"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:layout_marginBottom="16dip"
-            android:layout_alignBottom="@+id/content"
-            android:layout_toLeftOf="@id/right_buttons"
-            android:text="@string/wifi_setup_back"
-            android:visibility="gone" />
+            <Button android:id="@+id/wifi_setup_skip_or_next"
+                    style="@style/setup_wizard_button"
+                    android:layout_marginLeft="16dip"
+                    android:text="@string/wifi_setup_skip"
+                    android:enabled="false" />
+        </LinearLayout>
+    </RelativeLayout>
 </RelativeLayout>
diff --git a/res/layout/installed_app_details.xml b/res/layout/installed_app_details.xml
index fff1975..0b68d47 100644
--- a/res/layout/installed_app_details.xml
+++ b/res/layout/installed_app_details.xml
@@ -132,6 +132,7 @@
                     android:maxLines="1" />
 
             </LinearLayout>
+
             <LinearLayout
                 android:id="@+id/info_size"
                 android:layout_width="match_parent"
@@ -169,6 +170,44 @@
                     android:maxLines="1" />
 
             </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:baselineAligned="true"
+                android:paddingTop="-1dip">
+                <TextView
+                    android:id="@+id/external_size_prefix"
+                    android:text="@string/external_size_label"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1"
+                    android:paddingTop="6dip"
+                    android:paddingLeft="6dip"/>
+                <ImageView
+                    android:id="@+id/info_size_dots"
+                    android:src="@drawable/dotted_line_480px"
+                    android:layout_width="0dip"
+                    android:layout_weight="1"
+                    android:layout_height="1px"
+                    android:layout_gravity="bottom"
+                    android:layout_marginLeft="1dip"
+                    android:layout_marginRight="1dip"
+                    android:layout_marginBottom="4dip"
+                    android:scaleType="center" />
+                <TextView
+                    android:id="@+id/external_size_text"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:paddingTop="6dip"
+                    android:paddingRight="6dip"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1" />
+
+            </LinearLayout>
+
             <!-- Clear data and install location buttons  -->
             <include
                 layout="@layout/two_buttons_panel"
diff --git a/res/layout/settings_actionbar.xml b/res/layout/settings_actionbar.xml
deleted file mode 100644
index 711a0a1..0000000
--- a/res/layout/settings_actionbar.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="horizontal"
-        android:padding="4dip"
-        android:gravity="center_vertical"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent">
-
-    <!-- ImageView
-            android:src="@mipmap/ic_launcher_settings"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:layout_marginLeft="4dip"
-            android:layout_marginRight="4dip"
-    /-->
-
-    <view class="com.android.settings.Settings$BreadCrumbs"
-            android:id="@+id/bread_crumbs"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:orientation="horizontal">
-
-        <TextView android:id="@+id/level_up_title"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:gravity="center_vertical"
-                style="?android:attr/textAppearanceMediumInverse"
-                />
-
-        <ImageView
-                android:id="@+id/level_divider"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_marginTop="4dip"
-                android:layout_marginBottom="4dip"
-                android:layout_marginLeft="12dip"
-                android:layout_marginRight="12dip"
-                android:src="@drawable/nav_divider"/>
-
-        <TextView android:id="@+id/level_current_title"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:gravity="center_vertical"
-                style="?android:attr/textAppearanceMediumInverse"
-                />
-    </view>
-</LinearLayout>
diff --git a/res/layout/settings_top_level.xml b/res/layout/settings_top_level.xml
deleted file mode 100644
index b029915..0000000
--- a/res/layout/settings_top_level.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<!-- Top-level Settings layout with fragments. -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <FrameLayout android:id="@+id/prefs"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            />
-
-    <!-- button_bar -->
-    <RelativeLayout android:id="@+id/button_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:layout_weight="0"
-        android:background="@android:drawable/bottom_bar"
-        android:visibility="gone">
-
-        <Button android:id="@+id/back_button"
-            android:layout_width="150dip"
-            android:layout_height="wrap_content"
-            android:layout_margin="5dip"
-            android:layout_alignParentLeft="true"
-            android:drawablePadding="3dip"
-        />
-        <LinearLayout
-            android:orientation="horizontal"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true">
-
-            <Button android:id="@+id/skip_button"
-                android:layout_width="150dip"
-                android:layout_height="wrap_content"
-                android:layout_margin="5dip"
-                android:text="@string/skip_button_label"
-                android:visibility="gone"
-            />
-
-            <Button android:id="@+id/next_button"
-                android:layout_width="150dip"
-                android:layout_height="wrap_content"
-                android:layout_margin="5dip"
-                android:drawableRight="@drawable/ic_btn_next"
-                android:drawablePadding="3dip"
-                android:text="@string/next_button_label"
-            />
-        </LinearLayout>
-    </RelativeLayout>
-</LinearLayout>
diff --git a/res/layout/wifi_config_ui_for_setup_wizard.xml b/res/layout/wifi_config_ui_for_setup_wizard.xml
index c96a15c..0154a3c 100644
--- a/res/layout/wifi_config_ui_for_setup_wizard.xml
+++ b/res/layout/wifi_config_ui_for_setup_wizard.xml
@@ -16,13 +16,15 @@
 <!-- All ids in this layout must be in wifi_dialog.xml -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:orientation="vertical"
-              android:layout_width="fill_parent"
-              android:layout_height="fill_parent">
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <!-- TODO: remove this once we confirm it is needless -->
     <LinearLayout
         android:id="@+id/wifi_general_info"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical">
+        android:orientation="vertical"
+        android:visibility="gone">
         <TextView android:id="@+id/title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -43,72 +45,76 @@
 
     <!-- UI components that should be shown appropriately -->
     <LinearLayout android:id="@+id/wps_fields"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
         <TextView
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/wifi_wps_pin" />
 
         <EditText android:id="@+id/wps_pin"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textPassword" />
     </LinearLayout>
     <LinearLayout android:id="@+id/security_fields"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
-        <TextView android:layout_width="fill_parent"
-                  android:layout_height="wrap_content"
-                  android:text="@string/wifi_password" />
-
-        <EditText android:id="@+id/password"
-                  android:layout_width="fill_parent"
-                  android:layout_height="wrap_content"
-                  android:singleLine="true"
-                  android:password="true" />
+        <LinearLayout android:layout_width="match_parent"
+                      android:layout_height="wrap_content"
+                      android:orientation="horizontal">
+            <TextView android:layout_width="wrap_content"
+                      android:minWidth="88dip"
+                      android:layout_height="wrap_content"
+                      android:text="@string/wifi_password" />
+            <EditText android:id="@+id/password"
+                      android:layout_width="320dip"
+                      android:layout_height="wrap_content"
+                      android:singleLine="true"
+                      android:password="true" />
+        </LinearLayout>
 
         <CheckBox android:id="@+id/show_password"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/wifi_show_password" />
     </LinearLayout>
     <LinearLayout android:id="@+id/type"
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:orientation="vertical"
                  android:visibility="gone">
 
-       <TextView android:layout_width="fill_parent"
+       <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                  android:text="@string/wifi_ssid" />
 
        <EditText android:id="@+id/ssid"
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:singleLine="true"
                  android:inputType="textNoSuggestions" />
 
-       <TextView android:layout_width="fill_parent"
+       <TextView android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/wifi_security" />
 
        <Spinner android:id="@+id/security"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:prompt="@string/wifi_security"
                 android:entries="@array/wifi_security" />
     </LinearLayout> <!-- android:id="@+id/type" -->
 
     <LinearLayout android:id="@+id/eap_not_supported"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
-                  android:layout_marginTop="32dip"
+                  android:minHeight="360dip"
                   android:orientation="vertical"
                   android:visibility="gone">
         <TextView android:layout_width="match_parent"
@@ -127,23 +133,23 @@
         android:visibility="gone">
 
     <LinearLayout android:id="@+id/info"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"/>
 
     <LinearLayout android:id="@+id/setup_fields"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
 
         <TextView
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/wifi_network_setup" />
 
         <Spinner android:id="@+id/network_setup"
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:prompt="@string/wifi_network_setup"
                  android:entries="@array/wifi_network_setup" />
@@ -152,18 +158,18 @@
 
     <!--
     <LinearLayout android:id="@+id/wps_fields"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
 
         <TextView
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/wifi_wps_pin" />
 
         <EditText android:id="@+id/wps_pin"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textPassword" />
@@ -171,225 +177,225 @@
 
     <!--  android:id="@+id/security_fields" -->
     <LinearLayout
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
 
         <LinearLayout android:id="@+id/eap"
-                      android:layout_width="fill_parent"
+                      android:layout_width="match_parent"
                       android:layout_height="wrap_content"
                       android:orientation="vertical"
                       android:visibility="gone">
 
             <TextView
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/wifi_eap_method" />
 
             <Spinner android:id="@+id/method"
-                     android:layout_width="fill_parent"
+                     android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:prompt="@string/wifi_eap_method"
                      android:entries="@array/wifi_eap_method" />
 
             <TextView
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/please_select_phase2" />
 
             <Spinner android:id="@+id/phase2"
-                     android:layout_width="fill_parent"
+                     android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:prompt="@string/please_select_phase2"
                      android:entries="@array/wifi_phase2_entries" />
 
             <TextView
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/wifi_eap_ca_cert" />
 
             <Spinner android:id="@+id/ca_cert"
-                     android:layout_width="fill_parent"
+                     android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:prompt="@string/wifi_eap_ca_cert" />
 
             <TextView
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/wifi_eap_user_cert" />
 
             <Spinner android:id="@+id/user_cert"
-                     android:layout_width="fill_parent"
+                     android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:prompt="@string/wifi_eap_user_cert" />
 
             <TextView
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/wifi_eap_identity" />
 
             <EditText android:id="@+id/identity"
-                      android:layout_width="fill_parent"
+                      android:layout_width="match_parent"
                       android:layout_height="wrap_content"
                       android:singleLine="true"
                       android:inputType="textNoSuggestions" />
 
             <TextView
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/wifi_eap_anonymous" />
 
             <EditText android:id="@+id/anonymous"
-                      android:layout_width="fill_parent"
+                      android:layout_width="match_parent"
                       android:layout_height="wrap_content"
                       android:singleLine="true"
                       android:inputType="textNoSuggestions" />
         </LinearLayout> <!-- android:id="@+id/eap" -->
 
-        <!-- <TextView android:layout_width="fill_parent"
+        <!-- <TextView android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/wifi_password" />
 
         <EditText android:id="@+id/password"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:password="true" />
 
         <CheckBox android:id="@+id/show_password"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:text="@string/wifi_show_password" /> -->
     </LinearLayout>  <!-- android:id="@+id/security_fields" -->
 
     <LinearLayout android:id="@+id/ip_fields"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/wifi_ip_settings" />
 
         <Spinner android:id="@+id/ip_settings"
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:prompt="@string/wifi_ip_settings"
                  android:entries="@array/wifi_ip_settings" />
     </LinearLayout>
 
     <LinearLayout android:id="@+id/staticip"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   android:visibility="gone">
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/wifi_ip_address" />
 
         <EditText android:id="@+id/ipaddress"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textNoSuggestions" />
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/wifi_gateway" />
 
         <EditText android:id="@+id/gateway"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textNoSuggestions" />
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/wifi_network_prefix_length" />
 
         <EditText android:id="@+id/network_prefix_length"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textNoSuggestions" />
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/wifi_dns1" />
 
         <EditText android:id="@+id/dns1"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textNoSuggestions" />
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/wifi_dns2" />
 
         <EditText android:id="@+id/dns2"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
                   android:inputType="textNoSuggestions" />
 
         <LinearLayout android:id="@+id/proxy_settings_fields"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="vertical"
                 android:visibility="gone">
 
             <TextView android:id="@+id/proxy_settings_title"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:text="@string/proxy_settings_title" />
 
             <Spinner android:id="@+id/proxy_settings"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:prompt="@string/proxy_settings_title"
                     android:entries="@array/wifi_proxy_settings" />
         </LinearLayout>
 
         <LinearLayout android:id="@+id/proxy_fields"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="vertical"
                 android:visibility="gone">
-            <TextView android:layout_width="fill_parent"
+            <TextView android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:text="@string/proxy_hostname_label" />
 
             <EditText android:id="@+id/proxy_hostname"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:singleLine="true"
                     android:inputType="textNoSuggestions" />
 
-            <TextView android:layout_width="fill_parent"
+            <TextView android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:text="@string/proxy_port_label" />
 
             <EditText android:id="@+id/proxy_port"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:singleLine="true"
                     android:inputType="textNoSuggestions" />
 
-            <TextView android:layout_width="fill_parent"
+            <TextView android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:text="@string/proxy_exclusionlist_label" />
 
             <EditText android:id="@+id/proxy_exclusionlist"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:singleLine="true"
                     android:inputType="textNoSuggestions" />
diff --git a/res/values-xlarge/styles.xml b/res/values-xlarge/styles.xml
index 5e3fead..9b125ad 100644
--- a/res/values-xlarge/styles.xml
+++ b/res/values-xlarge/styles.xml
@@ -50,4 +50,11 @@
         <item name="android:orientation">vertical</item>
     </style>
 
-</resources>
\ No newline at end of file
+    <style name="setup_wizard_button">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:minWidth">208dip</item>
+        <item name="android:layout_height">48dip</item>
+        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
+    </style>
+
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4107951..26bead9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1969,6 +1969,10 @@
     <string name="application_size_label">Application</string>
     <!-- Manage applications, individual application info screen, label under Storage heading.  The amount of sapce taken up by the app's data (for example, downloaded emails or something like that) -->
     <string name="data_size_label">Data</string>
+    <!--  Manage applications, individual application info screen, label under Storage heading.  The amount of space taken up by the app's data on USB storage [CHARSIZE=40] -->
+    <string name="external_size_label" product="nosdcard">USB storage</string>
+    <!--  Manage applications, individual application info screen, label under Storage heading.  The amount of space taken up by the app's data on the SD card [CHARSIZE=40] -->
+    <string name="external_size_label" product="default">SD card</string>
     <!-- Manage applications, individual application info screen, button label under Storage heading. Button to remove the application from the system. -->
     <string name="uninstall_text">Uninstall</string>
     <!-- [CHAR LIMIT=25] Manage applications, individual application info screen, button label under Storage heading. Button to disable an existing application. -->
@@ -2958,8 +2962,22 @@
     <string name="sound_category_feedback_title">Feedback</string>
 
     <!-- Wifi Setup For Setup Wizard with XL screen -->
-    <!-- Title shown in Wifi Setup For Setup Wizard with XL screen -->
+    <!-- Title shown in Wifi Setup Wizard with XL screen -->
     <string name="wifi_setup_title">Wi-Fi setup</string>
+    <!-- Title shown in Wifi Setup Wizard with XL screen when
+         a user is configuring password for a network.
+         The argument should be the name of the network.
+         [CHAR LIMIT=50] -->
+    <string name="wifi_setup_title_editing_network">Connect to Wi-Fi network <xliff:g id="network_name" example="Happy Mobile">%s</xliff:g></string>
+    <!-- Title shown in Wifi Setup For Setup Wizard with XL screen when
+         the device is connecting a network the user specified.
+         The argument should be the name of the network.
+         [CHAR LIMIT=50] -->
+    <string name="wifi_setup_title_connecting_network">Connecting to Wi-Fi network <xliff:g id="network_name" example="Happy Mobile">%s</xliff:g>...</string>
+    <!-- Title shown in Wifi Setup For Setup Wizard with XL screen when
+         a user is adding a network.
+         [CHAR LIMIT=50] -->
+    <string name="wifi_setup_title_add_network">Add a network</string>
     <!-- Text message shown when Wifi is not connected.
          Used in Wifi Setup For Setup Wizard with XL screen. -->
     <string name="wifi_setup_not_connected">Not connected</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 969742f..c361fa9 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -109,4 +109,9 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:orientation">vertical</item>
     </style>
+
+    <style name="setup_wizard_button">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+    </style>
 </resources>
diff --git a/src/com/android/settings/ButtonBarHandler.java b/src/com/android/settings/ButtonBarHandler.java
new file mode 100644
index 0000000..d61da13
--- /dev/null
+++ b/src/com/android/settings/ButtonBarHandler.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2011 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;
+
+import android.widget.Button;
+
+/**
+ * Interface letting {@link SettingsPreferenceFragment} access to bottom bar inside
+ * {@link android.preference.PreferenceActivity}.
+ */
+public interface ButtonBarHandler {
+    public boolean hasNextButton();
+    public Button getNextButton();
+}
\ No newline at end of file
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 613b082..11d8c57 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -34,7 +34,7 @@
 /**
  * Top-level settings activity to handle single pane and double pane UI layout.
  */
-public class Settings extends PreferenceActivity {
+public class Settings extends PreferenceActivity implements ButtonBarHandler {
 
     private static final String META_DATA_KEY_HEADER_ID =
             "com.android.settings.TOP_LEVEL_HEADER_ID";
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 0db4f8b..47e31ee 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -158,11 +158,11 @@
     }
 
     protected boolean hasNextButton() {
-        return ((Settings)getActivity()).hasNextButton();
+        return ((ButtonBarHandler)getActivity()).hasNextButton();
     }
 
     protected Button getNextButton() {
-        return ((Settings)getActivity()).getNextButton();
+        return ((ButtonBarHandler)getActivity()).getNextButton();
     }
 
     public void finish() {
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 298f1b6..aef8b8a 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -55,6 +55,7 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -212,7 +213,6 @@
         String title = getString(R.string.sync_item_title, providerLabel);
         item.setTitle(title);
         item.setKey(authority);
-        getPreferenceScreen().addPreference(item);
         mCheckBoxes.add(item);
     }
 
@@ -472,6 +472,11 @@
                 }
             }
         }
+
+        Collections.sort(mCheckBoxes);
+        for (int i = 0, n = mCheckBoxes.size(); i < n; i++) {
+            getPreferenceScreen().addPreference(mCheckBoxes.get(i));
+        }
     }
 
     /**
diff --git a/src/com/android/settings/applications/ApplicationsState.java b/src/com/android/settings/applications/ApplicationsState.java
index 6e9f2a2..6de8c7f 100644
--- a/src/com/android/settings/applications/ApplicationsState.java
+++ b/src/com/android/settings/applications/ApplicationsState.java
@@ -71,6 +71,7 @@
         long cacheSize;
         long codeSize;
         long dataSize;
+        long externalSize;
     }
     
     public static class AppEntry extends SizeInfo {
@@ -626,9 +627,16 @@
 
     // --------------------------------------------------------------
 
-    private long getTotalSize(PackageStats ps) {
+    private long getTotalInternalSize(PackageStats ps) {
         if (ps != null) {
-            return ps.codeSize+ps.dataSize;
+            return ps.codeSize + ps.dataSize;
+        }
+        return SIZE_INVALID;
+    }
+
+    private long getTotalExternalSize(PackageStats ps) {
+        if (ps != null) {
+            return ps.externalDataSize + ps.externalMediaSize + ps.externalCacheSize;
         }
         return SIZE_INVALID;
     }
@@ -660,15 +668,18 @@
                         synchronized (entry) {
                             entry.sizeStale = false;
                             entry.sizeLoadStart = 0;
-                            long newSize = getTotalSize(stats);
+                            long externalSize = getTotalExternalSize(stats);
+                            long newSize = externalSize + getTotalInternalSize(stats);
                             if (entry.size != newSize ||
                                     entry.cacheSize != stats.cacheSize ||
                                     entry.codeSize != stats.codeSize ||
-                                    entry.dataSize != stats.dataSize) {
+                                    entry.dataSize != stats.dataSize ||
+                                    entry.externalSize != externalSize) {
                                 entry.size = newSize;
                                 entry.cacheSize = stats.cacheSize;
                                 entry.codeSize = stats.codeSize;
                                 entry.dataSize = stats.dataSize;
+                                entry.externalSize = externalSize;
                                 entry.sizeStr = getSizeStr(entry.size);
                                 if (DEBUG) Log.i(TAG, "Set size of " + entry.label + " " + entry
                                         + ": " + entry.sizeStr);
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index de897eb..06d97fc 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -93,6 +93,7 @@
     private TextView mTotalSize;
     private TextView mAppSize;
     private TextView mDataSize;
+    private TextView mExternalSize;
     private ClearUserDataObserver mClearDataObserver;
     // Views related to cache info
     private TextView mCacheSize;
@@ -107,6 +108,7 @@
     private boolean mHaveSizes = false;
     private long mLastCodeSize = -1;
     private long mLastDataSize = -1;
+    private long mLastExternalSize = -1;
     private long mLastCacheSize = -1;
     private long mLastTotalSize = -1;
     
@@ -317,6 +319,7 @@
         mTotalSize = (TextView)view.findViewById(R.id.total_size_text);
         mAppSize = (TextView)view.findViewById(R.id.application_size_text);
         mDataSize = (TextView)view.findViewById(R.id.data_size_text);
+        mExternalSize = (TextView)view.findViewById(R.id.external_size_text);
         
         // Get Control button panel
         View btnPanel = view.findViewById(R.id.control_buttons_panel);
@@ -504,6 +507,10 @@
                 mLastDataSize = mAppEntry.dataSize;
                 mDataSize.setText(getSizeStr(mAppEntry.dataSize));
             }
+            if (mLastExternalSize != mAppEntry.externalSize) {
+                mLastExternalSize = mAppEntry.externalSize;
+                mExternalSize.setText(getSizeStr(mAppEntry.externalSize));
+            }
             if (mLastCacheSize != mAppEntry.cacheSize) {
                 mLastCacheSize = mAppEntry.cacheSize;
                 mCacheSize.setText(getSizeStr(mAppEntry.cacheSize));
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 117bec5..a4808b0 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -21,29 +21,15 @@
 import com.android.settings.Utils;
 import com.android.settings.VoiceInputOutputSettings;
 
-import android.app.AlertDialog;
 import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.os.Bundle;
-import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
 public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
         implements Preference.OnPreferenceChangeListener{
 
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
index 6981927..03c5ea1 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
@@ -204,6 +204,7 @@
                     if (DEBUG) {
                         Log.d(TAG, "Current IME was uninstalled or disabled.");
                     }
+                    currentInputMethodId = null;
                 }
             }
             // If it's a disabled system ime, add it to the disabled list so that it
diff --git a/src/com/android/settings/wifi/WifiConfigUiBase.java b/src/com/android/settings/wifi/WifiConfigUiBase.java
index d930b58..11dcc00 100644
--- a/src/com/android/settings/wifi/WifiConfigUiBase.java
+++ b/src/com/android/settings/wifi/WifiConfigUiBase.java
@@ -22,7 +22,7 @@
 
 /**
  * Foundation interface glues between Activities and UIs like
- * {@link WifiDialog} or {@link WifiConfigPreference}.
+ * {@link WifiDialog} or {@link WifiConfigUiForSetupWizardXL}.
  */
 public interface WifiConfigUiBase {
     public Context getContext();
diff --git a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java
index bbd8f80..bffcc61 100644
--- a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java
@@ -18,7 +18,6 @@
 
 import com.android.settings.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.os.Handler;
 import android.util.Log;
@@ -38,16 +37,17 @@
     private static final String TAG = "SetupWizard";
 
     private Button mConnectButton;
-    private Button mForgetButton;
     private Button mCancelButton;
 
-    private final Activity mActivity;
+    private final WifiSettingsForSetupWizardXL mActivity;
     private View mView;
     private WifiConfigController mController;
     private AccessPoint mAccessPoint;
     private boolean mEdit;
     private Handler mHandler = new Handler();
 
+    private final InputMethodManager mInputMethodManager;
+
     private LayoutInflater mInflater;
 
     /**
@@ -58,10 +58,10 @@
      * @param edit
      */
     public WifiConfigUiForSetupWizardXL(
-            Activity activity, ViewGroup parent, AccessPoint accessPoint, boolean edit) {
+            WifiSettingsForSetupWizardXL activity, ViewGroup parent,
+            AccessPoint accessPoint, boolean edit) {
         mActivity = activity;
         mConnectButton = (Button)activity.findViewById(R.id.wifi_setup_connect);
-        mForgetButton = (Button)activity.findViewById(R.id.wifi_setup_forget);
         mCancelButton = (Button)activity.findViewById(R.id.wifi_setup_cancel);
         mAccessPoint = accessPoint;
         mEdit = edit;
@@ -70,12 +70,14 @@
         mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, true);
         mController = new WifiConfigController(this, mView, mAccessPoint, edit);
 
-        // Assumes R.id.password is inside security_fields.
-        // TODO: confirm it is ok to assume R.id.password is the only EditText to be focused, and
-        // R.id.security_fields is the only parent for possible EditTexts. Possibly we need to
-        // check parentand detect visibility manually.
+        mInputMethodManager = (InputMethodManager)
+                activity.getSystemService(Context.INPUT_METHOD_SERVICE);
+
         if (mView.findViewById(R.id.security_fields).getVisibility() == View.VISIBLE) {
             requestFocusAndShowKeyboard(R.id.password);
+        } else if (mView.findViewById(R.id.type).getVisibility() == View.VISIBLE) {
+            // Add Network flow.
+            requestFocusAndShowKeyboard(R.id.ssid);
         }
     }
 
@@ -90,13 +92,17 @@
         } else if (!(viewToBeFocused instanceof EditText)) {
             Log.w(TAG, "password field is not EditText");
         } else {
-            // After acquiring the focus, we show software keyboard.
-            viewToBeFocused.setOnFocusChangeListener(this);
-            final boolean requestFocusResult = viewToBeFocused.requestFocus();
-            Log.i(TAG, String.format("Focus request  %s.",
-                    (requestFocusResult ? "successful" : "failed")));
-            if (!requestFocusResult) {
-                viewToBeFocused.setOnFocusChangeListener(null);
+            if (viewToBeFocused.isFocused()) {
+                mInputMethodManager.showSoftInput(viewToBeFocused, 0);
+            } else {
+                // After acquiring the focus, we show software keyboard.
+                viewToBeFocused.setOnFocusChangeListener(this);
+                final boolean requestFocusResult = viewToBeFocused.requestFocus();
+                Log.i(TAG, String.format("Focus request  %s.",
+                        (requestFocusResult ? "successful" : "failed")));
+                if (!requestFocusResult) {
+                    viewToBeFocused.setOnFocusChangeListener(null);
+                }
             }
         }
     }
@@ -131,7 +137,7 @@
 
     @Override
     public Button getForgetButton() {
-        return mForgetButton;
+        return null;
     }
 
     @Override
@@ -143,16 +149,11 @@
     public void setSubmitButton(CharSequence text) {
         mConnectButton.setVisibility(View.VISIBLE);
         mConnectButton.setText(text);
-
-        // test
-        mForgetButton.setVisibility(View.GONE);
     }
 
     @Override
     public void setForgetButton(CharSequence text) {
         // In XL setup screen, we won't show Forget button for simplifying the UI.
-        // mForgetButton.setVisibility(View.VISIBLE);
-        // mForgetButton.setText(text);
     }
 
     @Override
@@ -177,12 +178,9 @@
         Log.d(TAG, "Ignoring setTitle");
     }
 
-    private static class FocusRunnable implements Runnable {
-        final InputMethodManager mInputMethodManager;
+    private class FocusRunnable implements Runnable {
         final View mViewToBeFocused;
-        public FocusRunnable(Context context, View viewToBeFocused) {
-            mInputMethodManager = (InputMethodManager)
-                    context.getSystemService(Context.INPUT_METHOD_SERVICE);
+        public FocusRunnable(View viewToBeFocused) {
             mViewToBeFocused = viewToBeFocused;
         }
 
@@ -191,7 +189,9 @@
             // mInputMethodManager.focusIn(mViewToBeFocused);
             final boolean showSoftInputResult =
                     mInputMethodManager.showSoftInput(mViewToBeFocused, 0);
-            if (!showSoftInputResult) {
+            if (showSoftInputResult) {
+                mActivity.setPaddingVisibility(View.GONE);
+            } else {
                 Log.w(TAG, "Failed to show software keyboard ");
             }
         }
@@ -201,7 +201,7 @@
     public void onFocusChange(View view, boolean hasFocus) {
         view.setOnFocusChangeListener(null);
         if (hasFocus) {
-            mHandler.post(new FocusRunnable(mActivity, view));
+            mHandler.post(new FocusRunnable(view));
         }
     }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/wifi/WifiPickerActivity.java b/src/com/android/settings/wifi/WifiPickerActivity.java
new file mode 100644
index 0000000..7b972fc
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiPickerActivity.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2011 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.wifi;
+
+import com.android.settings.ButtonBarHandler;
+
+import android.content.Intent;
+import android.preference.PreferenceActivity;
+import android.widget.Button;
+
+public class WifiPickerActivity extends PreferenceActivity implements ButtonBarHandler {
+    @Override
+    public Intent getIntent() {
+        Intent modIntent = new Intent(super.getIntent());
+        modIntent.putExtra(EXTRA_SHOW_FRAGMENT, WifiSettings.class.getName());
+        modIntent.putExtra(EXTRA_NO_HEADERS, true);
+        return modIntent;
+    }
+
+    @Override
+    public boolean hasNextButton() {
+        // PreferenceActivity#hasNextButton() is protected, so we need to expose it here.
+        return super.hasNextButton();
+    }
+
+    @Override
+    public Button getNextButton() {
+        // PreferenceActivity#getNextButton() is protected, so we need to expose it here.
+        return super.getNextButton();
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index ffe48a9..ccc40fb 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -567,7 +567,7 @@
     public void onClick(DialogInterface dialogInterface, int button) {
         if (mInXlSetupWizard) {
             if (button == WifiDialog.BUTTON_FORGET && mSelectedAccessPoint != null) {
-                ((WifiSettingsForSetupWizardXL)getActivity()).onForgetButtonPressed();
+                forget();
             } else if (button == WifiDialog.BUTTON_SUBMIT) {
                 ((WifiSettingsForSetupWizardXL)getActivity()).onConnectButtonPressed();
             }
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index 7fccce0..59d61ab 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -29,10 +29,10 @@
 import android.preference.PreferenceCategory;
 import android.text.TextUtils;
 import android.util.Log;
-import android.view.View;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.view.View.OnClickListener;
 import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.View;
+import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
@@ -69,16 +69,31 @@
 
     private WifiManager mWifiManager;
 
-    private TextView mProgressText;
+    /**
+     * Used for resizing a padding above title. Hiden when software keyboard is shown.
+     */
+    private View mTopPadding;
+
+    /**
+     * Used for resizing a padding inside Config UI. Hiden when software keyboard is shown.
+     */
+    private View mWifiConfigPadding;
+
+    private TextView mTitleView;
+    /**
+     * The name of a network currently connecting, or trying to connect.
+     * This may be empty ("") at first, and updated when configuration is changed.
+     */
+    private CharSequence mNetworkName = "";
+    private CharSequence mEditingTitle;
+
     private ProgressBar mProgressBar;
     private WifiSettings mWifiSettings;
-    private TextView mStatusText;
 
     private Button mAddNetworkButton;
     private Button mRefreshButton;
     private Button mSkipOrNextButton;
     private Button mConnectButton;
-    private Button mForgetButton;
     private Button mBackButton;
 
     // true when a user already pressed "Connect" button and waiting for connection.
@@ -130,14 +145,11 @@
     }
 
     public void setup() {
-        mProgressText = (TextView)findViewById(R.id.scanning_progress_text);
+        mTitleView = (TextView)findViewById(R.id.wifi_setup_title);
         mProgressBar = (ProgressBar)findViewById(R.id.scanning_progress_bar);
         mProgressBar.setMax(2);
-        mStatusText = (TextView)findViewById(R.id.wifi_setup_status);
 
-        mProgressText.setText(Summary.get(this, DetailedState.SCANNING));
         mProgressBar.setIndeterminate(true);
-        mStatusText.setText(R.string.wifi_setup_status_scanning);
 
         mAddNetworkButton = (Button)findViewById(R.id.wifi_setup_add_network);
         mAddNetworkButton.setOnClickListener(this);
@@ -147,11 +159,12 @@
         mSkipOrNextButton.setOnClickListener(this);
         mConnectButton = (Button)findViewById(R.id.wifi_setup_connect);
         mConnectButton.setOnClickListener(this);
-        mForgetButton = (Button)findViewById(R.id.wifi_setup_forget);
-        mForgetButton.setOnClickListener(this);
         mBackButton = (Button)findViewById(R.id.wifi_setup_cancel);
         mBackButton.setOnClickListener(this);
 
+        mTopPadding = findViewById(R.id.top_padding);
+        mWifiConfigPadding = findViewById(R.id.wifi_config_padding);
+
         // At first, Wifi module doesn't return SCANNING state (it's too early), so we manually
         // show it.
         showScanningStatus();
@@ -163,8 +176,8 @@
         mRefreshButton.setVisibility(View.VISIBLE);
         mSkipOrNextButton.setVisibility(View.VISIBLE);
         mConnectButton.setVisibility(View.GONE);
-        mForgetButton.setVisibility(View.GONE);
         mBackButton.setVisibility(View.GONE);
+        setPaddingVisibility(View.VISIBLE, View.GONE);
     }
 
     @Override
@@ -188,9 +201,6 @@
         } else if (view == mConnectButton) {
             if (DEBUG) Log.d(TAG, "Connect button pressed");
             onConnectButtonPressed();
-        } else if (view == mForgetButton) {
-            if (DEBUG) Log.d(TAG, "Forget button pressed");
-            onForgetButtonPressed();
         } else if (view == mBackButton) {
             if (DEBUG) Log.d(TAG, "Back button pressed");
             onBackButtonPressed();
@@ -222,7 +232,6 @@
             // no visible network on the list.
             if (mWifiSettings.getAccessPointsCount() == 0) {
                 mProgressBar.setIndeterminate(true);
-                mProgressText.setText(Summary.get(this, DetailedState.SCANNING));
             } else {
                 // Users already connected to a network, or see available networks.
                 mProgressBar.setIndeterminate(false);
@@ -234,14 +243,14 @@
             break;
         }
         case CONNECTED: {
+            hideSoftwareKeyboard();
+
             // If the device is already connected to a wifi without users' "Connect" request,
             // this can be false here. We want to treat it as "after connect action".
             mAfterConnectAction = true;
 
             mProgressBar.setIndeterminate(false);
             mProgressBar.setProgress(2);
-            mProgressText.setText(Summary.get(this, state));
-            mStatusText.setText(R.string.wifi_setup_status_proceed_to_next);
 
             mConnectButton.setVisibility(View.GONE);
             mAddNetworkButton.setVisibility(View.GONE);
@@ -250,8 +259,6 @@
             mSkipOrNextButton.setVisibility(View.VISIBLE);
             mSkipOrNextButton.setEnabled(true);
             mHandler.removeCallbacks(mSkipButtonEnabler);
-
-            mProgressText.setText(Summary.get(this, state));
             break;
         }
         default:  // DISCONNECTED, FAILED
@@ -264,31 +271,34 @@
         mProgressBar.setIndeterminate(false);
         mProgressBar.setProgress(0);
 
-        mProgressText.setText(stateString);
-
         mAddNetworkButton.setEnabled(true);
         mRefreshButton.setEnabled(true);
     }
 
     private void showConnectingStatus() {
+        // We save this title and show it when authentication failed.
+        mEditingTitle = mTitleView.getText();
+        showTitleForNetworkEditing();
         mProgressBar.setIndeterminate(false);
         mProgressBar.setProgress(1);
-        mStatusText.setText(R.string.wifi_setup_status_connecting);
-        mProgressText.setText(Summary.get(this, DetailedState.CONNECTING));
+        setPaddingVisibility(View.VISIBLE);
+    }
+
+    private void showTitleForNetworkEditing() {
+        if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
+            mNetworkName = mWifiConfig.getController().getConfig().SSID;
+        }
+        mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName));
     }
 
     private void showScanningStatus() {
         mProgressBar.setIndeterminate(true);
         ((Button)findViewById(R.id.wifi_setup_add_network)).setEnabled(false);
         ((Button)findViewById(R.id.wifi_setup_refresh_list)).setEnabled(false);
-        mProgressText.setText(Summary.get(this, DetailedState.SCANNING));
-        mStatusText.setText(R.string.wifi_setup_status_scanning);
     }
 
     private void onAddNetworkButtonPressed() {
-        // onConfigUiShown() will be called.
         mWifiSettings.onAddNetworkPressed();
-
     }
 
     /**
@@ -318,34 +328,39 @@
         mWifiConfig = new WifiConfigUiForSetupWizardXL(this, parent, selectedAccessPoint, edit);
         final View view = mWifiConfig.getView();
         if (selectedAccessPoint != null) {
-            view.findViewById(R.id.wifi_general_info).setVisibility(View.VISIBLE);
-            ((TextView)view.findViewById(R.id.title)).setText(selectedAccessPoint.getTitle());
-            ((TextView)view.findViewById(R.id.summary)).setText(selectedAccessPoint.getSummary());
+            mNetworkName = selectedAccessPoint.getTitle().toString();
+            mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName));
         } else {
+            mNetworkName = "";
+            mTitleView.setText(R.string.wifi_setup_title_add_network);
             view.findViewById(R.id.wifi_general_info).setVisibility(View.GONE);
         }
 
         if (selectedAccessPoint != null &&
                 selectedAccessPoint.security == AccessPoint.SECURITY_NONE) {
-            mStatusText.setText(R.string.wifi_setup_status_unsecured_network);
+            // onConnectButtonPressed() will change visibility status.
+            mConnectButton.performClick();
         } else if (selectedAccessPoint != null &&
                 selectedAccessPoint.security == AccessPoint.SECURITY_EAP) {
-            mStatusText.setText(R.string.wifi_setup_status_eap_not_supported);
             mConnectButton.setVisibility(View.GONE);
+
+            mSkipOrNextButton.setVisibility(View.GONE);
+            mAddNetworkButton.setVisibility(View.GONE);
+            mRefreshButton.setVisibility(View.GONE);
+            mBackButton.setVisibility(View.VISIBLE);
         } else {
-            mStatusText.setText(R.string.wifi_setup_status_edit_network);
             mConnectButton.setVisibility(View.VISIBLE);
+
+            // WifiConfigController shows Connect button as "Save" when edit==true and a user
+            // tried to connect the network.
+            // In SetupWizard, we just show the button as "Connect" instead.
+            mConnectButton.setText(R.string.wifi_connect);
+
+            mSkipOrNextButton.setVisibility(View.GONE);
+            mAddNetworkButton.setVisibility(View.GONE);
+            mRefreshButton.setVisibility(View.GONE);
+            mBackButton.setVisibility(View.VISIBLE);
         }
-
-        // WifiConfigController shows Connect button as "Save" when edit==true and a user
-        // tried to connect the network.
-        // In SetupWizard, we just show the button as "Connect" instead.
-        mConnectButton.setText(R.string.wifi_connect);
-
-        mAddNetworkButton.setVisibility(View.GONE);
-        mRefreshButton.setVisibility(View.GONE);
-        mSkipOrNextButton.setVisibility(View.GONE);
-        mBackButton.setVisibility(View.VISIBLE);
     }
 
     // May be called when user press "connect" button in WifiDialog
@@ -388,21 +403,6 @@
         mRefreshButton.setVisibility(View.GONE);
     }
 
-    // May be called when user press "forget" button in WifiDialog
-    /* package */ void onForgetButtonPressed() {
-        mWifiSettings.forget();
-
-        refreshAccessPoints(false);
-        restoreFirstButtonVisibilityState();
-        mAddNetworkButton.setEnabled(true);
-        mRefreshButton.setEnabled(true);
-        mSkipOrNextButton.setEnabled(true);
-
-        mProgressBar.setIndeterminate(false);
-        mProgressBar.setProgress(0);
-        mProgressText.setText(getString(R.string.wifi_setup_not_connected));
-    }
-
     private void onBackButtonPressed() {
         if (mAfterConnectAction) {
             if (DEBUG) Log.d(TAG, "Back button pressed after connect action.");
@@ -421,7 +421,6 @@
         } else { // During user's Wifi configuration.
             mWifiSettings.resumeWifiScan();
 
-            mStatusText.setText(R.string.wifi_setup_status_select_network);
             restoreFirstButtonVisibilityState();
 
             mAddNetworkButton.setEnabled(true);
@@ -470,7 +469,8 @@
     }
 
     /**
-     * Called when {@link WifiSettings} received {@link WifiManager#SUPPLICANT_CHANGED_ACTION}.
+     * Called when {@link WifiSettings} received
+     * {@link WifiManager#SUPPLICANT_STATE_CHANGED_ACTION}.
      */
     /* package */ void onSupplicantStateChanged(Intent intent) {
         final int errorCode = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1);
@@ -485,11 +485,17 @@
      */
     private void onAuthenticationFailure() {
         mAfterConnectAction = false;
-        mStatusText.setText(R.string.wifi_setup_status_edit_network);
         mSkipOrNextButton.setVisibility(View.GONE);
         mConnectButton.setVisibility(View.VISIBLE);
         mConnectButton.setEnabled(true);
 
+        if (!TextUtils.isEmpty(mEditingTitle)) {
+            mTitleView.setText(mEditingTitle);
+        } else {
+            Log.w(TAG, "Title during editing/adding a network was empty.");
+            showTitleForNetworkEditing();
+        }
+
         // Restore View status which was tweaked on connection.
         final View wpsFieldView = findViewById(R.id.wps_fields);
         if (wpsFieldView != null) {
@@ -502,21 +508,36 @@
                 final View passwordView = findViewById(R.id.password);
                 if (passwordView != null) {
                     if (passwordView.isFocused()) {
-                        final InputMethodManager inputMethodManager = (InputMethodManager)
-                                getSystemService(Context.INPUT_METHOD_SERVICE);
-                        inputMethodManager.showSoftInput(passwordView, 0);
-                    } else {
-                        mWifiConfig.requestFocusAndShowKeyboard(R.id.password);
+                        setPaddingVisibility(View.GONE);
                     }
+                    mWifiConfig.requestFocusAndShowKeyboard(R.id.password);
                 }
             }
         }
         final View typeView = findViewById(R.id.type);
         if (typeView != null) {
             typeView.setVisibility(mPreviousTypeVisibility);
+            if (mPreviousTypeVisibility == View.VISIBLE && mWifiConfig != null) {
+                final View ssidView = findViewById(R.id.ssid);
+                if (ssidView != null) {
+                    if (ssidView.isFocused()) {
+                        setPaddingVisibility(View.GONE);
+                    }
+                    mWifiConfig.requestFocusAndShowKeyboard(R.id.ssid);
+                }
+            }
         }
     }
 
+    public void setPaddingVisibility(int visibility) {
+        setPaddingVisibility(visibility, visibility);
+    }
+
+    private void setPaddingVisibility(int topPaddingVisibility, int configVisibility) {
+        mTopPadding.setVisibility(topPaddingVisibility);
+        mWifiConfigPadding.setVisibility(configVisibility);
+    }
+
     /**
      * Called when WifiManager is requested to save a network. This method sholud include
      * WifiManager#saveNetwork() call.