diff --git a/Android.mk b/Android.mk
index dedda01..d70d1ce 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,7 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE_TAGS := user
+LOCAL_MODULE_TAGS := optional
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d260b33..ebd7637 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2,8 +2,8 @@
         package="com.android.settings"
         android:sharedUserId="android.uid.system">
 
-    <uses-permission android:name="com.google.android.providers.gmail.permission.WRITE_GMAIL" />
-    <uses-permission android:name="com.google.android.providers.gmail.permission.READ_GMAIL" />
+    <uses-permission android:name="com.google.android.gm.permission.WRITE_GMAIL" />
+    <uses-permission android:name="com.google.android.gm.permission.READ_GMAIL" />
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
     <uses-permission android:name="android.permission.DEVICE_POWER" />
@@ -32,7 +32,7 @@
     <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
     <uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>
     <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>
-    <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
     <uses-permission android:name="android.permission.BATTERY_STATS"/>
     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
@@ -80,7 +80,9 @@
 
         <!-- Top-level settings -->
 
-        <activity android:name=".wifi.WifiSettings" android:label="@string/wifi_settings"
+        <activity android:name=".wifi.WifiSettings"
+                android:label="@string/wifi_settings"
+                android:configChanges="orientation|keyboardHidden"
                 android:clearTaskOnLaunch="true"
                 >
             <intent-filter>
@@ -93,7 +95,8 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".wifi.AdvancedSettings" android:label="@string/wifi_ip_settings_titlebar"
+        <activity android:name=".wifi.AdvancedSettings"
+                android:label="@string/wifi_ip_settings_titlebar"
                 >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -103,6 +106,39 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".wifi.WifiInfo">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".wifi.WifiConfigInfo">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".wifi.WifiAPITest">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".wifi.WifiStatusTest">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
         <activity android:name="ApnSettings" android:label="@string/apn_settings"
                   android:configChanges="orientation|keyboardHidden"
                   android:launchMode="singleTask"
@@ -132,6 +168,16 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".TetherSettings"
+                android:configChanges="orientation|keyboardHidden"
+                android:launchMode="singleTask">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
         <activity android:name=".vpn.VpnSettings"
                 android:configChanges="orientation|keyboardHidden"
                 android:launchMode="singleTask">
@@ -216,16 +262,28 @@
             </intent-filter>
         </activity>
 
-        <activity android:name="SoundAndDisplaySettings"
-                android:label="@string/sound_and_display_settings_title"
+        <activity android:name="SoundSettings"
+                android:label="@string/sound_settings"
                 android:clearTaskOnLaunch="true"
                 >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="com.android.settings.SOUND_SETTINGS" />
+                <action android:name="android.settings.SOUND_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+                <category android:name="com.android.settings.SHORTCUT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DisplaySettings"
+                android:label="@string/display_settings"
+                android:clearTaskOnLaunch="true"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
                 <action android:name="com.android.settings.DISPLAY_SETTINGS" />
                 <action android:name="android.settings.DISPLAY_SETTINGS" />
-                <action android:name="android.settings.SOUND_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="com.android.settings.SHORTCUT" />
@@ -249,6 +307,7 @@
                 >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.DEVICE_INFO_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
@@ -334,7 +393,7 @@
         </activity>
 
         <activity android:name="CredentialInstaller"
-                android:label="@string/credential_installer_activity_title">
+                android:theme="@android:style/Theme.Translucent.NoTitleBar">
             <intent-filter>
                 <action android:name="android.credentials.SYSTEM_INSTALL" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -354,6 +413,30 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="DeviceAdminSettings"
+                android:label="@string/device_admin_settings_title"
+                android:theme="@style/TallTitleBarTheme"
+                android:clearTaskOnLaunch="true"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+                <category android:name="com.android.settings.SHORTCUT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DeviceAdminAdd"
+                android:label="@string/device_admin_add_title"
+                android:theme="@style/TallTitleBarTheme"
+                android:clearTaskOnLaunch="true"
+                >
+            <intent-filter>
+                <action android:name="android.app.action.ADD_DEVICE_ADMIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity android:name="IccLockSettings" android:label="@string/sim_lock_settings"
                 android:process="com.android.phone">
             <intent-filter>
@@ -374,6 +457,15 @@
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
         </activity>
+        
+        <activity android:name="VoiceInputOutputSettings"
+                android:label="@string/voice_input_output_settings">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="com.android.settings.VOICE_INPUT_OUTPUT_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
 
         <activity android:name="TextToSpeechSettings" android:label="@string/tts_settings">
             <intent-filter>
@@ -386,26 +478,33 @@
         <!-- Second and third-level settings -->
 
         <activity android:name="ConfirmLockPattern"/>
+        <activity android:name="ConfirmLockPassword"
+            android:theme="@android:style/Theme.NoTitleBar">
+        </activity>
 
-        <activity android:name="ChooseLockPattern" android:label="@string/lockpattern_change_lock_pattern_label">
+        <activity android:name="ChooseLockGeneric"
+                android:theme="@android:style/Theme.NoDisplay">
             <intent-filter>
-                <action android:name="android.intent.action.DEFAULT" />
+                <action android:name="android.app.action.SET_NEW_PASSWORD" />
+                <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
 
+        <activity android:name="ChooseLockPattern"
+                android:label="@string/lockpattern_change_lock_pattern_label">
+        </activity>
+
+        <activity android:name="ChooseLockPassword"
+                android:label="@string/lockpattern_change_lock_pin_label"
+            android:theme="@android:style/Theme.NoTitleBar">
+        </activity>
+
         <activity android:name="ChooseLockPatternTutorial"
-            android:label="@string/lockpattern_change_lock_pattern_label"
-            >
-            <intent-filter>
-                <action android:name="android.intent.action.DEFAULT" />
-            </intent-filter>
+            android:label="@string/lockpattern_change_lock_pattern_label">
         </activity>
 
         <activity android:name="ChooseLockPatternExample"
             android:label="@string/lockpattern_change_lock_pattern_label">
-            <intent-filter>
-                <action android:name="android.intent.action.DEFAULT" />
-            </intent-filter>
         </activity>
 
         <activity android:name="ZoneList" android:label="@string/choose_timezone" />
@@ -652,12 +751,6 @@
             </intent-filter>
         </activity>
 
-        <!-- Helper to bind any unbound widgets in Launcher, used as
-             part of initialization and upgrade process -->
-        <activity android:name="LauncherAppWidgetBinder"
-                android:permission="android.permission.BIND_APPWIDGET"
-                android:theme="@android:style/Theme.NoDisplay" android:exported="true" />
-
         <activity android:name="UsageStats" android:label="@string/usage_stats_label">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/res/drawable-hdpi/ic_settings_display.png b/res/drawable-hdpi/ic_settings_display.png
index 20568d2..c35e8be 100644
--- a/res/drawable-hdpi/ic_settings_display.png
+++ b/res/drawable-hdpi/ic_settings_display.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_sound_display.png b/res/drawable-hdpi/ic_settings_sound.png
similarity index 100%
rename from res/drawable-hdpi/ic_settings_sound_display.png
rename to res/drawable-hdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_00.png b/res/drawable-hdpi/lock_anim_0.png
similarity index 100%
rename from res/drawable-hdpi/lock_anim_00.png
rename to res/drawable-hdpi/lock_anim_0.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_1.png b/res/drawable-hdpi/lock_anim_1.png
new file mode 100644
index 0000000..74a0628
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_1.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_11.png b/res/drawable-hdpi/lock_anim_11.png
new file mode 100644
index 0000000..f8976a2
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_11.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_13.png b/res/drawable-hdpi/lock_anim_13.png
new file mode 100644
index 0000000..ccd38d5
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_13.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_02.png b/res/drawable-hdpi/lock_anim_2.png
similarity index 100%
rename from res/drawable-hdpi/lock_anim_02.png
rename to res/drawable-hdpi/lock_anim_2.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_3.png b/res/drawable-hdpi/lock_anim_3.png
new file mode 100644
index 0000000..fa37813
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_3.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_04.png b/res/drawable-hdpi/lock_anim_4.png
similarity index 100%
rename from res/drawable-hdpi/lock_anim_04.png
rename to res/drawable-hdpi/lock_anim_4.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_5.png b/res/drawable-hdpi/lock_anim_5.png
new file mode 100644
index 0000000..b08932d
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_5.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_06.png b/res/drawable-hdpi/lock_anim_6.png
similarity index 100%
rename from res/drawable-hdpi/lock_anim_06.png
rename to res/drawable-hdpi/lock_anim_6.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_7.png b/res/drawable-hdpi/lock_anim_7.png
new file mode 100644
index 0000000..f06c9d6
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_7.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_08.png b/res/drawable-hdpi/lock_anim_8.png
similarity index 100%
rename from res/drawable-hdpi/lock_anim_08.png
rename to res/drawable-hdpi/lock_anim_8.png
Binary files differ
diff --git a/res/drawable-hdpi/lock_anim_9.png b/res/drawable-hdpi/lock_anim_9.png
new file mode 100644
index 0000000..551bafa
--- /dev/null
+++ b/res/drawable-hdpi/lock_anim_9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_display.png b/res/drawable-mdpi/ic_settings_display.png
index b676b85..85af393 100644
--- a/res/drawable-mdpi/ic_settings_display.png
+++ b/res/drawable-mdpi/ic_settings_display.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_sound_display.png b/res/drawable-mdpi/ic_settings_sound.png
similarity index 100%
rename from res/drawable-mdpi/ic_settings_sound_display.png
rename to res/drawable-mdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_0.png b/res/drawable-mdpi/lock_anim_0.png
new file mode 100644
index 0000000..afdda8b
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_0.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_1.png b/res/drawable-mdpi/lock_anim_1.png
new file mode 100644
index 0000000..6cae8e5
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_1.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_11.png b/res/drawable-mdpi/lock_anim_11.png
new file mode 100644
index 0000000..35db815
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_11.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_13.png b/res/drawable-mdpi/lock_anim_13.png
new file mode 100644
index 0000000..d0b8cf0
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_13.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_2.png b/res/drawable-mdpi/lock_anim_2.png
new file mode 100644
index 0000000..0542b1d
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_2.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_3.png b/res/drawable-mdpi/lock_anim_3.png
new file mode 100644
index 0000000..7e2ba9a
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_3.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_4.png b/res/drawable-mdpi/lock_anim_4.png
new file mode 100644
index 0000000..a3ca629
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_4.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_5.png b/res/drawable-mdpi/lock_anim_5.png
new file mode 100644
index 0000000..17e3839
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_5.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_6.png b/res/drawable-mdpi/lock_anim_6.png
new file mode 100644
index 0000000..90205a6
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_6.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_7.png b/res/drawable-mdpi/lock_anim_7.png
new file mode 100644
index 0000000..1d94a47
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_7.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_8.png b/res/drawable-mdpi/lock_anim_8.png
new file mode 100644
index 0000000..af7cd28
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_8.png
Binary files differ
diff --git a/res/drawable-mdpi/lock_anim_9.png b/res/drawable-mdpi/lock_anim_9.png
new file mode 100644
index 0000000..d401624
--- /dev/null
+++ b/res/drawable-mdpi/lock_anim_9.png
Binary files differ
diff --git a/res/drawable/lock_anim.xml b/res/drawable/lock_anim.xml
index ca1f9d8..8ec31a6 100644
--- a/res/drawable/lock_anim.xml
+++ b/res/drawable/lock_anim.xml
@@ -1,30 +1,37 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-/*
+/* 
 ** Copyright 2008, 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
+** 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
+**     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
+** 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.
 */
 -->
 <animation-list
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:oneshot="false">
-    <item android:drawable="@drawable/lock_anim_00" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_02" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_04" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_06" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_08" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_10" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_12" android:duration="400" />
-    <item android:drawable="@drawable/lock_anim_14" android:duration="400" />
+    <item android:drawable="@drawable/lock_anim_0" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_1" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_2" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_3" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_4" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_5" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_6" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_7" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_8" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_9" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_10" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_11" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_12" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_13" android:duration="200" />
+    <item android:drawable="@drawable/lock_anim_14" android:duration="200" />
 </animation-list>
diff --git a/res/layout-land/choose_lock_pattern.xml b/res/layout-land/choose_lock_pattern.xml
index 9d623f6..9af76d1 100644
--- a/res/layout-land/choose_lock_pattern.xml
+++ b/res/layout-land/choose_lock_pattern.xml
@@ -18,28 +18,28 @@
         xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/topLayout"
     android:orientation="horizontal"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
     android:background="@color/black">
 
     <!-- left side: instructions and messages -->
     <LinearLayout
             android:orientation="vertical"
             android:layout_width="0dip"
-            android:layout_height="fill_parent"
+            android:layout_height="match_parent"
             android:layout_weight="1.0"
             >
 
         <!-- header message -->
         <TextView android:id="@+id/headerText"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:gravity="center"
                   android:textSize="18sp"/>
 
         <!-- footer can show a message, or confirm / restart buttons -->
         <RelativeLayout
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="0dip"
                 android:layout_weight="1.0">
 
@@ -81,7 +81,7 @@
     <View
          android:background="@*android:drawable/code_lock_left"
          android:layout_width="2dip"
-         android:layout_height="fill_parent" />
+         android:layout_height="match_parent" />
     <!-- right side: lock pattern -->
     <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
          android:layout_width="wrap_content"
diff --git a/res/layout-land/choose_lock_pin.xml b/res/layout-land/choose_lock_pin.xml
new file mode 100644
index 0000000..cdc75d3
--- /dev/null
+++ b/res/layout-land/choose_lock_pin.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2008, 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.
+*/
+-->
+
+<!-- TODO: think about moving to frameworks/base/res -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="horizontal"
+    android:background="@android:color/background_dark">
+
+    <LinearLayout android:id="@+id/topDisplayGroup"
+        android:layout_width="0dip"
+        android:layout_weight="1"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <!-- password entry -->
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginRight="6dip"
+            android:layout_marginLeft="6dip"
+            android:gravity="center_vertical"
+            android:background="@android:drawable/edit_text">
+
+            <!-- displays dots as user enters pin -->
+            <TextView android:id="@+id/pinDisplay"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:maxLines="1"
+                android:textAppearance="?android:attr/textAppearanceLargeInverse"
+                android:textStyle="bold"
+                android:inputType="textPassword"
+            />
+
+            <ImageButton android:id="@+id/backspace"
+                android:src="@android:drawable/ic_input_delete"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="-3dip"
+                android:layout_marginBottom="-3dip"
+            />
+        </LinearLayout>
+
+        <!-- header text ('Enter Pin') -->
+        <TextView android:id="@+id/headerText"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:lines="2"
+            android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+    </LinearLayout>
+
+    <include
+        android:id="@+id/keyPad"
+        layout="@layout/twelve_key_entry"
+        android:layout_width="0dip"
+        android:layout_weight="1"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/topDisplayGroup"
+        android:layout_marginTop="10dip"
+    />
+
+</LinearLayout>
diff --git a/res/layout-land/confirm_lock_pattern.xml b/res/layout-land/confirm_lock_pattern.xml
index 6decb14..2da2b9a 100644
--- a/res/layout-land/confirm_lock_pattern.xml
+++ b/res/layout-land/confirm_lock_pattern.xml
@@ -18,21 +18,21 @@
         xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/topLayout"
     android:orientation="horizontal"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
     android:background="@color/black">
 
     <!-- left side: instructions and messages -->
     <LinearLayout
             android:orientation="vertical"
             android:layout_width="0dip"
-            android:layout_height="fill_parent"
+            android:layout_height="match_parent"
             android:layout_weight="1.0"
             >
 
         <!-- header message -->
         <TextView android:id="@+id/headerText"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:gravity="center"
                   android:textSize="18sp"/>
@@ -40,13 +40,13 @@
         <!-- fill space between header and button below -->
         <View
             android:layout_weight="1.0"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             />
 
         <!-- footer message -->
         <TextView android:id="@+id/footerText"
-                  android:layout_width="fill_parent"
+                  android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:gravity="center"
                   android:textSize="14sp"/>
@@ -55,7 +55,7 @@
     <View
          android:background="@*android:drawable/code_lock_left"
          android:layout_width="2dip"
-         android:layout_height="fill_parent" />
+         android:layout_height="match_parent" />
     <!-- right side: lock pattern -->
     <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
          android:layout_width="wrap_content"
diff --git a/res/layout-land/confirm_lock_pin.xml b/res/layout-land/confirm_lock_pin.xml
new file mode 100644
index 0000000..beff4a1
--- /dev/null
+++ b/res/layout-land/confirm_lock_pin.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2008, 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.
+*/
+-->
+
+<!-- TODO: think about moving to frameworks/base/res -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical"
+    android:background="@android:color/background_dark"
+    android:gravity="center_horizontal">
+
+    <LinearLayout android:id="@+id/topDisplayGroup"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <!-- header text ('Enter Pin') -->
+        <TextView android:id="@+id/headerText"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:lines="2"
+            android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+        <!-- password entry -->
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginRight="6dip"
+            android:layout_marginLeft="6dip"
+            android:gravity="center_vertical"
+            android:background="@android:drawable/edit_text">
+
+            <!-- displays dots as user enters pin -->
+            <TextView android:id="@+id/pinDisplay"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:maxLines="1"
+                android:textAppearance="?android:attr/textAppearanceLargeInverse"
+                android:textStyle="bold"
+                android:inputType="textPassword"
+            />
+
+            <ImageButton android:id="@+id/backspace"
+                android:src="@android:drawable/ic_input_delete"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="-3dip"
+                android:layout_marginBottom="-3dip"
+            />
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <include
+        android:id="@+id/keyPad"
+        layout="@layout/twelve_key_entry"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/topDisplayGroup"
+        android:layout_marginTop="10dip"
+    />
+
+</LinearLayout>
diff --git a/res/layout/apn_preference_layout.xml b/res/layout/apn_preference_layout.xml
index 2a7c2e9..1694a93 100644
--- a/res/layout/apn_preference_layout.xml
+++ b/res/layout/apn_preference_layout.xml
@@ -16,7 +16,7 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical">
diff --git a/res/layout/band_mode.xml b/res/layout/band_mode.xml
index e920af0..ddbc7ae 100644
--- a/res/layout/band_mode.xml
+++ b/res/layout/band_mode.xml
@@ -18,12 +18,12 @@
               android:orientation="vertical"
               android:padding="4dip"
               android:gravity="center_horizontal"
-              android:layout_width="fill_parent"
-              android:layout_height="fill_parent">
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
 
     <ListView android:id="@+id/band"
-              android:layout_width="fill_parent"
-              android:layout_height="fill_parent"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
               android:textSize="7sp">
     </ListView>
 
diff --git a/res/layout/battery_history.xml b/res/layout/battery_history.xml
index 5421c40..b46d97b 100644
--- a/res/layout/battery_history.xml
+++ b/res/layout/battery_history.xml
@@ -2,44 +2,44 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/topLayout"
     android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
 
     <TextView
         android:id="@+id/title"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content" />
 
     <LinearLayout
         android:id="@+id/graphLayout"
         android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent" >
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
 
         <Spinner
             android:id="@+id/typeSpinner"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:entries="@array/battery_history_type_spinner" />
 
         <Spinner
             android:id="@+id/whichSpinner"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:entries="@array/battery_history_which_spinner" />
 
         <ScrollView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content" >
 
         <LinearLayout
             android:orientation="vertical"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content" >
             
         <TextView
             android:id="@+id/messageText"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:gravity="center_horizontal"
             android:textSize="17dp"
@@ -47,7 +47,7 @@
 
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button0"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -56,7 +56,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button1"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -65,7 +65,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button2"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -74,7 +74,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button3"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -83,7 +83,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button4"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -92,7 +92,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button5"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -101,7 +101,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button6"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -110,7 +110,7 @@
     
         <com.android.settings.battery_history.GraphableButton
             android:id="@+id/button7"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginLeft="4dp"
             android:layout_marginRight="4dp"
@@ -126,15 +126,15 @@
         android:id="@+id/textLayout"
         android:visibility="gone"
         android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent" >
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
 
         <ScrollView
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent" >
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" >
             <TextView
                 android:id="@+id/detailsText"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:textSize="17dp"
                 android:layout_height="1000dp"/>
         </ScrollView>
diff --git a/res/layout/bluetooth.xml b/res/layout/bluetooth.xml
index 530cbbe..a4ac1ca 100644
--- a/res/layout/bluetooth.xml
+++ b/res/layout/bluetooth.xml
@@ -19,32 +19,32 @@
 -->
 <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"
     android:paddingLeft="2dip"
     android:paddingRight="2dip">
 
     <Button android:id="@+id/enable"
         android:textStyle="bold"
         android:text="@string/bluetooth_enable_text"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
 
     <Button android:id="@+id/scan"
         android:textStyle="bold"
         android:text="@string/bluetooth_scan_text"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
 
     <Button android:id="@+id/settings"
         android:textStyle="bold"
         android:text="@string/bluetooth_settings_text"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
 
     <ListView android:id="@android:id/list"
-    	android:layout_width="fill_parent"
-    	android:layout_height="fill_parent"
+    	android:layout_width="match_parent"
+    	android:layout_height="match_parent"
     	android:drawSelectorOnTop="false">
     </ListView>
     
diff --git a/res/layout/bluetooth_device_info.xml b/res/layout/bluetooth_device_info.xml
index e589103..4178734 100644
--- a/res/layout/bluetooth_device_info.xml
+++ b/res/layout/bluetooth_device_info.xml
@@ -16,20 +16,20 @@
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/scroll_content" 
-	android:layout_width="fill_parent" 
-	android:layout_height="fill_parent">
+	android:layout_width="match_parent" 
+	android:layout_height="match_parent">
     <LinearLayout
         android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/bluetooth_device_info_alias" />
 
         <TextView android:id="@+id/deviceAlias"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/bluetooth_device_info_no_alias" />
 
@@ -49,12 +49,12 @@
             android:text="@string/bluetooth_device_info_sdp" />
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/bluetooth_device_info" />
 
         <TextView android:id="@+id/deviceInfo"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/bluetooth_device_info_deviceInfo_text" />
      </LinearLayout>        
diff --git a/res/layout/bluetooth_discoverable.xml b/res/layout/bluetooth_discoverable.xml
index 3673774..fb65453 100644
--- a/res/layout/bluetooth_discoverable.xml
+++ b/res/layout/bluetooth_discoverable.xml
@@ -19,12 +19,12 @@
 
 <ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="fill_parent"
-    android:layout_width="fill_parent">
+    android:layout_height="match_parent"
+    android:layout_width="match_parent">
 
     <TextView
         android:id="@+id/message"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingLeft="20dip"
         android:paddingRight="20dip"
diff --git a/res/layout/bluetooth_pin_entry.xml b/res/layout/bluetooth_pin_entry.xml
index bcb6f16..16b75fc 100644
--- a/res/layout/bluetooth_pin_entry.xml
+++ b/res/layout/bluetooth_pin_entry.xml
@@ -19,18 +19,18 @@
 
 <ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="fill_parent"
-    android:layout_width="fill_parent">
+    android:layout_height="match_parent"
+    android:layout_width="match_parent">
 
     <LinearLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_height="fill_parent"
-        android:layout_width="fill_parent"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
         android:orientation="vertical">
 
         <TextView
             android:id="@+id/message"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginLeft="20dip"
             android:layout_marginRight="20dip"
@@ -40,7 +40,7 @@
         <EditText
             android:id="@+id/text"
             android:layout_height="wrap_content"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_marginTop="20dip"
             android:layout_marginLeft="20dip"
             android:layout_marginRight="20dip"
diff --git a/res/layout/bookmark_picker_item.xml b/res/layout/bookmark_picker_item.xml
index fd764ea..a0d71c6 100644
--- a/res/layout/bookmark_picker_item.xml
+++ b/res/layout/bookmark_picker_item.xml
@@ -17,7 +17,7 @@
 */
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:paddingLeft="2dip"
@@ -29,7 +29,7 @@
         android:scaleType="fitCenter" />
 
     <TextView android:id="@+id/title"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:textAppearance="?android:attr/textAppearanceLarge"
         android:paddingLeft="6dip" />
diff --git a/res/layout/choose_lock_password.xml b/res/layout/choose_lock_password.xml
new file mode 100644
index 0000000..213f9a4
--- /dev/null
+++ b/res/layout/choose_lock_password.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2008, 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.
+*/
+-->
+
+<!-- TODO: think about moving to frameworks/base/res -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical"
+    android:background="@android:color/background_dark"
+    android:gravity="center_horizontal">
+
+    <LinearLayout android:id="@+id/topDisplayGroup"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <!-- header text ('Enter Pin') -->
+        <TextView android:id="@+id/headerText"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:lines="2"
+            android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+        <!-- password entry -->
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginRight="6dip"
+            android:layout_marginLeft="6dip"
+            android:gravity="center_vertical"
+            android:background="@android:drawable/edit_text">
+
+            <!-- displays dots as user enters pin -->
+            <TextView android:id="@+id/pinDisplay"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:maxLines="1"
+                android:textAppearance="?android:attr/textAppearanceLargeInverse"
+                android:textStyle="bold"
+                android:inputType="textPassword"
+            />
+
+            <ImageButton android:id="@+id/backspace"
+                android:src="@android:drawable/ic_input_delete"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="-3dip"
+                android:layout_marginBottom="-3dip"
+            />
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <View
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+    />
+
+</LinearLayout>
diff --git a/res/layout/choose_lock_pattern.xml b/res/layout/choose_lock_pattern.xml
index 78ab8b4..97c647f 100644
--- a/res/layout/choose_lock_pattern.xml
+++ b/res/layout/choose_lock_pattern.xml
@@ -18,18 +18,18 @@
     android:id="@+id/topLayout"
     android:orientation="vertical"
     android:layout_width="wrap_content"
-    android:layout_height="fill_parent"
+    android:layout_height="match_parent"
     android:background="@color/black">
 
     <!-- takes up all space above button bar at bottom -->
     <LinearLayout
         android:orientation="vertical"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1">
 
         <TextView android:id="@+id/headerText"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:gravity="center"
@@ -37,7 +37,7 @@
 
         <View
              android:background="@*android:drawable/code_lock_top"
-             android:layout_width="fill_parent"
+             android:layout_width="match_parent"
              android:layout_height="2dip" />
         <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
              android:layout_width="wrap_content"
@@ -46,11 +46,11 @@
         <!-- bottom line looks bad when button bar is their too, omit in this case -->
         <!--View
              android:background="@*android:drawable/code_lock_bottom"
-             android:layout_width="fill_parent"
+             android:layout_width="match_parent"
              android:layout_height="8dip" /-->
 
         <TextView android:id="@+id/footerText"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:gravity="center"
@@ -61,7 +61,7 @@
 
     <LinearLayout style="@android:style/ButtonBar"
         android:orientation="horizontal"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
         <Button android:id="@+id/footerLeftButton"
diff --git a/res/layout/choose_lock_pattern_example.xml b/res/layout/choose_lock_pattern_example.xml
index d1e816c..62a5364 100644
--- a/res/layout/choose_lock_pattern_example.xml
+++ b/res/layout/choose_lock_pattern_example.xml
@@ -16,22 +16,22 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
-    android:layout_height="fill_parent"
-    android:layout_width="fill_parent">
+    android:layout_height="match_parent"
+    android:layout_width="match_parent">
     
     <ScrollView 
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:layout_weight="1">
         
         <LinearLayout
             android:orientation="vertical"
-            android:layout_height="fill_parent"
-            android:layout_width="fill_parent"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
             android:padding="5dip">
             
             <TextView
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/lock_example_title"
                 android:gravity="center_horizontal"
@@ -48,7 +48,7 @@
             />
             
             <TextView
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="5dip"
                 android:text="@string/lock_example_message"
@@ -62,7 +62,7 @@
     
     <LinearLayout style="@android:style/ButtonBar"
         android:orientation="horizontal"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
         
         <Button android:id="@+id/skip_button"
diff --git a/res/layout/choose_lock_pattern_tutorial.xml b/res/layout/choose_lock_pattern_tutorial.xml
index 8eadc01..3032c05 100644
--- a/res/layout/choose_lock_pattern_tutorial.xml
+++ b/res/layout/choose_lock_pattern_tutorial.xml
@@ -16,22 +16,22 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
-    android:layout_height="fill_parent"
-    android:layout_width="fill_parent">
+    android:layout_height="match_parent"
+    android:layout_width="match_parent">
     
     <ScrollView 
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1">
         
         <LinearLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical"
             android:padding="5dip">
             
             <TextView
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:gravity="center_horizontal"
                 android:text="@string/lock_title"
@@ -41,7 +41,7 @@
             />
         
             <TextView 
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:layout_marginTop="10dip"
@@ -54,7 +54,7 @@
     
     <LinearLayout style="@android:style/ButtonBar"
         android:orientation="horizontal"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
         <Button android:id="@+id/skip_button"
diff --git a/res/layout/choose_lock_pin.xml b/res/layout/choose_lock_pin.xml
new file mode 100644
index 0000000..beff4a1
--- /dev/null
+++ b/res/layout/choose_lock_pin.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2008, 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.
+*/
+-->
+
+<!-- TODO: think about moving to frameworks/base/res -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical"
+    android:background="@android:color/background_dark"
+    android:gravity="center_horizontal">
+
+    <LinearLayout android:id="@+id/topDisplayGroup"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <!-- header text ('Enter Pin') -->
+        <TextView android:id="@+id/headerText"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:lines="2"
+            android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+        <!-- password entry -->
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginRight="6dip"
+            android:layout_marginLeft="6dip"
+            android:gravity="center_vertical"
+            android:background="@android:drawable/edit_text">
+
+            <!-- displays dots as user enters pin -->
+            <TextView android:id="@+id/pinDisplay"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:maxLines="1"
+                android:textAppearance="?android:attr/textAppearanceLargeInverse"
+                android:textStyle="bold"
+                android:inputType="textPassword"
+            />
+
+            <ImageButton android:id="@+id/backspace"
+                android:src="@android:drawable/ic_input_delete"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="-3dip"
+                android:layout_marginBottom="-3dip"
+            />
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <include
+        android:id="@+id/keyPad"
+        layout="@layout/twelve_key_entry"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/topDisplayGroup"
+        android:layout_marginTop="10dip"
+    />
+
+</LinearLayout>
diff --git a/res/layout/compute_sizes.xml b/res/layout/compute_sizes.xml
index b32ba58..88dbfd1 100755
--- a/res/layout/compute_sizes.xml
+++ b/res/layout/compute_sizes.xml
@@ -16,15 +16,15 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
     <ListView 
         android:id="@android:id/list"
         android:drawSelectorOnTop="false"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content" />
     <TextView android:id="@android:id/empty"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingLeft="20dip"
         android:paddingTop="5dip"
diff --git a/res/layout/confirm_lock_pattern.xml b/res/layout/confirm_lock_pattern.xml
index 52cf24a..01ef5b1 100644
--- a/res/layout/confirm_lock_pattern.xml
+++ b/res/layout/confirm_lock_pattern.xml
@@ -18,11 +18,11 @@
     android:id="@+id/topLayout"
     android:orientation="vertical"
     android:layout_width="wrap_content"
-    android:layout_height="fill_parent"
+    android:layout_height="match_parent"
     android:background="@color/black">
 
     <TextView android:id="@+id/headerText"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1.0"
         android:gravity="center"
@@ -30,18 +30,18 @@
 
     <View
          android:background="@*android:drawable/code_lock_top"
-         android:layout_width="fill_parent"
+         android:layout_width="match_parent"
          android:layout_height="2dip" />
     <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" />
     <View
          android:background="@*android:drawable/code_lock_bottom"
-         android:layout_width="fill_parent"
+         android:layout_width="match_parent"
          android:layout_height="8dip" />
 
     <TextView android:id="@+id/footerText"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1.0"
         android:gravity="center"
diff --git a/res/layout/confirm_lock_pin.xml b/res/layout/confirm_lock_pin.xml
new file mode 100644
index 0000000..beff4a1
--- /dev/null
+++ b/res/layout/confirm_lock_pin.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2008, 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.
+*/
+-->
+
+<!-- TODO: think about moving to frameworks/base/res -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical"
+    android:background="@android:color/background_dark"
+    android:gravity="center_horizontal">
+
+    <LinearLayout android:id="@+id/topDisplayGroup"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <!-- header text ('Enter Pin') -->
+        <TextView android:id="@+id/headerText"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:lines="2"
+            android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+        <!-- password entry -->
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginRight="6dip"
+            android:layout_marginLeft="6dip"
+            android:gravity="center_vertical"
+            android:background="@android:drawable/edit_text">
+
+            <!-- displays dots as user enters pin -->
+            <TextView android:id="@+id/pinDisplay"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:maxLines="1"
+                android:textAppearance="?android:attr/textAppearanceLargeInverse"
+                android:textStyle="bold"
+                android:inputType="textPassword"
+            />
+
+            <ImageButton android:id="@+id/backspace"
+                android:src="@android:drawable/ic_input_delete"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="-3dip"
+                android:layout_marginBottom="-3dip"
+            />
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <include
+        android:id="@+id/keyPad"
+        layout="@layout/twelve_key_entry"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/topDisplayGroup"
+        android:layout_marginTop="10dip"
+    />
+
+</LinearLayout>
diff --git a/res/layout/credentials_password_dialog.xml b/res/layout/credentials_password_dialog.xml
index c23cc68..440a107 100644
--- a/res/layout/credentials_password_dialog.xml
+++ b/res/layout/credentials_password_dialog.xml
@@ -15,17 +15,17 @@
 -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
     <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"
             android:padding="15dip">
 
         <TextView android:id="@+id/hint"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:textSize="@dimen/vpn_connect_normal_text_size"
                 android:text="@string/credentials_first_time_hint"
@@ -33,38 +33,38 @@
                 android:visibility="gone"/>
 
         <TextView android:id="@+id/error"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:textColor="@color/red"
                 android:textStyle="bold"
                 android:visibility="gone"/>
 
         <TextView android:id="@+id/old_password_prompt"
-        	android:layout_width="fill_parent"
+        	android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/credentials_old_password"
                 android:visibility="gone"/>
         <EditText android:id="@+id/old_password"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:password="True"
                 android:singleLine="True"
                 android:visibility="gone"/>
 
-        <TextView android:layout_width="fill_parent"
+        <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/credentials_new_password" />
         <EditText android:id="@+id/new_password"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:password="True"
                 android:singleLine="True"/>
 
-        <TextView android:layout_width="fill_parent"
+        <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/credentials_confirm_password" />
         <EditText android:id="@+id/confirm_password"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:password="True"
                 android:singleLine="True"/>
diff --git a/res/layout/credentials_unlock_dialog.xml b/res/layout/credentials_unlock_dialog.xml
index 2ba2ace..a538807 100644
--- a/res/layout/credentials_unlock_dialog.xml
+++ b/res/layout/credentials_unlock_dialog.xml
@@ -15,17 +15,17 @@
 -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
     <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"
             android:padding="15dip">
 
         <TextView android:id="@+id/hint"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:textSize="@dimen/vpn_connect_normal_text_size"
                 android:text="@string/credentials_unlock_hint"
@@ -33,14 +33,14 @@
                 android:visibility="gone"/>
 
         <TextView android:id="@+id/error"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:textColor="@color/red"
                 android:textStyle="bold"
                 android:visibility="gone"/>
 
         <EditText android:id="@+id/old_password"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:password="True"
                 android:singleLine="True"/>
diff --git a/res/layout/date_time_settings_setupwizard.xml b/res/layout/date_time_settings_setupwizard.xml
index fc6f5e2..930e199 100644
--- a/res/layout/date_time_settings_setupwizard.xml
+++ b/res/layout/date_time_settings_setupwizard.xml
@@ -15,20 +15,20 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_height="fill_parent"
-        android:layout_width="fill_parent"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
         android:orientation="vertical">
      
     <LinearLayout
         android:orientation="vertical"
         android:layout_height="0dip"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_weight="1"
         android:gravity="left">
         
         <ListView android:id="@android:id/list"
-            android:layout_width="fill_parent" 
-            android:layout_height="fill_parent"
+            android:layout_width="match_parent" 
+            android:layout_height="match_parent"
             android:drawSelectorOnTop="false"
             android:paddingTop="2dip"
         />
@@ -37,7 +37,7 @@
     
     <RelativeLayout
         android:layout_height="wrap_content"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:background="@android:drawable/bottom_bar">
         
         <Button android:id="@+id/next_button"
diff --git a/res/layout/device_admin_add.xml b/res/layout/device_admin_add.xml
new file mode 100644
index 0000000..3ff190b
--- /dev/null
+++ b/res/layout/device_admin_add.xml
@@ -0,0 +1,108 @@
+<?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:id="@+id/active_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:orientation="vertical">
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:orientation="vertical">
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:background="@*android:drawable/title_bar_medium">
+                <TextView android:id="@+id/title"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:gravity="center"
+                    android:textAppearance="?android:attr/textAppearanceLarge"
+                    android:textColor="?android:attr/textColorPrimary"
+                    android:shadowColor="?android:attr/colorBackground"
+                    android:shadowRadius="2" />
+            </LinearLayout>
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+                <ImageView android:id="@+id/admin_icon"
+                    android:layout_width="@android:dimen/app_icon_size"
+                    android:layout_height="@android:dimen/app_icon_size"
+                    android:layout_marginLeft="5dip"
+                    android:layout_marginRight="11dip"
+                    android:layout_gravity="center_vertical"
+                    android:scaleType="fitCenter"/>
+                <TextView android:id="@+id/admin_name"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:layout_marginBottom="2dip"
+                    android:layout_gravity="center_vertical"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textStyle="bold"
+                    android:singleLine="true"
+                    android:ellipsize="marquee" />
+            </LinearLayout>
+            <TextView android:id="@+id/admin_warning"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:padding="10dip" />
+            <LinearLayout android:id="@+id/admin_policies"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:paddingLeft="16dip"
+                android:paddingRight="12dip" />
+            <TextView android:id="@+id/admin_description"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:padding="10dip" />
+            <TextView android:id="@+id/add_msg"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:padding="10dip" />
+        </LinearLayout>
+    </ScrollView>
+    <LinearLayout style="@android:style/ButtonBar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <View
+           android:layout_width="0dip"
+           android:layout_height="0dip"
+           android:layout_weight="1" />
+        <Button android:id="@+id/action_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1" />
+        <View
+           android:layout_width="0dip"
+           android:layout_height="0dip"
+           android:layout_weight="1" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/device_admin_item.xml b/res/layout/device_admin_item.xml
new file mode 100644
index 0000000..49cbc61
--- /dev/null
+++ b/res/layout/device_admin_item.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:orientation="vertical"
+    android:paddingRight="6dip"
+    android:paddingLeft="6dip"
+    android:gravity="fill" >
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+    
+        <ImageView android:id="@+id/icon"
+            android:layout_width="@android:dimen/app_icon_size"
+            android:layout_height="@android:dimen/app_icon_size"
+            android:layout_marginLeft="5dip"
+            android:layout_marginRight="11dip"
+            android:layout_gravity="center_vertical"
+            android:scaleType="fitCenter"/>
+    
+        <TextView android:id="@+id/name"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:layout_gravity="center_vertical"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textStyle="bold"
+            android:singleLine="true"
+            android:ellipsize="marquee"
+            android:layout_marginBottom="2dip" />
+            
+        <CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
+            android:id="@+id/checkbox" 
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:focusable="false"
+            android:clickable="false" />
+    </LinearLayout>
+    
+    <TextView android:id="@+id/description"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:singleLine="true"
+        android:ellipsize="end" />
+            
+</LinearLayout>
diff --git a/res/layout/device_admin_settings.xml b/res/layout/device_admin_settings.xml
new file mode 100644
index 0000000..eaf42fe
--- /dev/null
+++ b/res/layout/device_admin_settings.xml
@@ -0,0 +1,54 @@
+<?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:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:background="@*android:drawable/title_bar_medium">
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:text="@string/select_device_admin_msg"
+            android:gravity="center"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textColor="?android:attr/textColorPrimary"
+            android:shadowColor="?android:attr/colorBackground"
+            android:shadowRadius="2" />
+    </LinearLayout>
+    <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="0px"
+            android:layout_weight="1"
+            android:paddingTop="10dip"
+            android:paddingBottom="10dip">
+        <ListView android:id="@android:id/list"
+                android:layout_width="match_parent" 
+                android:layout_height="match_parent"
+                android:drawSelectorOnTop="false"
+                android:fastScrollEnabled="true" />
+        <TextView android:id="@android:id/empty"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center"
+                android:text="@string/no_device_admins"
+                android:textAppearance="?android:attr/textAppearanceLarge" />
+    </FrameLayout>
+</LinearLayout>
diff --git a/res/layout/dialog_edittext.xml b/res/layout/dialog_edittext.xml
index 0dcf673..6b849ac 100644
--- a/res/layout/dialog_edittext.xml
+++ b/res/layout/dialog_edittext.xml
@@ -22,7 +22,7 @@
     
     <EditText 
         android:id="@+id/edittext"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:maxLength="50"
     />
diff --git a/res/layout/display.xml b/res/layout/display.xml
index 0049025..f35730b 100644
--- a/res/layout/display.xml
+++ b/res/layout/display.xml
@@ -23,22 +23,22 @@
         android:orientation="vertical">
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/display_font_size_label" />
 
         <Spinner android:id="@+id/fontSize"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content">
         </Spinner>
 
         <TextView
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/display_preview_label" />
 
         <TextView android:id="@+id/preview"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content" />
 
         <Button android:id="@+id/save"
diff --git a/res/layout/installed_app_details.xml b/res/layout/installed_app_details.xml
index 2810604..8da1d76 100644
--- a/res/layout/installed_app_details.xml
+++ b/res/layout/installed_app_details.xml
@@ -18,12 +18,12 @@
 -->
 <ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
     <LinearLayout
         android:id="@+id/all_details"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:paddingRight="6dip"
         android:paddingTop="5dip"
         android:paddingBottom="5dip"
@@ -31,14 +31,14 @@
 
         <!-- App snippet -->
         <RelativeLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical">
 
             <LinearLayout
                 android:orientation="vertical"
                 android:layout_alignParentLeft="true"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:paddingTop="6dip"
                 android:paddingBottom="6dip"
@@ -79,12 +79,12 @@
             android:text="@string/storage_label" />
 
         <LinearLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingLeft="6dip"
             android:orientation="vertical">
             <LinearLayout
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
                 android:baselineAligned="true"
@@ -121,7 +121,7 @@
 
             </LinearLayout>
             <LinearLayout
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
                 android:baselineAligned="true"
@@ -158,7 +158,7 @@
             </LinearLayout>
             <LinearLayout
                 android:id="@+id/info_size"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
                 android:baselineAligned="true"
@@ -195,7 +195,7 @@
             </LinearLayout>
             <!-- Manage space, Clear data/Uninstall buttons  -->
             <LinearLayout
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:gravity="bottom"
                 android:orientation="horizontal">
@@ -229,7 +229,7 @@
         <!-- Clear cache section -->
         <RelativeLayout
             android:id="@+id/cache_panel"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content" >
             <TextView
                 android:id="@+id/cache_header"
@@ -237,7 +237,7 @@
                 android:text="@string/cache_header_label" />
             <LinearLayout
                 android:id="@+id/cache_size"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
                 android:baselineAligned="true"
@@ -287,13 +287,13 @@
             android:text="@string/auto_launch_label" />
 
         <RelativeLayout 
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical">
             <TextView android:id="@+id/auto_launch"
                 android:textAppearance="?android:attr/textAppearanceSmall"
                 android:layout_alignParentLeft="true"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:paddingTop="6dip"
                 android:paddingRight="6dip"
@@ -313,7 +313,7 @@
             android:text="@string/controls_label" />
 
         <RelativeLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical">
             <Button android:id="@+id/force_stop_button"
@@ -329,8 +329,8 @@
         <!-- Permissions section -->
         <LinearLayout
             android:id="@+id/permissions_section"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
             android:orientation="vertical">
             <TextView
                 style="?android:attr/listSeparatorTextViewStyle"
@@ -341,12 +341,12 @@
                 android:paddingTop="6dip"
                 android:paddingLeft="6dip"
                 android:paddingBottom="6dip"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content" />
             <LinearLayout
                 android:id="@+id/security_settings_list"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
                 android:orientation="vertical"/>
         </LinearLayout>
     </LinearLayout>
diff --git a/res/layout/intent_sender.xml b/res/layout/intent_sender.xml
index 07fe67d..8a85bf8 100644
--- a/res/layout/intent_sender.xml
+++ b/res/layout/intent_sender.xml
@@ -21,13 +21,13 @@
     android:paddingLeft="6dip"
     android:paddingRight="6dip"
     android:paddingBottom="3dip"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
 
     <LinearLayout
         android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
 
         <TextView
                 android:textStyle="bold"
diff --git a/res/layout/list_content_with_empty_view.xml b/res/layout/list_content_with_empty_view.xml
index 324d23f..1d4dcdc 100644
--- a/res/layout/list_content_with_empty_view.xml
+++ b/res/layout/list_content_with_empty_view.xml
@@ -16,18 +16,18 @@
 
  
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent" >
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
 
     <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list"
-        android:layout_width="fill_parent" 
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent" 
+        android:layout_height="match_parent"
         android:drawSelectorOnTop="false"
         />
 
     <TextView android:id="@+id/empty"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:padding="5dip"
         android:gravity="center"
         android:visibility="gone" />
diff --git a/res/layout/locale_picker.xml b/res/layout/locale_picker.xml
index 476293f..cc38278 100644
--- a/res/layout/locale_picker.xml
+++ b/res/layout/locale_picker.xml
@@ -16,12 +16,12 @@
 
 <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">
 
     <ListView android:id="@android:id/list"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:drawSelectorOnTop="false"
     />
 
diff --git a/res/layout/locale_picker_in_setupwizard.xml b/res/layout/locale_picker_in_setupwizard.xml
index 184250d..d816f47 100644
--- a/res/layout/locale_picker_in_setupwizard.xml
+++ b/res/layout/locale_picker_in_setupwizard.xml
@@ -16,8 +16,8 @@
 
 <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">
     
     <TextView
         android:layout_width="wrap_content"
@@ -29,15 +29,15 @@
     />
     
     <View
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="1dip"
         android:layout_marginTop="8dip"
         android:background="@android:drawable/divider_horizontal_dark"
     />
 
     <ListView android:id="@android:id/list"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:drawSelectorOnTop="false"
     />
 
diff --git a/res/layout/locale_picker_item.xml b/res/layout/locale_picker_item.xml
index caa6fb5..091419f 100644
--- a/res/layout/locale_picker_item.xml
+++ b/res/layout/locale_picker_item.xml
@@ -17,7 +17,7 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal"
     android:layout_height="wrap_content"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:gravity="center_vertical"
     android:minHeight="?android:attr/listPreferredItemHeight"    
     android:padding="5dip">
diff --git a/res/layout/manage_applications_item.xml b/res/layout/manage_applications_item.xml
index ecefcf5..cdf4c9d 100755
--- a/res/layout/manage_applications_item.xml
+++ b/res/layout/manage_applications_item.xml
@@ -18,7 +18,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:orientation="horizontal"
@@ -38,7 +38,7 @@
 
     <LinearLayout
         android:orientation="vertical"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content" >
         <TextView android:id="@+id/app_name"
             android:layout_width="wrap_content"
diff --git a/res/layout/pick_item.xml b/res/layout/pick_item.xml
index f276511..62fc4f4 100755
--- a/res/layout/pick_item.xml
+++ b/res/layout/pick_item.xml
@@ -15,7 +15,7 @@
 -->
 
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:textAppearance="?android:attr/textAppearanceLargeInverse"
diff --git a/res/layout/power_usage_action_item.xml b/res/layout/power_usage_action_item.xml
index 7b81ec1..a53c551 100644
--- a/res/layout/power_usage_action_item.xml
+++ b/res/layout/power_usage_action_item.xml
@@ -15,7 +15,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
@@ -25,14 +25,14 @@
     android:paddingRight="?android:attr/scrollbarSize">
 
     <TextView android:id="@+id/summary"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="2dip"
             android:ellipsize="marquee"
             android:textAppearance="?android:attr/textAppearanceMedium"/>
 
     <LinearLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal">
         <!-- Spacer -->
diff --git a/res/layout/power_usage_detail_item_text.xml b/res/layout/power_usage_detail_item_text.xml
index 7ea2432..6c21274 100644
--- a/res/layout/power_usage_detail_item_text.xml
+++ b/res/layout/power_usage_detail_item_text.xml
@@ -16,7 +16,7 @@
 
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content">
     <!--Label for the item-->
     <TextView
diff --git a/res/layout/power_usage_details.xml b/res/layout/power_usage_details.xml
index f7485ee..18781a9 100644
--- a/res/layout/power_usage_details.xml
+++ b/res/layout/power_usage_details.xml
@@ -16,18 +16,18 @@
 
 <ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
     <LinearLayout
         android:id="@+id/all_details"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:paddingTop="5dip"
         android:paddingBottom="5dip"
         android:orientation="vertical">
 
         <LinearLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:minHeight="?android:attr/listPreferredItemHeight"
             android:orientation="horizontal"
@@ -73,7 +73,7 @@
                     android:id="@+id/gauge"
                     android:background="#80404040"
                     android:layout_height="wrap_content"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_marginTop="5dip"
                     android:layout_below="@id/battery_percentage"
                     android:layout_gravity="center_vertical" />
@@ -93,7 +93,7 @@
 
         <LinearLayout
             android:id="@+id/details"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingLeft="6dip"
             android:orientation="vertical">
@@ -104,7 +104,7 @@
 
         <LinearLayout
             android:id="@+id/controls"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical">
 
@@ -126,7 +126,7 @@
 
         <LinearLayout
             android:id="@+id/packages_section"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingLeft="6dip"
             android:orientation="vertical">
diff --git a/res/layout/power_usage_package_item.xml b/res/layout/power_usage_package_item.xml
index dcd5aad..750e062 100644
--- a/res/layout/power_usage_package_item.xml
+++ b/res/layout/power_usage_package_item.xml
@@ -16,7 +16,7 @@
 
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content">
     <!--Label for the item-->
     <TextView
diff --git a/res/layout/preference_bluetooth.xml b/res/layout/preference_bluetooth.xml
index e832f20..501c827 100644
--- a/res/layout/preference_bluetooth.xml
+++ b/res/layout/preference_bluetooth.xml
@@ -15,7 +15,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
diff --git a/res/layout/preference_dialog_brightness.xml b/res/layout/preference_dialog_brightness.xml
index 071beed..0fa01e4 100644
--- a/res/layout/preference_dialog_brightness.xml
+++ b/res/layout/preference_dialog_brightness.xml
@@ -18,11 +18,11 @@
 -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
             android:orientation="vertical"
             android:gravity="center_horizontal"
             android:paddingBottom="20dip">
@@ -33,7 +33,7 @@
                 android:paddingTop="20dip" />
 
         <CheckBox android:id="@+id/automatic_mode"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/automatic_brightness"
                 android:textAppearance="?android:attr/textAppearanceSmall"
@@ -42,7 +42,7 @@
                 android:layout_marginRight="20dip" />
 
         <SeekBar android:id="@*android:id/seekbar"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:padding="20dip" />
 
diff --git a/res/layout/preference_dialog_ringervolume.xml b/res/layout/preference_dialog_ringervolume.xml
index 5905f45..e8dc704 100644
--- a/res/layout/preference_dialog_ringervolume.xml
+++ b/res/layout/preference_dialog_ringervolume.xml
@@ -15,12 +15,12 @@
 -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
         
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
             android:orientation="vertical"
             android:gravity="center_horizontal"
             android:paddingBottom="20dip">
@@ -31,23 +31,53 @@
                 android:paddingTop="20dip" />
                 
         <TextView
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/incoming_call_volume_title"
-                android:paddingTop="20dip"
+                android:paddingTop="10dip"
                 android:paddingLeft="20dip" 
                 android:paddingRight="20dip" />
         
         <!-- Used for the ring volume.  This is what the superclass VolumePreference uses. -->
         <SeekBar android:id="@*android:id/seekbar"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:paddingTop="6dip" 
                 android:paddingLeft="20dip" 
                 android:paddingRight="20dip" />
             
+        <!-- Used for the media volume -->
+        <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/media_volume_title"
+                android:paddingTop="10dip"
+                android:paddingLeft="20dip" 
+                android:paddingRight="20dip" />
+        <SeekBar android:id="@+id/media_volume_seekbar"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingTop="6dip" 
+                android:paddingLeft="20dip" 
+                android:paddingRight="20dip" />
+
+        <!-- Used for the alarm volume -->
+        <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/alarm_volume_title"
+                android:paddingTop="10dip"
+                android:paddingLeft="20dip" 
+                android:paddingRight="20dip" />
+        <SeekBar android:id="@+id/alarm_volume_seekbar"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingTop="6dip" 
+                android:paddingLeft="20dip" 
+                android:paddingRight="20dip" />
+
         <CheckBox android:id="@+id/same_notification_volume"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/checkbox_notification_same_as_incoming_call"
                 android:textAppearance="?android:attr/textAppearanceSmall"
@@ -56,7 +86,7 @@
                 android:layout_marginRight="20dip" />
     
         <TextView android:id="@+id/notification_volume_title"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/notification_volume_title"
                 android:paddingTop="6dip"
@@ -65,7 +95,7 @@
         
         <!-- Used for the notification volume -->
         <SeekBar android:id="@+id/notification_volume_seekbar"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:paddingTop="6dip" 
                 android:paddingLeft="20dip" 
diff --git a/res/layout/preference_icon.xml b/res/layout/preference_icon.xml
index 03f4e70..e51a73b 100644
--- a/res/layout/preference_icon.xml
+++ b/res/layout/preference_icon.xml
@@ -19,7 +19,7 @@
      type in the "widget_frame" layout. -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+android:id/widget_frame"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
diff --git a/res/layout/preference_powergauge.xml b/res/layout/preference_powergauge.xml
index 7aafec1..7de2e20 100644
--- a/res/layout/preference_powergauge.xml
+++ b/res/layout/preference_powergauge.xml
@@ -15,7 +15,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
@@ -63,7 +63,7 @@
             android:id="@+id/appGauge"
             android:background="#80404040"
             android:layout_height="wrap_content"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_marginTop="5dip"
             android:layout_below="@id/percent"
             android:layout_gravity="center_vertical" />
diff --git a/res/layout/proxy.xml b/res/layout/proxy.xml
index 914d0ea..3ecbb80 100644
--- a/res/layout/proxy.xml
+++ b/res/layout/proxy.xml
@@ -22,7 +22,7 @@
     android:paddingLeft="6dip"
     android:paddingRight="6dip"
     android:paddingBottom="3dip"
-    android:layout_width="fill_parent" android:layout_height="wrap_content">
+    android:layout_width="match_parent" android:layout_height="wrap_content">
 
     <TextView
         android:textStyle="bold"
@@ -34,7 +34,7 @@
     <EditText android:id="@+id/hostname"
         android:maxLines="1"
         android:layout_marginTop="2dip"
-        android:layout_width="fill_parent" android:layout_height="wrap_content"
+        android:layout_width="match_parent" android:layout_height="wrap_content"
         android:autoText="false"
         android:capitalize="none"
         android:scrollHorizontally="true" />
@@ -50,7 +50,7 @@
         android:numeric="integer"
         android:maxLines="1" 
         android:layout_marginTop="2dip"
-        android:layout_width="fill_parent" android:layout_height="wrap_content"
+        android:layout_width="match_parent" android:layout_height="wrap_content"
         android:scrollHorizontally="true" />
 
     <LinearLayout 
@@ -59,17 +59,17 @@
         android:layout_width="wrap_content" android:layout_height="wrap_content">
 
         <Button android:id="@+id/action" 
-            android:layout_width="wrap_content" android:layout_height="fill_parent"
+            android:layout_width="wrap_content" android:layout_height="match_parent"
             android:layout_weight="1"
             android:text="@string/proxy_action_text" />
 
         <Button android:id="@+id/clear" 
-            android:layout_width="wrap_content" android:layout_height="fill_parent"
+            android:layout_width="wrap_content" android:layout_height="match_parent"
             android:layout_weight="1"
             android:text="@string/proxy_clear_text" />
 
         <Button android:id="@+id/defaultView" 
-            android:layout_width="wrap_content" android:layout_height="fill_parent"
+            android:layout_width="wrap_content" android:layout_height="match_parent"
             android:layout_weight="1"
             android:text="@string/proxy_defaultView_text" />
 
diff --git a/res/layout/radio_info.xml b/res/layout/radio_info.xml
index b560fff..e9841d0 100644
--- a/res/layout/radio_info.xml
+++ b/res/layout/radio_info.xml
@@ -18,8 +18,8 @@
 */
 -->
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent" >
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
 
     <LinearLayout style="@style/info_layout">
 
@@ -177,49 +177,27 @@
 
         <!-- Preferred Network Type -->
         <TextView
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/radio_info_set_perferred_label"
                 style="@style/info_label"
                 />
 
         <Spinner android:id="@+id/preferredNetworkType"
-                 android:layout_width="fill_parent"
+                 android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                 />
 
-        <!-- Ciphering -->
-        <LinearLayout style="@style/entry_layout">
-            <Button android:id="@+id/ciph_toggle"
-                    android:textSize="14sp"
-                    android:layout_marginTop="8dip"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/radio_info_toggle_ciph_label"
-                    />
-            <TextView android:id="@+id/ciphState" style="@style/info_value" />
-
-        </LinearLayout>
-
-        <!-- QXDM logging & radio power -->
-        <LinearLayout style="@style/entry_layout">
-            <Button android:id="@+id/qxdm_log"
-                    android:textSize="14sp"
-                    android:layout_marginTop="8dip"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    />
-
-            <Button android:id="@+id/radio_power"
+        <!-- Radio Power -->
+        <Button android:id="@+id/radio_power"
                 android:textSize="14sp"
                 android:layout_marginTop="8dip"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 />
-        </LinearLayout>
 
         <!-- SMSC -->
-        <RelativeLayout android:layout_width="fill_parent"
+        <RelativeLayout android:layout_width="match_parent"
                         android:layout_height="wrap_content">
             <TextView android:id="@+id/smsc_label"
                       android:text="@string/radio_info_smsc_label"
@@ -261,5 +239,14 @@
             <TextView android:id="@+id/dnsCheckState" style="@style/info_value" />
         </LinearLayout>
 
+        <!-- Launch OEM-specific Info/Settings Activity (if any) -->
+        <Button android:id="@+id/oem_info"
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/oem_radio_info_label"
+                />
+
     </LinearLayout>
 </ScrollView>
diff --git a/res/layout/remember_dock_setting.xml b/res/layout/remember_dock_setting.xml
index a19ca7c..023a912 100644
--- a/res/layout/remember_dock_setting.xml
+++ b/res/layout/remember_dock_setting.xml
@@ -17,7 +17,7 @@
 <CheckBox
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/remember"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="@string/bluetooth_dock_settings_remember"
     android:focusable="true"
diff --git a/res/layout/running_services.xml b/res/layout/running_services.xml
index 120a113..2f464a5 100644
--- a/res/layout/running_services.xml
+++ b/res/layout/running_services.xml
@@ -16,27 +16,27 @@
  -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-	    android:layout_width="fill_parent"
-	    android:layout_height="fill_parent"
+	    android:layout_width="match_parent"
+	    android:layout_height="match_parent"
 	    android:orientation="vertical">
     <FrameLayout
-		    android:layout_width="fill_parent"
+		    android:layout_width="match_parent"
 		    android:layout_height="0px"
 		    android:layout_weight="1">
 	    <ListView android:id="@android:id/list"
-	            android:layout_width="fill_parent" 
-	            android:layout_height="fill_parent"
+	            android:layout_width="match_parent" 
+	            android:layout_height="match_parent"
 	            android:drawSelectorOnTop="false"
 	            android:fastScrollEnabled="true" />
 	    <TextView android:id="@android:id/empty"
-	            android:layout_width="fill_parent"
-	            android:layout_height="fill_parent"
+	            android:layout_width="match_parent"
+	            android:layout_height="match_parent"
 	            android:gravity="center"
 	            android:text="@string/no_running_services"
 	            android:textAppearance="?android:attr/textAppearanceLarge" />
     </FrameLayout>
     <LinearLayout
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:background="?android:attr/colorForeground"
diff --git a/res/layout/running_services_item.xml b/res/layout/running_services_item.xml
index 2728c76..f8a0c97 100644
--- a/res/layout/running_services_item.xml
+++ b/res/layout/running_services_item.xml
@@ -18,7 +18,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:orientation="vertical"
@@ -30,7 +30,7 @@
         android:src="?android:attr/listDivider"/>
     
     <LinearLayout
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:orientation="horizontal"
@@ -48,12 +48,12 @@
     
         <LinearLayout
             android:orientation="vertical"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content" >
             <LinearLayout
                 android:orientation="horizontal"
                 android:baselineAlignedChildIndex="0"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content">
 	            <TextView android:id="@+id/name"
 	                android:layout_width="wrap_content"
diff --git a/res/layout/sdcard_settings_screen.xml b/res/layout/sdcard_settings_screen.xml
index 734a5b6..3fa6c9a 100644
--- a/res/layout/sdcard_settings_screen.xml
+++ b/res/layout/sdcard_settings_screen.xml
@@ -19,19 +19,19 @@
 -->
 <ScrollView 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">
 
     <LinearLayout android:id="@+id/list"
         android:orientation="vertical"
         android:padding="10dip"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
     
         <LinearLayout android:id="@+id/usb"
             android:orientation="vertical"
             android:paddingBottom="10dip"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
             <CheckBox android:id="@+id/mass_storage"
@@ -46,12 +46,12 @@
         
         <!-- divider line -->
         <View android:background="#FF000000"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="1dip" />
     
         <LinearLayout android:id="@+id/mounted" 
             android:orientation="vertical" 
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingTop="10dip">
             
@@ -72,7 +72,7 @@
                 android:layout_width="wrap_content" android:layout_height="wrap_content" />
     
             <TableLayout
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:paddingTop="10dip">
                 <TableRow>
@@ -105,7 +105,7 @@
 
         <LinearLayout android:id="@+id/shared" 
             android:orientation="vertical" 
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content" 
             android:paddingTop="10dip">
         
diff --git a/res/layout/twelve_key_entry.xml b/res/layout/twelve_key_entry.xml
new file mode 100644
index 0000000..81ead98
--- /dev/null
+++ b/res/layout/twelve_key_entry.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2008, 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.
+*/
+-->
+
+<!-- This is not a standalone element it can be included into apps that need 12-key input -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="64dip"
+        android:layout_marginLeft="2dip"
+        android:layout_marginRight="2dip"
+        android:orientation="horizontal">
+
+        <Button android:id="@+id/one"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/two"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/three"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+        
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="64dip"
+        android:layout_marginLeft="2dip"
+        android:layout_marginRight="2dip"
+        android:orientation="horizontal">
+
+        <Button android:id="@+id/four"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/five"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/six"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="64dip"
+        android:layout_marginLeft="2dip"
+        android:layout_marginRight="2dip"
+        android:orientation="horizontal">
+
+        <Button android:id="@+id/seven"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/eight"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/nine"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+        
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="64dip"
+        android:layout_marginLeft="2dip"
+        android:layout_marginRight="2dip"
+        android:orientation="horizontal">
+
+        <Button android:id="@+id/ok"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textStyle="bold"
+            android:text="@android:string/ok"
+        />
+
+        <Button android:id="@+id/zero"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textStyle="bold"
+        />
+
+        <Button android:id="@+id/cancel"
+            android:layout_width="0sp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:layout_marginLeft="2dip"
+            android:layout_marginRight="2dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textStyle="bold"
+            android:text="@android:string/cancel"
+        />
+        
+    </LinearLayout>
+    
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/usage_stats.xml b/res/layout/usage_stats.xml
index 727052d..9ce338c 100755
--- a/res/layout/usage_stats.xml
+++ b/res/layout/usage_stats.xml
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
 <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">
 
     <TextView
         android:text="@string/display_order_text"
         android:textAppearance="?android:attr/textAppearanceLarge"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content" />
 
     <Spinner
         android:id="@+id/typeSpinner"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:entries="@array/usage_stats_display_order_types" />
 
     <LinearLayout
         android:orientation="horizontal"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content" > 
         <TextView
             android:text="@string/app_name_label"
@@ -39,7 +39,7 @@
             android:layout_height="wrap_content" />
     </LinearLayout>
     <ListView android:id="@+id/pkg_list"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:drawSelectorOnTop="false" />
 </LinearLayout>
diff --git a/res/layout/usage_stats_item.xml b/res/layout/usage_stats_item.xml
index 7ab0090..bdadf85 100755
--- a/res/layout/usage_stats_item.xml
+++ b/res/layout/usage_stats_item.xml
@@ -18,7 +18,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:minHeight="?android:attr/listPreferredItemHeight">
diff --git a/res/layout/vpn_connect_dialog_view.xml b/res/layout/vpn_connect_dialog_view.xml
index 062f881..3b6d0db 100644
--- a/res/layout/vpn_connect_dialog_view.xml
+++ b/res/layout/vpn_connect_dialog_view.xml
@@ -15,18 +15,18 @@
 -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
     <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"
             android:padding="10dip">
 
         <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="horizontal"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content">
             <TextView android:id="@+id/username_str"
                     android:layout_width="@dimen/vpn_connect_input_box_label_width"
@@ -36,14 +36,14 @@
                     android:layout_marginRight="@dimen/vpn_connect_margin_right"
                     android:text="@string/vpn_username_colon" />
             <EditText android:id="@+id/username_value"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:singleLine="True"/>
         </LinearLayout>
 
         <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="horizontal"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content">
             <TextView android:id="@+id/password_str"
                     android:layout_width="@dimen/vpn_connect_input_box_label_width"
@@ -53,14 +53,14 @@
                     android:layout_marginRight="@dimen/vpn_connect_margin_right"
                     android:text="@string/vpn_password_colon" />
             <EditText android:id="@+id/password_value"
-                    android:layout_width="fill_parent"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:password="True"
                     android:singleLine="True"/>
         </LinearLayout>
 
         <CheckBox android:id="@+id/save_username"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginLeft="66dip"
                 android:text="@string/vpn_save_username" />
diff --git a/res/layout/widget.xml b/res/layout/widget.xml
index 1e22dbe..210fcc1 100644
--- a/res/layout/widget.xml
+++ b/res/layout/widget.xml
@@ -16,8 +16,8 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/main"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
     android:gravity="center"
     android:background="@drawable/appwidget_bg" >
 
@@ -25,7 +25,7 @@
         android:id="@+id/btn_wifi"
         android:layout_width="0dip"
         android:layout_weight="1"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_button_left"
         android:clickable="true"
         android:focusable="true"
@@ -33,7 +33,7 @@
 
         <ImageView
             android:id="@+id/img_wifi"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:scaleType="center"
@@ -41,7 +41,7 @@
 
         <ImageView
             android:id="@+id/ind_wifi"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:scaleType="fitXY"
             />
@@ -49,7 +49,7 @@
 
     <ImageView
         android:layout_width="1dip"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_settings_divider"
         />
 
@@ -57,7 +57,7 @@
         android:id="@+id/btn_bluetooth"
         android:layout_width="0dip"
         android:layout_weight="1"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_button_center"
         android:clickable="true"
         android:focusable="true"
@@ -65,7 +65,7 @@
 
         <ImageView
             android:id="@+id/img_bluetooth"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:scaleType="center"
@@ -73,7 +73,7 @@
 
         <ImageView
             android:id="@+id/ind_bluetooth"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:scaleType="fitXY"
             />
@@ -82,7 +82,7 @@
 
     <ImageView
         android:layout_width="1dip"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_settings_divider"
         />
 
@@ -90,7 +90,7 @@
         android:id="@+id/btn_gps"
         android:layout_width="0dip"
         android:layout_weight="1"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_button_center"
         android:clickable="true"
         android:focusable="true"
@@ -98,7 +98,7 @@
 
         <ImageView
             android:id="@+id/img_gps"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:scaleType="center"
@@ -106,7 +106,7 @@
 
         <ImageView
             android:id="@+id/ind_gps"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:scaleType="fitXY"
             />
@@ -114,7 +114,7 @@
 
     <ImageView
         android:layout_width="1dip"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_settings_divider"
         />    
 
@@ -122,7 +122,7 @@
         android:id="@+id/btn_sync"
         android:layout_width="0dip"
         android:layout_weight="1"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_button_center"
         android:clickable="true"
         android:focusable="true"
@@ -130,7 +130,7 @@
 
         <ImageView
             android:id="@+id/img_sync"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:scaleType="center"
@@ -138,7 +138,7 @@
 
         <ImageView
             android:id="@+id/ind_sync"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:scaleType="fitXY"
             />
@@ -146,7 +146,7 @@
 
     <ImageView
         android:layout_width="1dip"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_settings_divider"
         />
 
@@ -154,7 +154,7 @@
         android:id="@+id/btn_brightness"
         android:layout_width="0dip"
         android:layout_weight="1"
-        android:layout_height="fill_parent"
+        android:layout_height="match_parent"
         android:background="@drawable/appwidget_button_right"
         android:clickable="true"
         android:focusable="true"
@@ -162,7 +162,7 @@
 
         <ImageView
             android:id="@+id/img_brightness"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
             android:scaleType="center"
@@ -170,7 +170,7 @@
 
         <ImageView
             android:id="@+id/ind_brightness"
-            android:layout_width="fill_parent"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:scaleType="fitXY"
             />
diff --git a/res/layout/wifi_ap_configure.xml b/res/layout/wifi_ap_configure.xml
deleted file mode 100644
index f816ae5..0000000
--- a/res/layout/wifi_ap_configure.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-        
-    <LinearLayout
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:padding="8dip"
-            android:orientation="vertical"> 
-    
-            <LinearLayout
-                android:id="@+id/table"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-                android:orientation="vertical">
-            </LinearLayout>
-
-    
-        <!-- SSID -->
-    
-        <TextView android:id="@+id/ssid_text"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/wifi_type_ssid" />
-
-        <EditText android:id="@+id/ssid_edit"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:singleLine="true"
-                android:inputType="textNoSuggestions" />
-    
-        <!-- Security -->
-        
-        <TextView android:id="@+id/security_text"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:text="@string/wifi_security" />
-            
-        <!-- The entries will be set programmatically -->
-        <Spinner android:id="@+id/security_spinner"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content" />
-
-        <!-- Enterprise Fields -->
-        <LinearLayout android:id="@+id/enterprise_wrapper"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:padding="0dip"
-            android:orientation="vertical">
-                <TextView android:id="@+id/eap_text"
-                        style="?android:attr/textAppearanceSmallInverse"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="8dip"
-                        android:text="@string/please_select_eap" />
-                <Spinner android:id="@+id/eap_spinner"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content" />
-                <TextView android:id="@+id/phase2_text"
-                        style="?android:attr/textAppearanceSmallInverse"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="8dip"
-                        android:text="@string/please_select_phase2" />
-                <Spinner android:id="@+id/phase2_spinner"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content" />
-
-                <TextView android:id="@+id/ca_certificate_text"
-                        style="?android:attr/textAppearanceSmallInverse"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="8dip"
-                        android:text="@string/please_select_ca_certificate" />
-                <Spinner android:id="@+id/ca_certificate_spinner"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content" />
-                <TextView android:id="@+id/client_certificate_text"
-                        style="?android:attr/textAppearanceSmallInverse"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="8dip"
-                        android:text="@string/please_select_client_certificate" />
-                <Spinner android:id="@+id/client_certificate_spinner"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content" />
-                <TextView android:id="@+id/identity_text"
-                        style="?android:attr/textAppearanceSmallInverse"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="8dip"
-                        android:text="@string/please_type_identity" />
-                <EditText android:id="@+id/identity_edit"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="2dip"
-                        android:singleLine="true"
-                        android:inputType="textNoSuggestions" />
-                <TextView android:id="@+id/anonymous_identity_text"
-                        style="?android:attr/textAppearanceSmallInverse"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="8dip"
-                        android:text="@string/please_type_anonymous_identity" />
-                <EditText android:id="@+id/anonymous_identity_edit"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginTop="2dip"
-                        android:singleLine="true" />
-        </LinearLayout>
-
-        <!-- Password -->
-        
-        <TextView android:id="@+id/password_text"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:text="@string/please_type_passphrase" />
-            
-        <EditText android:id="@+id/password_edit"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:singleLine="true"
-                android:password="true" />
-    
-        <CheckBox android:id="@+id/show_password_checkbox"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:text="@string/wifi_show_password" />
-                
-        <Spinner android:id="@+id/wep_type_spinner"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:entries="@array/wifi_wep_type" />
-            
-    </LinearLayout>
-
-</ScrollView>    
diff --git a/res/layout/wifi_ap_info.xml b/res/layout/wifi_ap_info.xml
deleted file mode 100644
index 8c430fc..0000000
--- a/res/layout/wifi_ap_info.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-        
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:padding="8dip"
-            android:orientation="vertical"> 
-    
-        <LinearLayout
-                android:id="@+id/table"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-                android:orientation="vertical">
-        
-        <!-- Info dynamically added here. -->
-        
-        </LinearLayout>
-    
-        <!-- Password -->
-        <TextView android:id="@+id/password_text"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:text="@string/please_type_passphrase" />
-            
-        <EditText android:id="@+id/password_edit"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:singleLine="true"
-                android:password="true" />
-    
-        <CheckBox android:id="@+id/show_password_checkbox"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:text="@string/wifi_show_password" />
-                
-    </LinearLayout>
-
-</ScrollView>    
diff --git a/res/layout/wifi_ap_retry_password.xml b/res/layout/wifi_ap_retry_password.xml
deleted file mode 100644
index 14a4eae..0000000
--- a/res/layout/wifi_ap_retry_password.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-        
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:padding="8dip"
-            android:orientation="vertical"> 
-    
-        <TextView
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/wifi_password_incorrect_error" />
-                    
-        <!-- Password -->
-        <TextView android:id="@+id/password_text"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:text="@string/please_type_passphrase" />
-            
-        <EditText android:id="@+id/password_edit"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:singleLine="true"
-                android:password="true" />
-    
-        <CheckBox android:id="@+id/show_password_checkbox"
-                style="?android:attr/textAppearanceSmallInverse"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="2dip"
-                android:text="@string/wifi_show_password" />
-                
-    </LinearLayout>
-
-</ScrollView>    
diff --git a/res/layout/wifi_api_test.xml b/res/layout/wifi_api_test.xml
new file mode 100644
index 0000000..b3ad18a
--- /dev/null
+++ b/res/layout/wifi_api_test.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/wifi_settings_category">
+
+    <Preference
+            android:key="disable_network"
+            android:title="@string/disableNetwork"
+            android:persistent="false" />
+
+    <Preference
+            android:key="disconnect"
+            android:title="@string/disconnect"
+            android:persistent="false" />
+
+    <Preference
+            android:key="enable_network"
+            android:title="@string/enableNetwork"
+            android:persistent="false" />
+
+    <Preference
+            android:key="getConfiguredNetworks"
+            android:title="@string/getConfiguredNetworks"
+            android:persistent="false" />
+
+    <Preference
+            android:key="getConnectionInfo"
+            android:title="@string/getConnectionInfo"
+            android:persistent="false" />
+
+
+</PreferenceScreen>
diff --git a/res/layout/wifi_config_info.xml b/res/layout/wifi_config_info.xml
new file mode 100644
index 0000000..c95eb6a
--- /dev/null
+++ b/res/layout/wifi_config_info.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+
+    <LinearLayout style="@style/info_layout">
+
+        <LinearLayout style="@style/entry_layout">
+                <TextView android:text="@string/config_list_label" style="@style/info_label" />
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout">
+                <TextView android:id="@+id/config_list" style="@style/info_value" />
+        </LinearLayout>
+    </LinearLayout>
+
+</ScrollView>
+
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
new file mode 100644
index 0000000..6558453
--- /dev/null
+++ b/res/layout/wifi_dialog.xml
@@ -0,0 +1,161 @@
+<?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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+         android:layout_width="300sp"
+         android:layout_height="wrap_content">
+
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="8dip"
+            android:orientation="vertical">
+
+        <LinearLayout android:id="@+id/info"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical" />
+
+        <LinearLayout android:id="@+id/type"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:visibility="gone">
+
+            <TextView
+                    style="?android:attr/textAppearanceSmallInverse"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dip"
+                    android:text="@string/wifi_ssid" />
+
+            <EditText android:id="@+id/ssid"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:inputType="textNoSuggestions" />
+
+            <TextView
+                    style="?android:attr/textAppearanceSmallInverse"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dip"
+                    android:text="@string/wifi_security" />
+
+            <Spinner android:id="@+id/security"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:prompt="@string/wifi_security"
+                    android:entries="@array/wifi_security" />
+        </LinearLayout>
+
+        <LinearLayout android:id="@+id/fields"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:visibility="gone">
+
+            <LinearLayout android:id="@+id/eap"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                <TextView
+                        style="?android:attr/textAppearanceSmallInverse"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="4dip"
+                        android:text="@string/wifi_eap_method" />
+
+                <Spinner android:id="@+id/method"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:prompt="@string/wifi_eap_method"
+                        android:entries="@array/wifi_eap_method" />
+
+                <TextView
+                        style="?android:attr/textAppearanceSmallInverse"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="4dip"
+                        android:text="@string/wifi_eap_ca_cert" />
+
+                <Spinner android:id="@+id/ca_cert"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:prompt="@string/wifi_eap_ca_cert" />
+
+                <TextView
+                        style="?android:attr/textAppearanceSmallInverse"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="4dip"
+                        android:text="@string/wifi_eap_user_cert" />
+
+                <Spinner android:id="@+id/user_cert"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:prompt="@string/wifi_eap_user_cert" />
+
+                <TextView
+                        style="?android:attr/textAppearanceSmallInverse"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="4dip"
+                        android:text="@string/wifi_eap_identity" />
+
+                <EditText android:id="@+id/identity"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:singleLine="true"
+                        android:inputType="textNoSuggestions" />
+
+                <TextView
+                        style="?android:attr/textAppearanceSmallInverse"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="4dip"
+                        android:text="@string/wifi_eap_anonymous" />
+
+                <EditText android:id="@+id/anonymous"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:singleLine="true"
+                        android:inputType="textNoSuggestions" />
+            </LinearLayout>
+
+            <TextView
+                    style="?android:attr/textAppearanceSmallInverse"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="4dip"
+                    android:text="@string/wifi_password" />
+
+            <EditText android:id="@+id/password"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:password="true" />
+
+            <CheckBox android:id="@+id/show_password"
+                    style="?android:attr/textAppearanceSmallInverse"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/wifi_show_password" />
+        </LinearLayout>
+    </LinearLayout>
+</ScrollView>
diff --git a/res/layout/wifi_ap_info_row.xml b/res/layout/wifi_dialog_row.xml
similarity index 92%
rename from res/layout/wifi_ap_info_row.xml
rename to res/layout/wifi_dialog_row.xml
index 79064b0..52819d4 100644
--- a/res/layout/wifi_ap_info_row.xml
+++ b/res/layout/wifi_dialog_row.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
@@ -15,7 +15,7 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content">
     <TextView
             android:id="@+id/name"
diff --git a/res/layout/wifi_status_test.xml b/res/layout/wifi_status_test.xml
new file mode 100644
index 0000000..2bdfbfc
--- /dev/null
+++ b/res/layout/wifi_status_test.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+
+    <LinearLayout style="@style/info_layout">
+
+        <!-- Update Button -->
+        <Button android:id="@+id/update"
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/wifi_update"
+                />
+
+        <!--Wifi State-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/wifi_state_label" style="@style/info_label" />
+            <TextView android:id="@+id/wifi_state" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--Network State-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/network_state_label" style="@style/info_label" />
+            <TextView android:id="@+id/network_state" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--Supplicant State-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/supplicant_state_label" style="@style/info_label" />
+            <TextView android:id="@+id/supplicant_state" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--RSSI Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/rssi_label" style="@style/info_label" />
+            <TextView android:id="@+id/rssi" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--BSSID Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/bssid_label" style="@style/info_label" />
+            <TextView android:id="@+id/bssid" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--SSID Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/ssid_label" style="@style/info_label" />
+            <TextView android:id="@+id/ssid" style="@style/info_value" />
+        </LinearLayout>
+
+
+        <!--Hidden SSID Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/hidden_ssid_label" style="@style/info_label" />
+            <TextView android:id="@+id/hidden_ssid" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--IP address Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/ipaddr_label" style="@style/info_label" />
+            <TextView android:id="@+id/ipaddr" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--MAC address Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/macaddr_label" style="@style/info_label" />
+            <TextView android:id="@+id/macaddr" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--Network ID Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/networkid_label" style="@style/info_label" />
+            <TextView android:id="@+id/networkid" style="@style/info_value" />
+        </LinearLayout>
+
+        <!--Link Speed Value-->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/link_speed_label" style="@style/info_label" />
+            <TextView android:id="@+id/link_speed" style="@style/info_value" />
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/scan_list_label" style="@style/info_label" />
+            <TextView android:id="@+id/scan_list" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Ping stats -->
+        <Button android:id="@+id/ping_test"
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/ping_test_label"
+                />
+
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_ping_ipaddr" style="@style/info_label" />
+            <TextView android:id="@+id/pingIpAddr" style="@style/info_value" />
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_ping_hostname" style="@style/info_label" />
+            <TextView android:id="@+id/pingHostname" style="@style/info_value" />
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_http_client_test" style="@style/info_label" />
+            <TextView android:id="@+id/httpClientTest" style="@style/info_value" />
+        </LinearLayout>
+
+    </LinearLayout>
+</ScrollView>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 800d27e..17556c8 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Neznámé"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Zapnout rádio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Vypnout rádio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Povolit protokol QXDM SD"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Zakázat protokol QXDM SD"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Zobrazit adresář karty SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Zobrazit povolená telefonní čísla"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Zobrazit čísla volání služeb"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Získat seznam PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Povolit připojení datových služeb"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Zakázat připojení datových služeb"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Povolit startovací data"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Zakázat startovací data"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"V provozu"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Nepokrytá oblast"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Pouze tísňová volání"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Použít test Ping na IpAddr:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Provést test Ping hostitele (www.google.cz):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Test klienta HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Přepnout šifrování"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Spustit test Ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Aktualizovat"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Obnovit"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Přepnout kontrolu DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Nastavit pásmo pro GSM a UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Načítání seznamu pásem..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Nastavit"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Odpojování..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Odpojeno"</string>
     <string name="status_failed" msgid="610462050405904601">"Připojení se nezdařilo."</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Obraz a zvuk"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Nastavení obrazu a zvuku"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Nastavení zvuku"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Umožňuje nastavit vyzváněcí tón, oznámení a jas obrazovky"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Tichý režim"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Ztiší všechny zvuky kromě médií a budíků"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Všechny zvuky kromě médií jsou ztišeny."</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Zvolit vyzváněcí tón oznámení"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Hlasitost médií"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Umožňuje nastavit hlasitost hudby a videí"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Zvuk doku"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Nastavení zvuku pro připojený dok"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Dotyky jsou provázeny zvuky"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Tlačítka číselníku jsou provázena zvuky"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Přehrát zvuk při oznámení karty SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Potlačení hluku"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Při hovoru nebo nahrávání potlačí okolní hluk."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Dok"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Nastavení doku"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Zvuk"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Nastavení připojeného stolního doku"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Nastavení připojeného doku do auta"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefon není vložen do doku"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Nastavení připojeného doku"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Dok nebyl nalezen"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Chcete-li konfigurovat zvuk doku, musí v něm být telefon vložen."</string>
     <string name="sync_settings" msgid="9186125469300013491">"Účty a synchronizace"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Umožňuje přidat nebo odebrat účty a změnit jejich nastavení"</string>
     <string name="search_settings" msgid="1910951467596035063">"Vyhledávání"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Celková paměť"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Odpojit kartu SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Odpojit kartu SD za účelem bezpečného odebrání"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formátovat kartu SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formátovat (vymazat) kartu SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Nedostupný údaj"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Správa aplikací a klávesových zkratek rychlého spuštění"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Nastavení aplikace"</string>
     <string name="install_applications" msgid="4872012136210802181">"Neznámé zdroje"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Povoluje instalaci aplikací, které nepocházejí ze služby Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Váš telefon a osobní údaje jsou zranitelnější vůči útoku aplikací z neznámých zdrojů. Vyjadřujete souhlas, že nesete osobní odpovědnost za jakékoli škody způsobené na vašem telefonu nebo za ztrátu dat v důsledku používání těchto aplikací."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Info o aplikaci"</string>
     <string name="storage_label" msgid="8700867073480107253">"Paměť"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Žádné nainstalované služby usnadnění."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Tato služba usnadnění může shromažďovat veškerý text, který napíšete, včetně osobních údajů a čísel kreditních karet, nikoli však hesla. Může také protokolovat vaše interakce s uživatelským rozhraním. Služba pochází z aplikace <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Chcete tuto službu usnadnění použít?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Deaktivovat usnadnění?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Využití baterie"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Co využívá baterii"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Využití baterie od odpojení"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Vždy používat moje nastavení"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Výchozí nastavení níže přepíše nastavení jednotlivých aplikací"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Výchozí nastavení"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Rychlost řeči"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Rychlost mluveného textu"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Výška"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Ovládací prvek napájení"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Probíhá aktualizace nastavení Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Probíhá aktualizace nastavení Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Program na instalaci pověření"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Nastavení sítě VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Připojit k síti <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Uživatelské jméno:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Úložiště pověření je vymazáno."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Úložiště pověření je aktivováno."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Úložiště pověření je deaktivováno."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Tísňové vyzvánění"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Nastavit chování při tísňovém volání"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Ochrana osobních údajů"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index c8d12db..0b5abc2 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Ukendt"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Slå radio til"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Slå radio fra"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Aktiver QXDM SD-log"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Deaktiver QXDM SD-log"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Vis adressebog på SIM-kortet"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Vis faste opkaldsnumre"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Vis tjenesten faste opkaldsnumre"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Hent PDP-liste"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Aktiver dataforbindelse"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Deaktiver dataforbindelse"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Aktiver data ved start"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Deaktiver data ved start"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"I drift"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Ude af drift"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Kun nødopkald"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping-IpAdr.:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Ping-værtsnavn(www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP-klienttest:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Skift nummer"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Kør ping-test"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Opdater"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Opdater"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Skift DNS-kontrol"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Angiv GSM/UMTS-bånd"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Indlæser båndliste ..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Indstil"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Afbryder ..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Afbrudt"</string>
     <string name="status_failed" msgid="610462050405904601">"Mislykkedes"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Lyd og visning"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Indstillinger for lyd og visning"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Indstillinger for lyd"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Angiv ringetoner, meddelelser, skærmlysstyrke"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Lydløs"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Alle lyde undtagen medier og alarmer er slået fra"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Al lyd undtagen medier er slået fra"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Vælg ringetone for meddelelser"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Lydstyrke for medier"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Angiv lydstyrke for musik og videoer"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Dock audio"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Lydindstillinger til den fastgjorte dock"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Hørbare touch-toner"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Afspil toner, når nummerblokken bruges"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Afspil lyd for meddelelser om SD-kort"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Støjdæmpning"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Dæmp baggrundsstøj under tale og optagelse"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Dockingstation"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Indstillinger for dockingstation"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Lyd"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Indstillinger for den dockingstation der er tilsluttet din computer"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Indstillinger for den dockingstation der er tilsluttet bilen"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefonen er ikke tilsluttet dockingstationen"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Indstillinger for den dockingstation der er tilsluttet"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Dockingstationen blev ikke fundet"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Telefonen skal være sluttet til dockingstationen for at lyden kan konfigureres"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Konti og synkronisering"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Tilføj eller fjern konti, og skift indstillinger for konto"</string>
     <string name="search_settings" msgid="1910951467596035063">"Søg"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Plads i alt"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Demonter SD-kort"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Demonter SD-kortet til sikker fjernelse"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formater SD-kort"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formater (slet) SD-kortet"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Utilgængelig"</string>
@@ -572,8 +562,8 @@
     <string name="location_networks_disabled" msgid="2708968452901433980">"Se placering i programmer (som f.eks. Maps) ved hjælp af trådløse netværk"</string>
     <string name="location_neighborhood_level" msgid="4656658097932515921">"Placering afgøres af Wi-Fi og/eller mobile netværk"</string>
     <string name="location_gps" msgid="6296125378829097831">"Brug GPS-satellitter"</string>
-    <string name="location_street_level" msgid="6460740847018275745">"Præcis placering på gadeplan (slå fra for at spare på batteriet)"</string>
-    <string name="location_gps_disabled" msgid="6632537158777308128">"Placering på gadeplan (mere batterikrævende, skal bruges i det fri)"</string>
+    <string name="location_street_level" msgid="6460740847018275745">"Præcis placering på gadeniveau (slå fra for at spare på batteriet)"</string>
+    <string name="location_gps_disabled" msgid="6632537158777308128">"Placering på gadeniveau (mere batterikrævende, skal bruges i det fri)"</string>
     <string name="assisted_gps" msgid="4649317129586736885">"Brug assisteret GPS"</string>
     <string name="assisted_gps_enabled" msgid="8751899609589792803">"Brug serveren til at assistere GPS (fjern markering for at mindske netværksforbrug)"</string>
     <string name="assisted_gps_disabled" msgid="6982698333968010748">"Brug serveren til at assistere GPS (fjern markering for at forbedre GPS-ydelsen)"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Administ. programmer, konf. genveje til hurtig start"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Indstillinger for program"</string>
     <string name="install_applications" msgid="4872012136210802181">"Ukendte kilder"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Tillad installation af programmer, der ikke stammer fra Marked"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Din telefon og dine personlige oplysninger er mere sårbare over for angreb af programmer fra ukendte kilder. Du accepterer, at du alene er ansvarlig for skader på din telefon eller tab af data, der kan skyldes brug af disse programmer."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Programoplysninger"</string>
     <string name="storage_label" msgid="8700867073480107253">"Lagring"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Der er ikke installeret nogen tilgængelighedstjenester."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Denne tilgængelighedstjeneste vil muligvis være i stand til at indsamle al den tekst, du indtaster, inklusive personlige oplysninger og kreditkortoplysninger, men ikke adgangskoder. Den kan også registrere dine brugergrænsefladeinteraktioner. Den kommer fra programmet <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Vil du bruge denne tilgængelighedstjeneste?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Deaktiver tilgængelighed?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Batteriforbrug"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Hvad der har brugt batteriet"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Batteriforbrug siden afbrydelse"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Brug altid mine indstil."</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Nedenstående standardindstillinger tilsidesætter programindstillingerne"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Standardindstillinger"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Talehastighed"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Oplæsningshastighed for tekst"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonehøjde"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Strømkontrol"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Opdaterer indstillinger for Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Opdaterer Bluetooth-indstilling"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Installationsprogram til oplysninger"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN-indstillinger"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Opret forbindelse til <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Brugernavn:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Oplysningslagringen er slettet."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Oplysningslagring er aktiveret."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Oplysningslagring er deaktiveret."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Nødtone"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Angiv adfærd ved nødopkald"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Fortrolighed"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index a283a83..dd25ee6 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Unbekannt"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Mobilfunkverbindung aktivieren"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Mobilfunkverbindung deaktivieren"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"QXDM-SD-Protokoll aktivieren"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"QXDM-SD-Protokoll deaktivieren"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"SIM-Adressbuch anzeigen"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Begrenzte Rufnummern anzeigen"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Servicerufnummern anzeigen"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"PDP-Liste abrufen"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Datenverbindung aktivieren"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Datenverbindung deaktivieren"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Daten beim Start aktivieren"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Daten beim Start deaktivieren"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"In Betrieb"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Außer Betrieb"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Nur Notrufe"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"IP-Adresse pingen:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Hostnamen pingen (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP Client-Test:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Verschlüsselung wechseln"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Pingtest ausführen"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Aktualisierung"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Aktualisieren"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"DNS-Überprüfung ein-/ausschalten"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"GSM-/UMTS-Band festlegen"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Bandliste wird geladen..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Festlegen"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Verbindung wird getrennt..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Nicht verbunden"</string>
     <string name="status_failed" msgid="610462050405904601">"Fehlgeschlagen"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Sound und Display"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Einstellungen für Sound &amp; Display"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Toneinstellungen"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Klingeltöne, Benachrichtigungen und Helligkeit festlegen"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Lautlosmodus"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Alle Töne außer für Medien und Warnungen sind stummgeschaltet"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Alle Sounds außer Medien sind stumm geschaltet"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Benachrichtigungston auswählen"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Medienlautstärke"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Lautstärke für Musik und Videos festlegen"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Dock-Audio"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Audioeinstellungen für angeschlossenen Dock"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Tastentöne"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Töne bei Telefonwahl"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Ton bei SD-Karten-Benachrichtigungen"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Geräuschunterdrückung"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Geräusche beim Sprechen oder Aufnehmen unterdrücken"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Dock"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Dock-Einstellungen"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Einstellungen für angeschlossenen Desktop-Dock"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Einstellungen für angeschlossenen Kfz-Dock"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefon nicht angedockt"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Einstellungen für angeschlossenen Dock"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Dock nicht gefunden"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Zur Konfiguration des Dock-Audios muss das Telefon angedockt sein."</string>
     <string name="sync_settings" msgid="9186125469300013491">"Konten und Synchronisierung"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Konten hinzufügen und entfernen und Kontoeinstellungen ändern"</string>
     <string name="search_settings" msgid="1910951467596035063">"Suchen"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Gesamtspeicher"</string>
     <string name="sd_eject" msgid="6915293408836853020">"SD-Karte entnehmen"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"SD-Karte sicher entfernen"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"SD-Karte formatieren"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"SD-Karte formatieren (löschen)"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Nicht verfügbar"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Anwendungen verwalten, Tastenkombinationen für Schnellstart"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Anwendungen"</string>
     <string name="install_applications" msgid="4872012136210802181">"Unbekannte Quellen"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Installation von Nicht-Market-Anwendungen zulassen"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Anwendungen aus unbekannten Quellen können gefährlich für Ihr Telefon und Ihre persönlichen Daten sein. Sie stimmen zu, dass Sie die Verantwortung für alle Schäden an Ihrem Telefon oder jegliche Datenverluste tragen, die aus der Verwendung dieser Anwendungen entstehen können."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Anwendungsinfo"</string>
     <string name="storage_label" msgid="8700867073480107253">"Speicher"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Keine Eingabehilfen installiert"</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Diese Eingabehilfe kann den gesamten von Ihnen eingegebenen Text erfassen, einschließlich persönlicher Daten wie Kreditkartennummern, jedoch keine Passwörter. Sie kann auch Ihre Interaktionen auf der Benutzeroberfläche protokollieren. Sie ist Teil der Anwendung <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Soll diese Eingabehilfe aktiviert werden?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Eingabehilfe deaktivieren?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Akkuverbrauch"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Akkuverbraucher"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Akkuverbrauch seit dem Ausstecken"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Immer meine Einst. verwenden"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Standardeinstellungen überschreiben Anwendungseinstellungen"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Standardeinstellungen"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Sprechgeschwindigkeit"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Geschwindigkeit, mit der der Text gesprochen wird"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonlage"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Energiesteuerung"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Aktualisieren der WLAN-Einstellung"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Aktualisieren der Bluetooth-Einstellung"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Installation der Zugangsdaten"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN-Einstellungen"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Mit <xliff:g id="NAME">%s</xliff:g> verbinden"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nutzername:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Der Speicher für die Anmeldeinformationen wurde gelöscht."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Der Anmeldeinformationsspeicher ist aktiviert."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Der Anmeldeinformationsspeicher ist deaktiviert."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Notfallsignal"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Verhalten bei einem Notruf festlegen"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Datenschutz"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index d61279b..18a8df5 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Άγνωστο"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Ενεργοποίηση πομπού"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Απενεργοποίηση πομπού"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Ενεργοποίηση αρχείου καταγραφής QXDM SD"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Απενεργοποίηση αρχείου καταγραφής QXDM SD"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Προβολή βιβλίου διευθύνσεων κάρτας SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Προβολή καθορισμένων αριθμών κλήσης"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Προβολή αριθμών κλήσης υπηρεσίας"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Λήψη λίστας PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Ενεργοποίηση σύνδεσης δεδομένων"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Απενεργοποίηση σύνδεσης δεδομένων"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Ενεργοποίηση δεδομένων κατά την εκκίνηση"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Απενεργοποίηση δεδομένων κατά την εκκίνηση"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Σε υπηρεσία"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Εκτός υπηρεσίας"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Μόνο κλήσεις έκτακτης ανάγκης"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping IpAddr:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Εκτέλεση εντολής ping σε όνομα κεντρικού υπολογιστή (www.google.gr):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Δοκιμή HTTP πελάτη:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Ενεργοποίηση κρυπτογράφησης"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Εκτέλεση δοκιμής ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Ενημέρωση"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Ανανέωση"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Αλλαγή ελέγχου DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Ορισμός ζώνης GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Φόρτωση λίστας ζωνών..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Ορισμός"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Αποσύνδεση..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Αποσυνδέθηκε"</string>
     <string name="status_failed" msgid="610462050405904601">"Ανεπιτυχής"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Ήχος και εικόνα"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Ρυθμίσεις ήχου &amp; προβολής"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Ρυθμίσεις ήχου"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Ρύθμιση ήχων κλήσης, ειδοποιήσεων, φωτεινότητας οθόνης"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Λειτουργία σίγασης"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Όλοι οι ήχοι εκτός των πολυμέσων &amp; ξυπνητηριών έχουν σιγασθεί"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Όλοι οι ήχοι εκτός από τους ήχους πολυμέσων έχουν σιγασθεί"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Επιλογή ήχου κλήσης ειδοποίησης"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Ένταση ήχου πολυμέσων"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Ορισμός έντασης ήχου για μουσική και βίντεο"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Ήχος βάσης σύνδεσης αυτοκινήτου"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Ρυθμίσεις ήχου για τη συνδεδεμένη βάση σύνδεσης αυτοκινήτου"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Ήχοι αγγίγματος οθόνης"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Αναπαραγωγή ήχων κατά τη χρήση του πληκτρολογίου κλήσης"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Αναπαραγωγή ήχου για τις προειδοποιήσεις κάρτας SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Εξουδετέρωση θορύβου"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Εξάλειψη θορύβου παρασκηνίου κατά τη διάρκεια ομιλίας ή εγγραφής."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Βάση σύνδεσης"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Ρυθμίσεις βάσης σύνδεσης"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Ήχος"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Ρυθμίσεις για τη συνδεδεμένη βάση σύνδεσης υπολογιστή"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Ρυθμίσεις για τη συνδεδεμένη βάση σύνδεσης αυτοκινήτου"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Το τηλέφωνο δεν βρίσκεται στη βάση σύνδεσής του"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Ρυθμίσεις για τη συνδεδεμένη βάσης σύνδεσης"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Η βάση σύνδεσης δεν βρέθηκε"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Το τηλέφωνο πρέπει να βρίσκεται στη βάση σύνδεσής του για τη διαμόρφωση του ήχου βάσης σύνδεσης"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Λογαριασμοί &amp; συγχρονισμός"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Προσθήκη ή κατάργηση λογαριασμών και αλλαγή ρυθμίσεων λογαριασμού"</string>
     <string name="search_settings" msgid="1910951467596035063">"Αναζήτηση"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Συνολικός χώρος"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Αφαίρεση κάρτας SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Αποπροσαρτήστε την κάρτα SD για ασφαλή αφαίρεση"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Διαμόρφωση κάρτας SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Διαμόρφωση (διαγραφή) της κάρτας SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Μη διαθέσιμο"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Διαχείριση εφαρμογών, ορισμός συντομεύσεων γρήγορης εκκίνησης"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Ρυθμίσεις εφαρμογών"</string>
     <string name="install_applications" msgid="4872012136210802181">"Άγνωστες πηγές"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Επιτρ.την εγκατ.εφαρμ.που δεν βρίσκ.στο Android Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Το τηλέφωνό σας και τα προσωπικά δεδομένα σας είναι ευάλωτα σε επιθέσεις από εφαρμογές που προέρχονται από άγνωστες πηγές. Συμφωνείτε ότι είστε οι μοναδικοί υπεύθυνοι για κάθε ζημιά στο τηλέφωνο ή για απώλεια δεδομένων που ενδέχεται να προκύψουν από τη χρήση τέτοιων εφαρμογών."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Πληροφορίες εφαρμογής"</string>
     <string name="storage_label" msgid="8700867073480107253">"Αποθηκευτικός χώρος"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Καμία εγκατεστημένη υπηρεσία προσβασιμότητας."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Αυτή η υπηρεσία προσβασιμότητας ενδέχεται να έχει τη δυνατότητα συλλογής όλων των κειμένων που πληκτρολογείτε, συμπεριλαμβανομένων των προσωπικών δεδομένων και των αριθμών πιστωτικών καρτών εκτός των κωδικών πρόσβασης. Ενδέχεται επίσης να καταγράφει τις δραστηριότητες της επιφάνειας χρήστη. Αυτή η λειτουργία προέρχεται από την εφαρμογή <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Να χρησιμοποιηθεί αυτή η υπηρεσία προσβασιμότητας;"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Να απενεργοποιηθεί η προσβασιμότητα;"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Χρήση μπαταρίας"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Τι χρησιμοποιούσε την μπαταρία"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Χρήση μπαταρίας από τη στιγμή της αποσύνδεσης από την τροφοδοσία"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Χρήση των ρυθμίσεών μου πάντα"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Οι παρακάτω προεπιλεγμένες ρυθμίσεις αντιγράφουν τις ρυθμίσεις της εφαρμογής"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Προεπιλεγμένες ρυθμίσεις"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Ταχύτητα λόγου"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Ταχύτητα με την οποία εκφωνείται το κείμενο"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Τόνος"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Έλεγχος ισχύος"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Ενημέρωση ρύθμισης Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Ενημέρωση ρύθμισης Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Πρόγραμμα εγκατάστασης διαπιστευτηρίων"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Ρυθμίσεις VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Σύνδεση στο <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Όνομα χρήστη:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Αυτός ο χώρος αποθήκευσης διαπιστευτηρίων διαγράφτηκε."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Ο χώρος αποθήκευσης διαπιστευτηρίων ενεργοποιήθηκε."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Ο χώρος αποθήκευσης διαπιστευτηρίων απενεργοποιήθηκε."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Τόνος επείγουσας ανάγκης"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Ορισμός συμπεριφοράς κατά την πραγματοποίηση κλήσης επείγουσας ανάγκης"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Απόρρητο"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 67fa3d0..c8cb423 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Desconocido"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Encender la radio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Apagar la radio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Activar el registro SD de QXDM"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Desactivar el registro SD de QXDM"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Ver libreta de direcciones de SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Ver números fijos"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Ver números del servicio técnico"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Obtener lista PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Activar la conexión de datos"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Desactivar conexión de datos"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Activar datos durante el reinicio"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Desactivar datos durante el reinicio"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"En servicio"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Fuera de servicio"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Sólo llamadas de emergencia"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Buscar direcciones de Internet de IpAddr:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Buscar direcciones de Internet del nombre del servidor (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Prueba de cliente HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Cambiar el cifrado"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Ejecutar la prueba de búsqueda de direcciones de Internet"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Actualizar"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Actualizar"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Cambiar la verificación de DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Establecer banda GSM y UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Cargando lista de banda..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Establecer"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Desconectando…"</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Desconectado"</string>
     <string name="status_failed" msgid="610462050405904601">"Incorrecto"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Sonido y visualización"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Configuración de sonido y visualización"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Configuración de sonido"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Establecer tonos de llamada, notificaciones, brillo de pantalla"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Modo silencioso"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Todos los sonidos excepto los medios y las alarmas están en silencio"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Todos los sonidos excepto los medios están en silencio"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Seleccionar tono de llamada de notificación"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Volumen de los medios"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Establecer volumen para la música y los videos"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Audio de la base"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Configuración de audio para la base adjunta"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Tonos audibles"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Reproducir tonos cuando se utilice el teclado de marcación"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Reproducir el sonido para los avisos de la tarjeta SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Cancelación por ruido"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Eliminar ruido de fondo cuando se habla o se graba."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Base"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Configuración de la base"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Configuración para la base adjunta del escritorio"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Configuración para la base adjunta del automóvil"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"El teléfono no se encuentra en la base"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Configuración para la base adjunta"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"No se encontró la base "</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"El teléfono debe estar en la base para configurar el audio de la base."</string>
     <string name="sync_settings" msgid="9186125469300013491">"Cuentas y sincronización"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Agregar o eliminar cuentas, y cambiar la configuración de la cuenta"</string>
     <string name="search_settings" msgid="1910951467596035063">"Buscar"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Espacio total"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Desmontar la tarjeta SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Desmontar la tarjeta SD para extraerla de manera segura"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatear tarjeta SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formato (borrar) la tarjeta SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"No disponible"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Administrar aplicaciones, configurar accesos directos para lanzamientos rápidos"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Configuración de aplicación"</string>
     <string name="install_applications" msgid="4872012136210802181">"Fuentes desconocidas"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Admite la instalación de aplicaciones que no pertenezcan a Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Tu teléfono y datos personales son más vulnerables a sufrir ataques de aplicaciones provenientes de fuentes desconocidas. Aceptas que eres el único responsable de cualquier daño que sufra tu teléfono o de cualquier pérdida de datos que pueda ocasionar el uso de estas aplicaciones."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Información de aplicación"</string>
     <string name="storage_label" msgid="8700867073480107253">"Espacio de almacenamiento"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"No se han instalado servicios de accesibilidad"</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Este servicio de accesibilidad podrá recopilar todo el texto que escribas, incluido los números de tarjeta de crédito de tus datos personales, excepto las contraseñas. También podrá registrar las interacciones de tu interfaz de usuario. Proviene de la aplicación <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. ¿Deseas utilizar este servicio de accesibilidad?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"¿Deseas desactivar la accesibilidad?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Uso de la batería"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Lo que ha utilizado la batería"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Uso de la batería desde que se desconectó"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Usar siempre mi config."</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Config. predet. debajo de la config. superpuesta de la aplicación"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Configuración predeterminada"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Índice de voz"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidad en la que se habla el texto"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Sonido"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Control de energía"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Actualizando configuración de Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Actualización de la configuración de Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Programa de instalación de la credencial"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Configuración de VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Conectar a <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nombre de usuario:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"El almacenamiento de la credencial se ha borrado."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"El almacenamiento de la credencial está activado."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"El almacenamiento de la credencial está inhabilitado."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Tono de emergencia"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Establecer el comportamiento cuando se establece una llamada de emergencia"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Privacidad"</string>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index 8065cf9..12717de 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -84,7 +84,7 @@
   </string-array>
   <string-array name="wifi_sleep_policy_entries">
     <item msgid="3804733751095821976">"Cuando la pantalla se apague"</item>
-    <item msgid="1549288661423279207">"Nunca si se está cargando la batería"</item>
+    <item msgid="1549288661423279207">"Nunca si está conectado"</item>
     <item msgid="1986753720941888596">"Nunca"</item>
   </string-array>
   <string-array name="battery_history_type_spinner">
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 105c9f9..b311835 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Desconocido"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Activar señal móvil"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Desactivar señal móvil"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Habilitar registro QXDM de SD"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Inhabilitar registro QXDM de SD"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Ver libreta de direcciones de tarjeta SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Ver números de marcación fija"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Ver números de marcación de servicio"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Obtener lista PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Habilitar conexión de datos"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Inhabilitar conexión de datos"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Habilitar datos al iniciar"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Inhabilitar datos al iniciar"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"En servicio"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Fuera de servicio"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Sólo llamadas de emergencia"</string>
@@ -78,7 +72,7 @@
     <string name="battery_info_status_discharging" msgid="6222697503392774475">"Descargando..."</string>
     <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No se está cargando."</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Completa"</string>
-    <string name="battery_info_power_unplugged" msgid="5987246575519551081">"No se está cargando"</string>
+    <string name="battery_info_power_unplugged" msgid="5987246575519551081">"Sin conexión"</string>
     <string name="battery_info_power_ac" msgid="6808516193001604634">"CA"</string>
     <string name="battery_info_power_usb" msgid="8012931702516331797">"USB"</string>
     <string name="battery_info_power_ac_usb" msgid="6777734146838328688">"AC+USB"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Hacer ping a DirIP:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Hacer ping a nombre de host (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Prueba de cliente HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Alternar cifrado"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Ejecutar prueba de ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Actualizar"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Actualizar"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"alternar comprobación de DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Establecer banda GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Cargando lista de bandas..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Establecer"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Desconectando..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Desconectada"</string>
     <string name="status_failed" msgid="610462050405904601">"Con error"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Sonido y pantalla"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Configuración de sonido y de pantalla"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Configuración de sonido"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Establecer tonos, notificaciones, brillo de la pantalla"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Modo silencio"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Silencio de todos los sonidos (excepto los multimedia y las alarmas)"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Todos los sonidos excepto los multimedia están silenciados."</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Seleccionar tono de notificación"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Volumen multimedia"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Establecer volumen para música y vídeos"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Audio del conector"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Configuración de audio del conector adjunto"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Tonos táctiles sonoros"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Reproducir tonos al utilizar teclado de marcado"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Reproducir sonido para notificaciones de la tarjeta SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Supresión de ruido"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Suprimir ruido de fondo al hablar o al grabar"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Conector"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Configuración del conector"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Configuración del conector de equipo de sobremesa adjunto"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Configuración del conector del coche adjunto"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Teléfono sin conectar"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Configuración del conector adjunto"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"No se ha encontrado el conector"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"El teléfono debe estar conectado para configurar el audio del conector."</string>
     <string name="sync_settings" msgid="9186125469300013491">"Cuentas y sincronización"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Añadir o eliminar cuentas y modificar la configuración de las cuentas"</string>
     <string name="search_settings" msgid="1910951467596035063">"Búsqueda"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Espacio total"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Desactivar tarjeta SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Desactiva la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatear tarjeta SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formatear (borrar) la tarjeta SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"No disponible"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Administrar aplicaciones, configurar accesos directos de inicio rápido"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Configuración de aplicaciones"</string>
     <string name="install_applications" msgid="4872012136210802181">"Orígenes desconocidos"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Permitir la instalación de aplicaciones distintas de Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"El teléfono y los datos personales son más vulnerables a los ataques de aplicaciones de origen desconocido. El usuario acepta ser el único responsable de cualquier daño en el teléfono o pérdida de datos que se pueda derivar del uso de estas aplicaciones."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Información de la aplicación"</string>
     <string name="storage_label" msgid="8700867073480107253">"Almacenamiento"</string>
@@ -783,7 +774,7 @@
     <string name="battery_history_screen_on" msgid="1377240025275657277">"Tiempo transcurrido con la pantalla encendida:"</string>
     <string name="battery_history_phone_on" msgid="4891504401623839532">"Tiempo transcurrido con el teléfono encendido:"</string>
     <string name="battery_history_screen_on_battery" msgid="536058210445081888">"En la batería:"</string>
-    <string name="battery_history_screen_on_plugged" msgid="5019127390021871260">"Cargando:"</string>
+    <string name="battery_history_screen_on_plugged" msgid="5019127390021871260">"Conectado:"</string>
     <string name="usage_stats_label" msgid="5890846333487083609">"Estadísticas de uso"</string>
     <string name="testing_usage_stats" msgid="7823048598893937339">"Estadísticas de uso"</string>
     <string name="display_order_text" msgid="8592776965827565271">"Ordenar por:"</string>
@@ -798,11 +789,15 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"No hay instalado ningún servicio de accesibilidad."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Este servicio de accesibilidad puede recopilar todo lo que escribas, desde datos personales hasta números de tarjetas de crédito, a excepción de las contraseñas. También puede registrar las interacciones con la interfaz de usuario. Procede de la aplicación <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. ¿Quieres utilizar este servicio de accesibilidad?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"¿Quieres inhabilitar la accesibilidad?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Uso de la batería"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Consumo de la batería"</string>
-    <string name="battery_since_unplugged" msgid="338073389740738437">"Uso de la batería desde que se cargó"</string>
+    <string name="battery_since_unplugged" msgid="338073389740738437">"Uso de la batería desde que se desenchufó"</string>
     <string name="battery_since_reset" msgid="7464546661121187045">"Uso de la batería desde que se restableció"</string>
-    <string name="battery_stats_duration" msgid="7464501326709469282">"<xliff:g id="TIME">%1$s</xliff:g> desde que se cargó"</string>
+    <string name="battery_stats_duration" msgid="7464501326709469282">"<xliff:g id="TIME">%1$s</xliff:g> desde que se desenchufó"</string>
     <!-- no translation found for battery_stats_last_duration (1535831453827905957) -->
     <skip />
     <string name="awake" msgid="387122265874485088">"Tiempo de actividad del dispositivo"</string>
@@ -850,7 +845,7 @@
     <string name="battery_sugg_apps_info" msgid="6065882899391322442">"Detener o desinstalar la aplicación"</string>
     <string name="battery_sugg_apps_gps" msgid="4145005297393800223">"Desactivar GPS cuando no se esté utilizando"</string>
     <string name="battery_sugg_apps_settings" msgid="8021302847272481168">"La aplicación puede incluir opciones que permitan reducir el uso de la batería."</string>
-    <string name="menu_stats_unplugged" msgid="8296577130840261624">"<xliff:g id="UNPLUGGED">%1$s</xliff:g> desde que se cargó"</string>
+    <string name="menu_stats_unplugged" msgid="8296577130840261624">"<xliff:g id="UNPLUGGED">%1$s</xliff:g> desde que se desenchufó"</string>
     <string name="menu_stats_last_unplugged" msgid="5922246077592434526">"Desde la última vez que se cargó: <xliff:g id="UNPLUGGED">%1$s</xliff:g>"</string>
     <string name="menu_stats_total" msgid="8973377864854807854">"Total de consumo"</string>
     <string name="menu_stats_refresh" msgid="1676215433344981075">"Actualizar"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Utilizar siempre mi configuración"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"La configuración predeterminada anula la de la aplicación."</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Configuración predeterminada"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocidad de voz"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidad a la que se lee el texto"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tono"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Control de energía"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Actualización de la configuración de la conexión Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Actualización de la configuración de la conexión Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Instalador de credenciales"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Configuración de red VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Establecer conexión con <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nombre de usuario:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Se ha borrado el almacenamiento de credenciales."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Almacenamiento de credenciales habilitado"</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Almacenamiento de credenciales inhabilitado"</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Tono de emergencia"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Establecer comportamiento al realizar una llamada de emergencia"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Privacidad"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 8faebdc..98c0290 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Inconnu"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Allumer le signal radio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Éteindre le signal radio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Activer le journal SD QXDM"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Désactiver le journal QXMD SD"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Afficher le carnet d\'adresses de la carte SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Afficher les numéros autorisés"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Afficher les numéros de service"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Récupérer la liste PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Activer la connexion des données"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Désactiver la connexion des données"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Activer les données au démarrage"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Désactiver les données lors du démarrage"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Service en cours"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Hors-service"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Appels d\'urgence uniquement"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Adr. IP ping :"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Nom de l\'hôte du ping (www.google.com) :"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Test du client HTTP :"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Activer/désactiver le cryptage"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Effectuer un test de ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC :"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Mettre à jour"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Actualiser"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Activer le contrôle DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Définir la bande GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Chargement de la liste de bandes..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Définir"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Déconnexion…"</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Déconnecté"</string>
     <string name="status_failed" msgid="610462050405904601">"Échec"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Sons et affichage"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Paramètres des sons et affichages"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Paramètres sonores"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Configurer les sonneries, les notifications et la luminosité"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Mode silencieux"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Aucun son sauf pour le multimédia et le réveil"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Toutes les sonneries seront définies sur Silencieux, sauf les fichiers multimédia."</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Sélectionner une sonnerie de notification"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Volume"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Régler le volume pour la musique et les vidéos"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Options audio de la base"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Paramètres audio de la base associée"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Tonalité touches audible"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Activer la tonalité des touches du clavier"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Émettre un son pour les notifications de la carte SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Suppression du bruit"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Supprimer les bruits de fond lors d\'une discussion ou d\'un enregistrement."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Base"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Paramètres de la base"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Paramètres de la base de bureau associée"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Paramètres de la base de voiture associée"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Le téléphone n\'est pas sur sa base."</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Paramètres de la base associée"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Base introuvable"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Pour configurer les paramètres audio de la base, vous devez placer le téléphone sur cette dernière."</string>
     <string name="sync_settings" msgid="9186125469300013491">"Comptes et synchro"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Ajouter ou supprimer des comptes et modifier leurs paramètres"</string>
     <string name="search_settings" msgid="1910951467596035063">"Recherche"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Espace total"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Désactiver la carte SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Désactiver la carte SD pour la retirer en toute sécurité"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formater la carte SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formater (effacer) la carte SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Non disponible"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Gérer les applications, configurer des raccourcis de lancement rapide"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Paramètres des applications"</string>
     <string name="install_applications" msgid="4872012136210802181">"Sources inconnues"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Autoriser l\'installation d\'applications ne provenant pas d\'Android Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Votre téléphone et vos données personnelles sont très vulnérables face à des applications provenant de sources inconnues. Vous acceptez d\'être le seul responsable de tout dommage causé à votre téléphone ou de toute perte de données pouvant découler de l\'utilisation de telles applications."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Informations sur l\'application"</string>
     <string name="storage_label" msgid="8700867073480107253">"Mémoire"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Aucun service d\'accessibilité installé"</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Ce service d\'accessibilité est susceptible de recueillir tout le texte que vous saisissez, y compris les données personnelles et les numéros de cartes de crédit, mais pas les mots de passe. Il est également possible qu\'il enregistre vos interactions avec l\'interface utilisateur. Il provient de l\'application <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Utiliser ce service d\'accessibilité ?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Désactiver les services d\'accessibilité ?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Utilisation de la batterie"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Répartition de l\'utilisation de la batterie"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Utilisation de la batterie depuis le débranchement"</string>
@@ -856,12 +851,16 @@
     <string name="menu_stats_refresh" msgid="1676215433344981075">"Actualiser"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Système d\'exploitation Android"</string>
     <string name="process_mediaserver_label" msgid="6500382062945689285">"Serveur multimédia"</string>
-    <string name="tts_settings" msgid="3348626948015962987">"Synthèse vocale"</string>
+    <string name="tts_settings" msgid="3348626948015962987">"SMS vocaux"</string>
     <string name="tts_settings_summary" msgid="2627715231944602766">"Définir les options de synthèse vocale"</string>
     <string name="tts_settings_title" msgid="4182348653053000933">"Paramètres de la synthèse vocale"</string>
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Tjrs utiliser mes param."</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Les param. par défaut ci-dessous remplacent les param. de l\'application"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Paramètres par défaut"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Cadence"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Vitesse à laquelle le texte est énoncé"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ton"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Contrôle de l\'alimentation"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Mise à jour des paramètres Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Mise à jour des paramètres Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Programme d\'installation des identifiants"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Paramètres de VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Connexion à \"<xliff:g id="NAME">%s</xliff:g>\""</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nom d\'utilisateur :"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Le stockage des identifiants est effacé."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Stockage des identifiants activé"</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Stockage des identifiants désactivé"</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Sonnerie d\'urgence"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Définir le comportement en cas d\'appel d\'urgence"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Confidentialité"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index c8e2957..c2a0ee7 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Sconosciuto"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Attiva segnale cellulare"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Disattiva segnale cellulare"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Attiva log SD QXDM"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Disattiva log SD QXDM"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Visualizza rubrica SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Visualizza numeri selezione fissa"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Visualizza numeri dell\'elenco dei numeri di servizio"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Ottieni elenco PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Attiva connessione dati"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Disattiva connessione dati"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Attiva dati all\'avvio"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Disattiva dati all\'avvio"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"In servizio"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Fuori servizio"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Solo chiamate di emergenza"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Indir. IP ping:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Nome host ping (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Test client HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Attiva/disattiva cifratura"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Esegui test ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Aggiorna"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Aggiorna"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Attiva o disattiva verifica DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Imposta banda GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Caricamento lista bande..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Imposta"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Disconnessione..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Disconnesso"</string>
     <string name="status_failed" msgid="610462050405904601">"Non riuscita"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Audio e display"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Impostazioni audio e display"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Impostazioni audio"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Imposta suonerie, notifiche e luminosità dello schermo"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Modalità silenziosa"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Tutti i suoni eccetto quelli multimediali verranno disattivati"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Tutti i suoni eccetto quelli multimediali verranno disattivati"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Seleziona suoneria notifica"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Volume app. multimediali"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Imposta il volume di musica e video"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Audio dock"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Impostazioni audio per dock collegato"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Toni udibili al tocco"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Riproduci toni durante la composizione"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Riproduci suono per notifiche scheda SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Eliminazione rumori"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Elimina il rumore di fondo quando parli o registri."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Dock"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Impostazioni dock"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Impostazioni per desktop dock collegato"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Impostazioni per dock automobile collegato"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefono non inserito nel dock"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Impostazioni per dock collegato"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Dock non trovato"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Il telefono deve essere inserito nel dock per configurare l\'audio del dock"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Account e sincronizzaz."</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Aggiungi o rimuovi account e modifica impostazioni account"</string>
     <string name="search_settings" msgid="1910951467596035063">"Ricerca"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Spazio totale"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Smonta scheda SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Smonta la scheda SD per una rimozione sicura"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatta scheda SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formatta (cancella) la scheda SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Non disponibile"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Gestisci le applicazioni, imposta le scorciatoie di avvio rapido"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Impostazioni applicazione"</string>
     <string name="install_applications" msgid="4872012136210802181">"Origini sconosciute"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Consenti l\'installazione di applicazioni non presenti in Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Il telefono e i dati personali sono più vulnerabili agli attacchi da parte di applicazioni\n di origini sconosciute. L\'utente accetta di essere il solo responsabile degli eventuali\n danni al telefono o della perdita dei dati che potrebbero derivare dall\'utilizzo di\n queste applicazioni."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Info applicazione"</string>
     <string name="storage_label" msgid="8700867073480107253">"Archiviazione"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Nessun servizio di accesso facilitato installato."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Questo servizio di accesso facilitato potrebbe riuscire a raccogliere tutto il testo digitato, compresi i numeri di carte di credito ma eccetto le password. Potrebbe anche registrare le tue interazioni con l\'interfaccia utente. Deriva dall\'applicazione <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Utilizzare questo servizio di accesso facilitato?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Disattivare accesso facilitato?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Utilizzo batteria"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Consumo batteria"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Utilizzo batteria dallo scollegamento"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Usa sempre mie imp."</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Le impostazioni predefinite hanno priorità sul quelle delle applicazioni"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Impostazioni predefinite"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocità voce"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocità di pronuncia del testo"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tono"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Controllo risparmio energia"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Aggiornamento impostazione Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Aggiornamento impostazione Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Programma di installazione credenziali"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Impostazioni VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Connessione a <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nome utente:"</string>
@@ -967,7 +965,7 @@
     <string name="credentials_set_password" msgid="9104473585811899989">"Imposta password"</string>
     <string name="credentials_set_password_summary" msgid="8287876917562085701">"Imposta o modifica la password dell\'archivio di credenziali"</string>
     <string name="credentials_reset" msgid="9170150870552453457">"Cancella archivio"</string>
-    <string name="credentials_reset_summary" msgid="1530388094693731636">"Cancella tutti i contenuti dall\'archivio di credenziali e reimposta la relativa password"</string>
+    <string name="credentials_reset_summary" msgid="1530388094693731636">"Cancella tutti I contenuti dall\'archivio di credenziali e reimposta la relativa password"</string>
     <string name="credentials_reset_hint" msgid="819990295796804516">"Eliminare tutte le credenziali e reimpostare la password dell\'archivio di credenziali?"</string>
     <string name="credentials_old_password" msgid="7553393815538684028">"Password attuale:"</string>
     <string name="credentials_new_password" msgid="267487774686796938">"Nuova password:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"L\'archivio di credenziali è cancellato."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"L\'archivio di credenziali è attivo."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"L\'archivio di credenziali non è attivo."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Tono chiamate di emergenza"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Imposta il comportamento in caso di chiamata di emergenza"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Privacy"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 7ba69a2..ae51b32 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"不明"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"無線通信をオン"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"無線通信をオフ"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"QXDM SDログを有効にする"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"QXDM SDログを無効にする"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"SIMのアドレス帳を表示"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"発信番号制限を表示"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"サービス電話番号を表示"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"PDPリストを取得"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"データ接続を有効にする"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"データ接続を無効にする"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"起動時にデータを有効にする"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"起動時にデータを無効にする"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"使用中"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"休止中または使用不可"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"緊急通報のみ"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"IPアドレスのPing:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"ホスト名 (www.google.co.jp) のPing:"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTPクライアントテスト:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"暗号化の切り替え"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"pingテストの実行"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"更新"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"更新"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"DNSチェックを切り替え"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"GSM/UMTSバンドの設定"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"バンドリストを読み込み中..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"設定"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"切断中..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"切断"</string>
     <string name="status_failed" msgid="610462050405904601">"失敗"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"サウンド &amp; 画面設定"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"音と表示の設定"</string>
     <string name="sound_settings" msgid="5007659014828162881">"音の設定"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"着信音、操作音、画面の明るさなど"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"マナーモード"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"音楽、動画メディア、アラーム以外は消音"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"音楽と動画メディア以外は消音"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"通知音を選択"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"メディア再生音量"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"音楽や動画の再生音量"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"ドックオーディオ"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"付属のドックの音声設定"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"タッチ操作音"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"ダイヤルパッドの操作音をONにする"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"SDカード通知時に音を鳴らす"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"ノイズキャンセル"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"通話中や録音中に周囲のノイズを抑えます。"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"ドック"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"ドックの設定"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"音声"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"付属のデスクトップホルダーの設定"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"付属のカーホルダーの設定"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"電話が固定されていません"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"付属のドックの設定"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"ドックが見つかりません"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"ドックの音声を設定するには携帯電話をドックに固定する必要があります"</string>
     <string name="sync_settings" msgid="9186125469300013491">"アカウントと同期"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"アカウントの追加や削除、アカウント設定の変更を行います"</string>
     <string name="search_settings" msgid="1910951467596035063">"検索"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"合計容量"</string>
     <string name="sd_eject" msgid="6915293408836853020">"SDカードのマウント解除"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"SDカードを安全に取り外すためマウントを解除する"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"SDカードをフォーマット"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"SDカードをフォーマット（消去）する"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"使用不可"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"アプリケーションの管理やクイック起動ショートカットの設定"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"アプリケーション設定"</string>
     <string name="install_applications" msgid="4872012136210802181">"提供元不明のアプリ"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"サードパーティアプリケーションのインストールを許可する"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"提供元不明のアプリケーションから携帯電話や個人情報データが攻撃を受ける可能性が高くなります。このようなアプリケーションの使用により生じうる携帯電話への損害やデータの損失について、お客様がすべての責任を負うことに同意するものとします。"</string>
     <string name="application_info_label" msgid="1150486628158409543">"アプリケーション情報"</string>
     <string name="storage_label" msgid="8700867073480107253">"メモリ"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"ユーザー補助サービスがインストールされていません。"</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"このユーザー補助サービスを選択すると、入力する全テキストの収集をアプリケーション（<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>）に許可することになります。これにはクレジットカード番号などの個人情報（パスワードを除く）も含まれます。また、ユーザーインターフェースでのやり取りも記録されます。このユーザー補助サービスを使用しますか？"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"ユーザー補助サービスを無効にしますか？"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"電池使用量"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"電池を使用している操作"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"電池使用時間"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"常に自分の設定を使用する"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"アプリケーション設定を下のデフォルト設定で上書きする"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"デフォルト設定"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"音声の速度"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"テキストの読み上げ速度"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"音の高さ"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"電源管理"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Wi-Fi設定の更新"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Bluetooth設定の更新"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"認証情報インストーラ"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN設定"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"<xliff:g id="NAME">%s</xliff:g>に接続"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"ユーザー名:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"認証情報ストレージが消去されました。"</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"認証情報ストレージが有効になりました。"</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"認証情報ストレージが無効になりました。"</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"緊急時の音"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"緊急通報時の動作を設定します"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"プライバシー"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 1fd6ce0..fc7e11e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"알 수 없음"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"무선 켜기"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"무선 끄기"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"QXDM SD 로그 사용"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"QXDM SD 로그 사용 안함"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"SIM 주소록 보기"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"발신 허용 번호 보기"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"SDN(Service Dialing Numbers) 보기"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"PDP 목록 가져오기"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"데이터 연결 사용"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"데이터 연결 사용 안함"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"부팅할 때 데이터 사용"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"부팅할 때 데이터 사용 중지"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"서비스 상태"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"서비스 지역 벗어남"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"비상 전화만"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"IP 주소 Ping:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"호스트이름(www.google.com) Ping:"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP 클라이언트 테스트:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"암호화 선택"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Ping 테스트 실행"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"업데이트"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"새로고침"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"DNS 확인 선택"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"GSM/UMTS 대역 설정"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"대역 목록 로드 중..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"설정"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"연결을 끊는 중..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"연결 끊김"</string>
     <string name="status_failed" msgid="610462050405904601">"실패"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"소리 및 디스플레이"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"소리 및 디스플레이 설정"</string>
     <string name="sound_settings" msgid="5007659014828162881">"소리 설정"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"벨소리, 알림, 화면 밝기 설정"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"무음 모드"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"미디어 및 알람을 제외하고 모두 무음 모드로 전환"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"미디어를 제외하고 모두 무음 모드로 전환됩니다."</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"알림 벨소리 선택"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"미디어 볼륨"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"음악 및 동영상에 대한 볼륨 설정"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"독 오디오"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"연결된 독에 대한 오디오 설정"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"터치음 듣기"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"다이얼패드를 사용할 때 신호음 재생"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"SD 카드 알림 시 사운드 재생"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"소음 제거"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"말하거나 녹음할 때 배경 소음을 억제합니다."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"도킹"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"도킹 설정"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"오디오"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"연결된 데스크톱 도크 설정"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"연결된 카폰 도크 설정"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"도킹되지 않은 휴대전화"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"연결된 도크 설정"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"도크를 찾을 수 없음"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"휴대전화를 도킹해야 오디오 도크를 구성할 수 있습니다."</string>
     <string name="sync_settings" msgid="9186125469300013491">"계정 및 동기화"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"계정 추가 또는 삭제 및 계정 설정 변경"</string>
     <string name="search_settings" msgid="1910951467596035063">"검색"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"총 공간"</string>
     <string name="sd_eject" msgid="6915293408836853020">"SD 카드 마운트 해제"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"안전 제거를 위해 SD 카드 마운트 해제"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"SD 카드 포맷"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"SD 카드 포맷(지우기)"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"사용할 수 없음"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"응용프로그램 관리, 빠른실행 바로가기 설정"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"응용프로그램 설정"</string>
     <string name="install_applications" msgid="4872012136210802181">"알 수 없는 소스"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"시판되지 않은 응용프로그램 설치 허용"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"휴대전화 및 개인 정보는 출처를 알 수 없는 응용프로그램의 공격에 더욱 취약합니다. 사용자는 이러한 응용프로그램을 사용하여 발생할 수 있는 휴대전화 손상이나 데이터 손실에 대해 사용자가 단독으로 책임이 있음을 동의합니다."</string>
     <string name="application_info_label" msgid="1150486628158409543">"응용프로그램 정보"</string>
     <string name="storage_label" msgid="8700867073480107253">"저장공간"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"설치한 접근성 서비스가 없습니다."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"접근성 서비스는 비밀번호를 제외한 개인 데이터 신용카드 번호 등과 같이 사용자가 입력한 모든 텍스트를 수집할 수 있습니다. 또한 사용자 인터페이스 상호 작용을 기록할 수도 있습니다. 이 서비스는 <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 응용프로그램에서 제공합니다. 접근성 서비스를 사용하시겠습니까?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"접근성 서비스를 사용 중지하시겠습니까?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"배터리 사용"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"배터리를 사용한 항목"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"플러그를 뽑은 이후 배터리 전원 사용"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"항상 내 설정 사용"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"아래 기본 설정으로 응용프로그램 설정 덮어쓰기"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"기본 설정"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"말하는 속도"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"텍스트를 발음하는 속도"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"피치"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"전원 컨트롤"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Wi-Fi 설정 업데이트"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"블루투스 설정 업데이트"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"자격증명 설치 프로그램"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN 설정"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"<xliff:g id="NAME">%s</xliff:g>에 연결"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"사용자 이름:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"자격증명 저장소가 삭제되었습니다."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"자격증명 저장소를 사용합니다."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"자격증명 저장소를 사용 중지했습니다."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"긴급 신호음"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"긴급 통화 중 동작 설정"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"개인정보 보호"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index ab9f5b4..55b7d19 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Ukjent"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Slå på radio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Slå av radio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Slå på QXDM-minnekortlogg"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Slå av QXDM-minnekortlogg"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Se SIM-adressebok"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Vis faste nummer"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Vis tjenestenummer"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Hent PDP-liste"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Slå på datatilkobling"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Slå av datatilkobling"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Slå på data ved oppstart"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Slå av data ved oppstart"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"I serviceperiode"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Ute av serviceperiode"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Kun nødsamtaler"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping IP-adresse:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Ping vertsnavn(www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP-klienttest:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Sål av/på kryptering"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Kjør ping-test"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Oppdater"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Last på nytt"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Slå av/på DNS-sjekk"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Velg GSM/UMTS-bånd"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Henter båndliste…"</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Velg"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Kobler fra…"</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Frakoblet"</string>
     <string name="status_failed" msgid="610462050405904601">"Mislykket"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Lyd og skjerm"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Lyd og bilde"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Lydinnstillinger"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Ringetoner, varsling, lysstyrke"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Stillemodus"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Slå av alle lyder unntatt media og alarmer"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Alle lyder unntatt media og alarmer er slått av"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Velg ringetone for varsling"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Medievolum"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Volum for musikk og video"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Forankre lyd"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Lydinnstillinger for festet forankring"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Hørbare tastetoner"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Spill toner når talltastaturet benyttes"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Spill lyd for minnekortvarsler"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Støyreduksjon"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Demp bakgrunnsstøy når du snakker eller tar opp."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Forankringstasjon"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Innstillinger for forankringsstasjon"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Lyd"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Innstillinger for festet skrivebordsforankring"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Innstillinger for festet bilforankring"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefonen er ikke plassert i forankringsstasjonen"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Innstillinger for festet forankring"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Finner ikke forankringsstasjon"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Telefonen må være plassert i forankringsstasjonen for å konfigurere forankringslyden"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Kontoer/synkronisering"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Legge til eller fjerne kontoer og endre kontoinnstillinger"</string>
     <string name="search_settings" msgid="1910951467596035063">"Søk"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Total plass"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Avmonter/løs ut minnekort"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Løs ut minnekortet for trygg fjerning"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formater minnekort"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formater (fjern alt fra) minnekortet"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Ikke tilgjengelig"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Installerte applikasjoner, hurtigtaster"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Innstillinger for applikasjoner"</string>
     <string name="install_applications" msgid="4872012136210802181">"Ukjente kilder"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Tillat installasjon av applikasjoner som ikke kommer fra markedet"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Telefonen og dine personlige data er mer sårbare mot angrep fra applikasjoner som kommer fra ukjente kilder. Du godtar at du selv er ansvarlig for enhver skade på telefonen eller tap av data som måtte oppstå fra bruk av slike applikasjoner."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Applikasjonsinformasjon"</string>
     <string name="storage_label" msgid="8700867073480107253">"Lagring"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Ingen tilgjengelighetstjenester er installert."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>Denne tilgjengelighetstjenesten har tilgang til all tekst du skriver, inkludert personlig data som passord og kredittkortnummer. Den kan også loggføre alt som skjer i brukergrensesnittet. Det kommer fra programmet. Aktivere tilgjengelighetstjenesten?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Slå av tilgjengelighetsstøtten?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Batteribruk"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Hva som har brukt batteri"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Batteribruk siden strømmen ble trukket ut"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Overstyr innstillinger"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Standardvalgene under overstyrer applikasjonsinnstillinger"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Standardvalg"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Talehastighet"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Hvor raskt teksten leses"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Stemmeleie"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Strømkontroll"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Oppdaterer innstilling for Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Oppdatere Bluetooth-innstilling"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Akkreditivinstallasjon"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN-innstillinger"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Koble til <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Brukernavn:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Akkreditivlageret ble tømt."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Akkreditivlageret er aktivert."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Akkreditivlageret er deaktivert."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Nødtone"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Velg oppførsel når en nødsamtale opprettes"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Personvern"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 04bd5d0..edf3d7e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Onbekend"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Radio inschakelen"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Radio uitschakelen"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"QXDM SD-logboek inschakelen"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"QXDM SD-logboek uitschakelen"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"SIM-adresboek weergeven"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Vaste nummers weergeven"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Servicenummers weergeven"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"PDP-lijst ophalen"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Gegevensverbinding inschakelen"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Gegevensverbinding uitschakelen"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Gegevens inschakelen bij opstarten"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Gegevens uitschakelen bij opstarten"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"In gebruik"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Niet in gebruik"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Alleen noodoproepen"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"IP-adres pingen:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Hostnaam pingen (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP-client testen:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Codering in-/uitschakelen"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Pingtest uitvoeren"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Bijwerken"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Vernieuwen"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"DNS-controle in-/uitschakelen"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"GSM/UMTS-band instellen"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Bandlijst laden..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Instellen"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Verbinding verbreken..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Verbinding verbroken"</string>
     <string name="status_failed" msgid="610462050405904601">"Mislukt"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Geluid en weergave"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Geluid- en weergaveinstellingen"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Geluidsinstellingen"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Beltonen, meldingen, schermhelderheid instellen"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Stille modus"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Alle geluiden worden uitgeschakeld, behalve media- en alarmtonen"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Alle geluiden, behalve media, worden uitgeschakeld"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Beltoon voor meldingen selecteren"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Mediavolume"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Volume voor muziek en video\'s instellen"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Audio van dockstation"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Audio-instellingen voor het gekoppelde dockstation"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Aanraaktonen"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Tonen afspelen bij gebruik van toetsenblok"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Geluid afspelen voor SD-kaartmeldingen"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Geluidsdemping"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Demp achtergrondgeluid tijdens spraakinvoer of opname."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Docken"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Instellingen voor dockstation"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Instellingen voor het gekoppelde bureaudockstation"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Instellingen voor het gekoppelde autodockstation"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefoon niet gedockt"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Instellingen voor het gekoppelde dockstation"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Dockstation niet gevonden"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"De telefoon moet zijn gedockt om audio-instellingen voor het dockstation in te stellen"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Accounts en synchronisatie"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Accounts toevoegen of verwijderen en accountinstellingen wijzigen"</string>
     <string name="search_settings" msgid="1910951467596035063">"Zoeken"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Totale ruimte"</string>
     <string name="sd_eject" msgid="6915293408836853020">"SD-kaart ontkoppelen"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"De SD-kaart ontkoppelen zodat u deze veilig kunt verwijderen"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"SD-kaart formatteren"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"De SD-kaart formatteren (wissen)"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Niet beschikbaar"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Toepassingen beheren, sneltoetsen voor snelstarten instellen"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Toepassingsinstellingen"</string>
     <string name="install_applications" msgid="4872012136210802181">"Onbekende bronnen"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Installatie van andere toepassingen dan Market-toepassingen toestaan"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Uw telefoon en persoonlijke gegevens zijn gevoeliger voor aanvallen door toepassingen van onbekende bronnen. U gaat ermee akkoord dat u alleen verantwoordelijk bent voor enige schade aan uw telefoon of verlies van gegevens die voortkomen uit het gebruik van deze toepassingen."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Toepassingsinfo"</string>
     <string name="storage_label" msgid="8700867073480107253">"Opslagruimte"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Geen geïnstalleerde toegankelijkheidsservices."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Deze toegankelijkheidsservice verzamelt mogelijk alle tekst die u typt, inclusief persoonlijke gegevens en creditcardnummers, maar geen wachtwoorden. De service kan ook uw interacties met de gebruikersinterface vastleggen. De service is afkomstig uit de toepassing <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Deze toegankelijkheidsservice inschakelen?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Toegankelijkheid uitschakelen?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Accugebruik"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Waarvoor de accu is gebruikt"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Accugebruik sinds losgekoppeld"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Altijd mijn instellingen gebruiken"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Onderstaande standaardinstellingen overschrijven toepassingsinstellingen"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Standaardinstellingen"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Spraaksnelheid"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Snelheid waarmee de tekst wordt gesproken"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Hoogte"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Energiebeheer"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Wi-Fi-instelling bijwerken"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Bluetooth-instelling bijwerken"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Installatieprogramma voor referenties"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN-instellingen"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Verbinding maken met <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Gebruikersnaam:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"De opslag van referenties is gewist."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"De opslag van referenties is ingeschakeld."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"De opslag van referenties is uitgeschakeld."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Toon voor noodoproep"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Gedrag bij noodoproepen instellen"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Privacy"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 4c51870..05b9595 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Nieznany"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Włącz radio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Wyłącz radio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Włącz dziennik QXDM dla karty SD"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Wyłącz dziennik QXDM dla karty SD"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Wyświetl książkę adresową na karcie SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Wyświetl ustalone numery"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Wyświetl numery usług"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Pobierz listę PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Włącz połączenie danych"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Wyłącz połączenie danych"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Włącz dane podczas uruchamianiu"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Wyłącz dane przy uruchamianiu"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Działa"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Nie działa"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Tylko połączenia alarmowe"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Wyślij polecenie ping adresu IP:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Nazwa hosta dla operacji ping (www.google.pl):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Test klienta HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Przełącz szyfrowanie"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Przeprowadź test ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Aktualizuj"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Odśwież"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Przełącz sprawdzanie DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Ustaw pasmo GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Ładowanie listy pasm..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Ustaw"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Rozłączanie..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Rozłączona"</string>
     <string name="status_failed" msgid="610462050405904601">"Niepowodzenie"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Dźwięk i wyświetlacz"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Ustawienia dźwięku i wyświetlania"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Ustawienia dźwięku"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Ustaw dzwonki, powiadomienia, jasność ekranu"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Tryb cichy"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Wszystkie dźwięki oprócz multimediów i alarmów są wyciszone"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Wszystkie dźwięki za wyjątkiem multimediów są wyciszone"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Wybierz dzwonek powiadomienia"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Głośność multimediów"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Ustaw głośność muzyki oraz filmów wideo"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Dźwięk z podstawki"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Ustawienia dźwięku dla podłączonej podstawki"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Wybieranie numeru"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Odtwarzaj dźwięki podczas używania panelu wybierania numeru"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Odtwarzaj dźwięk dla powiadomień o karcie SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Eliminowanie szumu"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Redukcja szumów w tle podczas mówienia lub nagrywania"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Podstawka"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Ustawienia podstawki"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Dźwięk"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Ustawienia dla podstawki na biurku"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Ustawienia dla podstawki w samochodzie"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefon niezadokowany"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Ustawienia dla podłączonej podstawki"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Nie znaleziono podstawki"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Telefon musi być na podstawce, aby można było konfigurować dźwięk"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Konta i synchronizacja"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Dodaj lub usuń konta i zmień ich ustawienia"</string>
     <string name="search_settings" msgid="1910951467596035063">"Wyszukiwanie"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Całkowita pojemność"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Odłącz kartę SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Odłącz kartę SD, aby bezpiecznie ją usunąć"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatuj kartę SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formatuj (wymaż) kartę SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Niedostępna"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Zarządzaj aplikacjami, skonfiguruj skróty szybkiego uruchamiania"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Ustawienia aplikacji"</string>
     <string name="install_applications" msgid="4872012136210802181">"Nieznane źródła"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Pozwól na instalowanie aplikacji spoza Android Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Telefon i dane osobiste są bardziej narażone na atak za pomocą aplikacji z nieznanych źródeł. Zgadzasz się ponieść pełną odpowiedzialność za wszelkie uszkodzenia telefonu oraz utratę danych, które mogą wyniknąć ze stosowania tych aplikacji."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Informacje o aplikacji"</string>
     <string name="storage_label" msgid="8700867073480107253">"Pamięć"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Brak zainstalowanych usług ułatwień dostępu."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Ta usługa ułatwień dostępu może gromadzić cały wpisywany tekst, w tym dane osobiste w postaci numerów kart kredytowych, ale z wyłączeniem haseł. Może również zapisywać w dzienniku działania w interfejsie użytkownika. Usługa pochodzi z aplikacji <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Czy skorzystać z tej usługi ułatwień dostępu?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Czy wyłączyć ułatwienia dostępu?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Użycie baterii"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Gdzie wykorzystywana jest bateria"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Użycie baterii od odłączenia"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Zawsze używaj moich ustawień"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Poniższe ustawienia domyślne zastępują ustawienia aplikacji"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Ustawienia domyślne"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Szybkość mowy"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Szybkość czytania tekstu"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tony"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Zarządzanie energią"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Aktualizowanie ustawień Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Aktualizowanie ustawień Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Program instalacyjny danych logowania"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Ustawienia sieci VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Połącz z siecią <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nazwa użytkownika:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Magazyn danych uwierzytelniania został wyczyszczony."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Magazyn danych logowania jest włączony."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Magazyn danych logowania jest wyłączony."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Sygnał alarmowy"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Skonfiguruj sposób działania w przypadku połączenia alarmowego"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Prywatność"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index fa6e6e9..c2e2660 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Desconhecido"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Ligar rádio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Desligar rádio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Activar registo QXDM do SD"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Desactivar registo QXDM do SD"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Ver livro de endereços do SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Ver números de marcação fixos"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Ver números de marcação de serviços"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Obter lista de PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Activar ligação de dados"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Desactivar ligação de dados"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Activar dados no arranque"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Desactivar dados no arranque"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Em serviço"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Fora de serviço"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Apenas chamadas de emergência"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping EnderIp:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Efectuar ping de nome de anfitrião (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Teste de cliente HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Comutar encriptação"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Executar teste de ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Actualizar"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Actualizar"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Comutar verificação de DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Definir banda GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"A carregar lista de bandas..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Definir"</string>
@@ -285,11 +280,16 @@
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilizar para áudio de multimédia"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilizar para áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utilizar para transferência de ficheiros"</string>
-    <string name="bluetooth_dock_settings" msgid="3218335822716052885">"Definições da Estação de ancoragem"</string>
-    <string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"Utilizar estação de ancoragem para áudio"</string>
-    <string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"Como telefone com altifalante"</string>
-    <string name="bluetooth_dock_settings_a2dp" msgid="8791004998846630574">"Para música e multimédia"</string>
-    <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Memorizar definições"</string>
+    <!-- no translation found for bluetooth_dock_settings (3218335822716052885) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_title (5543069893044375188) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_headset (1001821426078644650) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_a2dp (8791004998846630574) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_remember (5551459057010609115) -->
+    <skip />
     <string name="wifi" msgid="1081550856200013637">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_title" msgid="874495178395350104">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="1047950931623694366">"Activar Wi-Fi"</string>
@@ -387,10 +387,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"A desligar..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Desligado"</string>
     <string name="status_failed" msgid="610462050405904601">"Sem sucesso"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Som e visualização"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Definições de som e visualização"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Definições de som"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Definir toques, notificações, brilho do ecrã"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Modo silencioso"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Todos os sons são silenciados, excepto multimédia e alarmes"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Todos os sons estão silenciados, excepto multimédia"</string>
@@ -402,15 +399,20 @@
     <string name="vibrate_summary" msgid="5224303668448643275">"Vibrar telefone para chamadas recebidas"</string>
     <string name="notification_sound_title" msgid="6316316069880531693">"Toque de notificação"</string>
     <string name="notification_sound_summary" msgid="7628081155578496618">"Definir toque de notificações predefinido"</string>
-    <string name="notification_pulse_title" msgid="1247988024534030629">"Sinalizar luz de notificação"</string>
-    <string name="notification_pulse_summary" msgid="6899220780534617152">"Sinalizar repetidamente luz da trackball para novas notificações"</string>
+    <!-- no translation found for notification_pulse_title (1247988024534030629) -->
+    <skip />
+    <!-- no translation found for notification_pulse_summary (6899220780534617152) -->
+    <skip />
     <string name="incoming_call_volume_title" msgid="6144314834963494752">"Volume de chamadas recebidas"</string>
     <string name="notification_volume_title" msgid="3363351773121138717">"Volume de notificações"</string>
     <string name="checkbox_notification_same_as_incoming_call" msgid="1073644356290338921">"Utilizar volume de chamadas recebidas para notificações"</string>
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Seleccionar toque de notificações"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Volume de multimédia"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Definir volume para música e vídeos"</string>
-    <string name="dock_settings_summary" msgid="455802113668982481">"Definições de áudio para a estação de ancoragem acoplada"</string>
+    <!-- no translation found for dock_settings_title (5121296855098055941) -->
+    <skip />
+    <!-- no translation found for dock_settings_summary (455802113668982481) -->
+    <skip />
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Tons de toque audíveis"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Reproduzir tons ao utilizar teclado de marcação"</string>
     <string name="dtmf_tone_enable_summary_off" msgid="7791065951268525678">"Reproduzir tons ao utilizar teclado de marcação"</string>
@@ -425,15 +427,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Reproduzir som para notificações do cartão SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Cancelamento de ruídos"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Suprime ruídos de fundo ao falar ou gravar."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Estação de ancoragem"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Definições da estação de ancoragem"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Áudio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Definições da estação de ancoragem para ambiente de trabalho acoplada"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Definições da estação de ancoragem para automóvel acoplada"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefone não ancorado"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Definições da estação de ancoragem acoplada"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Estação de ancoragem não encontrada"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"O telefone tem de estar ancorado para configurar o áudio da estação de ancoragem"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Contas e sincronização"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Adicionar ou remover contas e alterar definições de contas"</string>
     <string name="search_settings" msgid="1910951467596035063">"Pesquisar"</string>
@@ -507,6 +500,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Espaço total"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Desmontar cartão SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Desmontar o cartão SD para remoção segura"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatar cartão SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formatar (apagar) o cartão SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Indisponível"</string>
@@ -635,7 +634,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Gerir aplicações, configurar atalhos de iniciação rápida"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Definições da aplicação"</string>
     <string name="install_applications" msgid="4872012136210802181">"Fontes desconhecidas"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Permitir instalação de aplicações não Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"O seu telefone e dados pessoais estão mais vulneráveis a ataques por aplicações de fontes desconhecidas. O utilizador reconhece ser o único responsável por danos no telefone ou perda de dados que possam resultar da utilização destas aplicações."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Informações da aplicação"</string>
     <string name="storage_label" msgid="8700867073480107253">"Armazenamento"</string>
@@ -798,6 +798,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Nenhum serviço de acessibilidade instalado."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Este serviço de acessibilidade pode captar todo o texto que escrever, incluindo dados pessoais e números de cartões de crédito, com excepção de palavras-passe. Também pode registar as interacções com a interface do utilizador. O serviço é fornecido com a aplicação <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Utilizar este serviço de acessibilidade?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Desactivar acessibilidade?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Utilização da bateria"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"O que tem estado a utilizar a bateria"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Bateria utilizada desde que foi desligado"</string>
@@ -862,6 +866,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Utilizar sempre as minhas definições"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"As predefinições abaixo substituem as definições da aplicação"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Predefinições"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de voz"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade a que o texto é falado"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonalidade"</string>
@@ -878,7 +886,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Controlo de Energia"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Actualizar definição de Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Actualizar a definição do Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Instalador de credenciais"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Definições da VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Ligar a <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nome de utilizador:"</string>
@@ -983,6 +990,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"O armazenamento de credenciais foi apagado."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"O armazenamento de credenciais está activado."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"O armazenamento de credenciais está desactivado."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Tom de emergência"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Definir o comportamento quando é efectuada uma chamada de emergência"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Privacidade"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 236d398..9c548b0 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Desconhecido"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Ativar o rádio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Desativar o rádio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Ativar registro do SD QXDM"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Desativar registro do SD QXDM"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Visualizar o catálogo de endereços do SIM"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Visualizar números de chamada fixa"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Visualizar números de chamada de serviço"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Obter a lista PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Ativar conexão de dados"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Desativar conexão de dados"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Ativar dados na inicialização"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Desativar dados na inicialização"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Em serviço"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Fora de serviço"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Apenas chamadas de emergência"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Aplicar ping em IpAddr:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Aplicar ping no nome do host (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Teste do Cliente HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Ativar/desativar criptografia"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Executar teste de ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Atualizar"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Atualizar"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Ativar/desativar verificação de DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Definir frequência GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Carregando a lista de frequências…"</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Definir"</string>
@@ -285,11 +280,16 @@
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Usar para áudio de mídia"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usar para áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Usado para transferência de arquivo"</string>
-    <string name="bluetooth_dock_settings" msgid="3218335822716052885">"Configurações de dock"</string>
-    <string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"Usar dock para áudio"</string>
-    <string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"Como viva-voz"</string>
-    <string name="bluetooth_dock_settings_a2dp" msgid="8791004998846630574">"Para música e mídia"</string>
-    <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Lembrar configurações"</string>
+    <!-- no translation found for bluetooth_dock_settings (3218335822716052885) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_title (5543069893044375188) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_headset (1001821426078644650) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_a2dp (8791004998846630574) -->
+    <skip />
+    <!-- no translation found for bluetooth_dock_settings_remember (5551459057010609115) -->
+    <skip />
     <string name="wifi" msgid="1081550856200013637">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_title" msgid="874495178395350104">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="1047950931623694366">"Ativar Wi-Fi"</string>
@@ -387,10 +387,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Desconectando…"</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Desconectado"</string>
     <string name="status_failed" msgid="610462050405904601">"Falha"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Som e tela"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Configurações de som e tela"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Configurações de som"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Definir toques, notificações, brilho da tela"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Modo silencioso"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Todos os sons, exceto de mídia e alarmes, são silenciados."</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Todos os sons, exceto de mídia, estão silenciados"</string>
@@ -402,15 +399,20 @@
     <string name="vibrate_summary" msgid="5224303668448643275">"Vibrar o telefone para chamadas recebidas"</string>
     <string name="notification_sound_title" msgid="6316316069880531693">"Toque de notificação"</string>
     <string name="notification_sound_summary" msgid="7628081155578496618">"Definir o seu toque de notificação padrão"</string>
-    <string name="notification_pulse_title" msgid="1247988024534030629">"Pulsar luz de notificação"</string>
-    <string name="notification_pulse_summary" msgid="6899220780534617152">"Pulsar luz do trackball repetidamente para novas notificações"</string>
+    <!-- no translation found for notification_pulse_title (1247988024534030629) -->
+    <skip />
+    <!-- no translation found for notification_pulse_summary (6899220780534617152) -->
+    <skip />
     <string name="incoming_call_volume_title" msgid="6144314834963494752">"Volume da chamada recebida"</string>
     <string name="notification_volume_title" msgid="3363351773121138717">"Volume da notificação"</string>
     <string name="checkbox_notification_same_as_incoming_call" msgid="1073644356290338921">"Usar volume de chamada recebida para notificações"</string>
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Selecionar toque de notificação"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Volume da mídia"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Definir o volume para música e vídeos"</string>
-    <string name="dock_settings_summary" msgid="455802113668982481">"Configurações de áudio para dock anexo"</string>
+    <!-- no translation found for dock_settings_title (5121296855098055941) -->
+    <skip />
+    <!-- no translation found for dock_settings_summary (455802113668982481) -->
+    <skip />
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Sons de toque audíveis"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Reproduzir sons ao usar o teclado"</string>
     <string name="dtmf_tone_enable_summary_off" msgid="7791065951268525678">"Reproduzir sons ao usar o teclado"</string>
@@ -425,15 +427,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Reproduzir som para notificações do cartão SD"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Cancelamento dos ruídos"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Diminuir o ruído de fundo quando falar ou gravar."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Dock"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Configurações de dock"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Áudio"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Configurações para o dock do computador anexo"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Configurações para o dock do carro anexo"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefone não encaixado"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Configurações para o dock anexo"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Dock não encontrado"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"O telefone deve estar encaixado para configurar o áudio do dock"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Contas e sincronização"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Adicionar ou remover contas e alterar as configurações da conta"</string>
     <string name="search_settings" msgid="1910951467596035063">"Pesquisar"</string>
@@ -507,6 +500,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Espaço total"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Desmontar cartão SD"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Desmontar o cartão SD para remoção segura"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatar cartão SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formatar (apagar) o cartão SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Não disponível"</string>
@@ -635,7 +634,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Gerenciar aplicativos, configurar atalhos de inicialização rápida"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Configurações de aplicativos"</string>
     <string name="install_applications" msgid="4872012136210802181">"Fontes desconhecidas"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Permite a instalação de aplicativos que não são do Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Os dados do seu telefone e os dados pessoais estão mais vulneráveis a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano causado ao seu telefone ou pela perda de dados que possa resultar do uso desses aplicativos."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Informações do aplicativo"</string>
     <string name="storage_label" msgid="8700867073480107253">"Armazenamento"</string>
@@ -798,6 +798,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Nenhum serviço de acessibilidade instalado."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Este serviço de acessibilidade pode coletar todo o texto que você digitar, incluindo dados pessoais e números de cartão de crédito, menos senhas. Ele também pode registrar as interações da interface do usuário. Ele é proveniente do aplicativo <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Usar este serviço de acessibilidade?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Desativar acessibilidade?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Uso da bateria"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Onde a bateria tem sido usada"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Uso da bateria desde a desconexão do aparelho"</string>
@@ -862,6 +866,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Usar minhas config."</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"As conf. padrão abaixo substituem as conf. do aplicativo"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Configurações padrão"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de fala"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade em que o texto é falado"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Frequência do som"</string>
@@ -878,7 +886,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Controle de energia"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Atualizando configuração Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Atualizando configuração Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Instalador de credenciais"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Configurações de VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Conectar-se a <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Nome de usuário:"</string>
@@ -983,6 +990,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"O armazenamento de credenciais foi apagado."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"O armazenamento de credenciais foi ativado."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"O armazenamento de credenciais foi desativado."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Tom de emergência"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Definir comportamento durante uma chamada de emergência"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Privacidade"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index a8392cc..47667ca 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Неизвестно"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Включить радио"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Отключить радио"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Включить SD-журнал QXDM"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Отключить SD-журнал QXDM"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Просмотреть адресную книгу на SIM-карте"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Просм. список разреш. номеров"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Просмотреть номера служебного набора"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Получить список PDP"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Включить подключение для передачи данных"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Отключить подключение для передачи данных"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Включить данные при загрузке"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Отключить данные при загрузке"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Обслуживается"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Вне зоны обслуживания"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Только вызовы службы экстренной помощи"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Выполнить проверку ping IP-адреса:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"ping имя узла (www.google.ru):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Проверка клиента HTTP:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Переключить шифрование"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Выполнить проверку ping"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Обновить"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Обновить"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Выбор проверки DNS"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Настроить частоту GSM/UMTS"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Загрузка списка частот..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Настроить"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Отключение..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Отключено"</string>
     <string name="status_failed" msgid="610462050405904601">"Сбой"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Звук и изображение"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Звук и изображение"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Настройки звука"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Настройка мелодий, уведомлений, яркости экрана"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Бесшумный режим"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Все звуки, кроме мультимедиа и будильника, отключены"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Все звуки, кроме аудио и видео, отключены"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Выбрать мелодию уведомлений"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Громкость мультимедиа"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Настроить громкость музыки и видео"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Звук док-станции"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Настройки звука для подключенной док-станции"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Звук клавиш"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Включить тональные сигналы при нажатии клавиш"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Включить звук для уведомлений SD-карты"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Подавление шума"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Подавляет фоновый шум при записи или разговоре."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Док-станция"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Настройки док-станции"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Аудио"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Настройки подключенной настольной док-станции"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Настройки подключенной автомобильной док-станции"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Телефон не подключен к док-станции"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Настройки подключенной док-станции"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Док-станция не найдена."</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Чтобы настроить звук док-станции, телефон должен быть подключен к ней."</string>
     <string name="sync_settings" msgid="9186125469300013491">"Аккаунты и синхронизация"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Добавление или удаление аккаунтов и изменение настроек аккаунта"</string>
     <string name="search_settings" msgid="1910951467596035063">"Поиск"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Всего места"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Извлечение SD-карты"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Безопасное извлечение SD-карты"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Форматировать карту SD"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Форматировать (очистить) карту SD"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Недоступно"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Управление приложениями, настройка клавиш быстрого запуска"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Настройки приложения"</string>
     <string name="install_applications" msgid="4872012136210802181">"Неизвестные источники"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Разрешить установку приложений, полученных не из Маркета"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Телефон и личные сведения более уязвимы к атакам приложений из неизвестных источников. Вы подтверждаете, что берете на себя всю ответственность в случае повреждения телефона и потери данных при использовании этих приложений."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Сведения о приложении"</string>
     <string name="storage_label" msgid="8700867073480107253">"Память"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Службы специальных возможностей не установлены."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Эта служба специальных возможностей может записывать весь текст, который вы вводите, в том числе личные данные и номера кредитных карт, за исключением паролей. Служба запущена приложением <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Использовать службу?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Отключить специальные возможности?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Расход заряда батареи"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"На что расходуется заряд батареи"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Расход заряда батареи с момента отключения от сети питания"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Всегда использовать мои настройки"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Мои настройки по умолчанию заменяют настройки приложений"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Настройки по умолчанию"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Скорость речи"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Скорость чтения текста"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Тон"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Управление питанием"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Обновление настроек Wi-Fi"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Обновление настроек Bluetooth"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Установщик регистрационных данных"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"Настройки VPN"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Подключить к \"<xliff:g id="NAME">%s</xliff:g>\""</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Имя:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Хранилище регистрационных данных очищено."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Хранилище регистрационных данных включено."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Хранилище регистрационных данных отключено."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Тональный сигнал экстренного вызова"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Настроить режим работы при экстренном вызове"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Конфиденциальность"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 803a052..8e550d9 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Okänd"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Sätt på radio"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Stäng av radio"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"Aktivera QXDM SD-logg"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"Inaktivera QXDM SD-logg"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"Visa SIM-adressbok"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Visa Fasta nummer"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Visa tjänstenummer"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"Hämta PDP-lista"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Aktivera dataanslutning"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Inaktivera dataanslutning"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Aktivera data vid start"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Inaktivera data vid start"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"I tjänst"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Ur funktion"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Endast nödsamtal"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping IpAdr:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Pinga värdnamn (www.google.com):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"Test av HTTP-klient:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Växla kryptering"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Köra pingtest"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Uppdatera"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Uppdatera"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"Växla mellan DNS-kontroll"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"Ställ in GSM/UMTS-band"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Läser in bandlista…"</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Ställ in"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Kopplar ifrån…"</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Frånkopplad"</string>
     <string name="status_failed" msgid="610462050405904601">"Misslyckades"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Ljud och skärm"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Inställningar för ljud och skärm"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Ljudinställningar"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Ställ in ringsignaler, aviseringar, skärmens ljusstryka"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Tyst läge"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Alla ljud utom media och larm tystas"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Alla ljud utom media tystas"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Välj ringsignal för avisering"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Mediavolym"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Ställ in volym för musik och video"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Dockningsljud"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Ljudinställningar för den anslutna dockan"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Knappljud"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Spela upp signaler när knappsatsen används"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"Spela ljud vid aviseringar för SD-kort"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Ta bort bakgrundsljud"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Ta bort bakgrundsljud vid samtal eller inspelning."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Dockning"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Dockningsinställningar"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Ljud"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Inställningar för ansluten skrivbordsdocka"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Inställningar för ansluten bildocka"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefonen är inte dockad"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Inställningar för ansluten dockningsenhet"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Ingen dockningsenhet hittades"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Telefonen måste vara dockad när du konfigurerar ljudet för dockning"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Konton och synkronisering"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Lägg till eller ta bort konton och ändra kontoinställningar"</string>
     <string name="search_settings" msgid="1910951467596035063">"Sök"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Totalt utrymme"</string>
     <string name="sd_eject" msgid="6915293408836853020">"Montera bort SD-kort"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"Montera bort SD-kortet för säker borttagning"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"Formatera SD-kort"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"Formatera (radera) SD-kortet"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Inte tillgängligt"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Hantera program, ställ in genvägar för snabbstart"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Programinställningar"</string>
     <string name="install_applications" msgid="4872012136210802181">"Okända källor"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Tillåt installation av program som inte finns i Market"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Din telefon och dina personliga uppgifter är mer känsliga för hot från program från okända källor. Du godkänner att du själv är ansvarig för eventuella skador på din telefon eller förlust av data som kan uppstå när du använder dessa program."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Programinformation"</string>
     <string name="storage_label" msgid="8700867073480107253">"Lagring"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Inga installerade tillgänglighetstjänster."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Tillgänglighetstjänsten kan samla in all text du skriver, inklusive personliga uppgifter som kreditkortsnummer, men inte lösenord. Den kan även logga din kommunikation med användargränssnittet. Den kommer från programmet <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>. Vill du aktivera tillgänglighetstjänsten?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Vill du inaktivera tillgänglighet?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Batteriförbrukning"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Program som har förbrukat batteriet"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Batteriförbrukning sedan bortkoppling"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Använd alltid mina inställningar"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Standardinställningarna nedan åsidosätter programinställningarna"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Standardinställningar"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Talhastighet"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Talhastighet för texten"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ton"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Strömkontroll"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Uppdaterar Wi-Fi-inställningar"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Uppdatera Bluetooth-inställningar"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Installerare för användaruppgifter"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN-inställningar"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Anslut till <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Användarnamn:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Uppgiftslagringen raderades."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Uppgiftslagring är aktiverat."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Uppgiftslagring har inaktiverats."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Nödsignal"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Ange beteende vid nödsamtal"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Sekretess"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index fcf9318..37b3571 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"Bilinmiyor"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"Radyoyu aç"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"Radyoyu kapat"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"QXDM SD günlüğünü etkinleştir"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"QXDM SD günlüğünü devre dışı bırak"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"SIM adres defterini görüntüle"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"Sabit Arama Numaralarını Görüntüle"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"Hizmet Arama Numaralarını Görüntüle"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"PDP listesini al"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"Veri bağlantısını etkinleştir"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"Veri bağlantısını devre dışı bırak"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"Açılışta verileri etkinleştir"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"Açılışta verileri devre dışı bırak"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"Hizmette"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"Hizmet dışı"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"Yalnızca acil çağrılar için"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping IpAddr:"</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Ping Ana Makine Adı (www.google.com.tr):"</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP İstemcisi testi:"</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"Şifrelemeyi aç/kapa"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"Ping testini çalıştır"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"Güncelle"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"Yenile"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"DNS denetimini aç/kapa"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"GSM/UMTS bandını ayarla"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"Bant listesi yükleniyor…"</string>
     <string name="band_mode_set" msgid="5730560180249458484">"Ayarla"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"Bağlantı kesiliyor…"</string>
     <string name="status_disconnected" msgid="7561688569905126046">"Bağlantı kesildi"</string>
     <string name="status_failed" msgid="610462050405904601">"Başarısız"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"Ses ve görüntü"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"Ses ve görüntü ayarları"</string>
     <string name="sound_settings" msgid="5007659014828162881">"Ses ayarları"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"Zil seslerini, bildirimleri, ekran parlaklığını ayarla"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"Sessiz mod"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"Medya ve alarmlar dışında tüm sesleri susturulur"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"Medya dışında tüm sesler susturulur"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"Bildirim zil sesini seç"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"Medya ses düzeyi"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"Müziğin ve videoların ses düzeyini ayarla"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"Yuva sesi"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"Takılı yuva için ses ayarları"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"Duyulabilir dokunma tonları"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"Tuş takımını kullanırken ton çal"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"SD kart bildirimleri için ses yürüt"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"Gürültü giderme"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"Konuşurken veya kaydederken arka plan gürültüsünü bastırır."</string>
-    <string name="dock_settings" msgid="1820107306693002541">"Yuva"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"Yuva ayarları"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"Ses"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"Takılı masaüstü yuvası için ayarlar"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"Takılı araç yuvası için ayarlar"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"Telefon yuvaya takılı değil"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Takılı yuva için ayarlar"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"Yuva bulunamadı"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"Yuva ses ayarlarını yapılandırmak için telefon yuvaya takılı olmalıdır"</string>
     <string name="sync_settings" msgid="9186125469300013491">"Hesaplar ve senkronizasyon"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"Hesapları ekle veya kaldır ve hesap ayarlarını değiştir"</string>
     <string name="search_settings" msgid="1910951467596035063">"Ara"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"Toplam alan"</string>
     <string name="sd_eject" msgid="6915293408836853020">"SD kartının bağlantısını kes"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"SD kartı güvenle çıkarmak için bağlantısını kesin"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"SD kartı biçimlendir"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"SD kartı biçimlendir (sil)"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"Kullanılamıyor"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"Uygulamaları yönet, hızlı başlatma kısayolları ayarla"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"Uygulama ayarları"</string>
     <string name="install_applications" msgid="4872012136210802181">"Bilinmeyen kaynaklar"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"Market dışı uygulamaların yüklenmesine izin ver"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"Telefonunuz ve kişisel verileriniz, bilinmeyen kaynaklardan gelen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamaları kullanmanız sonucunda telefonunuzun başına gelebilecek her tür hasardan ve veri kaybından tarafınızın sorumlu olduğunu kabul edersiniz."</string>
     <string name="application_info_label" msgid="1150486628158409543">"Uygulama bilgileri"</string>
     <string name="storage_label" msgid="8700867073480107253">"Depolama"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"Yüklenmiş erişilebilirlik hizmeti yok."</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"Bu erişebilirlik hizmeti, şifreler hariç ve kişisel veriler, kredi kartı numaraları dahil olmak üzere yazdığınız tüm metinleri toplayabilir. Kullanıcı arayüzü etkileşimlerinizin kaydını da tutabilir. <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> uygulamasından gelmektedir. Bu erişebilirlik hizmetini kullanmak istiyor musunuz?"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"Erişilebilirlik devre dışı bırakılsın mı?"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"Pil kullanımı"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"Pili ne kullanıyor?"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"Fişten çekildikten sonra pil kullanımı"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"Her zaman benim ayarlarımı kullan"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"Aşağıdaki varsayılan ayarlar, uygulama ayarlarını geçersiz kılıyor"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"Varsayılan ayarlar"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Konuşma hızı"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Metnin konuşulduğu hız"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Perde"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"Güç Denetimi"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"Kablosuz ayarı güncelleniyor"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"Bluetooth ayarları güncelleniyor"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"Kimlik bilgisi yükleyici"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN ayarları"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"Şuna bağlan: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"Kullanıcı adı:"</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"Kimlik bilgileri deposu silindi."</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"Kimlik bilgileri deposu etkin."</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"Kimlik bilgileri deposu devre dışı."</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"Acil sesi"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"Acil çağrı yapıldığında nasıl işlev göreceğini ayarlayın"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"Gizlilik"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index fd28bdf..651b0ac 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"未知"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"打开无线通信"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"关闭无线通信"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"启用 QXDM SD 日志"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"停用 QXDM SD 日志"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"查看 SIM 卡地址簿"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"查看固定拨号"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"查看服务拨号"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"获取 PDP 列表"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"启用数据连接"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"停用数据连接"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"启动时启用数据"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"启动时停用数据"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"正在使用中"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"不在服务区"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"仅限于急救或报警电话"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping IP 地址："</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Ping 主机名 (www.google.com)："</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP 客户端测试："</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"切换加密"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"运行 ping 测试"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC："</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"更新"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"刷新"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"切换 DNS 检查"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"设置 GSM/UMTS 波段"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"正在载入波段列表..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"设置"</string>
@@ -234,7 +229,7 @@
     <string name="date_time_date_format" msgid="436706100255870967">"选择日期格式"</string>
     <string name="zone_list_menu_sort_alphabetically" msgid="5683377702671088588">"按字母顺序排序"</string>
     <string name="zone_list_menu_sort_by_timezone" msgid="2720190443744884114">"按时区排序"</string>
-    <string name="security_settings_title" msgid="5168491784222013179">"位置和安全"</string>
+    <string name="security_settings_title" msgid="5168491784222013179">"地点和安全"</string>
     <string name="location_security_settings_title" msgid="4624434296446625554">"位置和安全设置"</string>
     <string name="security_settings_summary" msgid="967393342537986570">"设置我的位置、屏幕解锁、SIM 卡锁定和凭据存储锁定"</string>
     <string name="cdma_security_settings_summary" msgid="6068799952798901542">"设置我的位置、屏幕解锁和凭据存储锁定"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"正在断开连接..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"已断开连接"</string>
     <string name="status_failed" msgid="610462050405904601">"失败"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"声音和显示"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"声音和显示设置"</string>
     <string name="sound_settings" msgid="5007659014828162881">"声音设置"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"设置铃声、通知和屏幕亮度"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"静音模式"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"除媒体和闹钟之外，所有声音均设为静音"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"对所有非多媒体声音进行静音处理"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"选择通知铃声"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"媒体音量"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"设置音乐和视频的音量"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"底座音频"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"附加底座的音频设置"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"按键操作音"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"使用拨号键盘时播放按键音效"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"播放 SD 卡通知音效"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"噪音消除"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"在进行通话或录音时降低背景噪音。"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"底座"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"底座设置"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"音频"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"附加桌面底座的设置"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"附加车载底座的设置"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"手机未插入底座"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"附加底座的设置"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"未找到底座"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"必须将手机插入底座，才能配置底座音频"</string>
     <string name="sync_settings" msgid="9186125469300013491">"帐户与同步"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"添加或删除帐户和更改帐户设置"</string>
     <string name="search_settings" msgid="1910951467596035063">"搜索"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"总容量"</string>
     <string name="sd_eject" msgid="6915293408836853020">"卸载 SD 卡"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"必须先卸载 SD 卡，才能将其安全移除"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"格式化 SD 卡"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"格式化（清除）SD 卡"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"不可用"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"管理应用程序，设置快速启动键"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"应用程序设置"</string>
     <string name="install_applications" msgid="4872012136210802181">"未知来源"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"允许安装非电子市场提供的应用程序"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"您的手机和个人数据更容易受到来自未知来源的应用程序攻击。您同意自己对因使用这些应用程序而造成的手机损坏或数据丢失承担全部责任。"</string>
     <string name="application_info_label" msgid="1150486628158409543">"应用程序信息"</string>
     <string name="storage_label" msgid="8700867073480107253">"存储"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"未安装辅助功能服务。"</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"此辅助功能服务可能会收集您键入的所有文字，包括信用卡号码等个人数据，但并不会收集您输入的密码，而且它也可能记录您的用户界面交互行为。该服务由应用程序“<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>”所提供。要使用此辅助功能服务吗？"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"是否停用辅助功能？"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"电量使用情况"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"耗电情况"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"拔下电源后的电量消耗情况"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"总是使用我的设置"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"使用以下默认设置代替应用程序设置"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"默认设置"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"语速"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"文字转换成语音后的播放速度"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"音高"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"电量控制"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"正在更新 Wi-Fi 设置"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"正在更新蓝牙设置"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"凭证安装程序"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"虚拟专用网设置"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"连接到 <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"用户名："</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"该凭证存储已删除。"</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"凭证存储已启用。"</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"凭证存储已停用。"</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"紧急提示音"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"设置进行紧急呼救时的行为"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"隐私权"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 0a18532..d8127cc 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -20,16 +20,10 @@
     <string name="device_info_default" msgid="7847265875578739287">"未知的"</string>
     <string name="turn_on_radio" msgid="8706561489788373676">"開啟無線通訊"</string>
     <string name="turn_off_radio" msgid="1820294552893884115">"關閉無線通訊"</string>
-    <string name="turn_on_qxdm" msgid="634471960429852506">"啟用 QXDM SD 記錄"</string>
-    <string name="turn_off_qxdm" msgid="5719931520533431085">"停用 QXDM SD 記錄"</string>
     <string name="radioInfo_menu_viewADN" msgid="8743377494429930831">"檢視 SIM 地址簿"</string>
     <string name="radioInfo_menu_viewFDN" msgid="7934301566925610318">"查看固定撥號"</string>
     <string name="radioInfo_menu_viewSDN" msgid="7130280686244955669">"檢視服務撥號號碼"</string>
     <string name="radioInfo_menu_getPDP" msgid="560610293888406317">"取得 PDP 清單"</string>
-    <string name="radioInfo_menu_enableData" msgid="5452877756028654595">"啟用資料連線"</string>
-    <string name="radioInfo_menu_disableData" msgid="7645419447977636497">"停用資料連線"</string>
-    <string name="radioInfo_menu_enableDataOnBoot" msgid="1438925440424627675">"開機顯示資料"</string>
-    <string name="radioInfo_menu_disableDataOnBoot" msgid="1311993066146980972">"開機不顯示資料"</string>
     <string name="radioInfo_service_in" msgid="1915416319177520020">"服務中"</string>
     <string name="radioInfo_service_out" msgid="5238736759641916278">"超出服務範圍"</string>
     <string name="radioInfo_service_emergency" msgid="2485604591272668370">"只能撥打緊急電話"</string>
@@ -170,12 +164,13 @@
     <string name="radio_info_ping_ipaddr" msgid="498747917793263530">"Ping IP 位址："</string>
     <string name="radio_info_ping_hostname" msgid="3054888474808217853">"Ping 主機名稱 (www.google.com.tw)："</string>
     <string name="radio_info_http_client_test" msgid="5733604021077701555">"HTTP 用戶端測試："</string>
-    <string name="radio_info_toggle_ciph_label" msgid="1506817306430095478">"選取加密"</string>
     <string name="ping_test_label" msgid="7255376471490860631">"執行 ping 測試"</string>
     <string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC："</string>
     <string name="radio_info_smsc_update_label" msgid="7258686760358791539">"更新"</string>
     <string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"重新整理"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"切換 DNS 檢查"</string>
+    <!-- no translation found for oem_radio_info_label (6163141792477958941) -->
+    <skip />
     <string name="band_mode_title" msgid="954174198903776205">"設定 GSM/UMTS 頻道"</string>
     <string name="band_mode_loading" msgid="548764766363847336">"載入頻道清單..."</string>
     <string name="band_mode_set" msgid="5730560180249458484">"設定"</string>
@@ -387,10 +382,7 @@
     <string name="status_disconnecting" msgid="8468213362967337584">"連線中斷..."</string>
     <string name="status_disconnected" msgid="7561688569905126046">"已中斷連線"</string>
     <string name="status_failed" msgid="610462050405904601">"失敗"</string>
-    <string name="sound_and_display_settings" msgid="349770582993029003">"音效與顯示"</string>
-    <string name="sound_and_display_settings_title" msgid="5036144539683697330">"音效與顯示設定"</string>
     <string name="sound_settings" msgid="5007659014828162881">"音效設定"</string>
-    <string name="sound_and_display_settings_summary" msgid="1433943789593286064">"設定鈴聲、通知與螢幕亮度"</string>
     <string name="silent_mode_title" msgid="3181479108593217704">"靜音模式"</string>
     <string name="silent_mode_summary" msgid="9081534746589616108">"將媒體和鬧鐘以外的所有音效靜音"</string>
     <string name="silent_mode_incl_alarm_summary" msgid="2088830834182228458">"將所有非媒體音效設為靜音"</string>
@@ -410,6 +402,7 @@
     <string name="notification_sound_dialog_title" msgid="7057274209079144726">"選取通知鈴聲"</string>
     <string name="media_volume_title" msgid="7844516127427195383">"媒體音量"</string>
     <string name="media_volume_summary" msgid="5363248930648849974">"設定音樂與影片的音量"</string>
+    <string name="dock_settings_title" msgid="5121296855098055941">"座架音訊"</string>
     <string name="dock_settings_summary" msgid="455802113668982481">"附加座架的音訊設定"</string>
     <string name="dtmf_tone_enable_title" msgid="1453831168789523185">"觸控音效"</string>
     <string name="dtmf_tone_enable_summary_on" msgid="3028201873989887327">"使用撥號面板時播放按鍵音效"</string>
@@ -425,15 +418,6 @@
     <string name="play_media_notification_sounds_enable_summary_off" msgid="8672617597028744693">"播放 SD 卡通知音效"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"噪音消除"</string>
     <string name="audio_record_proc_summary" msgid="8113628457499616498">"在說話或錄音時抑制背景雜音。"</string>
-    <string name="dock_settings" msgid="1820107306693002541">"座架"</string>
-    <string name="dock_settings_title" msgid="9161438664257429372">"座架設定"</string>
-    <string name="dock_audio_settings_title" msgid="3324750259959570305">"音效"</string>
-    <string name="dock_audio_summary_desk" msgid="6487784412371139335">"隨附的桌上型座架設定"</string>
-    <string name="dock_audio_summary_car" msgid="6740897586006248450">"隨附的車用座架設定"</string>
-    <string name="dock_audio_summary_none" msgid="289909253741048784">"手機未固定至座架"</string>
-    <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"隨附的座架設定"</string>
-    <string name="dock_not_found_title" msgid="3290961741828952424">"找不到座架"</string>
-    <string name="dock_not_found_text" msgid="3035260358985111855">"手機必須固定至座架才能設定座架音效"</string>
     <string name="sync_settings" msgid="9186125469300013491">"帳戶與同步處理"</string>
     <string name="sync_settings_summary" msgid="2962179505214965667">"新增或移除帳戶和變更帳戶設定"</string>
     <string name="search_settings" msgid="1910951467596035063">"搜尋"</string>
@@ -507,6 +491,12 @@
     <string name="memory_size" msgid="6629067715017232195">"總空間"</string>
     <string name="sd_eject" msgid="6915293408836853020">"卸載 SD 卡"</string>
     <string name="sd_eject_summary" msgid="3315557796211542962">"必須先卸載 SD 卡，才能安全移除"</string>
+    <!-- no translation found for sd_insert_summary (2048640010381803841) -->
+    <skip />
+    <!-- no translation found for sd_mount (5940523765187704135) -->
+    <skip />
+    <!-- no translation found for sd_mount_summary (4936591681679097699) -->
+    <skip />
     <string name="sd_format" msgid="5448738337382712203">"將 SD 卡格式化"</string>
     <string name="sd_format_summary" msgid="6616491027883134004">"將 SD 卡格式化 (清除)"</string>
     <string name="sd_unavailable" msgid="8580107589533213904">"無法取得資訊"</string>
@@ -635,7 +625,8 @@
     <string name="applications_settings_summary" msgid="2714215108369119717">"管理應用程式，設定快速啟動鍵"</string>
     <string name="applications_settings_header" msgid="6018266337275422250">"應用程式設定"</string>
     <string name="install_applications" msgid="4872012136210802181">"未知的來源"</string>
-    <string name="install_unknown_applications" msgid="4657036956866203596">"允許安裝非 Market 應用程式"</string>
+    <!-- no translation found for install_unknown_applications (6612824788917283662) -->
+    <skip />
     <string name="install_all_warning" msgid="1923717607319933741">"未知來源的應用程式可能會損害您的手機及個人資訊。如使用這些應用程式而造成手機受損或資料遺失，您必須自行承擔責任。"</string>
     <string name="application_info_label" msgid="1150486628158409543">"應用程式資訊"</string>
     <string name="storage_label" msgid="8700867073480107253">"儲存空間"</string>
@@ -798,6 +789,10 @@
     <string name="no_accessibility_services_summary" msgid="694578333333808159">"尚未安裝協助工具服務。"</string>
     <string name="accessibility_service_security_warning" msgid="4066258132331302670">"此協助工具服務可能會收集您輸入的所有文字，包括個人資料及信用卡號碼，但並不會收集您輸入的密碼，而且它也可能會記錄您的使用者介面互動行為。該服務是由應用程式「<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>」所提供，要使用此協助工具服務嗎？"</string>
     <string name="accessibility_service_disable_warning" msgid="8930591383312775132">"要停用協助工具嗎？"</string>
+    <!-- no translation found for accessibility_service_no_apps_title (898893674114288531) -->
+    <skip />
+    <!-- no translation found for accessibility_service_no_apps_message (2450056749545404807) -->
+    <skip />
     <string name="power_usage_summary_title" msgid="5180282911164282324">"電池使用狀況"</string>
     <string name="power_usage_summary" msgid="7237084831082848168">"查看正在消耗電力的功能"</string>
     <string name="battery_since_unplugged" msgid="338073389740738437">"拔除插頭後的電池使用狀況"</string>
@@ -862,6 +857,10 @@
     <string name="use_default_tts_settings_title" msgid="1577063839539732930">"永遠使用我的設定"</string>
     <string name="use_default_tts_settings_summary" msgid="4253502106159206276">"下列預設設定會覆寫應用程式設定"</string>
     <string name="tts_default_settings_section" msgid="5787915620218907443">"預設設定"</string>
+    <!-- no translation found for tts_default_synth_title (29467896463371992) -->
+    <skip />
+    <!-- no translation found for tts_default_synth_summary (6482936537135251690) -->
+    <skip />
     <string name="tts_default_rate_title" msgid="6030550998379310088">"語音速率"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"文字轉換成語音後的播放速度"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"音調"</string>
@@ -878,7 +877,6 @@
     <string name="gadget_title" msgid="7455548605888590466">"電源控制"</string>
     <string name="gadget_toggle_wifi" msgid="2382963973155082629">"正在更新 Wi-Fi 設定"</string>
     <string name="gadget_toggle_bluetooth" msgid="7538903239807020826">"正在更新藍牙設定"</string>
-    <string name="credential_installer_activity_title" msgid="7600661521831762521">"認證安裝程式"</string>
     <string name="vpn_settings_activity_title" msgid="7276864950701612579">"VPN 設定"</string>
     <string name="vpn_connect_to" msgid="2541409082892684362">"連線至<xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="vpn_username_colon" msgid="7854930370861306247">"使用者名稱："</string>
@@ -983,6 +981,26 @@
     <string name="credentials_erased" msgid="7700309135582200849">"已清除認證儲存空間內容。"</string>
     <string name="credentials_enabled" msgid="7588607413349978930">"已啟用認證儲存空間。"</string>
     <string name="credentials_disabled" msgid="7453188089059045380">"已停用認證儲存空間。"</string>
+    <!-- no translation found for encrypted_fs_category (1841367653663913956) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable (3884033081603327729) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_summary (5635188119509076089) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_dialog (919487211207214266) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_dialog (6960413613985682501) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_enable_button (8453841319751433751) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_disable_button (8468354944060220496) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_button (4785921255266305799) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_cancel_confirm (853572431153803557) -->
+    <skip />
+    <!-- no translation found for encrypted_fs_alert_dialog_title (583462447886934755) -->
+    <skip />
     <string name="emergency_tone_title" msgid="1055954530111587114">"緊急警示音"</string>
     <string name="emergency_tone_summary" msgid="722259232924572153">"設定撥打緊急電話時的運作方式"</string>
     <string name="privacy_settings" msgid="9206631214140954954">"隱私設定"</string>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 2981b12..4ac663b 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -17,25 +17,25 @@
 ** limitations under the License.
 */
 -->
-<resources>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Choices for timezone picker first level.
          These values will be used as search terms for TimeZone displayName
          strings. --> <skip />
     <!-- The time zone picker screen has two levels.  The first level allows the user to choose a region. -->
     <string-array name="timezone_filters">
-	<!-- The next level of the time zoner picker should show time zones from the Americas. -->
+    <!-- The next level of the time zoner picker should show time zones from the Americas. -->
         <item>America</item>
-	<!-- The next level of the time zoner picker should show time zones from Europe. -->
+    <!-- The next level of the time zoner picker should show time zones from Europe. -->
         <item>Europe</item>
-	<!-- The next level of the time zoner picker should show time zones from Africa. -->
+    <!-- The next level of the time zoner picker should show time zones from Africa. -->
         <item>Africa</item>
-	<!-- The next level of the time zoner picker should show time zones from Asia. -->
+    <!-- The next level of the time zoner picker should show time zones from Asia. -->
         <item>Asia</item>
-	<!-- The next level of the time zoner picker should show time zones from Australia. -->
+    <!-- The next level of the time zoner picker should show time zones from Australia. -->
         <item>Australia</item>
-	<!-- The next level of the time zoner picker should show time zones from Pacific. -->
+    <!-- The next level of the time zoner picker should show time zones from Pacific. -->
         <item>Pacific</item>
-	<!-- The next level of the time zoner picker should show time zones from ALL regions. -->
+    <!-- The next level of the time zoner picker should show time zones from ALL regions. -->
         <item>All</item>
     </string-array>
 
@@ -98,6 +98,22 @@
         <item>1800000</item>
     </string-array>
 
+    <!-- Unlock method in SecuritySettings --><skip/>
+    <string-array name="unlock_method_entries">
+        <item>Password</item>
+        <item>PIN</item>
+        <item>Pattern</item>
+        <item>None</item>
+    </string-array>
+
+    <!-- Do not translate. -->
+    <string-array name="unlock_method_values" translatable="false">
+        <item>password</item>
+        <item>pin</item>
+        <item>pattern</item>
+        <item>none</item>
+    </string-array>
+
     <!-- TTS settings -->
 
     <!-- Default speech rate choices -->
@@ -133,7 +149,7 @@
         <item>120</item>
         <item>150</item>
     </string-array>
-    
+
     <!-- Default language choices -->
     <string-array name="tts_lang_entries">
         <item>American English</item>
@@ -164,45 +180,89 @@
 
     <!-- Wi-Fi settings -->
 
-    <!-- Match this with code. --> <skip />
-    <!-- Wi-Fi settings.  The type of security a Wi-Fi network has.  The user can choose this when he adds a manual network, or configures an existing network. -->
-    <string-array name="wifi_security_entries">
-        <!-- Let the phone figure out the security type auutomatically. -->
-        <item>Auto</item>
-        <!-- The Wi-Fi network does not have any security. -->
-        <item>None</item>
-        <!-- Do not translate. The Wi-Fi network has WEP security. -->
-        <item>WEP</item>
-        <!-- The Wi-Fi network has WPA personal security. WPA Personal is a tech term, and might be better left untranslated? -->
-        <item>WPA/WPA2 PSK</item>
-        <!-- The Wi-Fi network has WPA EAP extensible authentication protocol. -->
-        <item>802.1x Enterprise</item>
+    <!-- Match this with the order of NetworkInfo.DetailedState. --> <skip />
+    <!-- Wi-Fi settings. The status messages when the network is unknown. -->
+    <string-array name="wifi_status">
+        <!-- Status message of Wi-Fi when it is idle. -->
+        <item></item>
+        <!-- Status message of Wi-Fi when it is scanning. -->
+        <item>Scanning\u2026</item>
+        <!-- Status message of Wi-Fi when it is connecting. -->
+        <item>Connecting\u2026</item>
+        <!-- Status message of Wi-Fi when it is authenticating. -->
+        <item>Authenticating\u2026</item>
+        <!-- Status message of Wi-Fi when it is obtaining IP address. -->
+        <item>Obtaining IP address\u2026</item>
+        <!-- Status message of Wi-Fi when it is connected. -->
+        <item>Connected</item>
+        <!-- Status message of Wi-Fi when it is suspended. -->
+        <item>Suspended</item>
+        <!-- Status message of Wi-Fi when it is disconnecting. -->
+        <item>Disconnecting\u2026</item>
+        <!-- Status message of Wi-Fi when it is disconnected. -->
+        <item>Disconnected</item>
+        <!-- Status message of Wi-Fi when it is a failure. -->
+        <item>Unsuccessful</item>
     </string-array>
 
-    <!-- Match this with code. --> <skip />
-    <!-- Wi-Fi settings.  The type of security a Wi-Fi network has.  The user can choose this when he adds a manual network, or configures an existing network. -->
-    <string-array name="wifi_security_without_auto_entries">
-        <!-- The Wi-Fi network does not have any security. -->
-        <item>None</item>
-        <!-- Do not translate. The Wi-Fi network has WEP security. -->
-        <item>WEP</item>
-        <!-- The Wi-Fi network has WPA personal security. WPA Personal is a tech term, and might be better left untranslated? -->
-        <item>WPA/WPA2 PSK</item>
-        <!-- The Wi-Fi network has WPA enterprise security. WPA Enterprise is a tech term, and might be better left untranslated? -->
-        <item>802.1x Enterprise</item>
+    <!-- Match this with the order of NetworkInfo.DetailedState. --> <skip />
+    <!-- Wi-Fi settings. The status messages when the network is known. -->
+    <string-array name="wifi_status_with_ssid">
+        <!-- Status message of Wi-Fi when it is idle. -->
+        <item></item>
+        <!-- Status message of Wi-Fi when it is scanning. -->
+        <item>Scanning\u2026</item>
+        <!-- Status message of Wi-Fi when it is connecting to a network. -->
+        <item>Connecting to <xliff:g id="network_name">%1$s</xliff:g>\u2026</item>
+        <!-- Status message of Wi-Fi when it is authenticating with a network. -->
+        <item>Authenticating with <xliff:g id="network_name">%1$s</xliff:g>\u2026</item>
+        <!-- Status message of Wi-Fi when it is obtaining IP address from a network. -->
+        <item>Obtaining IP address from <xliff:g id="network_name">%1$s</xliff:g>\u2026</item>
+        <!-- Status message of Wi-Fi when it is connected to a network. -->
+        <item>Connected to <xliff:g id="network_name">%1$s</xliff:g></item>
+        <!-- Status message of Wi-Fi when it is suspended. -->
+        <item>Suspended</item>
+        <!-- Status message of Wi-Fi when it is disconnecting from a network. -->
+        <item>Disconnecting from <xliff:g id="network_name">%1$s</xliff:g>\u2026</item>
+        <!-- Status message of Wi-Fi when it is disconnected. -->
+        <item>Disconnected</item>
+        <!-- Status message of Wi-Fi when it is a failure. -->
+        <item>Unsuccessful</item>
     </string-array>
 
-    <!-- Match this with code. --> <skip />
-    <!-- Wi-Fi settings.  Presented as a list dialog to the user.  He chooses the type of WEP key he entered. -->
-    <string-array name="wifi_wep_type">
-        <!-- This means the phone should figure out the type automatically the best it can. -->
-        <item>Auto</item>
+    <!-- Match this with the constants in AccessPoint. --> <skip />
+    <!-- Wi-Fi settings.  The type of security a Wi-Fi network has. -->
+    <string-array name="wifi_security">
+        <!-- The Wi-Fi network does not have any security. -->
+        <item>Open</item>
         <!-- Do not translate. -->
-        <item>WEP ASCII</item>
-        <!-- WEP key that is in hexadecimal. -->
-        <item>WEP hexadecimal</item>
+        <item>WEP</item>
+        <!-- Do not translate. -->
+        <item>WPA/WPA2 PSK</item>
+        <!-- Do not translate. -->
+        <item>802.1x EAP</item>
     </string-array>
-    
+
+    <!-- Match this with the constants in WifiDialog. --> <skip />
+    <!-- Wi-Fi settings.  The type of EAP method a Wi-Fi network has. -->
+    <string-array name="wifi_eap_method">
+        <!-- Do not translate. -->
+        <item>PEAP</item>
+        <!-- Do not translate. -->
+        <item>TLS</item>
+        <!-- Do not translate. -->
+        <item>TTLS</item>
+    </string-array>
+
+    <!-- Match this with drawable.wifi_signal. --> <skip />
+    <!-- Wi-Fi settings. The signal strength a Wi-Fi network has. -->
+    <string-array name="wifi_signal">
+        <item>Poor</item>
+        <item>Fair</item>
+        <item>Good</item>
+        <item>Excellent</item>
+    </string-array>
+
     <!-- Wi-Fi settings. Presented as a list dialog to the user to choose the Wi-Fi sleep policy. -->
     <string-array name="wifi_sleep_policy_entries">
         <!-- Wi-Fi should go to sleep when the screen turns off. -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9b6977d..d145841 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4,9 +4,9 @@
      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.
@@ -30,10 +30,6 @@
     <string name="turn_on_radio">Turn on radio</string>
     <!-- Phone Info screen. Button label to turn off the radio . Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="turn_off_radio">Turn off radio</string>
-    <!-- Phone Info screen. Button label to turn on the log for QXDM SD . Only shown in diagnostic screen, so precise translation is not needed. -->
-    <string name="turn_on_qxdm">Enable QXDM SD log</string>
-    <!-- Phone Info screen. Button label to turn off the log for QXDM SD . Only shown in diagnostic screen, so precise translation is not needed. -->
-    <string name="turn_off_qxdm">Disable QXDM SD log</string>
 
     <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radioInfo_menu_viewADN">View SIM address book</string>
@@ -43,14 +39,6 @@
     <string name="radioInfo_menu_viewSDN">View Service Dialing Numbers</string>
     <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radioInfo_menu_getPDP">Get PDP list</string>
-    <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="radioInfo_menu_enableData">Enable data connection</string>
-    <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="radioInfo_menu_disableData">Disable data connection</string>
-    <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="radioInfo_menu_enableDataOnBoot">Enable data on boot</string>
-    <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="radioInfo_menu_disableDataOnBoot">Disable data on boot</string>
 
     <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radioInfo_service_in">In service</string>
@@ -147,7 +135,7 @@
     <string name="battery_info_awake_plugged">Awake time when charging:</string>
     <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_screen_on">Screen ON time:</string>
-    
+
 
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_status_unknown">Unknown</string>
@@ -170,7 +158,7 @@
     <string name="battery_info_power_usb">USB</string>
     <string name="battery_info_power_ac_usb">AC+USB</string>
     <string name="battery_info_power_unknown">Unknown</string>
-    
+
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_health_unknown">Unknown</string>
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
@@ -371,8 +359,6 @@
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radio_info_http_client_test">HTTP Client test:</string>
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="radio_info_toggle_ciph_label">Toggle ciphering</string>
-    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="ping_test_label">Run ping test</string>
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radio_info_smsc_label">SMSC:</string>
@@ -382,6 +368,8 @@
     <string name="radio_info_smsc_refresh_label">Refresh</string>
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radio_info_toggle_dns_check_label">Toggle DNS check</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="oem_radio_info_label">OEM-specific Info/Settings</string>
 
     <!-- Band Mode Selection -->
     <!-- Band mode screen.  Title of activity. -->
@@ -528,6 +516,24 @@
     <string name="cdma_security_settings_summary">Set My Location, screen unlock, credential storage lock</string>
     <!-- In the security screen, the header title for settings related to  Passwords-->
     <string name="security_passwords_title">Passwords</string>
+    <!-- Name shown for changing the unlock method -->
+    <string name="unlock_method_title">Unlock Method</string>
+    <!-- Summary shown for changing the unlock method -->
+    <string name="unlock_method_summary">Change the method used to unlock your phone</string>
+    <!-- Error shown in popup when PIN is too short -->
+    <string name="pin_password_too_short">Password must be at least %d digits</string>
+    <!-- Error shown in popup when PIN is too long -->
+    <string name="pin_password_too_long">Password can be no longer than %d digits</string>
+    <!-- Error shown when in PIN mode and user enters a non-digit -->
+    <string name="pin_password_illegal_character">PIN must contain only digits 0-9</string>
+    <!-- Error shown when in PASSWORD mode and user enters an invalid character -->
+    <string name="pin_password_contains_non_digits">Password contains an illegal character</string>
+    <!-- In the security screen, the header title for settings related to device admins -->
+    <string name="device_admin_title">Device administration</string>
+    <!-- Title of preference to manage device admins -->
+    <string name="manage_device_admin">Select device administrators</string>
+    <!-- Summary of preference to manage device policies -->
+    <string name="manage_device_admin_summary">Add or remove device administrators</string>
 
     <!-- Bluetooth settings -->
     <!-- Bluetooth settings check box title on Main Settings screen -->
@@ -565,7 +571,7 @@
     <!-- Title for BT error dialogs. -->
     <string name="bluetooth_error_title">Attention</string>
     <!-- Message for the error dialog when BT pairing fails generically. -->
-    <string name="bluetooth_pairing_error_message">There was a problem pairing with <xliff:g id="device_name">%1$s</xliff:g>.</string> 
+    <string name="bluetooth_pairing_error_message">There was a problem pairing with <xliff:g id="device_name">%1$s</xliff:g>.</string>
     <!-- Message for the error dialog when BT pairing fails because the PIN /
     Passkey entered is incorrect. -->
     <string name="bluetooth_pairing_pin_error_message">There was a problem pairing with <xliff:g id="device_name">%1$s</xliff:g> because the PIN or Passkey is incorrect.</string>
@@ -575,7 +581,7 @@
     <string name="bluetooth_pairing_rejected_error_message">Pairing rejected by <xliff:g id="device_name">%1$s</xliff:g>.</string>
 
     <!-- Message for the error dialog when BT connecting operation fails generically. -->
-    <string name="bluetooth_connecting_error_message">There was a problem connecting to <xliff:g id="device_name">%1$s</xliff:g>.</string> 
+    <string name="bluetooth_connecting_error_message">There was a problem connecting to <xliff:g id="device_name">%1$s</xliff:g>.</string>
 
     <!-- Do not translate -->
     <string name="bluetooth_device_info_alias">Device alias</string>
@@ -588,7 +594,7 @@
 
     <!-- Bluetooth settings: The title of the preference (list item) that initiates a scan for devices -->
     <string name="bluetooth_preference_scan_title">Scan for devices</string>
-    
+
     <!-- Bluetooth settings.  Context menu item for a device.  Action will connect to all profiles on the device. -->
     <string name="bluetooth_device_context_connect">Connect</string>
     <!-- Bluetooth settings.  Context menu item for a device.  Action will disconnect from all profiles on the device. -->
@@ -600,8 +606,8 @@
     <!-- Bluetooth settings.  Context menu item for a device.  Action will disconnect and remove pairing with the device. -->
     <string name="bluetooth_device_context_disconnect_unpair">Disconnect &amp; unpair</string>
     <!-- Bluetooth settings.  Context menu item for a device.  Action will take the user to another screen where they can choose exactly which profiles to connect to. -->
-    <string name="bluetooth_device_context_connect_advanced">Options\u2026</string>    
-    
+    <string name="bluetooth_device_context_connect_advanced">Options\u2026</string>
+
     <!-- Bluetooth settings.  The title of the screen to pick which profiles to connect to on the device.  For example, headphones may have both A2DP and headset, this allows the user to choose which one he wants to connect to. -->
     <string name="bluetooth_connect_specific_profiles_title">Connect to\u2026</string>
 
@@ -654,7 +660,7 @@
     <!-- Bluetooth settings.  Dock Setting Dialog - Remember setting and don't ask user again -->
     <string name="bluetooth_dock_settings_remember">Remember settings</string>
 
-    <!-- Wi-Fi settings -->
+    <!-- Wi-Fi Settings --> <skip />
     <!-- Used in the 2nd-level settings screen to turn on Wi-Fi -->
     <string name="wifi">Wi-Fi</string>
     <!-- Used in the 1st-level settings screen to turn on Wi-Fi -->
@@ -665,143 +671,88 @@
     <string name="wifi_settings">Wi-Fi settings</string>
     <!-- Title of the Wi-fi settings screen -->
     <string name="wifi_settings_category">Wi-Fi settings</string>
-    <!--Wireless controls setting screen, Wi-Fi settings summary text -->
+    <!-- Summary text of the Wi-fi settings screen -->
     <string name="wifi_settings_summary">Set up &amp; manage wireless access points</string>
-    <!-- Button caption to forget a wifi network -->
-    <string name="forget_network">Forget</string>
-    <!-- Label for status of connection -->
-    <string name="wifi_status">Status</string>
-    <!-- Label for link speed (wifi) -->
-    <string name="wifi_link_speed">Speed</string>
-    <!-- Verbose wifi signal strength.  This is the best out of 4 levels. -->
-    <string name="wifi_signal_3">Excellent</string>
-    <!-- Verbose wifi signal strength.  This is the 2nd best out of 4 levels. -->
-    <string name="wifi_signal_2">Good</string>
-    <!-- Verbose wifi signal strength.  This is the 3rd best out of 4 levels. -->
-    <string name="wifi_signal_1">Fair</string>
-    <!-- Verbose wifi signal strength.  This is the worst out of 4 levels. -->
-    <string name="wifi_signal_0">Poor</string>
-    <!-- Label for the security of a wifi network -->
-    <string name="security">Security</string>
-    <!-- Value for the wifi security.  This means no encryption. -->
-    <string name="wifi_security_open">Open</string>
-    <!-- Value for the wifi security -->
-    <string name="wifi_security_wep">WEP</string>
-    <!-- Value for the wifi security -->
-    <string name="wifi_security_psk">WPA/WPA2 PSK</string>
-    <!-- Value for the wifi security -->
-    <string name="wifi_security_eap">Enterprise(802.1x)</string>
-    <!-- Value for the wifi security -->
-
-    <!-- Value for the wifi security when it is unknown -->
-    <string name="wifi_security_unknown">Unknown</string>
-    <!-- Verbose security type of a wifi network.  Open means no security. Capitalized by app. -->
-    <string name="wifi_security_verbose_open">open network</string>
-    <!-- Verbose security type of a wifi network.  Capitalized by app. -->
-    <string name="wifi_security_verbose_wep">secured with WEP</string>
-    <!-- Verbose security type of a wifi network.  Capitalized by app. -->
-    <string name="wifi_security_verbose_psk">secured with WPA/WPA2 PSK</string>
-    <!-- Verbose security type of a wifi network.  Capitalized by app. -->
-    <string name="wifi_security_verbose_eap">secured with 802.1x EAP</string>
-    <!-- Wi-Fi IP addrress label -->
-    <string name="ip_address">IP address</string>
-    <!-- Label for the signal strength -->
-    <string name="signal">Signal strength</string>
-    <!--Wireless controls setting screen, Wi-Fi check box summary text when turning Wi-Fi on -->
+    <!-- Summary text when turning Wi-Fi or bluetooth on -->
     <string name="wifi_starting">Turning on\u2026</string>
-    <!--Wireless controls setting screen, Wi-Fi check box summary text when turning Wi-Fi off -->
+    <!-- Summary text when turning Wi-Fi or bluetooth off -->
     <string name="wifi_stopping">Turning off\u2026</string>
-    <!-- Generic error message , probably not used-->
+    <!-- Summary text when Wi-Fi or bluetooth has error -->
     <string name="wifi_error">Error</string>
-    <!-- Error message when Wi-Fi can't start -->
-    <string name="error_starting">Unable to start Wi-Fi</string>
-    <!-- Error message when Wi-Fi can't stop -->
-    <string name="error_stopping">Unable to stop Wi-Fi</string>
-    <!-- Error message when Wi-Fi can't scan for networks -->
-    <string name="error_scanning">Unable to scan for networks</string>
-    <!-- Error message when Wi-Fi can't connect -->
-    <string name="error_connecting">Unable to connect to the network</string>
-    <!-- Error message when Wi-Fi can't save the network -->
-    <string name="error_saving">Unable to save the network</string>
-    <!-- Button label to connect to a wifi network-->
-    <string name="connect">Connect</string>
-    <!-- Dialog title for when the user is trying to connect to a particular network-->
-    <string name="connect_to_blank">Connect to <xliff:g id="network_name">%1$s</xliff:g></string>
-    <!-- Caption for the eap method -->
-    <string name="please_select_eap">EAP method</string>
-    <!-- Caption for the phase2 -->
-    <string name="please_select_phase2">Phase 2 authentication</string>
-    <!-- Caption for the identity -->
-    <string name="please_type_identity">Identity</string>
-    <!-- Caption for the anonymous_identity -->
-    <string name="please_type_anonymous_identity">Anonymous identity</string>
-    <!-- Caption for the client_certificate -->
-    <string name="please_select_client_certificate">Client certificate</string>
-    <!-- Caption for the ca certificate -->
-    <string name="please_select_ca_certificate">CA certificate</string>
-    <!-- Caption for the wireless password -->
-    <string name="please_type_passphrase">Wireless password</string>
-    <!--Wi-Fi settings screen, connect to network dialog box, field label and hint text -->
-    <string name="please_type_hex_key">WEP hex key (0-9, A-F)</string>
-    <!--Wi-Fi settings screen, connect to network dialog box, check box label -->
-    <string name="wifi_show_password">Show password.</string>
-    <!--Wi-Fi settings screen menu option -->
-    <string name="scan_wifi">Scan</string>
-    <!-- Wifi network summary when not in nearby. -->
-    <string name="summary_not_in_range">Not in range</string>
-    <!-- Wifi network summary when the network is configured previously, capitalized by app -->
-    <string name="summary_remembered">remembered</string>
-    <!-- Wifi network summary when there was an error connecting -->
-    <string name="summary_connection_failed">Connection unsuccessful, touch to try again</string>
-    <!-- Header for the list of wifi networks-->
-    <string name="wifi_access_points">Wi-Fi networks</string>
-    <!-- Caption for entering the SSID of a wifi network -->
-    <string name="wifi_type_ssid">Network SSID</string>
-    <!-- The label for security -->
-    <string name="wifi_security">Security</string>
-    <!-- Button caption to save a configuration wifi -->
-    <string name="wifi_save_config">Save</string>
-    <!-- An edit field's grayed out value when it has not been modified -->
-    <string name="wifi_password_unchanged">(unchanged)</string>
-    <!-- Action message to add a wifi network -->
-    <string name="wifi_add_other_network">Add Wi-Fi network</string>
+    <!-- Toast message when Wi-Fi or bluetooth is disallowed in airplane mode -->
+    <string name="wifi_in_airplane_mode">In airplane mode</string>
+    <!-- Toast message when Wi-Fi cannot scan for networks -->
+    <string name="wifi_fail_to_scan">Unable to scan for networks</string>
     <!-- Checkbox title for option to notify user when open networks are nearby -->
     <string name="wifi_notify_open_networks">Network notification</string>
     <!-- Checkbox summary for option to notify user when open networks are nearby -->
     <string name="wifi_notify_open_networks_summary">Notify me when an open network is available</string>
-    <!-- This dialog will use the error_title as the title. -->
-    <string name="wifi_password_incorrect_error">The network password you typed is not correct. Please try again.</string>
-    <!-- Generic error message -->
-    <string name="wifi_generic_connection_error">There is a problem connecting to the network. Please try again.</string>
-    <!--Wi-Fi settings screen menu option -->
+    <!-- Action message to manually add a wifi network -->
+    <string name="wifi_add_network">Add Wi-Fi network</string>
+    <!-- Header for the list of wifi networks-->
+    <string name="wifi_access_points">Wi-Fi networks</string>
+    <!-- Menu option to scan Wi-Fi networks -->
+    <string name="wifi_menu_scan">Scan</string>
+    <!-- Menu option to Wi-Fi advanced settings -->
     <string name="wifi_menu_advanced">Advanced</string>
-    <!-- Title of the screen to adjust IP settings -->
-    <string name="wifi_ip_settings_titlebar">IP settings</string>
-    <!-- Menu ietm to save the IP settings -->
-    <string name="wifi_ip_settings_menu_save">Save</string>
-    <!-- Menu ietm to cancel the IP settings -->
-    <string name="wifi_ip_settings_menu_cancel">Cancel</string>
-    <!-- Error message if the IP address is not valid -->
-    <string name="wifi_ip_settings_invalid_ip">Please type a valid IP address.</string>
-    <!-- Checkbox for whether to use a static IP address -->
-    <string name="wifi_use_static_ip">Use static IP</string>
-    <!-- Label for the IP address -->
-    <string name="wifi_ip_address">IP address</string>
-    <!-- Label for the DNS (first one) -->
-    <string name="wifi_dns1">DNS 1</string>
-    <!-- Label for the DNS (second one)-->
-    <string name="wifi_dns2">DNS 2</string>
-    <!-- Label for the gateway of the network -->
-    <string name="wifi_gateway">Gateway</string>
-    <!-- Label for the netmask of the network -->
-    <string name="wifi_netmask">Netmask</string>
-    <!--Wi-Fi settings screen, network context menu item -->
-    <string name="wifi_context_menu_connect">Connect to network</string>
-    <!--Wi-Fi settings screen, network context menu item -->
-    <string name="wifi_context_menu_forget">Forget network</string>
-    <!--Wi-Fi settings screen, network context menu item -->
-    <string name="wifi_context_menu_change_password">Change password</string>
+    <!-- Menu option to connect to a Wi-Fi network -->
+    <string name="wifi_menu_connect">Connect to network</string>
+    <!-- Menu option to delete a Wi-Fi network -->
+    <string name="wifi_menu_forget">Forget network</string>
+    <!-- Menu option to modify a Wi-Fi network configuration -->
+    <string name="wifi_menu_modify">Modify network</string>
 
+    <!-- Dialog for Access Points --> <skip />
+    <!-- Label for the SSID of the network -->
+    <string name="wifi_ssid">Network SSID</string>
+    <!-- Label for the security of the connection -->
+    <string name="wifi_security">Security</string>
+    <!-- Label for the signal strength of the connection -->
+    <string name="wifi_signal">Signal strength</string>
+    <!-- Label for the status of the connection -->
+    <string name="wifi_status">Status</string>
+    <!-- Label for the link speed of the connection -->
+    <string name="wifi_speed">Link speed</string>
+    <!-- Label for the IP address of the connection -->
+    <string name="wifi_ip_address">IP address</string>
+    <!-- Label for the EAP method of the network -->
+    <string name="wifi_eap_method">EAP method</string>
+    <!-- Label for the EAP CA certificate of the network -->
+    <string name="wifi_eap_ca_cert">CA certificate</string>
+    <!-- Label for the EAP user certificate of the network -->
+    <string name="wifi_eap_user_cert">User certificate</string>
+    <!-- Label for the EAP identity of the network -->
+    <string name="wifi_eap_identity">Identity</string>
+    <!-- Label for the EAP anonymous identity of the network -->
+    <string name="wifi_eap_anonymous">Anonymous identity</string>
+    <!-- Label for the password of the secured network -->
+    <string name="wifi_password">Password</string>
+    <!-- Label for the check box to show password -->
+    <string name="wifi_show_password">Show password.</string>
+    <!-- Hint for unchanged fields -->
+    <string name="wifi_unchanged">(unchanged)</string>
+    <!-- Hint for unspecified fields -->
+    <string name="wifi_unspecified">(unspecified)</string>
+    <!-- Summary for the remembered network. -->
+    <string name="wifi_remembered">Remembered</string>
+    <!-- Summary for the disabled network. -->
+    <string name="wifi_disabled">Disabled</string>
+    <!-- Summary for the remembered network but currently not in range. -->
+    <string name="wifi_not_in_range">Not in range</string>
+    <!-- Summary for the secured network. -->
+    <string name="wifi_secured">Secured with <xliff:g id="wifi_security">%1$s</xliff:g></string>
+    <!-- Summary for the secured and remembered network. Status can be "Remembered", "Disabled" or "Not in range". -->
+    <string name="wifi_secured_with_status"><xliff:g id="wifi_status">%2$s</xliff:g>, secured with <xliff:g id="wifi_security">%1$s</xliff:g></string>
+    <!-- Button label to connect to a Wi-Fi network -->
+    <string name="wifi_connect">Connect</string>
+    <!-- Button label to delete a Wi-Fi network -->
+    <string name="wifi_forget">Forget</string>
+    <!-- Button label to save a Wi-Fi network configuration -->
+    <string name="wifi_save">Save</string>
+    <!-- Button label to dismiss the dialog -->
+    <string name="wifi_cancel">Cancel</string>
+
+    <!-- Wi-Fi Advanced Settings --> <skip />
     <!-- Wi-Fi settings screen, advanced, settings section.  This is a header shown above advanced wifi settings. -->
     <string name="wifi_advanced_titlebar">Advanced</string>
     <!-- Wi-Fi settings screen, setting title for choosing the number of channels to be used -->
@@ -812,74 +763,139 @@
     <string name="wifi_setting_num_channels_error">There was a problem setting the regulatory domain.</string>
     <!-- Wi-Fi settings screen, label to be appended to the count in displaying the list of valid channel counts -->
     <string name="wifi_setting_num_channels_channel_phrase"><xliff:g id="num_channels">%1$d</xliff:g> channels</string>
-
     <!-- Wi-Fi settings screen, setting title for setting the wifi sleep policy -->
     <string name="wifi_setting_sleep_policy_title">Wi-Fi sleep policy</string>
     <!-- Wi-Fi settings screen, setting summary for setting the wifi sleep policy -->
     <string name="wifi_setting_sleep_policy_summary">Specify when to switch from Wi-Fi to mobile data</string>
     <!-- Wi-Fi settings screen, generic error message when the sleep policy could not be set. -->
     <string name="wifi_setting_sleep_policy_error">There was a problem setting the sleep policy.</string>
-    
     <!-- Wi-Fi settings screen, advanced, title of the item to show the Wi-Fi device's MAC address. -->
     <string name="wifi_advanced_mac_address_title">MAC address</string>
+    <!-- Title of the screen to adjust IP settings -->
+    <string name="wifi_ip_settings_titlebar">IP settings</string>
+    <!-- Menu ietm to save the IP settings -->
+    <string name="wifi_ip_settings_menu_save">Save</string>
+    <!-- Menu ietm to cancel the IP settings -->
+    <string name="wifi_ip_settings_menu_cancel">Cancel</string>
+    <!-- Error message if the IP address is not valid -->
+    <string name="wifi_ip_settings_invalid_ip">Please type a valid IP address.</string>
+    <!-- Checkbox for whether to use a static IP address -->
+    <string name="wifi_use_static_ip">Use static IP</string>
+    <!-- Label for the DNS (first one) -->
+    <string name="wifi_dns1">DNS 1</string>
+    <!-- Label for the DNS (second one)-->
+    <string name="wifi_dns2">DNS 2</string>
+    <!-- Label for the gateway of the network -->
+    <string name="wifi_gateway">Gateway</string>
+    <!-- Label for the netmask of the network -->
+    <string name="wifi_netmask">Netmask</string>
 
-    <!-- Status message of Wi-Fi when it is scanning -->
-    <string name="fragment_status_scanning">Scanning\u2026</string>
-    <!-- Status message of Wi-Fi when it is connecting to a particular network -->
-    <string name="fragment_status_connecting">Connecting to <xliff:g id="network_name">%1$s</xliff:g>\u2026</string>
-    <!-- Status message of Wi-Fi when it is authenticating with a network -->
-    <string name="fragment_status_authenticating">Authenticating with <xliff:g id="network_name">%1$s</xliff:g>\u2026</string>
-    <!-- Status message of Wi-Fi when it is obtaining the IP address from a netwrok -->
-    <string name="fragment_status_obtaining_ip">Obtaining IP address from <xliff:g id="network_name">%1$s</xliff:g>\u2026</string>
-    <!-- Status message of Wi-Fi when it is connect to a network -->
-    <string name="fragment_status_connected">Connected to <xliff:g id="network_name">%1$s</xliff:g></string>
-    <!-- Status message of Wi-Fi when it is disconnecting from a network -->
-    <string name="fragment_status_disconnecting">Disconnecting from <xliff:g id="network_name">%1$s</xliff:g>\u2026</string>
-    <!-- Status message of Wi-Fi when it is disconnected from a network-->
-    <string name="fragment_status_disconnected">Disconnected</string>
-    <!-- Status message of Wi-Fi when it is a failure (connection) -->
-    <string name="fragment_status_failed">Unsuccessful</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Wi-Fi Testing on the diagnostic screen-->
+    <string name="testing_wifi_info" translatable="false">Wifi information</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item for WifiManager disableNetwork API-->
+    <string name="disableNetwork" translatable="false">disableNetwork</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item for WifiManager enableNetwork API-->
+    <string name="enableNetwork" translatable="false">enableNetwork</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item for WifiManager disconnect API-->
+    <string name="disconnect" translatable="false">disconnect</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item for WifiManager getConfiguredNetworks API-->
+    <string name="getConfiguredNetworks" translatable="false">getConfiguredNetworks</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item for WifiManager getConnectionInfo API-->
+    <string name="getConnectionInfo" translatable="false">getConnectionInfo</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item on Wifi information screen-->
+    <string name="wifi_api_test" translatable="false">Wifi API</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item on Wifi information screen-->
+    <string name="wifi_status_test" translatable="false">Wifi Status</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Button text on Wifi Status screen-->
+    <string name="wifi_update" translatable="false">Refresh Stats</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="wifi_state_label" translatable="false">Wifi State :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="network_state_label" translatable="false">Network State :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+        Label on Wifi Status screen-->
+    <string name="supplicant_state_label" translatable="false">Supplicant State :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="rssi_label" translatable="false">RSSI :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="bssid_label" translatable="false">BSSID :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="ssid_label" translatable="false">SSID :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="hidden_ssid_label" translatable="false">Hidden SSID :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="ipaddr_label" translatable="false">IPaddr :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="macaddr_label" translatable="false">MAC addr :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="networkid_label" translatable="false">Network ID :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="link_speed_label" translatable="false">Link Speed :</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Status screen-->
+    <string name="scan_list_label" translatable="false">Scan results :</string>
 
-    <!-- Status message of Wi-Fi when it is scanning -->
-    <string name="status_scanning">Scanning\u2026</string>
-    <!-- Status message of Wi-Fi when it is connecting (but the network is not known right now) -->
-    <string name="status_connecting">Connecting\u2026</string>
-    <!-- Status message of Wi-Fi when it is authenticating (but the network is not known right now) -->
-    <string name="status_authenticating">Authenticating\u2026</string>
-    <!--Wi-Fi settings screen, summary text for network when connecting -->
-    <string name="status_obtaining_ip">Obtaining address\u2026</string>
-    <!--Wi-Fi settings screen, summary text for network when connected -->
-    <string name="status_connected">Connected</string>
-    <!-- Status message of Wi-Fi when it is disconnecting (but the network is not known right now) -->
-    <string name="status_disconnecting">Disconnecting\u2026</string>
-    <!-- Status message of Wi-Fi when it is disconnected (but the network is not known right now) -->
-    <string name="status_disconnected">Disconnected</string>
-    <!-- Status message of Wi-Fi when it is a failure (but the network is not known right now) -->
-    <string name="status_failed">Unsuccessful</string>
+    <!-- wifi state values-->
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="wifi_state_disabling" translatable="false">Disabling</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="wifi_state_disabled" translatable="false">Disabled</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="wifi_state_enabling" translatable="false">Enabling</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="wifi_state_enabled" translatable="false">Enabled</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="wifi_state_unknown" translatable="false">Unknown</string>
+
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Menu item on Wifi information screen-->
+    <string name="wifi_config_info" translatable="false">Wifi Config</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
+         Label on Wifi Configuration screen-->
+    <string name="config_list_label" translatable="false">Configured Networks</string>
 
     <!-- Sound and alerts settings -->
-    <!-- Main Settings screen setting option name to go into the sound and display settings screen -->
-    <string name="sound_and_display_settings">Sound &amp; display</string>
-    <!-- Main Settings screen setting option name to go into the sound and display settings screen -->
-    <string name="sound_and_display_settings_title">Sound &amp; display settings</string>
+    <!-- Main Settings screen setting option name to go into the sound settings screen -->
+    <string name="sound_settings_title">Sound</string>
+    <!-- Main Settings screen setting option name to go into the display settings screen -->
+    <string name="display_settings_title">Display</string>
     <!-- Sound settings screen heading -->
     <string name="sound_settings">Sound settings</string>
-    <!-- Main Settings screen setting option summary text for the item to go into the soudn and display settings screen-->
-    <string name="sound_and_display_settings_summary">Set ringtones, notifications, screen brightness</string>
     <!-- Sound settings screen, setting option name checkbox -->
     <string name="silent_mode_title">Silent mode</string>
     <!-- Sound settings screen, setting option summary text when going into silent mode.  Media and alarms sounds WILL NOT be silenced in silent mode. -->
-    <string name="silent_mode_summary">All sounds except media &amp; alarms are silenced</string>
+    <string name="silent_mode_summary">Silence all sounds except media &amp; alarms</string>
     <!-- Sound settings screen, setting option summary text when going into silent mode.  Media WILL NOT be silenced in silent mode, but alarms WILL be silenced. -->
     <string name="silent_mode_incl_alarm_summary">All sounds except media are silenced</string>
     <!-- Sound settings screen, setting option name to pick ringtone (a list dialog comes up)-->
     <string name="ringtone_title">Phone ringtone</string>
     <!-- Sound settings screen, setting option summary text -->
-    <string name="ringtone_summary">Set your default incoming call ringtone</string>
+    <string name="ringtone_summary">""</string>
+    <!-- Sound settings screen, volume title -->
+    <string name="all_volume_title">Volume</string>
     <!-- Sound settings screen, setting option name -->
     <string name="ring_volume_title">Ringer volume</string>
     <!-- Sound settings screen, setting option summary text -->
-    <string name="ring_volume_summary">Set volume for incoming calls and notifications</string>
+    <string name="ring_volume_summary">""</string>
     <!-- Sound settings screen, setting option name checkbox -->
     <string name="vibrate_title">Phone vibrate</string>
     <!-- Sound settings screen, setting option summary text -->
@@ -887,7 +903,7 @@
     <!-- Sound settings screen, setting option name -->
     <string name="notification_sound_title">Notification ringtone</string>
     <!-- Sound settings screen, setting option summary text -->
-    <string name="notification_sound_summary">Set your default notification ringtone</string>
+    <string name="notification_sound_summary">""</string>
     <!-- Sound settings screen, notification light repeat pulsing title -->
     <string name="notification_pulse_title">Pulse notification light</string>
     <!-- Sound settings screen, notification light repeat pulsing summary -->
@@ -905,6 +921,8 @@
     <string name="media_volume_title">Media volume</string>
     <!-- Sound settings screen, setting option summary text -->
     <string name="media_volume_summary">Set volume for music and videos</string>
+    <!-- Sound settings screen, alarm volume slider title -->
+    <string name="alarm_volume_title">Alarm volume</string>
     <!-- Sound settings screen, dock settings summary-->
     <string name="dock_settings_summary">Audio settings for the attached dock</string>
     <!-- Sound settings screen, setting check box label -->
@@ -925,12 +943,6 @@
     <string name="haptic_feedback_enable_summary_on">Vibrate when pressing soft keys and on certain UI interactions</string>
     <!-- Sound settings screen, setting option summary text when check box is clear -->
     <string name="haptic_feedback_enable_summary_off">Vibrate when pressing soft keys and on certain UI interactions</string>
-    <!-- Sound settings screen, setting check box label -->
-    <string name="play_media_notification_sounds_enable_title">SD card notifications</string>
-    <!-- Sound settings screen, setting option summary text when check box is selected -->
-    <string name="play_media_notification_sounds_enable_summary_on">Play sound for SD card notifications</string>
-    <!-- Sound settings screen, setting option summary text when check box is clear -->
-    <string name="play_media_notification_sounds_enable_summary_off">Play sound for SD card notifications</string>
     <!-- Sound settings screen, setting option name checkbox to enable/disable audio recording features that improve audio recording in noisy environments -->
     <string name="audio_record_proc_title">Noise cancellation</string>
     <!-- Sound settings screen, setting option summary text -->
@@ -975,7 +987,7 @@
     <!-- Sound & display settings screen, animations option summary text when check box is clear -->
     <string name="animations_summary_off">Show animation when opening &amp; closing windows</string>
     <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
-    <string name="accelerometer_title">Orientation</string>
+    <string name="accelerometer_title">Auto-rotate screen</string>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
     <string name="accelerometer_summary_on">Switch orientation automatically when rotating phone</string>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is clear -->
@@ -1039,7 +1051,7 @@
     <!-- About phone screen, list item title.  Takes the user to the screen for seeing and installing system updates. -->
     <string name="system_update_settings_list_item_title">System updates</string>
     <!-- About phone screen, list item summary.  Takes the user to the screen for seeing and installing system updates. -->
-    <string name="system_update_settings_list_item_summary">Check for system updates</string>
+    <string name="system_update_settings_list_item_summary">""</string>
 
     <!-- About phone screen, status item label -->
     <string name="firmware_version">Firmware version</string>
@@ -1112,6 +1124,14 @@
     <string name="sd_eject">Unmount SD card</string>
     <!-- SD card & phone storage settings item title that will result in the phone unmounting the SD card.  This will be done before the user phyiscally removes the SD card from the phone.  Kind of like the "Safely remove" on some operating systems.   -->
     <string name="sd_eject_summary">Unmount the SD card for safe removal</string>
+
+   
+    <!-- SD card & phone storage settings item summary that is displayed when no SD card is inserted -->
+    <string name="sd_insert_summary">Insert an SD card for mounting</string>
+    <!-- SD card & phone storage settings item title that will result in the phone mounting the SD card. -->
+    <string name="sd_mount">Mount SD card</string>
+    <!-- SD card & phone storage settings item title that will result in the phone mounting the SD card. -->
+    <string name="sd_mount_summary">Mount the SD card</string>
     <!-- SD card & phone storage settings item title that will result in the phone formatting the SD card.   -->
     <string name="sd_format">Format SD card</string>
     <!-- SD card & phone storage settings item title that will result in the phone unmounting the SD card.   -->
@@ -1188,10 +1208,10 @@
     <string name="error_mnc_not23">MNC field must be 2 or 3 digits.</string>
     <!-- The message of dialog indicated restoring default APN settings in progress -->
     <string name="restore_default_apn">Restoring default APN settings</string>
-    <!-- APNs screen menu option to reset default APN settings --> 
-    <string name="menu_restore">Reset to default</string>    
-    <!-- APNs screen toast message to inform reset default APN settings is completed -->     
-    <string name="restore_default_apn_completed">Reset default APN settings completed</string>    
+    <!-- APNs screen menu option to reset default APN settings -->
+    <string name="menu_restore">Reset to default</string>
+    <!-- APNs screen toast message to inform reset default APN settings is completed -->
+    <string name="restore_default_apn_completed">Reset default APN settings completed</string>
 
     <!-- Master Clear -->
     <!-- SD card & phone storage settings screen, setting option name under Internal phone storage heading -->
@@ -1236,6 +1256,27 @@
     <!-- Main settings screen, Call settings summary for item to go into call settings -->
     <string name="call_settings_summary">Set up voicemail, call forwarding, call waiting, caller ID</string>
 
+    <!-- Tethering controls, item title to go into the tethering settings -->
+    <string name="tether_settings_title">Tethering settings</string>
+    <!-- Tethering controls, the item summary for the user to go into the tethering settings -->
+    <string name="tether_settings_summary">Set up and manage tethering</string>
+
+    <!-- Title of the screen for adjusting tethering settings -->
+    <string name="tether_screen_title">Tethering settings</string>
+
+    <!-- Tethering notification toggle - controls whether a notification will appear when a tetherable connection becomes available -->
+    <string name="enable_tether_notice_checkbox">Notifications</string>
+    <!-- Tethering notification summary explains the notification toggle -->
+    <string name="enable_tether_notice_checkbox_summary">Show a notification when USB tethering is available</string>
+    <!-- USB Tethering options -->
+    <string name="usb_tethering_button_text">USB tethering</string>
+    <!-- USB available subtext - shown when USB is connected but not currently being tethered -->
+    <string name="usb_tethering_available_subtext">USB connected, select to tether</string>
+    <!-- USB tethered subtext - shown when USB is connected and being tethered -->
+    <string name="usb_tethering_active_subtext">Connected, select to disconnect</string>
+    <!-- USB unavailable subtext - shown when USB is not connected -->
+    <string name="usb_tethering_unavailable_subtext">USB not connected</string>
+
     <!-- Wireless controls, item title to go into the network settings -->
     <string name="network_settings_title">Mobile networks</string>
     <!-- Wireless controls, the item summary for the user to go into the network settings -->
@@ -1314,11 +1355,23 @@
     <string name="settings_safetylegal_activity_loading">Loading\u2026</string>
 
     <!-- Lock Pattern settings -->
+    <!-- Header on first screen of choose password/PIN flow -->
+    <string name="lockpassword_choose_your_password_header">Choose your password</string>
+    <!-- Header on password confirm screen -->
+    <string name="lockpassword_confirm_your_password_header">Confirm password</string>
+    <!-- Header on password confirm screen if second password doesn't match the first. -->
+    <string name="lockpassword_confirm_passwords_dont_match">Passwords don\'t match</string>
+    <!-- Header shown if passwords match -->
+    <string name="lockpassword_password_confirmed_header">Password confirmed</string>
+
+    <!-- Lock Pattern settings -->
     <!-- Security & location settings screen, header -->
     <string name="lock_settings_title">Screen unlock pattern</string>
     <!-- Security & location settings screen, setting option name -->
     <string name="lockpattern_change_lock_pattern_label">Change unlock pattern</string>
     <!-- Security & location settings screen, change unlock pattern screen instruction when the user chooses "Change unlock pattern".  We first ask the user toe nter the current pattern, and this is the message seen -->
+    <string name="lockpattern_change_lock_pin_label">Change unlock PIN</string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction when the user chooses "Change unlock pattern".  We first ask the user toe nter the current pattern, and this is the message seen -->
     <string name="lockpattern_need_to_unlock">Confirm saved pattern</string>
     <!-- Do not translate. -->
     <string name="lockpattern_need_to_unlock_footer"></string>
@@ -1382,8 +1435,8 @@
         \n<font height="17">\n</font><b>3</b>\u00A0 Redraw your pattern to confirm.
         \n<font height="17">\n</font><b>Ready to start? Touch \u201CNext\u201D</b>.
         \n<font height="3">\n</font>To leave your phone unprotected, touch \u201CCancel\u201D.</font>
-    </string>    
-        
+    </string>
+
     <!-- ChooseLockPatternExample --> <skip />
     <!-- ChooseLockPatternExample, screen title that shows an example pattern -->
     <string name="lock_example_title">Example pattern</string>
@@ -1463,12 +1516,15 @@
     <!-- Text for filter option in ManageApps screen to display all installed
     applications -->
     <string name="filter_apps_all">All</string>
-    <!-- Text for filter option in ManageApps screen to display third party 
+    <!-- Text for filter option in ManageApps screen to display third party
     applications only -->
     <string name="filter_apps_third_party">Downloaded</string>
     <!-- Text for filter option in ManageApps screen to display list of running
     packages only. -->
     <string name="filter_apps_running">Running</string>
+    <!-- Text for filter option in ManageApps screen to display list of
+    packages installed on sdcard. -->
+    <string name="filter_apps_onsdcard">On SD card</string>
     <string name="loading">Loading\u2026</string>
     <!-- Manage app screen, shown when the activity is busy recomputing the size of each app -->
     <string name="recompute_size">Recomputing size\u2026</string>
@@ -1533,7 +1589,7 @@
     <string name="service_foreground_processes">Other: <xliff:g id="memory">%2$s</xliff:g> in <xliff:g id="count">%1$d</xliff:g></string>
     <!-- Text to label a process entry with the process name. -->
     <string name="service_process_name">Process: <xliff:g id="process">%1$s</xliff:g></string>
-    
+
     <!-- Language Settings --> <skip />
     <!-- Title of setting on main settings screen.  This item will take the user to the screen to tweak settings realted to locale and text -->
     <string name="language_settings">Language &amp; keyboard</string>
@@ -1546,9 +1602,9 @@
     <!-- On Text & language settings screen, heading. Inside the "Locale & text" screen, this is the header for settings that relate to text (autotext, autoreplace, autocapitalization). -->
     <string name="text_category">Text settings</string>
     <!-- On Text & language settings screen, setting option name. title of the setting to take the user to a screen to select the locale. -->
-    <string name="phone_language">Select locale</string>
+    <string name="phone_language">Select language</string>
     <!-- On Text & language settings screen, setting option name. summary of the setting to take the user to a screen to select the locale. -->
-    <string name="phone_language_summary">Select language and region</string>
+    <string name="phone_language_summary">""</string>
     <!-- On Text & language settings screen, setting option name. title of the setting to enable autoreplace of entered text. auto replace is a feature that will automatically correct mistyped words. -->
     <string name="auto_replace">Auto-replace</string>
     <!-- On Text & language settings screen, setting summary.  This is the summary for the "Auto-replace" setting. -->
@@ -1574,14 +1630,14 @@
     card numbers.  It comes from the application
     <xliff:g id="ime_application_name">%1$s</xliff:g>.
     Use this input method?</string>
-    
+
     <!-- User dictionary settings --><skip />
     <!-- User dictionary settings, The titlebar text of the User dictionary settings screen. -->
     <string name="user_dict_settings_titlebar">User dictionary</string>
     <!-- User dictionary settings, The title of the list item to go into the User dictionary settings screen. -->
     <string name="user_dict_settings_title">User dictionary</string>
     <!-- User dictionary settings.  The summary of the listem item to go into the User dictionary settings screen. -->
-    <string name="user_dict_settings_summary">Add &amp; remove words from user dictionary</string>
+    <string name="user_dict_settings_summary">""</string>
     <!-- User dictionary settings. The title of the menu item to add a new word to the user dictionary. -->
     <string name="user_dict_settings_add_menu_title">Add</string>
     <!-- User dictionary settings. The title of the dialog to add a new word to the user dictionary. -->
@@ -1666,7 +1722,7 @@
          (or other screens that can host gadgets).  Note to translators: we're still determining
          the final name for Gadgets/Widgets, so please translate both for now. -->
     <string name="gadget_picker_title">Choose gadget</string>
-    
+
     <!-- Title for the screen that lets the user choose a widget to add to the home screen
          (or other screens that can host widgets).  Note to translators: we're still determining
          the final name for Gadgets/Widgets, so please translate both for now. -->
@@ -1719,52 +1775,52 @@
 
     <!-- Used to head a list of packages that share a given user id BatteryHistory -->
     <string name="battery_history_packages_sharing_this_uid">Packages sharing this UID:</string>
-    
+
     <!-- Used when no battery data available in BatteryHistory -->
     <string name="battery_history_no_data">No battery usage data available</string>
-        
+
     <!-- Used for Sensor detail screen in BatteryHistory -->
     <string name="battery_history_sensor">Sensor:</string>
-    
+
     <!-- Used for Wakelock detail screen in BatteryHistory -->
     <string name="battery_history_wakelock">Partial Wakelock:</string>
-    
+
     <!-- Used for Sensor detail screen in BatteryHistory -->
     <string name="battery_history_used_by_packages">Sensor used by packages:</string>
-    
+
     <!-- Used for Sensor detail screen in BatteryHistory -->
     <string name="battery_history_sensor_usage">Used <xliff:g id="count">%1$d</xliff:g> times by <xliff:g id="package">%2$s</xliff:g></string>
-    
+
     <!-- Used for Sensor detail screen in BatteryHistory -->
     <string name="battery_history_sensor_usage_multi">Used <xliff:g id="count">%1$d</xliff:g> times by one of:</string>
-    
+
     <!-- Used for label of awake bar in BatteryHistory -->
     <string name="battery_history_awake_label">Running</string>
-    
+
     <!-- Used for label of screen on bar in BatteryHistory -->
     <string name="battery_history_screen_on_label">Screen on</string>
-    
+
     <!-- Used for label of phone on bar in BatteryHistory -->
     <string name="battery_history_phone_on_label">Phone on</string>
-    
+
     <!-- Used for awake time message in BatteryHistory -->
     <string name="battery_history_awake">Time spent without sleeping:</string>
-    
+
     <!-- Used for Screen on time message in BatteryHistory -->
     <string name="battery_history_screen_on">Time spent with screen on:</string>
-    
+
     <!-- Used for Phone on time message in BatteryHistory -->
     <string name="battery_history_phone_on">Time spent with phone on:</string>
-    
+
     <!-- Used for Screen on time message in BatteryHistory -->
     <string name="battery_history_screen_on_battery">On battery:</string>
-    
+
     <!-- XXX remove? Used for Screen on time message in BatteryHistory -->
     <string name="battery_history_screen_on_plugged">Plugged in:</string>
 
     <!-- XXX remove? Strings used for displaying usage statistics -->
     <string name="usage_stats_label">Usage statistics</string>
-    
+
     <!-- In the Testing screen. The item title of the activity that shows usage statistics.  -->
     <string name="testing_usage_stats">Usage statistics</string>
     <!-- label for text to indicate sort options -->
@@ -1800,6 +1856,16 @@
     <!-- Warning about disabling accessibility displayed as a dialog message when the user
          selects to disable accessibility. This avoids accidental disabling. -->
     <string name="accessibility_service_disable_warning">Disable accessibility?</string>
+    <!-- Title for the prompt that lets users know that they have no accessibility related apps
+         installed and that they can install TalkBack from Market. -->
+    <string name="accessibility_service_no_apps_title">No accessibility related applications found
+        </string>
+    <!-- Message for the prompt that lets users know that they have no accessibility related apps
+         installed and that they can install TalkBack from Market. -->
+    <string name="accessibility_service_no_apps_message">You do not have any accessibility related
+        applications installed.\n\nYou can download a screen reader for your device from Android
+        Market.\n\nClick "OK" to install the screen reader.</string>
+
 
     <!-- App Fuel Gauge strings -->
     <skip/>
@@ -1932,19 +1998,33 @@
     <!-- Label for mediaserver process -->
     <string name="process_mediaserver_label">Mediaserver</string>
 
+    <!-- Voice input/output settings --><skip />
+    <!-- Title of setting on main settings screen. This item will take the user to the screen to tweak settings related to speech functionality -->
+    <string name="voice_input_output_settings">Voice input &amp; output</string>
+    <!-- Main voice input/output settings screen title -->
+    <string name="voice_input_output_settings_title">Voice input &amp; output settings</string>
+    <!-- Title of voice search settings list item within voice input/output settings -->
+    <string name="voice_search_settings_title">Voice search</string>
+    <!-- Title of keyboard settings list item within voice input/output settings -->
+    <string name="keyboard_settings_title">Android keyboard</string>
+    
     <!-- Text-To-Speech (TTS) settings --><skip />
     <!-- Title of setting on main settings screen.  This item will take the user to the screen to tweak settings related to the text-to-speech functionality -->
     <string name="tts_settings">Text-to-speech</string>
     <!-- Summary of setting on main settings screen. This item will take the user to the screen to tweak settings related to the text-to-speech functionality  -->
     <string name="tts_settings_summary">Set text-to-speech options</string>
     <!-- Main TTS Settings screen title -->
-    <string name="tts_settings_title">Text-to-speech settings</string>
+    <string name="tts_settings_title">Text-to-speech</string>
     <!-- On main TTS Settings screen, title for toggle used to force use of default TTS settings -->
     <string name="use_default_tts_settings_title">Always use my settings</string>
     <!-- On main TTS Settings screen, summary for toggle used to force use of default TTS settings -->
     <string name="use_default_tts_settings_summary">Default settings below override application settings</string>
     <!-- On main TTS Settings screen, section header for default TTS settings -->
     <string name="tts_default_settings_section">Default settings</string>
+    <!-- On main TTS Settings screen, in default settings section, setting default synthesis engine for synthesized voice -->
+    <string name="tts_default_synth_title">Default Engine</string>
+    <!-- On main TTS Settings screen, summary for default synthesis engine for synthesized voice -->
+    <string name="tts_default_synth_summary">Sets the speech synthesis engine to be used for spoken text</string>
     <!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice -->
     <string name="tts_default_rate_title">Speech rate</string>
     <!-- On main TTS Settings screen, summary for default speech rate for synthesized voice -->
@@ -1977,9 +2057,6 @@
     <string name="gadget_toggle_wifi">Updating Wi-Fi setting</string>
     <string name="gadget_toggle_bluetooth">Updating Bluetooth setting</string>
 
-    <!-- credential installer title -->
-    <string name="credential_installer_activity_title">Credential installer</string>
-
     <string name="vpn_settings_activity_title">VPN settings</string>
 
     <!-- Title of VPN connect dialog -->
@@ -2162,11 +2239,32 @@
     <!-- toast message -->
     <string name="credentials_disabled">Credential storage is disabled.</string>
 
+    <!-- Title of preference group for encrypted filesystem settings -->
+    <string name="encrypted_fs_category">Encrypted File System</string>
+    <!-- Title of preference to enable/dislable encrypted filesystem -->
+    <string name="encrypted_fs_enable">Encrypt private user data</string>
+    <!-- Summary of preference to enable/dislable encrypted filesystem -->
+    <string name="encrypted_fs_enable_summary">Enable encrypted file system storage for private user data in this device</string>
+    <!-- Dialog message to enable encrypted filesystem -->
+    <string name="encrypted_fs_enable_dialog">Enabling Encrypted File Systems requires a device data wipe.</string>
+    <!-- Dialog message to disable encrypted filesystem -->
+    <string name="encrypted_fs_disable_dialog">Disabling Encrypted File Systems requires a device data wipe.</string>
+    <!-- Button label to enable encrypted filesystem -->
+    <string name="encrypted_fs_enable_button">Enable</string>
+    <!-- Button label to disable encrypted filesystem -->
+    <string name="encrypted_fs_disable_button">Disable</string>
+    <!-- Button message to cancel toggling encrypted filesystem -->
+    <string name="encrypted_fs_cancel_button">Cancel</string>
+    <!-- Toast message to notify cancel toggling encrypted filesystem -->
+    <string name="encrypted_fs_cancel_confirm">Encrypted File Systems mode change cancelled.</string>
+    <!-- Dialog title to toggle encrypted filesystem -->
+    <string name="encrypted_fs_alert_dialog_title">Encrypted File Systems Warning.</string>
+
     <!-- Sound settings screen, setting check box label -->
     <string name="emergency_tone_title">Emergency tone</string>
     <!-- Sound settings screen, setting option summary text -->
     <string name="emergency_tone_summary">Set behavior when an emergency call is placed</string>
-    
+
     <!-- Privacy Settings screen --><skip/>
     <!-- Privacy settings menu title -->
     <string name="privacy_settings">Privacy</string>
@@ -2174,17 +2272,51 @@
     <string name="privacy_settings_title">Privacy settings</string>
     <!-- Location settings section title -->
     <string name="location_section_title">Location</string>
-    <!-- Settings section title -->
-    <string name="settings_section_title">Settings</string>
+    <!-- Backup section title -->
+    <string name="backup_section_title">Backup and Restore</string>
     <!-- Personal data section title -->
     <string name="personal_data_section_title">Personal data</string>
     <!-- Backup settings menu title -->
     <string name="backup_settings_title">Back up my settings</string>
+    <!-- Auto-restore menu title -->
+    <string name="auto_restore_title">Automatic restore</string>
+    <!-- Summary text of the "automatic restore" setting -->
+    <string name="auto_restore_summary">Restore applications\' data from backup when they are installed</string>
     <!-- Dialog title for confirmation to erase backup data from server -->
-    <string name="backup_erase_dialog_title">Settings backup</string>
+    <string name="backup_erase_dialog_title">Backup</string>
     <!-- Dialog title for confirmation to erase backup data from server -->
-    <string name="backup_erase_dialog_message">Are you sure you want to stop backing up your settings and erase all copies on Google servers?</string>
+    <string name="backup_erase_dialog_message">Are you sure you want to stop backing up your settings and application data and erase all copies on Google servers?</string>
 
+    <!-- Do not translate. Obsolete Settings section title - STOPSHIP remove before shipping -->
+    <string name="settings_section_title">Settings</string>
+
+    <!-- Device admin settings screen --><skip/>
+    <!-- Device admin settings activity title -->
+    <string name="device_admin_settings_title">Device administration settings</string>
+    <!-- Label for screen showing the active device policy -->
+    <string name="active_device_admin_msg">Device administrator</string>
+    <!-- Label for button to remove the active device admin -->
+    <string name="remove_device_admin">Deactivate</string>
+    <!-- Label for screen showing to select device policy -->
+    <string name="select_device_admin_msg">Device administrators</string>
+    <!-- Message when there are no available device admins to display -->
+    <string name="no_device_admins">No available device administrators</string>
+
+    <!-- Label for screen showing to add device policy -->
+    <string name="add_device_admin_msg">Activate device administrator?</string>
+    <!-- Label for button to set the active device admin -->
+    <string name="add_device_admin">Activate</string>
+    <!-- Device admin add activity title -->
+    <string name="device_admin_add_title">Device administrator</string>
+    <!-- Device admin warning message about policies an admin can use -->
+    <string name="device_admin_warning">Activating this administrator will allow
+        the application <xliff:g id="app_name">%1$s</xliff:g> to perform the
+        following operations:</string>
+    <!-- Device admin warning message about policies an admin can use -->
+    <string name="device_admin_status">This administrator is active and allows
+        the application <xliff:g id="app_name">%1$s</xliff:g> to perform the
+        following operations:</string>
+    
     <!-- Name to assign to a Network Access Point that was saved without a name -->
     <string name="untitled_apn">Untitled</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 33e43bb..a1422e1 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -44,8 +44,8 @@
         <item name="android:paddingTop">10dip</item>
         <item name="android:paddingRight">10dip</item>
         <item name="android:paddingBottom">10dip</item>
-        <item name="android:layout_width">fill_parent</item>
-        <item name="android:layout_height">fill_parent</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">match_parent</item>
     </style>
 
     <style name="entry_layout">
@@ -56,7 +56,7 @@
     
     <style name="form_value">
         <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_width">fill_parent</item>
+        <item name="android:layout_width">match_parent</item>
     </style>
 
 
@@ -78,4 +78,8 @@
         <item name="android:textStyle">normal</item>
     </style>
 
+    <style name="TallTitleBarTheme" parent="android:Theme.NoTitleBar">
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+    
 </resources>
diff --git a/res/xml-ar/timezones.xml b/res/xml-ar/timezones.xml
index b903880..d8ee857 100644
--- a/res/xml-ar/timezones.xml
+++ b/res/xml-ar/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">ماناوس</timezone>
     <timezone id="America/Santiago">سانتيجو</timezone>
     <timezone id="America/St_Johns">سانت جونس</timezone>
-    <timezone id="America/Araguaina">أروجوانيا</timezone>
+    <timezone id="America/Sao_Paulo">ساو باولو</timezone>
     <timezone id="America/Argentina/Buenos_Aires">بوينوس أيرس</timezone>
     <timezone id="America/Godthab">جودثاب</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-cs/timezones.xml b/res/xml-cs/timezones.xml
index 3b7e87b..b7f0172 100644
--- a/res/xml-cs/timezones.xml
+++ b/res/xml-cs/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">Newfoundlandský standardní čas (St. Johns)</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Sao Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-da/timezones.xml b/res/xml-da/timezones.xml
index 6e80e87..07efc21 100644
--- a/res/xml-da/timezones.xml
+++ b/res/xml-da/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Amazonas-tid (Manaus)</timezone>
     <timezone id="America/Santiago">Chilensk tid (Santiago)</timezone>
     <timezone id="America/St_Johns">Newfoundland-tid (St. Johns)</timezone>
-    <timezone id="America/Araguaina">Brasiliansk tid (Araguaina)</timezone>
+    <timezone id="America/Sao_Paulo">Brasiliansk tid (Sao Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Argentinsk tid (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Vestgrønlandsk tid (Nuuk)</timezone>
     <timezone id="America/Montevideo">Uruguayansk tid (Montevideo)</timezone>
diff --git a/res/xml-de/timezones.xml b/res/xml-de/timezones.xml
index 50c6a85..6c14a27 100644
--- a/res/xml-de/timezones.xml
+++ b/res/xml-de/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Sao Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-el/timezones.xml b/res/xml-el/timezones.xml
index de25148..f1c6720 100644
--- a/res/xml-el/timezones.xml
+++ b/res/xml-el/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Μανάος</timezone>
     <timezone id="America/Santiago">Σαντιάγκο</timezone>
     <timezone id="America/St_Johns">Σεντ Τζονς</timezone>
-    <timezone id="America/Araguaina">Αραγκουάινα</timezone>
+    <timezone id="America/Sao_Paulo">Σάο Πάολο</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Μπουένος Άιρες</timezone>
     <timezone id="America/Godthab">Γκόνθαμπ</timezone>
     <timezone id="America/Montevideo">Μοντεβίδεο</timezone>
diff --git a/res/xml-es/timezones.xml b/res/xml-es/timezones.xml
index 4fe564d..31caea5 100644
--- a/res/xml-es/timezones.xml
+++ b/res/xml-es/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Hora del Amazonas (Manaus)</timezone>
     <timezone id="America/Santiago">Hora de Chile (Santiago)</timezone>
     <timezone id="America/St_Johns">Hora estándar de Newfoundland (St. John’s)</timezone>
-    <timezone id="America/Araguaina">Hora de Brasilia (Araguaína)</timezone>
+    <timezone id="America/Sao_Paulo">Hora de Brasilia (São Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Hora de Argentina (Hora de Argentina (Buenos Aires))</timezone>
     <timezone id="America/Godthab">Hora de Groenlandia occidental (Godthab)</timezone>
     <timezone id="America/Montevideo">Hora de Uruguay (Montevideo)</timezone>
diff --git a/res/xml-fi/timezones.xml b/res/xml-fi/timezones.xml
index ae194a7..29d8b25 100644
--- a/res/xml-fi/timezones.xml
+++ b/res/xml-fi/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">Newfoundlandin normaaliaika (St. Johns)</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">São Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthåb</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-fr/timezones.xml b/res/xml-fr/timezones.xml
index d655e89..b066c0b 100644
--- a/res/xml-fr/timezones.xml
+++ b/res/xml-fr/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Heure de l’Amazonie (Manaos)</timezone>
     <timezone id="America/Santiago">Heure du Chili (Santiago)</timezone>
     <timezone id="America/St_Johns">Heure de Terre-Neuve (Saint-Jean de Terre-Neuve)</timezone>
-    <timezone id="America/Araguaina">Heure de Brasilia (Araguaína)</timezone>
+    <timezone id="America/Sao_Paulo">Heure de Brasilia (São Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Heure de l’Est argentin (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Heure de l’Ouest du Groenland (Godthåb)</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-he/timezones.xml b/res/xml-he/timezones.xml
index 9a2d9f3..4174880 100644
--- a/res/xml-he/timezones.xml
+++ b/res/xml-he/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">מנאוס</timezone>
     <timezone id="America/Santiago">אמריקה/סנטיאגו</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">אראגואינה</timezone>
+    <timezone id="America/Sao_Paulo">אמריקה/סאן-פאולו</timezone>
     <timezone id="America/Argentina/Buenos_Aires">בואנוס איירס</timezone>
     <timezone id="America/Godthab">גודת'אב</timezone>
     <timezone id="America/Montevideo">מונטווידאו</timezone>
diff --git a/res/xml-hr/timezones.xml b/res/xml-hr/timezones.xml
index 9a44c47..072002d 100644
--- a/res/xml-hr/timezones.xml
+++ b/res/xml-hr/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Sao Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-hu/timezones.xml b/res/xml-hu/timezones.xml
index 7266860..fc54cde 100644
--- a/res/xml-hu/timezones.xml
+++ b/res/xml-hu/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Amazóniai idő (Manaus)</timezone>
     <timezone id="America/Santiago">Chilei idő (Santiago)</timezone>
     <timezone id="America/St_Johns">Új-fundlandi idő (St. John's)</timezone>
-    <timezone id="America/Araguaina">Brazíliai idő (Araguaína)</timezone>
+    <timezone id="America/Sao_Paulo">Brazíliai idő (Sao Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Argentína idő (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Nyugat-grönlandi idő (Godthåb)</timezone>
     <timezone id="America/Montevideo">Uruguayi idő (Montevideo)</timezone>
diff --git a/res/xml-id/timezones.xml b/res/xml-id/timezones.xml
index ee625b0..23821a6b 100644
--- a/res/xml-id/timezones.xml
+++ b/res/xml-id/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Sao Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-it/timezones.xml b/res/xml-it/timezones.xml
index beefbf6..ea7300c 100644
--- a/res/xml-it/timezones.xml
+++ b/res/xml-it/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. Johns</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">San Paolo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-ja/timezones.xml b/res/xml-ja/timezones.xml
index 168ba04..c139009 100644
--- a/res/xml-ja/timezones.xml
+++ b/res/xml-ja/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">アマゾン時間 (マナウス)</timezone>
     <timezone id="America/Santiago">アメリカ/サンチアゴ</timezone>
     <timezone id="America/St_Johns">ニューファンドランド島標準時 (セントジョンズ)</timezone>
-    <timezone id="America/Araguaina">ブラジリア時間 (アラグァイナ)</timezone>
+    <timezone id="America/Sao_Paulo">ブラジリア時間 (サンパウロ)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">アルゼンチン時間 (ブエノスアイレス)</timezone>
     <timezone id="America/Godthab">アメリカ/ゴッドホープ</timezone>
     <timezone id="America/Montevideo">モンテビデオ</timezone>
diff --git a/res/xml-ko/timezones.xml b/res/xml-ko/timezones.xml
index 711f732..aed7bd9 100644
--- a/res/xml-ko/timezones.xml
+++ b/res/xml-ko/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">아마존 표준시 (마나우스)</timezone>
     <timezone id="America/Santiago">산티아고</timezone>
     <timezone id="America/St_Johns">뉴펀들랜드 표준시 (세인트존)</timezone>
-    <timezone id="America/Araguaina">브라질리아 표준시 (아라과이나)</timezone>
+    <timezone id="America/Sao_Paulo">브라질리아 표준시 (상파울로)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">부에노스 아이레스</timezone>
     <timezone id="America/Godthab">고드호프</timezone>
     <timezone id="America/Montevideo">몬테비데오</timezone>
diff --git a/res/xml-nb/timezones.xml b/res/xml-nb/timezones.xml
index f374a34..a20b417 100644
--- a/res/xml-nb/timezones.xml
+++ b/res/xml-nb/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Amazonas-tid (Manaus)</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Brasilia-tid (Araguaína)</timezone>
+    <timezone id="America/Sao_Paulo">Brasilia-tid (São Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthåb</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-nl/timezones.xml b/res/xml-nl/timezones.xml
index ee2453e..ecb107e 100644
--- a/res/xml-nl/timezones.xml
+++ b/res/xml-nl/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">Newfoundland-standaardtijd (St. Johns)</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">São Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-pl/timezones.xml b/res/xml-pl/timezones.xml
index ea0d72d..998aa75 100644
--- a/res/xml-pl/timezones.xml
+++ b/res/xml-pl/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Săo Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Grenlandia</timezone>
     <timezone id="America/Montevideo">Urugwaj</timezone>
diff --git a/res/xml-pt/timezones.xml b/res/xml-pt/timezones.xml
index 176d214..83a9a2b 100644
--- a/res/xml-pt/timezones.xml
+++ b/res/xml-pt/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Horário do Amazonas (Manaus)</timezone>
     <timezone id="America/Santiago">Horário do Chile (Santiago)</timezone>
     <timezone id="America/St_Johns">Horário de Terra Nova (St. Johns)</timezone>
-    <timezone id="America/Araguaina">Horário de Brasília (Araguaína)</timezone>
+    <timezone id="America/Sao_Paulo">Horário de Brasília (São Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Horário da Argentina (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Horário da Groenlândia Ocidental (Godthab)</timezone>
     <timezone id="America/Montevideo">Horário do Uruguai (Montevidéu)</timezone>
diff --git a/res/xml-ro/timezones.xml b/res/xml-ro/timezones.xml
index c87d0e0..371ba75 100644
--- a/res/xml-ro/timezones.xml
+++ b/res/xml-ro/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Ora Amazon (Manaus)</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Sao Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Ora Argentinei (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-ru/timezones.xml b/res/xml-ru/timezones.xml
index e21095f..1564a6a 100644
--- a/res/xml-ru/timezones.xml
+++ b/res/xml-ru/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Манаус</timezone>
     <timezone id="America/Santiago">Сантьяго</timezone>
     <timezone id="America/St_Johns">Сент-Джонс</timezone>
-    <timezone id="America/Araguaina">Арагуаина</timezone>
+    <timezone id="America/Sao_Paulo">Сан-Паулу</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Буэнос-Айрес</timezone>
     <timezone id="America/Godthab">Готхоб</timezone>
     <timezone id="America/Montevideo">Монтевидео</timezone>
diff --git a/res/xml-sk/timezones.xml b/res/xml-sk/timezones.xml
index 2f4254c..bfac2f1 100644
--- a/res/xml-sk/timezones.xml
+++ b/res/xml-sk/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">St. John's</timezone>
-    <timezone id="America/Araguaina">Araguaina</timezone>
+    <timezone id="America/Sao_Paulo">Sao Paulo</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Godthab</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-sr/timezones.xml b/res/xml-sr/timezones.xml
index 51caf08..c966e98 100644
--- a/res/xml-sr/timezones.xml
+++ b/res/xml-sr/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Амазон време (Манаус)</timezone>
     <timezone id="America/Santiago">Чиле време (Сантијаго)</timezone>
     <timezone id="America/St_Johns">Њуфаундленд време (Св. Џон)</timezone>
-    <timezone id="America/Araguaina">Бразилија време (Арагвајана)</timezone>
+    <timezone id="America/Sao_Paulo">Бразилија време (Сао Паоло)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Аргентина време (Буенос Аирес)</timezone>
     <timezone id="America/Godthab">Западни Гренланд време (Нук)</timezone>
     <timezone id="America/Montevideo">Уругвај време (Монтевидео)</timezone>
diff --git a/res/xml-sv/timezones.xml b/res/xml-sv/timezones.xml
index ecf9921..2381e2a 100644
--- a/res/xml-sv/timezones.xml
+++ b/res/xml-sv/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Amazonastid (Manaus)</timezone>
     <timezone id="America/Santiago">Chilensk tid (Santiago)</timezone>
     <timezone id="America/St_Johns">Newfoundland, normaltid (St. Johns)</timezone>
-    <timezone id="America/Araguaina">Brasiliansk tid (Araguaina)</timezone>
+    <timezone id="America/Sao_Paulo">Brasiliansk tid (São Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">östargentinsk tid (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Godthåb</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml-th/timezones.xml b/res/xml-th/timezones.xml
index f2fdabc..05f3793 100644
--- a/res/xml-th/timezones.xml
+++ b/res/xml-th/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">มาเนาส์</timezone>
     <timezone id="America/Santiago">ซันติอาโก</timezone>
     <timezone id="America/St_Johns">เซนต์จอนส์</timezone>
-    <timezone id="America/Araguaina">อารากัวนา</timezone>
+    <timezone id="America/Sao_Paulo">เซาเปาลู</timezone>
     <timezone id="America/Argentina/Buenos_Aires">บัวโนสไอเรส</timezone>
     <timezone id="America/Godthab">กอดแธบ</timezone>
     <timezone id="America/Montevideo">มอนเตวิเดโอ</timezone>
diff --git a/res/xml-tr/timezones.xml b/res/xml-tr/timezones.xml
index 18a341e..0184606 100644
--- a/res/xml-tr/timezones.xml
+++ b/res/xml-tr/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Amazon Saati (Manaus)</timezone>
     <timezone id="America/Santiago">Şili Saati (Santiago)</timezone>
     <timezone id="America/St_Johns">Newfoundland Saati (St. John's)</timezone>
-    <timezone id="America/Araguaina">Brasilia Saati (Araguaina)</timezone>
+    <timezone id="America/Sao_Paulo">Brasilia Saati (Sao Paulo)</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Arjantin Saati (Buenos Aires)</timezone>
     <timezone id="America/Godthab">Batı Grönland Saati (Godthab)</timezone>
     <timezone id="America/Montevideo">Uruguay Saati (Montevideo)</timezone>
diff --git a/res/xml-uk/timezones.xml b/res/xml-uk/timezones.xml
index 2337570..2658f31 100644
--- a/res/xml-uk/timezones.xml
+++ b/res/xml-uk/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Манаус</timezone>
     <timezone id="America/Santiago">Сантьяго</timezone>
     <timezone id="America/St_Johns">Сент-Джонс</timezone>
-    <timezone id="America/Araguaina">Арагуайна</timezone>
+    <timezone id="America/Sao_Paulo">Сан-Паулу</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Буенос-Айрес</timezone>
     <timezone id="America/Godthab">Готхоб</timezone>
     <timezone id="America/Montevideo">Монтевідео</timezone>
diff --git a/res/xml-zh-rTW/timezones.xml b/res/xml-zh-rTW/timezones.xml
new file mode 100644
index 0000000..f9a2fb9
--- /dev/null
+++ b/res/xml-zh-rTW/timezones.xml
@@ -0,0 +1,85 @@
+<timezones>
+    <timezone id="Pacific/Majuro">馬朱諾</timezone>
+    <timezone id="Pacific/Midway">中途島</timezone>
+    <timezone id="Pacific/Honolulu">檀香山</timezone>
+    <timezone id="America/Anchorage">安克里治</timezone>
+    <timezone id="America/Los_Angeles">太平洋時間 (洛杉磯)</timezone>
+    <timezone id="America/Tijuana">太平洋時間 (提華納)</timezone>
+    <timezone id="America/Phoenix">山區時間 (鳳凰城)</timezone>
+    <timezone id="America/Chihuahua">奇華華</timezone>
+    <timezone id="America/Denver">山區時間 (丹佛)</timezone>
+    <timezone id="America/Costa_Rica">中部時間 (哥斯大黎加)</timezone>
+    <timezone id="America/Chicago">中部時間 (芝加哥)</timezone>
+    <timezone id="America/Mexico_City">中部時間 (墨西哥市)</timezone>
+    <timezone id="America/Regina">中部時間 (利宅那)</timezone>
+    <timezone id="America/Bogota">哥伦比亚时间 (哥倫比亞)</timezone>
+    <timezone id="America/New_York">東部時間 (紐約)</timezone>
+    <timezone id="America/Caracas">委内瑞拉时间 (卡拉卡斯)</timezone>
+    <timezone id="America/Barbados">大西洋時間 (巴貝多)</timezone>
+    <timezone id="America/Manaus">亚马逊时间 (瑪瑙斯)</timezone>
+    <timezone id="America/Santiago">聖地牙哥</timezone>
+    <timezone id="America/St_Johns">纽芬兰标准时间 (聖約翰)</timezone>
+    <timezone id="America/Sao_Paulo">聖保羅</timezone>
+    <timezone id="America/Argentina/Buenos_Aires">阿根廷時間 (布宜諾斯艾利斯)</timezone>
+    <timezone id="America/Godthab">高特哈市</timezone>
+    <timezone id="America/Montevideo">乌拉圭时间 (烏拉圭)</timezone>
+    <timezone id="Atlantic/South_Georgia">南喬治亞與南三明治島</timezone>
+    <timezone id="Atlantic/Azores">亞速爾群島</timezone>
+    <timezone id="Atlantic/Cape_Verde">維德角</timezone>
+    <timezone id="Africa/Casablanca">卡薩布蘭卡</timezone>
+    <timezone id="Europe/London">格林尼治标准时间 (倫敦)</timezone>
+    <timezone id="Europe/Amsterdam">中欧标准时间 (荷蘭)</timezone>
+    <timezone id="Europe/Belgrade">中欧标准时间 (塞爾維亞)</timezone>
+    <timezone id="Europe/Brussels">中欧标准时间 (布魯塞爾)</timezone>
+    <timezone id="Europe/Sarajevo">中欧标准时间 (沙拉耶佛)</timezone>
+    <timezone id="Africa/Windhoek">溫荷克</timezone>
+    <timezone id="Africa/Brazzaville">西部非洲时间 (剛果共和國)</timezone>
+    <timezone id="Asia/Amman">东欧标准时间 (約旦)</timezone>
+    <timezone id="Europe/Athens">东欧标准时间 (希臘)</timezone>
+    <timezone id="Asia/Beirut">东欧标准时间 (貝鲁特特)</timezone>
+    <timezone id="Africa/Cairo">东欧标准时间 (埃及)</timezone>
+    <timezone id="Europe/Helsinki">东欧标准时间 (芬蘭)</timezone>
+    <timezone id="Asia/Jerusalem">以色列标准时间 (耶路撒冷)</timezone>
+    <timezone id="Europe/Minsk">白俄羅斯</timezone>
+    <timezone id="Africa/Harare">非洲中部时间 (辛巴威)</timezone>
+    <timezone id="Asia/Baghdad">阿拉伯時間 (伊拉克)</timezone>
+    <timezone id="Europe/Moscow">莫斯科</timezone>
+    <timezone id="Asia/Kuwait">阿拉伯時間 (科威特)</timezone>
+    <timezone id="Africa/Nairobi">非洲东部时间 (奈洛比)</timezone>
+    <timezone id="Asia/Tehran">伊朗标准时间 (伊朗)</timezone>
+    <timezone id="Asia/Baku">亞塞拜然</timezone>
+    <timezone id="Asia/Tbilisi">喬治亞</timezone>
+    <timezone id="Asia/Yerevan">亞美尼亞</timezone>
+    <timezone id="Asia/Dubai">GT (杜拜)</timezone>
+    <timezone id="Asia/Kabul">阿富汗时间 (阿富汗)</timezone>
+    <timezone id="Asia/Karachi">喀拉蚩</timezone>
+    <timezone id="Asia/Oral">奧拉爾</timezone>
+    <timezone id="Asia/Yekaterinburg">葉卡捷林堡</timezone>
+    <timezone id="Asia/Calcutta">印度</timezone>
+    <timezone id="Asia/Colombo">可倫坡</timezone>
+    <timezone id="Asia/Katmandu">尼泊尔时间 (尼泊爾)</timezone>
+    <timezone id="Asia/Almaty">阿拉木圖</timezone>
+    <timezone id="Asia/Rangoon">缅甸时间 (緬甸)</timezone>
+    <timezone id="Asia/Krasnoyarsk">克拉斯諾雅斯克</timezone>
+    <timezone id="Asia/Bangkok">泰國</timezone>
+    <timezone id="Asia/Shanghai">中国标准时间 (北京)</timezone>
+    <timezone id="Asia/Hong_Kong">香港时间 (中華人民共和國香港特別行政區)</timezone>
+    <timezone id="Asia/Irkutsk">伊尔库茨克时间 (伊爾庫次克)</timezone>
+    <timezone id="Asia/Kuala_Lumpur">吉隆坡</timezone>
+    <timezone id="Australia/Perth">伯斯</timezone>
+    <timezone id="Asia/Taipei">中国标准时间 (台灣)</timezone>
+    <timezone id="Asia/Seoul">首爾</timezone>
+    <timezone id="Asia/Tokyo">日本時間 (東京)</timezone>
+    <timezone id="Asia/Yakutsk">雅库茨克时间 (雅庫次克)</timezone>
+    <timezone id="Australia/Adelaide">阿得雷德</timezone>
+    <timezone id="Australia/Darwin">達爾文</timezone>
+    <timezone id="Australia/Brisbane">布利斯班</timezone>
+    <timezone id="Australia/Hobart">荷巴特</timezone>
+    <timezone id="Australia/Sydney">雪梨</timezone>
+    <timezone id="Asia/Vladivostok">海参崴时间 (海參崴)</timezone>
+    <timezone id="Pacific/Guam">關島</timezone>
+    <timezone id="Asia/Magadan">马加丹时间 (馬加丹)</timezone>
+    <timezone id="Pacific/Auckland">奧克蘭</timezone>
+    <timezone id="Pacific/Fiji">斐濟</timezone>
+    <timezone id="Pacific/Tongatapu">東加</timezone>
+</timezones>
diff --git a/res/xml-zh/timezones.xml b/res/xml-zh/timezones.xml
index 1129e7c..be269d1 100644
--- a/res/xml-zh/timezones.xml
+++ b/res/xml-zh/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">亚马逊标准时间 (马瑙斯)</timezone>
     <timezone id="America/Santiago">圣地亚哥</timezone>
     <timezone id="America/St_Johns">纽芬兰时间 (圣约翰)</timezone>
-    <timezone id="America/Araguaina">阿拉瓜伊纳</timezone>
+    <timezone id="America/Sao_Paulo">圣保罗</timezone>
     <timezone id="America/Argentina/Buenos_Aires">布宜诺斯艾利斯</timezone>
     <timezone id="America/Godthab">戈特霍布</timezone>
     <timezone id="America/Montevideo">乌拉圭时间 (蒙得维的亚)</timezone>
diff --git a/res/xml/device_info_memory.xml b/res/xml/device_info_memory.xml
index febd00f..785fded 100644
--- a/res/xml/device_info_memory.xml
+++ b/res/xml/device_info_memory.xml
@@ -25,7 +25,7 @@
             style="?android:attr/preferenceInformationStyle" 
             android:title="@string/memory_available"
             android:summary="00"/>
-        <Preference android:key="memory_sd_unmount"
+        <Preference android:key="memory_sd_mount_toggle"
             android:title="@string/sd_eject"
             android:summary="@string/sd_eject_summary"/>
         <Preference android:key="memory_sd_format"
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
new file mode 100644
index 0000000..5b73924
--- /dev/null
+++ b/res/xml/display_settings.xml
@@ -0,0 +1,45 @@
+<?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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/display_settings"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+        <com.android.settings.BrightnessPreference
+                android:key="brightness"
+                android:title="@string/brightness"
+                android:dialogIcon="@drawable/ic_popup_brightness"
+                android:dialogTitle="@string/brightness" />
+
+        <CheckBoxPreference
+            android:key="accelerometer"
+            android:title="@string/accelerometer_title"/>
+
+        <ListPreference
+            android:key="animations"
+            android:title="@string/animations_title"
+            android:persistent="false"
+            android:entries="@array/animations_entries"
+            android:entryValues="@array/animations_values" />
+
+        <ListPreference
+                android:key="screen_timeout"
+                android:title="@string/screen_timeout"
+                android:summary="@string/screen_timeout_summary"
+                android:persistent="false"
+                android:entries="@array/screen_timeout_entries"
+                android:entryValues="@array/screen_timeout_values" />
+</PreferenceScreen>
diff --git a/res/xml/privacy_settings.xml b/res/xml/privacy_settings.xml
index 92955a5..9a440cc 100644
--- a/res/xml/privacy_settings.xml
+++ b/res/xml/privacy_settings.xml
@@ -26,13 +26,18 @@
                 android:summary="@string/use_location_summary"/>
     </PreferenceCategory>
 
-    <PreferenceCategory android:key="settings_category"
-            android:title="@string/settings_section_title">
+    <PreferenceCategory android:key="backup_category"
+            android:title="@string/backup_section_title">
         <!-- Backup settings -->
         <CheckBoxPreference
                 android:key="backup_settings"
                 android:title="@string/backup_settings_title"
                 android:persistent="false" />
+        <CheckBoxPreference
+                android:key="auto_restore"
+                android:title="@string/auto_restore_title"
+                android:summary="@string/auto_restore_summary"
+                android:persistent="false" />
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/security_settings.xml b/res/xml/security_settings.xml
index 1b73584..d1f896a 100644
--- a/res/xml/security_settings.xml
+++ b/res/xml/security_settings.xml
@@ -4,9 +4,9 @@
      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.
@@ -19,15 +19,15 @@
     <PreferenceCategory
         android:key="location_category"
         android:title="@string/location_title">
-        
-        <CheckBoxPreference 
-            android:key="location_network" 
+
+        <CheckBoxPreference
+            android:key="location_network"
             android:title="@string/location_network_based"
             android:summaryOn="@string/location_neighborhood_level"
             android:summaryOff="@string/location_networks_disabled"/>
-        
-        <CheckBoxPreference 
-            android:key="location_gps" 
+
+        <CheckBoxPreference
+            android:key="location_gps"
             android:title="@string/location_gps"
             android:summaryOn="@string/location_street_level"
             android:summaryOff="@string/location_gps_disabled"/>
@@ -42,5 +42,27 @@
 -->
 
     </PreferenceCategory>
-            
+
+    <PreferenceCategory
+        android:key="security_category"
+        android:title="@string/lock_settings_title">
+
+        <ListPreference
+            android:key="unlock_method"
+            android:title="@string/unlock_method_title"
+            android:summary="@string/unlock_method_summary"
+            android:persistent="false"
+            android:entries="@array/unlock_method_entries"
+            android:entryValues="@array/unlock_method_values"/>
+
+        <CheckBoxPreference
+            android:key="visiblepattern"
+            android:title="@string/lockpattern_settings_enable_visible_pattern_title"/>
+
+        <CheckBoxPreference
+            android:key="tactilefeedback"
+            android:title="@string/lockpattern_settings_enable_tactile_feedback_title"/>
+
+    </PreferenceCategory>
+
 </PreferenceScreen>
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
index 22f2523..0f19442 100644
--- a/res/xml/settings.xml
+++ b/res/xml/settings.xml
@@ -39,15 +39,26 @@
                 android:targetClass="com.android.phone.CallFeaturesSetting" />
         </com.android.settings.IconPreferenceScreen>
 
-        <!-- Sound and Display -->
+        <!-- Sound -->
 
         <com.android.settings.IconPreferenceScreen
-            settings:icon="@drawable/ic_settings_sound_display"
-            android:title="@string/sound_and_display_settings">
+            settings:icon="@drawable/ic_settings_sound"
+            android:title="@string/sound_settings_title">
             <intent
                 android:action="android.intent.action.MAIN"
                 android:targetPackage="com.android.settings"
-                android:targetClass="com.android.settings.SoundAndDisplaySettings" />
+                android:targetClass="com.android.settings.SoundSettings" />
+        </com.android.settings.IconPreferenceScreen>
+
+        <!-- Display -->
+
+        <com.android.settings.IconPreferenceScreen
+            settings:icon="@drawable/ic_settings_display"
+            android:title="@string/display_settings_title">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.DisplaySettings" />
         </com.android.settings.IconPreferenceScreen>
 
         <!-- Security & Location -->
@@ -133,16 +144,15 @@
                 android:targetClass="com.android.settings.LanguageSettings" />
         </com.android.settings.IconPreferenceScreen>
 
-        <!-- Dock -->
+        <!-- Voice input & output -->
 
         <com.android.settings.IconPreferenceScreen
-            android:key="dock_settings"
-            settings:icon="@drawable/ic_settings_dock"
-            android:title="@string/dock_settings">
+            settings:icon="@drawable/ic_settings_speech"
+            android:title="@string/voice_input_output_settings">
             <intent
                 android:action="android.intent.action.MAIN"
                 android:targetPackage="com.android.settings"
-                android:targetClass="com.android.settings.DockSettings" />
+                android:targetClass="com.android.settings.VoiceInputOutputSettings" />
         </com.android.settings.IconPreferenceScreen>
 
         <!-- Accessibility feedback -->
@@ -156,15 +166,16 @@
                 android:targetClass="com.android.settings.AccessibilitySettings" />
         </com.android.settings.IconPreferenceScreen>
 
-        <!-- Text-To-Speech -->
+        <!-- Dock -->
 
         <com.android.settings.IconPreferenceScreen
-            settings:icon="@drawable/ic_settings_speech"
-            android:title="@string/tts_settings">
+            android:key="dock_settings"
+            settings:icon="@drawable/ic_settings_dock"
+            android:title="@string/dock_settings">
             <intent
                 android:action="android.intent.action.MAIN"
                 android:targetPackage="com.android.settings"
-                android:targetClass="com.android.settings.TextToSpeechSettings" />
+                android:targetClass="com.android.settings.DockSettings" />
         </com.android.settings.IconPreferenceScreen>
 
         <!-- Date & Time -->
diff --git a/res/xml/sound_and_display_settings.xml b/res/xml/sound_and_display_settings.xml
deleted file mode 100644
index 657a340..0000000
--- a/res/xml/sound_and_display_settings.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-
-    <PreferenceCategory android:key="sound_settings"
-            android:title="@string/sound_settings">
-
-        <CheckBoxPreference
-                android:key="silent"
-                android:title="@string/silent_mode_title"
-                android:summary="@string/silent_mode_summary"
-                android:persistent="false"
-                android:order="1"
-                android:disableDependentsState="true" />
-
-        <com.android.settings.RingerVolumePreference
-                android:key="ring_volume"
-                android:title="@string/ring_volume_title"
-                android:summary="@string/ring_volume_summary"
-                android:dialogTitle="@string/ring_volume_title"
-                android:persistent="false"
-                android:dependency="silent"
-                android:order="2"
-                android:streamType="ring" />
-
-        <VolumePreference
-                android:key="media_volume"
-                android:title="@string/media_volume_title"
-                android:summary="@string/media_volume_summary"
-                android:dialogTitle="@string/media_volume_title"
-                android:persistent="false"
-                android:order="3"
-                android:streamType="music" />
-
-        <com.android.settings.DefaultRingtonePreference
-                android:key="ringtone"
-                android:title="@string/ringtone_title"
-                android:summary="@string/ringtone_summary"
-                android:dialogTitle="@string/ringtone_title"
-                android:persistent="false"
-                android:dependency="silent"
-                android:order="5"
-                android:ringtoneType="ringtone" />
-
-        <CheckBoxPreference
-                android:key="vibrate"
-                android:title="@string/vibrate_title"
-                android:summary="@string/vibrate_summary"
-                android:order="6"
-                android:persistent="false" />
-
-        <com.android.settings.DefaultRingtonePreference
-                android:key="notification_sound"
-                android:title="@string/notification_sound_title"
-                android:summary="@string/notification_sound_summary"
-                android:dialogTitle="@string/notification_sound_dialog_title"
-                android:dependency="silent"
-                android:persistent="false"
-                android:order="7"
-                android:ringtoneType="notification" />
-
-        <CheckBoxPreference
-                android:key="notification_pulse"
-                android:title="@string/notification_pulse_title"
-                android:summary="@string/notification_pulse_summary"
-                android:order="8"
-                android:persistent="false" />
-
-        <CheckBoxPreference
-                android:key="dtmf_tone"
-                android:title="@string/dtmf_tone_enable_title"
-                android:summaryOn="@string/dtmf_tone_enable_summary_on"
-                android:summaryOff="@string/dtmf_tone_enable_summary_off"
-                android:dependency="silent"
-                android:order="9"
-                android:defaultValue="true" />
-
-        <CheckBoxPreference
-                android:key="sound_effects"
-                android:title="@string/sound_effects_enable_title"
-                android:summaryOn="@string/sound_effects_enable_summary_on"
-                android:summaryOff="@string/sound_effects_enable_summary_off"
-                android:dependency="silent"
-                android:order="10"
-                android:defaultValue="true" />
-
-        <CheckBoxPreference
-                android:key="haptic_feedback"
-                android:title="@string/haptic_feedback_enable_title"
-                android:summaryOn="@string/haptic_feedback_enable_summary_on"
-                android:summaryOff="@string/haptic_feedback_enable_summary_off"
-                android:dependency="silent"
-                 android:order="11"
-                android:defaultValue="true" />
-
-        <CheckBoxPreference
-                android:key="play_media_notification_sounds"
-                android:title="@string/play_media_notification_sounds_enable_title"
-                android:summaryOn="@string/play_media_notification_sounds_enable_summary_on"
-                android:summaryOff="@string/play_media_notification_sounds_enable_summary_off"
-                android:dependency="silent"
-                android:order="12"
-                android:defaultValue="true" />
-
-    </PreferenceCategory>
-
-    <ListPreference
-            android:key="emergency_tone"
-            android:title="@string/emergency_tone_title"
-            android:summary="@string/emergency_tone_summary"
-            android:entries="@array/emergency_tone_entries"
-            android:entryValues="@array/emergency_tone_values" />
-
-    <PreferenceCategory
-            android:title="@string/display_settings">
-
-        <CheckBoxPreference
-            android:key="accelerometer"
-            android:title="@string/accelerometer_title"
-            android:summaryOn="@string/accelerometer_summary_on"
-            android:summaryOff="@string/accelerometer_summary_off"/>
-
-        <ListPreference
-            android:key="animations"
-            android:title="@string/animations_title"
-            android:persistent="false"
-            android:entries="@array/animations_entries"
-            android:entryValues="@array/animations_values" />
-
-        <com.android.settings.BrightnessPreference
-                android:key="brightness"
-                android:title="@string/brightness"
-                android:summary="@string/brightness_summary"
-                android:dialogIcon="@drawable/ic_popup_brightness"
-                android:dialogTitle="@string/brightness" />
-
-        <ListPreference
-                android:key="screen_timeout"
-                android:title="@string/screen_timeout"
-                android:summary="@string/screen_timeout_summary"
-                android:persistent="false"
-                android:entries="@array/screen_timeout_entries"
-                android:entryValues="@array/screen_timeout_values" />
-    </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
new file mode 100644
index 0000000..08ce0d6
--- /dev/null
+++ b/res/xml/sound_settings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/sound_settings"
+        android:key="sound_settings"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+        <CheckBoxPreference
+                android:key="silent"
+                android:title="@string/silent_mode_title"
+                android:summary="@string/silent_mode_summary"
+                android:persistent="false"
+                android:order="1"
+                android:disableDependentsState="true" />
+
+        <com.android.settings.RingerVolumePreference
+                android:key="ring_volume"
+                android:title="@string/all_volume_title"
+                android:summary="@string/ring_volume_summary"
+                android:dialogTitle="@string/all_volume_title"
+                android:persistent="false"
+                android:dependency="silent"
+                android:order="2"
+                android:streamType="ring" />
+
+        <com.android.settings.DefaultRingtonePreference
+                android:key="ringtone"
+                android:title="@string/ringtone_title"
+                android:summary="@string/ringtone_summary"
+                android:dialogTitle="@string/ringtone_title"
+                android:persistent="false"
+                android:dependency="silent"
+                android:order="5"
+                android:ringtoneType="ringtone" />
+
+        <CheckBoxPreference
+                android:key="vibrate"
+                android:title="@string/vibrate_title"
+                android:summary="@string/vibrate_summary"
+                android:order="6"
+                android:persistent="false" />
+
+        <com.android.settings.DefaultRingtonePreference
+                android:key="notification_sound"
+                android:title="@string/notification_sound_title"
+                android:summary="@string/notification_sound_summary"
+                android:dialogTitle="@string/notification_sound_dialog_title"
+                android:dependency="silent"
+                android:persistent="false"
+                android:order="7"
+                android:ringtoneType="notification" />
+
+        <CheckBoxPreference
+                android:key="notification_pulse"
+                android:title="@string/notification_pulse_title"
+                android:summary="@string/notification_pulse_summary"
+                android:order="8"
+                android:persistent="false" />
+
+        <CheckBoxPreference
+                android:key="dtmf_tone"
+                android:title="@string/dtmf_tone_enable_title"
+                android:summaryOn="@string/dtmf_tone_enable_summary_on"
+                android:summaryOff="@string/dtmf_tone_enable_summary_off"
+                android:dependency="silent"
+                android:order="9"
+                android:defaultValue="true" />
+
+        <CheckBoxPreference
+                android:key="sound_effects"
+                android:title="@string/sound_effects_enable_title"
+                android:summaryOn="@string/sound_effects_enable_summary_on"
+                android:summaryOff="@string/sound_effects_enable_summary_off"
+                android:dependency="silent"
+                android:order="10"
+                android:defaultValue="true" />
+
+        <CheckBoxPreference
+                android:key="haptic_feedback"
+                android:title="@string/haptic_feedback_enable_title"
+                android:summaryOn="@string/haptic_feedback_enable_summary_on"
+                android:summaryOff="@string/haptic_feedback_enable_summary_off"
+                android:order="11"
+                android:defaultValue="true" />
+
+        <ListPreference
+                android:key="emergency_tone"
+                android:title="@string/emergency_tone_title"
+                android:summary="@string/emergency_tone_summary"
+                android:entries="@array/emergency_tone_entries"
+                android:entryValues="@array/emergency_tone_values" />
+
+</PreferenceScreen>
diff --git a/res/xml/testing_settings.xml b/res/xml/testing_settings.xml
index 87c9cf8..4b3ea0b 100644
--- a/res/xml/testing_settings.xml
+++ b/res/xml/testing_settings.xml
@@ -45,6 +45,15 @@
                 android:targetPackage="com.android.settings"
                 android:targetClass="com.android.settings.UsageStats" />
     </PreferenceScreen>
+
+    <PreferenceScreen
+            android:title="@string/testing_wifi_info" >
+        <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.wifi.WifiInfo" />
+    </PreferenceScreen>
+
     <!--    
     <PreferenceScreen
             android:title="@string/testing_sim_toolkit">
diff --git a/res/xml/testing_wifi_settings.xml b/res/xml/testing_wifi_settings.xml
new file mode 100644
index 0000000..7844aaa
--- /dev/null
+++ b/res/xml/testing_wifi_settings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<PreferenceScreen
+xmlns:android="http://schemas.android.com/apk/res/android"
+android:title="@string/testing_wifi_info"
+android:key="parent">
+
+    <Preference
+        android:title="@string/wifi_api_test" >
+                <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.wifi.WifiAPITest" />
+    </Preference>
+
+    <Preference
+        android:title="@string/wifi_config_info" >
+        <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.wifi.WifiConfigInfo" />
+    </Preference>
+
+    <Preference
+        android:title="@string/wifi_status_test" >
+        <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.wifi.WifiStatusTest" />
+    </Preference>
+
+</PreferenceScreen>
diff --git a/res/xml/tether_prefs.xml b/res/xml/tether_prefs.xml
new file mode 100644
index 0000000..321129f
--- /dev/null
+++ b/res/xml/tether_prefs.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/tether_screen_title">
+
+    <PreferenceScreen
+        android:key="usb_tether_settings"
+        android:title="@string/usb_tethering_button_text"
+        android:widgetLayout="@*android:layout/preference_dialog" >
+        <intent
+            android:action="android.intent.action.MAIN"
+            android:targetPackage="android"
+            android:targetClass="com.android.internal.app.TetherActivity" />
+    </PreferenceScreen>
+
+    <CheckBoxPreference
+        android:key="enable_tether_notice"
+        android:title="@string/enable_tether_notice_checkbox"
+        android:summary="@string/enable_tether_notice_checkbox_summary"/>
+
+</PreferenceScreen>
diff --git a/res/xml/timezones.xml b/res/xml/timezones.xml
index c9667b8..9c7bd56 100644
--- a/res/xml/timezones.xml
+++ b/res/xml/timezones.xml
@@ -19,7 +19,7 @@
     <timezone id="America/Manaus">Manaus</timezone>
     <timezone id="America/Santiago">Santiago</timezone>
     <timezone id="America/St_Johns">Newfoundland</timezone>
-    <timezone id="America/Araguaina">Brasilia</timezone>
+    <timezone id="America/Sao_Paulo">Brasilia</timezone>
     <timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
     <timezone id="America/Godthab">Greenland</timezone>
     <timezone id="America/Montevideo">Montevideo</timezone>
diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index d94d575..6b1a843 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -37,6 +37,11 @@
                     
         <PreferenceCategory
             android:title="@string/tts_default_settings_section">
+            <ListPreference
+                android:key="tts_default_synth"
+                android:title="@string/tts_default_synth_title"
+                android:summary="@string/tts_default_synth_summary"
+                android:persistent="false" />
             
             <ListPreference
                 android:key="tts_default_rate"
diff --git a/res/xml/voice_input_output_settings.xml b/res/xml/voice_input_output_settings.xml
new file mode 100644
index 0000000..c916415
--- /dev/null
+++ b/res/xml/voice_input_output_settings.xml
@@ -0,0 +1,41 @@
+<?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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/voice_input_output_settings_title"
+        android:key="parent">
+    
+    <PreferenceScreen android:key="voice_search_settings"
+            android:title="@string/voice_search_settings_title">
+        <intent android:action="android.speech.action.VOICE_SEARCH_SETTINGS"/>
+    </PreferenceScreen>
+    
+    <!-- TODO: Link to a specific voice settings activity within LatinIME when it exists. -->
+    <PreferenceScreen android:key="keyboard_settings"
+            android:title="@string/keyboard_settings_title">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.inputmethod.latin"
+                android:targetClass="com.android.inputmethod.latin.LatinIMESettings" />
+    </PreferenceScreen>
+    
+    <PreferenceScreen android:key="tts_settings"
+            android:title="@string/tts_settings_title">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.TextToSpeechSettings" />
+    </PreferenceScreen>
+    
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/wifi_access_points.xml b/res/xml/wifi_access_points.xml
index 281093c..48104dd 100644
--- a/res/xml/wifi_access_points.xml
+++ b/res/xml/wifi_access_points.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -23,8 +23,8 @@
             android:persistent="false" />
 
     <Preference
-            android:key="add_other_network"
-            android:title="@string/wifi_add_other_network"
+            android:key="add_network"
+            android:title="@string/wifi_add_network"
             android:persistent="false" />
 
 </PreferenceScreen>
diff --git a/res/xml/wifi_settings.xml b/res/xml/wifi_settings.xml
index 8a76674..35f1173 100644
--- a/res/xml/wifi_settings.xml
+++ b/res/xml/wifi_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
@@ -18,28 +18,28 @@
         android:title="@string/wifi_settings_category">
 
     <CheckBoxPreference
-            android:key="wifi_enabled"
+            android:key="enable_wifi"
             android:title="@string/wifi"
             android:summary="@string/wifi_quick_toggle_summary"
             android:persistent="false" />
 
     <CheckBoxPreference
-            android:key="open_network_notifications_enabled"
-            android:dependency="wifi_enabled"
+            android:key="notify_open_networks"
+            android:dependency="enable_wifi"
             android:title="@string/wifi_notify_open_networks"
             android:summary="@string/wifi_notify_open_networks_summary"
             android:persistent="false" />
 
     <com.android.settings.ProgressCategory
             android:key="access_points"
-            android:dependency="wifi_enabled"
+            android:dependency="enable_wifi"
             android:title="@string/wifi_access_points"
             android:persistent="false" />
 
     <Preference
-            android:key="add_other_network"
-            android:dependency="wifi_enabled"
-            android:title="@string/wifi_add_other_network"
+            android:key="add_network"
+            android:dependency="enable_wifi"
+            android:title="@string/wifi_add_network"
             android:persistent="false" />
 
 </PreferenceScreen>
diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml
index 1bb55ef..9977505 100644
--- a/res/xml/wireless_settings.xml
+++ b/res/xml/wireless_settings.xml
@@ -44,14 +44,12 @@
         android:key="toggle_bluetooth"
         android:title="@string/bluetooth_quick_toggle_title"
         android:summary="@string/bluetooth_quick_toggle_summary"
-        android:persistent="false"
-        android:dependency="toggle_airplane" />
+        android:persistent="false" />
 
     <PreferenceScreen
         android:key="bt_settings"
         android:title="@string/bluetooth_settings_title"
-        android:summary="@string/bluetooth_settings_summary"
-        android:dependency="toggle_airplane">
+        android:summary="@string/bluetooth_settings_summary">
         <intent
             android:action="android.intent.action.MAIN"
             android:targetPackage="com.android.settings"
@@ -59,6 +57,15 @@
     </PreferenceScreen>
 
     <PreferenceScreen
+        android:title="@string/tether_settings_title"
+        android:summary="@string/tether_settings_summary">
+        <intent
+            android:action="android.intent.action.MAIN"
+            android:targetPackage="com.android.settings"
+            android:targetClass="com.android.settings.TetherSettings" />
+    </PreferenceScreen>
+
+    <PreferenceScreen
         android:key="vpn_settings"
         android:title="@string/vpn_settings_title"
         android:summary="@string/vpn_settings_summary" >
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index 6199e50..1d6db20 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -19,8 +19,14 @@
 import android.app.AlertDialog;
 import android.app.Service;
 import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ServiceInfo;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
@@ -39,6 +45,9 @@
  * Activity with the accessibility settings.
  */
 public class AccessibilitySettings extends PreferenceActivity {
+    private static final String DEFAULT_SCREENREADER_MARKET_LINK =
+        "market://search?q=pname:com.google.android.marvin.talkback";
+
     private final String TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX =
         "toggle_accessibility_service_checkbox";
 
@@ -108,6 +117,9 @@
                 setAccessibilityServicePreferencesState(false);
             }
             mToggleCheckBox.setEnabled(false);
+            // Notify user that they do not have any accessibility apps
+            // installed and direct them to Market to get TalkBack
+            displayNoAppsAlert();
         }
     }
 
@@ -274,4 +286,42 @@
             mAccessibilityServicesCategory.addPreference(preference);
         }
     }
+
+    /**
+     * Displays a message telling the user that they do not have any accessibility
+     * related apps installed and that they can get TalkBack (Google's free screen
+     * reader) from Market.
+     */
+    private void displayNoAppsAlert() {
+        try {
+            PackageManager pm = getPackageManager();
+            ApplicationInfo info = pm.getApplicationInfo("com.android.vending", 0);
+        } catch (NameNotFoundException e) {
+            // This is a no-op if the user does not have Android Market
+            return;
+        }
+        AlertDialog.Builder noAppsAlert = new AlertDialog.Builder(this);
+        noAppsAlert.setTitle(R.string.accessibility_service_no_apps_title);
+        noAppsAlert.setMessage(R.string.accessibility_service_no_apps_message);
+
+        noAppsAlert.setPositiveButton(android.R.string.ok,
+            new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog, int which) {
+                    String screenreaderMarketLink =
+                        SystemProperties.get("ro.screenreader.market", DEFAULT_SCREENREADER_MARKET_LINK);
+                    Uri marketUri = Uri.parse(screenreaderMarketLink);
+                    Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
+                    startActivity(marketIntent);
+                    finish();
+                }
+            });
+
+        noAppsAlert.setNegativeButton(android.R.string.cancel,
+            new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog, int which) {
+                }
+            });
+
+        noAppsAlert.show();
+    }
 }
diff --git a/src/com/android/settings/ActivityPicker.java b/src/com/android/settings/ActivityPicker.java
index 4b0469c..d984adb 100644
--- a/src/com/android/settings/ActivityPicker.java
+++ b/src/com/android/settings/ActivityPicker.java
@@ -16,6 +16,7 @@
 
 package com.android.settings;
 
+import android.graphics.ColorFilter;
 import android.util.DisplayMetrics;
 import com.android.internal.app.AlertActivity;
 import com.android.internal.app.AlertController;
@@ -349,68 +350,124 @@
             int width = mIconWidth;
             int height = mIconHeight;
 
-            if (icon instanceof PaintDrawable) {
-                PaintDrawable painter = (PaintDrawable) icon;
-                painter.setIntrinsicWidth(width);
-                painter.setIntrinsicHeight(height);
-            } else if (icon instanceof BitmapDrawable) {
-                // Ensure the bitmap has a density.
-                BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;
-                Bitmap bitmap = bitmapDrawable.getBitmap();
-                if (bitmap.getDensity() == Bitmap.DENSITY_NONE) {
-                    bitmapDrawable.setTargetDensity(mMetrics);
-                }
+            if (icon == null) {
+                return new EmptyDrawable(width, height);
             }
-            int iconWidth = icon.getIntrinsicWidth();
-            int iconHeight = icon.getIntrinsicHeight();
-
-            if (iconWidth > 0 && iconHeight > 0) {
-                if (width < iconWidth || height < iconHeight) {
-                    final float ratio = (float) iconWidth / iconHeight;
-
-                    if (iconWidth > iconHeight) {
-                        height = (int) (width / ratio);
-                    } else if (iconHeight > iconWidth) {
-                        width = (int) (height * ratio);
+            
+            try {
+                if (icon instanceof PaintDrawable) {
+                    PaintDrawable painter = (PaintDrawable) icon;
+                    painter.setIntrinsicWidth(width);
+                    painter.setIntrinsicHeight(height);
+                } else if (icon instanceof BitmapDrawable) {
+                    // Ensure the bitmap has a density.
+                    BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;
+                    Bitmap bitmap = bitmapDrawable.getBitmap();
+                    if (bitmap.getDensity() == Bitmap.DENSITY_NONE) {
+                        bitmapDrawable.setTargetDensity(mMetrics);
                     }
-
-                    final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?
-                                Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
-                    final Bitmap thumb = Bitmap.createBitmap(mIconWidth, mIconHeight, c);
-                    final Canvas canvas = mCanvas;
-                    canvas.setBitmap(thumb);
-                    // Copy the old bounds to restore them later
-                    // If we were to do oldBounds = icon.getBounds(),
-                    // the call to setBounds() that follows would
-                    // change the same instance and we would lose the
-                    // old bounds
-                    mOldBounds.set(icon.getBounds());
-                    final int x = (mIconWidth - width) / 2;
-                    final int y = (mIconHeight - height) / 2;
-                    icon.setBounds(x, y, x + width, y + height);
-                    icon.draw(canvas);
-                    icon.setBounds(mOldBounds);
-                    //noinspection deprecation
-                    icon = new BitmapDrawable(thumb);
-                    ((BitmapDrawable) icon).setTargetDensity(mMetrics);
-                } else if (iconWidth < width && iconHeight < height) {
-                    final Bitmap.Config c = Bitmap.Config.ARGB_8888;
-                    final Bitmap thumb = Bitmap.createBitmap(mIconWidth, mIconHeight, c);
-                    final Canvas canvas = mCanvas;
-                    canvas.setBitmap(thumb);
-                    mOldBounds.set(icon.getBounds());
-                    final int x = (width - iconWidth) / 2;
-                    final int y = (height - iconHeight) / 2;
-                    icon.setBounds(x, y, x + iconWidth, y + iconHeight);
-                    icon.draw(canvas);
-                    icon.setBounds(mOldBounds);
-                    //noinspection deprecation
-                    icon = new BitmapDrawable(thumb);
-                    ((BitmapDrawable) icon).setTargetDensity(mMetrics);
                 }
+                int iconWidth = icon.getIntrinsicWidth();
+                int iconHeight = icon.getIntrinsicHeight();
+    
+                if (iconWidth > 0 && iconHeight > 0) {
+                    if (width < iconWidth || height < iconHeight) {
+                        final float ratio = (float) iconWidth / iconHeight;
+    
+                        if (iconWidth > iconHeight) {
+                            height = (int) (width / ratio);
+                        } else if (iconHeight > iconWidth) {
+                            width = (int) (height * ratio);
+                        }
+    
+                        final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?
+                                    Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
+                        final Bitmap thumb = Bitmap.createBitmap(mIconWidth, mIconHeight, c);
+                        final Canvas canvas = mCanvas;
+                        canvas.setBitmap(thumb);
+                        // Copy the old bounds to restore them later
+                        // If we were to do oldBounds = icon.getBounds(),
+                        // the call to setBounds() that follows would
+                        // change the same instance and we would lose the
+                        // old bounds
+                        mOldBounds.set(icon.getBounds());
+                        final int x = (mIconWidth - width) / 2;
+                        final int y = (mIconHeight - height) / 2;
+                        icon.setBounds(x, y, x + width, y + height);
+                        icon.draw(canvas);
+                        icon.setBounds(mOldBounds);
+                        //noinspection deprecation
+                        icon = new BitmapDrawable(thumb);
+                        ((BitmapDrawable) icon).setTargetDensity(mMetrics);
+                    } else if (iconWidth < width && iconHeight < height) {
+                        final Bitmap.Config c = Bitmap.Config.ARGB_8888;
+                        final Bitmap thumb = Bitmap.createBitmap(mIconWidth, mIconHeight, c);
+                        final Canvas canvas = mCanvas;
+                        canvas.setBitmap(thumb);
+                        mOldBounds.set(icon.getBounds());
+                        final int x = (width - iconWidth) / 2;
+                        final int y = (height - iconHeight) / 2;
+                        icon.setBounds(x, y, x + iconWidth, y + iconHeight);
+                        icon.draw(canvas);
+                        icon.setBounds(mOldBounds);
+                        //noinspection deprecation
+                        icon = new BitmapDrawable(thumb);
+                        ((BitmapDrawable) icon).setTargetDensity(mMetrics);
+                    }
+                }
+    
+            } catch (Throwable t) {
+                icon = new EmptyDrawable(width, height);
             }
 
             return icon;
         }
     }
+
+    private static class EmptyDrawable extends Drawable {
+        private final int mWidth;
+        private final int mHeight;
+
+        EmptyDrawable(int width, int height) {
+            mWidth = width;
+            mHeight = height;
+        }
+
+        @Override
+        public int getIntrinsicWidth() {
+            return mWidth;
+        }
+
+        @Override
+        public int getIntrinsicHeight() {
+            return mHeight;
+        }
+
+        @Override
+        public int getMinimumWidth() {
+            return mWidth;
+        }
+
+        @Override
+        public int getMinimumHeight() {
+            return mHeight;
+        }
+
+        @Override
+        public void draw(Canvas canvas) {
+        }
+
+        @Override
+        public void setAlpha(int alpha) {
+        }
+
+        @Override
+        public void setColorFilter(ColorFilter cf) {
+        }
+
+        @Override
+        public int getOpacity() {
+            return PixelFormat.TRANSLUCENT;
+        }
+    }    
 }
diff --git a/src/com/android/settings/AppWidgetPickActivity.java b/src/com/android/settings/AppWidgetPickActivity.java
index cddc687..176ac80 100644
--- a/src/com/android/settings/AppWidgetPickActivity.java
+++ b/src/com/android/settings/AppWidgetPickActivity.java
@@ -167,6 +167,7 @@
      */
     void putAppWidgetItems(List<AppWidgetProviderInfo> appWidgets,
             List<Bundle> customExtras, List<PickAdapter.Item> items) {
+        if (appWidgets == null) return;
         final int size = appWidgets.size();
         for (int i = 0; i < size; i++) {
             AppWidgetProviderInfo info = appWidgets.get(i);
diff --git a/src/com/android/settings/BandMode.java b/src/com/android/settings/BandMode.java
index a8c7833..4c7663e 100644
--- a/src/com/android/settings/BandMode.java
+++ b/src/com/android/settings/BandMode.java
@@ -62,7 +62,7 @@
         setContentView(R.layout.band_mode);
 
         setTitle(getString(R.string.band_mode_title));
-        getWindow().setLayout(WindowManager.LayoutParams.FILL_PARENT,
+        getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,
                                     WindowManager.LayoutParams.WRAP_CONTENT);
 
         mPhone = PhoneFactory.getDefaultPhone();
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
new file mode 100644
index 0000000..b244a75
--- /dev/null
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import com.android.internal.widget.LockPatternUtils;
+
+import android.app.Activity;
+import android.app.DevicePolicyManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+public class ChooseLockGeneric extends Activity {
+    private ChooseLockSettingsHelper mChooseLockSettingsHelper;
+    DevicePolicyManager mDPM;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
+        mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this);
+        
+        final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils();
+        
+        int quality = getIntent().getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1);
+        if (quality == -1) {
+            quality = lockPatternUtils.getPasswordMode();
+        }
+        int minQuality = mDPM.getPasswordQuality(null);
+        if (quality < minQuality) {
+            quality = minQuality;
+        }
+        if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
+            int minLength = mDPM.getPasswordMinimumLength(null);
+            if (minLength < 4) {
+                minLength = 4;
+            }
+            final int maxLength = mDPM.getPasswordMaximumLength(quality);
+            Intent intent = new Intent().setClass(this, ChooseLockPassword.class);
+            intent.putExtra(LockPatternUtils.PASSWORD_TYPE_KEY, quality);
+            intent.putExtra(ChooseLockPassword.PASSWORD_MIN_KEY, minLength);
+            intent.putExtra(ChooseLockPassword.PASSWORD_MAX_KEY, maxLength);
+            startActivity(intent);
+        } else {
+            boolean showTutorial = !lockPatternUtils.isPatternEverChosen();
+            Intent intent = new Intent();
+            intent.setClass(this, showTutorial
+                    ? ChooseLockPatternTutorial.class
+                    : ChooseLockPattern.class);
+            intent.putExtra("key_lock_method", "pattern");
+            startActivity(intent);
+        }
+        finish();
+    }
+}
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
new file mode 100644
index 0000000..6f9cefd
--- /dev/null
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -0,0 +1,241 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.ChooseLockPattern.LeftButtonMode;
+import com.android.settings.ChooseLockPattern.RightButtonMode;
+import com.android.settings.ChooseLockPattern.Stage;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+
+
+public class ChooseLockPassword extends Activity implements OnClickListener {
+    private final int digitIds[] = new int[] { R.id.zero, R.id.one, R.id.two, R.id.three,
+            R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine };
+    private TextView mPasswordTextView;
+    private int mPasswordMinLength = 4;
+    private int mPasswordMaxLength = 8;
+    private LockPatternUtils mLockPatternUtils;
+    private int mRequestedMode = LockPatternUtils.MODE_PIN;
+    private ChooseLockSettingsHelper mChooseLockSettingsHelper;
+    private com.android.settings.ChooseLockPassword.Stage mUiStage = Stage.Introduction;
+    private TextView mHeaderText;
+    private String mFirstPin;
+    public static final String PASSWORD_MIN_KEY = "lockscreen.password_min";
+    public static final String PASSWORD_MAX_KEY = "lockscreen.password_max";
+    private static Handler mHandler = new Handler();
+    private static final int CONFIRM_EXISTING_REQUEST = 58;
+    static final int RESULT_FINISHED = RESULT_FIRST_USER;
+    private static final long ERROR_MESSAGE_TIMEOUT = 3000;
+
+    /**
+     * Keep track internally of where the user is in choosing a pattern.
+     */
+    protected enum Stage {
+
+        Introduction(R.string.lockpassword_choose_your_password_header),
+        NeedToConfirm(R.string.lockpassword_confirm_your_password_header),
+        ConfirmWrong(R.string.lockpassword_confirm_passwords_dont_match),
+        ChoiceConfirmed(R.string.lockpassword_password_confirmed_header);
+
+        /**
+         * @param headerMessage The message displayed at the top.
+         */
+        Stage(int headerMessage) {
+            this.headerMessage = headerMessage;
+        }
+
+        final int headerMessage;
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mLockPatternUtils = new LockPatternUtils(this);
+        mRequestedMode = getIntent().getIntExtra("password_mode", mRequestedMode);
+        mPasswordMinLength = getIntent().getIntExtra("password_min_length", mPasswordMinLength);
+        mPasswordMaxLength = getIntent().getIntExtra("password_max_length", mPasswordMaxLength);
+        int minMode = mLockPatternUtils.getRequestedPasswordMode();
+        if (mRequestedMode < minMode) {
+            mRequestedMode = minMode;
+        }
+        int minLength = mLockPatternUtils.getRequestedMinimumPasswordLength();
+        if (mPasswordMinLength < minLength) {
+            mPasswordMinLength = minLength;
+        }
+        initViews();
+        mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this);
+        if (savedInstanceState == null) {
+            updateStage(Stage.Introduction);
+            mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
+        }
+    }
+
+    private void initViews() {
+        switch(mRequestedMode) {
+            case LockPatternUtils.MODE_PIN:
+            case LockPatternUtils.MODE_PASSWORD:
+            case LockPatternUtils.MODE_PATTERN:
+                setContentView(R.layout.choose_lock_pin);
+                // TODO: alphanumeric layout
+                // setContentView(R.layout.choose_lock_password);
+                for (int i = 0; i < digitIds.length; i++) {
+                    Button button = (Button) findViewById(digitIds[i]);
+                    button.setOnClickListener(this);
+                    button.setText(Integer.toString(i));
+                }
+                break;
+        }
+        findViewById(R.id.ok).setOnClickListener(this);
+        findViewById(R.id.cancel).setOnClickListener(this);
+        findViewById(R.id.backspace).setOnClickListener(this);
+        mPasswordTextView = (TextView) findViewById(R.id.pinDisplay);
+        mHeaderText = (TextView) findViewById(R.id.headerText);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode,
+            Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        switch (requestCode) {
+            case CONFIRM_EXISTING_REQUEST:
+                if (resultCode != Activity.RESULT_OK) {
+                    setResult(RESULT_FINISHED);
+                    finish();
+                }
+                break;
+        }
+    }
+
+    protected void updateStage(Stage stage) {
+        mHeaderText.setText(stage.headerMessage);
+        mPasswordTextView.setText("");
+        mUiStage = stage;
+    }
+
+    /**
+     * Validates PIN and returns a message to display if PIN fails test.
+     * @param pin
+     * @return message id to display to user
+     */
+    private String validatePassword(String pin) {
+        if (pin.length() < mPasswordMinLength) {
+            return getString(R.string.pin_password_too_short, mPasswordMinLength);
+        }
+        if (pin.length() > mPasswordMaxLength) {
+            return getString(R.string.pin_password_too_long, mPasswordMaxLength);
+        }
+        if (LockPatternUtils.MODE_PIN == mRequestedMode) {
+            Pattern p = Pattern.compile("[0-9]+");
+            Matcher m = p.matcher(pin);
+            if (!m.find()) {
+                return getString(R.string.pin_password_contains_non_digits);
+            }
+        } else if (LockPatternUtils.MODE_PASSWORD == mRequestedMode) {
+            // allow Latin-1 characters only
+            for (int i = 0; i < pin.length(); i++) {
+                char c = pin.charAt(i);
+                if (c <= 32 || c > 127) {
+                    return getString(R.string.pin_password_illegal_character);
+                }
+            }
+        }
+        return null;
+    }
+
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.ok:
+                {
+                    final String pin = mPasswordTextView.getText().toString();
+                    if (TextUtils.isEmpty(pin)) {
+                        break;
+                    }
+                    String errorMsg = null;
+                    if (mUiStage == Stage.Introduction) {
+                        errorMsg = validatePassword(pin);
+                        if (errorMsg == null) {
+                            mFirstPin = pin;
+                            updateStage(Stage.NeedToConfirm);
+                        }
+                    } else if (mUiStage == Stage.NeedToConfirm) {
+                        if (mFirstPin.equals(pin)) {
+                            // TODO: move these to LockPatternUtils
+                            mLockPatternUtils.setLockPatternEnabled(false);
+                            mLockPatternUtils.saveLockPattern(null);
+                            mLockPatternUtils.saveLockPassword(pin, mRequestedMode);
+                            finish();
+                        } else {
+                            int msg = R.string.lockpassword_confirm_passwords_dont_match;
+                            errorMsg = getString(msg);
+                        }
+                    }
+                    if (errorMsg != null) {
+                        showError(errorMsg, Stage.Introduction);
+                    }
+                }
+                break;
+
+            case R.id.backspace:
+                {
+                    final Editable digits = mPasswordTextView.getEditableText();
+                    final int len = digits.length();
+                    if (len > 0) {
+                        digits.delete(len-1, len);
+                    }
+                }
+                break;
+
+            case R.id.cancel:
+                finish();
+                break;
+
+            default:
+                // Digits
+                for (int i = 0; i < digitIds.length; i++) {
+                    if (v.getId() == digitIds[i]) {
+                        mPasswordTextView.append(Integer.toString(i));
+                        return;
+                    }
+                }
+                break;
+        }
+    }
+
+    private void showError(String msg, final Stage next) {
+        mHeaderText.setText(msg);
+        mPasswordTextView.setText("");
+        mHandler.postDelayed(new Runnable() {
+            public void run() {
+                updateStage(next);
+            }
+        }, ERROR_MESSAGE_TIMEOUT);
+    }
+}
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index f103c6b..859d96b 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -45,7 +45,6 @@
  * - saves chosen password when confirmed
  */
 public class ChooseLockPattern extends Activity implements View.OnClickListener{
-
     /**
      * Used by the choose lock pattern wizard to indicate the wizard is
      * finished, and each activity in the wizard should finish.
@@ -56,7 +55,9 @@
      * result.
      */
     static final int RESULT_FINISHED = RESULT_FIRST_USER;
-    
+
+    public static final int CONFIRM_EXISTING_REQUEST = 55;
+
     // how long after a confirmation message is shown before moving on
     static final int INFORMATION_MSG_TIMEOUT_MS = 3000;
 
@@ -65,29 +66,38 @@
 
     private static final int ID_EMPTY_MESSAGE = -1;
 
-
     protected TextView mHeaderText;
     protected LockPatternView mLockPatternView;
     protected TextView mFooterText;
     private TextView mFooterLeftButton;
     private TextView mFooterRightButton;
-
     protected List<LockPatternView.Cell> mChosenPattern = null;
 
-    protected LockPatternUtils mLockPatternUtils;
-
     /**
      * The patten used during the help screen to show how to draw a pattern.
      */
     private final List<LockPatternView.Cell> mAnimatePattern =
-            Collections.unmodifiableList(
-                Lists.newArrayList(
-                        LockPatternView.Cell.of(0, 0),
-                        LockPatternView.Cell.of(0, 1),
-                        LockPatternView.Cell.of(1, 1),
-                        LockPatternView.Cell.of(2, 1)
-                    ));
+            Collections.unmodifiableList(Lists.newArrayList(
+                    LockPatternView.Cell.of(0, 0),
+                    LockPatternView.Cell.of(0, 1),
+                    LockPatternView.Cell.of(1, 1),
+                    LockPatternView.Cell.of(2, 1)
+            ));
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode,
+            Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        switch (requestCode) {
+            case CONFIRM_EXISTING_REQUEST:
+                if (resultCode != Activity.RESULT_OK) {
+                    setResult(RESULT_FINISHED);
+                    finish();
+                }
+                updateStage(Stage.Introduction);
+                break;
+        }
+    }
 
     /**
      * The pattern listener that responds according to a user choosing a new
@@ -125,7 +135,7 @@
                 }
             }
 
-            public void onPatternCellAdded(List<Cell> pattern) { 
+            public void onPatternCellAdded(List<Cell> pattern) {
 
             }
 
@@ -250,19 +260,19 @@
         }
     };
 
+    private ChooseLockSettingsHelper mChooseLockSettingsHelper;
+
     private static final String KEY_UI_STAGE = "uiStage";
     private static final String KEY_PATTERN_CHOICE = "chosenPattern";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
-        mLockPatternUtils = new LockPatternUtils(getContentResolver());
-
+        mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this);
         requestWindowFeature(Window.FEATURE_NO_TITLE);
 
         setupViews();
-        
+
         // make it so unhandled touch events within the unlock screen go to the
         // lock pattern view.
         final LinearLayoutWithDefaultTouchRecepient topLayout
@@ -271,11 +281,12 @@
         topLayout.setDefaultTouchRecepient(mLockPatternView);
 
         if (savedInstanceState == null) {
-            // first launch
-            updateStage(Stage.Introduction);
-            if (mLockPatternUtils.savedPatternExists()) {
-                confirmPattern();
-            } 
+            // first launch. As a security measure, we're in NeedToConfirm mode until we know
+            // there isn't an existing password or the user confirms their password.
+            updateStage(Stage.NeedToConfirm);
+            if (!mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST)) {
+                updateStage(Stage.Introduction);
+            }
         } else {
             // restore from previous state
             final String patternString = savedInstanceState.getString(KEY_PATTERN_CHOICE);
@@ -285,19 +296,20 @@
             updateStage(Stage.values()[savedInstanceState.getInt(KEY_UI_STAGE)]);
         }
     }
-    
+
     /**
      * Keep all "find view" related stuff confined to this function since in
      * case someone needs to subclass and customize.
      */
     protected void setupViews() {
         setContentView(R.layout.choose_lock_pattern);
-        
+
         mHeaderText = (TextView) findViewById(R.id.headerText);
 
         mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern);
         mLockPatternView.setOnPatternListener(mChooseNewLockPatternListener);
-        mLockPatternView.setTactileFeedbackEnabled(mLockPatternUtils.isTactileFeedbackEnabled());        
+        mLockPatternView.setTactileFeedbackEnabled(
+                mChooseLockSettingsHelper.utils().isTactileFeedbackEnabled());
 
         mFooterText = (TextView) findViewById(R.id.footerText);
 
@@ -364,35 +376,6 @@
         return super.onKeyDown(keyCode, event);
     }
 
-    /**
-     * Launch screen to confirm the existing lock pattern.
-     * @see #onActivityResult(int, int, android.content.Intent)
-     */
-    protected void confirmPattern() {
-        final Intent intent = new Intent();
-        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
-        startActivityForResult(intent, 55);
-    }
-
-    /**
-     * @see #confirmPattern
-     */
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode,
-            Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-
-        if (requestCode != 55) {
-            return;
-        }
-
-        if (resultCode != Activity.RESULT_OK) {
-            setResult(RESULT_FINISHED);
-            finish();
-        }
-        updateStage(Stage.Introduction);
-    }
-
     @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
@@ -414,7 +397,7 @@
 
         mUiStage = stage;
 
-        // header text, footer text, visibility and 
+        // header text, footer text, visibility and
         // enabled state all known from the stage
         if (stage == Stage.ChoiceTooShort) {
             mHeaderText.setText(
@@ -486,16 +469,17 @@
     }
 
     private void saveChosenPatternAndFinish() {
-        final boolean lockVirgin = !mLockPatternUtils.isPatternEverChosen();
+        LockPatternUtils utils = mChooseLockSettingsHelper.utils();
+        final boolean lockVirgin = !utils.isPatternEverChosen();
 
-        mLockPatternUtils.saveLockPattern(mChosenPattern);
-        mLockPatternUtils.setLockPatternEnabled(true);
+        utils.saveLockPattern(mChosenPattern);
+        utils.setLockPatternEnabled(true);
 
         if (lockVirgin) {
-            mLockPatternUtils.setVisiblePatternEnabled(true);
-            mLockPatternUtils.setTactileFeedbackEnabled(false);
+            utils.setVisiblePatternEnabled(true);
+            utils.setTactileFeedbackEnabled(false);
         }
-        
+
         setResult(RESULT_FINISHED);
         finish();
     }
diff --git a/src/com/android/settings/ChooseLockPatternTutorial.java b/src/com/android/settings/ChooseLockPatternTutorial.java
index 6e92ca8..aa6213e 100644
--- a/src/com/android/settings/ChooseLockPatternTutorial.java
+++ b/src/com/android/settings/ChooseLockPatternTutorial.java
@@ -25,25 +25,25 @@
 
 public class ChooseLockPatternTutorial extends Activity implements View.OnClickListener {
     private static final int REQUESTCODE_EXAMPLE = 1;
-    
+
     private View mNextButton;
     private View mSkipButton;
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         // Don't show the tutorial if the user has seen it before.
-        LockPatternUtils lockPatternUtils = new LockPatternUtils(getContentResolver());
+        LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
         if (savedInstanceState == null && lockPatternUtils.isPatternEverChosen()) {
             Intent intent = new Intent();
-            intent.setClassName("com.android.settings", "com.android.settings.ChooseLockPattern");
+            intent.setClass(this, ChooseLockPattern.class);
             startActivity(intent);
             finish();
         } else {
             initViews();
         }
     }
-    
+
     private void initViews() {
         setContentView(R.layout.choose_lock_pattern_tutorial);
         mNextButton = findViewById(R.id.next_button);
@@ -70,6 +70,6 @@
             finish();
         }
     }
-    
+
 }
 
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
new file mode 100644
index 0000000..3697b28e
--- /dev/null
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import android.app.Activity;
+import android.content.Intent;
+
+import com.android.internal.widget.LockPatternUtils;
+
+public class ChooseLockSettingsHelper {
+    private LockPatternUtils mLockPatternUtils;
+    private Activity mActivity;
+
+    public ChooseLockSettingsHelper(Activity activity) {
+        mActivity = activity;
+        mLockPatternUtils = new LockPatternUtils(activity);
+    }
+
+    public LockPatternUtils utils() {
+        return mLockPatternUtils;
+    }
+
+    /**
+     * If a pattern, password or PIN exists, prompt the user before allowing them to change it.
+     * @return true if one exists and we launched an activity to confirm it
+     * @see #onActivityResult(int, int, android.content.Intent)
+     */
+    protected boolean launchConfirmationActivity(int request) {
+        boolean launched = false;
+        switch (mLockPatternUtils.getPasswordMode()) {
+            case LockPatternUtils.MODE_PATTERN:
+                launched = confirmPattern(request);
+                break;
+            case LockPatternUtils.MODE_PIN:
+            case LockPatternUtils.MODE_PASSWORD:
+                launched = confirmPassword(request);
+                break;
+        }
+        return launched;
+    }
+
+    /**
+     * Launch screen to confirm the existing lock pattern.
+     * @see #onActivityResult(int, int, android.content.Intent)
+     * @return true if we launched an activity to confirm pattern
+     */
+    private boolean confirmPattern(int request) {
+        if (!mLockPatternUtils.isLockPatternEnabled() || !mLockPatternUtils.savedPatternExists()) {
+            return false;
+        }
+        final Intent intent = new Intent();
+        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
+        mActivity.startActivityForResult(intent, request);
+        return true;
+    }
+
+    /**
+     * Launch screen to confirm the existing lock password.
+     * @see #onActivityResult(int, int, android.content.Intent)
+     * @return true if we launched an activity to confirm password
+     */
+    private boolean confirmPassword(int request) {
+        if (!mLockPatternUtils.isLockPasswordEnabled()) return false;
+        final Intent intent = new Intent();
+        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPassword");
+        mActivity.startActivityForResult(intent, request);
+        return true;
+    }
+
+
+}
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
new file mode 100644
index 0000000..5308f88
--- /dev/null
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import com.android.internal.widget.LockPatternUtils;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.Editable;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+
+public class ConfirmLockPassword extends Activity implements OnClickListener {
+    private static final long ERROR_MESSAGE_TIMEOUT = 3000;
+    private final int digitIds[] = new int[] { R.id.zero, R.id.one, R.id.two, R.id.three,
+            R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine };
+    private TextView mPasswordTextView;
+    private LockPatternUtils mLockPatternUtils;
+    private TextView mHeaderText;
+    private Handler mHandler = new Handler();
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mLockPatternUtils = new LockPatternUtils(this);
+        initViews();
+    }
+
+    private void initViews() {
+        int mode = mLockPatternUtils.getPasswordMode();
+        if (LockPatternUtils.MODE_PIN == mode || LockPatternUtils.MODE_PASSWORD == mode) {
+            setContentView(R.layout.confirm_lock_pin);
+            for (int i = 0; i < digitIds.length; i++) {
+                Button button = (Button) findViewById(digitIds[i]);
+                button.setOnClickListener(this);
+                button.setText(Integer.toString(i));
+            }
+            findViewById(R.id.ok).setOnClickListener(this);
+            findViewById(R.id.cancel).setOnClickListener(this);
+        }
+        findViewById(R.id.backspace).setOnClickListener(this);
+        mPasswordTextView = (TextView) findViewById(R.id.pinDisplay);
+        mHeaderText = (TextView) findViewById(R.id.headerText);
+        mHeaderText.setText(R.string.lockpassword_confirm_your_password_header);
+    }
+
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.ok:
+                {
+                    final String pin = mPasswordTextView.getText().toString();
+                    if (mLockPatternUtils.checkPassword(pin)) {
+                        setResult(RESULT_OK);
+                        finish();
+                    } else {
+                        showError(R.string.lockpattern_need_to_unlock_wrong);
+                    }
+                }
+                break;
+
+            case R.id.backspace:
+                {
+                    final Editable digits = mPasswordTextView.getEditableText();
+                    final int len = digits.length();
+                    if (len > 0) {
+                        digits.delete(len-1, len);
+                    }
+                }
+                break;
+
+            case R.id.cancel:
+                setResult(RESULT_CANCELED);
+                finish();
+                break;
+
+            default:
+                // Digits
+                for (int i = 0; i < digitIds.length; i++) {
+                    if (v.getId() == digitIds[i]) {
+                        mPasswordTextView.append(Integer.toString(i));
+                        return;
+                    }
+                }
+                break;
+        }
+    }
+
+    private void showError(int msg) {
+        mHeaderText.setText(msg);
+        mPasswordTextView.setText(null);
+        mHandler.postDelayed(new Runnable() {
+            public void run() {
+                mHeaderText.setText(R.string.lockpassword_confirm_your_password_header);
+            }
+        }, ERROR_MESSAGE_TIMEOUT);
+    }
+}
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index a91b45f..eb9a4d8 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -80,7 +80,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        mLockPatternUtils = new LockPatternUtils(getContentResolver());
+        mLockPatternUtils = new LockPatternUtils(this);
 
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.confirm_lock_pattern);
@@ -94,7 +94,7 @@
         final LinearLayoutWithDefaultTouchRecepient topLayout
                 = (LinearLayoutWithDefaultTouchRecepient) findViewById(
                 R.id.topLayout);
-        topLayout.setDefaultTouchRecepient(mLockPatternView);        
+        topLayout.setDefaultTouchRecepient(mLockPatternView);
 
         Intent intent = getIntent();
         if (intent != null) {
@@ -161,7 +161,7 @@
                 } else {
                     mFooterTextView.setText(R.string.lockpattern_need_to_unlock_footer);
                 }
-                
+
                 mLockPatternView.setEnabled(true);
                 mLockPatternView.enableInput();
                 break;
@@ -176,7 +176,7 @@
                 } else {
                     mFooterTextView.setText(R.string.lockpattern_need_to_unlock_wrong_footer);
                 }
-                
+
                 mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong);
                 mLockPatternView.setEnabled(true);
                 mLockPatternView.enableInput();
diff --git a/src/com/android/settings/CredentialInstaller.java b/src/com/android/settings/CredentialInstaller.java
index 5a457d7..7c63b1c 100644
--- a/src/com/android/settings/CredentialInstaller.java
+++ b/src/com/android/settings/CredentialInstaller.java
@@ -32,6 +32,7 @@
  */
 public class CredentialInstaller extends Activity {
     private static final String TAG = "CredentialInstaller";
+    private static final String UNLOCKING = "ulck";
 
     private KeyStore mKeyStore = KeyStore.getInstance();
     private boolean mUnlocking = false;
@@ -42,15 +43,26 @@
 
         if (!"com.android.certinstaller".equals(getCallingPackage())) finish();
 
-        if (!isKeyStoreLocked()) {
+        if (isKeyStoreUnlocked()) {
             install();
-            finish();
         } else if (!mUnlocking) {
             mUnlocking = true;
             Credentials.getInstance().unlock(this);
-        } else {
-            finish();
+            return;
         }
+        finish();
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outStates) {
+        super.onSaveInstanceState(outStates);
+        outStates.putBoolean(UNLOCKING, mUnlocking);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Bundle savedStates) {
+        super.onRestoreInstanceState(savedStates);
+        mUnlocking = savedStates.getBoolean(UNLOCKING);
     }
 
     private void install() {
@@ -61,13 +73,13 @@
             byte[] data = bundle.getByteArray(key);
             if (data == null) continue;
             boolean success = mKeyStore.put(key.getBytes(), data);
-            Log.v(TAG, "install " + key + ": " + data.length + "  success? " + success);
+            Log.d(TAG, "install " + key + ": " + data.length + "  success? " + success);
             if (!success) return;
         }
         setResult(RESULT_OK);
     }
 
-    private boolean isKeyStoreLocked() {
-        return (mKeyStore.test() != KeyStore.NO_ERROR);
+    private boolean isKeyStoreUnlocked() {
+        return (mKeyStore.test() == KeyStore.NO_ERROR);
     }
 }
diff --git a/src/com/android/settings/DeviceAdminAdd.java b/src/com/android/settings/DeviceAdminAdd.java
new file mode 100644
index 0000000..94cf714
--- /dev/null
+++ b/src/com/android/settings/DeviceAdminAdd.java
@@ -0,0 +1,258 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.DeviceAdmin;
+import android.app.DeviceAdminInfo;
+import android.app.DevicePolicyManager;
+import android.app.Dialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.RemoteCallback;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AppSecurityPermissions;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class DeviceAdminAdd extends Activity {
+    static final String TAG = "DeviceAdminAdd";
+    
+    static final int DIALOG_WARNING = 1;
+    
+    Handler mHandler;
+    
+    DevicePolicyManager mDPM;
+    DeviceAdminInfo mDeviceAdmin;
+    CharSequence mAddMsgText;
+    
+    TextView mTitle;
+    ImageView mAdminIcon;
+    TextView mAdminName;
+    TextView mAdminDescription;
+    TextView mAddMsg;
+    TextView mAdminWarning;
+    ViewGroup mAdminPolicies;
+    Button mActionButton;
+    
+    View mSelectLayout;
+    
+    final ArrayList<View> mAddingPolicies = new ArrayList<View>();
+    final ArrayList<View> mActivePolicies = new ArrayList<View>();
+    
+    boolean mAdding;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        mHandler = new Handler(getMainLooper());
+        
+        mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
+
+        ComponentName cn = (ComponentName)getIntent().getParcelableExtra(
+                DevicePolicyManager.EXTRA_DEVICE_ADMIN);
+        if (cn == null) {
+            Log.w(TAG, "No component specified in " + getIntent().getAction());
+            finish();
+            return;
+        }
+        if (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN.equals(getIntent().getAction())) {
+            // If this was an add request, then just exit immediately if the
+            // given component is already added.
+            if (mDPM.isAdminActive(cn)) {
+                setResult(Activity.RESULT_OK);
+                finish();
+                return;
+            }
+        }
+        
+        ActivityInfo ai;
+        try {
+            ai = getPackageManager().getReceiverInfo(cn,
+                    PackageManager.GET_META_DATA);
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.w(TAG, "Unable to retrieve device policy " + cn, e);
+            finish();
+            return;
+        }
+        
+        ResolveInfo ri = new ResolveInfo();
+        ri.activityInfo = ai;
+        try {
+            mDeviceAdmin= new DeviceAdminInfo(this, ri);
+        } catch (XmlPullParserException e) {
+            Log.w(TAG, "Unable to retrieve device policy " + cn, e);
+            finish();
+            return;
+        } catch (IOException e) {
+            Log.w(TAG, "Unable to retrieve device policy " + cn, e);
+            finish();
+            return;
+        }
+        
+        mAddMsgText = getIntent().getCharSequenceExtra(
+                DevicePolicyManager.EXTRA_ADD_EXPLANATION);
+        
+        setContentView(R.layout.device_admin_add);
+        
+        mTitle = (TextView)findViewById(R.id.title);
+        mAdminIcon = (ImageView)findViewById(R.id.admin_icon);
+        mAdminName = (TextView)findViewById(R.id.admin_name);
+        mAdminDescription = (TextView)findViewById(R.id.admin_description);
+        mAddMsg = (TextView)findViewById(R.id.add_msg);
+        mAdminWarning = (TextView)findViewById(R.id.admin_warning);
+        mAdminPolicies = (ViewGroup)findViewById(R.id.admin_policies);
+        mActionButton = (Button)findViewById(R.id.action_button);
+        mActionButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                if (mAdding) {
+                    mDPM.setActiveAdmin(mDeviceAdmin.getComponent());
+                    setResult(Activity.RESULT_OK);
+                    finish();
+                } else {
+                    mDPM.getRemoveWarning(mDeviceAdmin.getComponent(),
+                            new RemoteCallback(mHandler) {
+                        @Override
+                        protected void onResult(Bundle bundle) {
+                            CharSequence msg = bundle != null
+                                    ? bundle.getCharSequence(DeviceAdmin.EXTRA_DISABLE_WARNING)
+                                    : null;
+                            if (msg == null) {
+                                mDPM.removeActiveAdmin(mDeviceAdmin.getComponent());
+                                finish();
+                            } else {
+                                Bundle args = new Bundle();
+                                args.putCharSequence(DeviceAdmin.EXTRA_DISABLE_WARNING, msg);
+                                showDialog(DIALOG_WARNING, args);
+                            }
+                        }
+                    });
+                }
+            }
+        });
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        updateInterface();
+    }
+    
+    @Override
+    protected Dialog onCreateDialog(int id, Bundle args) {
+        switch (id) {
+            case DIALOG_WARNING: {
+                CharSequence msg = args.getCharSequence(DeviceAdmin.EXTRA_DISABLE_WARNING);
+                AlertDialog.Builder builder = new AlertDialog.Builder(
+                        DeviceAdminAdd.this);
+                builder.setMessage(msg);
+                builder.setPositiveButton(R.string.dlg_ok,
+                        new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        mDPM.removeActiveAdmin(mDeviceAdmin.getComponent());
+                        finish();
+                    }
+                });
+                builder.setNegativeButton(R.string.dlg_cancel, null);
+                return builder.create();
+            }
+            default:
+                return super.onCreateDialog(id, args);
+                    
+        }
+    }
+    
+    static void setViewVisibility(ArrayList<View> views, int visibility) {
+        final int N = views.size();
+        for (int i=0; i<N; i++) {
+            views.get(i).setVisibility(visibility);
+        }
+    }
+    
+    void updateInterface() {
+        mAdminIcon.setImageDrawable(mDeviceAdmin.loadIcon(getPackageManager()));
+        mAdminName.setText(mDeviceAdmin.loadLabel(getPackageManager()));
+        try {
+            mAdminDescription.setText(
+                    mDeviceAdmin.loadDescription(getPackageManager()));
+            mAdminDescription.setVisibility(View.VISIBLE);
+        } catch (Resources.NotFoundException e) {
+            mAdminDescription.setVisibility(View.GONE);
+        }
+        if (mAddMsgText != null) {
+            mAddMsg.setText(mAddMsgText);
+            mAddMsg.setVisibility(View.VISIBLE);
+        } else {
+            mAddMsg.setVisibility(View.GONE);
+        }
+        if (mDPM.isAdminActive(mDeviceAdmin.getComponent())) {
+            if (mActivePolicies.size() == 0) {
+                ArrayList<DeviceAdminInfo.PolicyInfo> policies = mDeviceAdmin.getUsedPolicies();
+                for (int i=0; i<policies.size(); i++) {
+                    DeviceAdminInfo.PolicyInfo pi = policies.get(i);
+                    View view = AppSecurityPermissions.getPermissionItemView(
+                            this, getText(pi.label), "", true);
+                    mActivePolicies.add(view);
+                    mAdminPolicies.addView(view);
+                }
+            }
+            setViewVisibility(mActivePolicies, View.VISIBLE);
+            setViewVisibility(mAddingPolicies, View.GONE);
+            mAdminWarning.setText(getString(R.string.device_admin_status,
+                    mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
+            mTitle.setText(getText(R.string.active_device_admin_msg));
+            mActionButton.setText(getText(R.string.remove_device_admin));
+            mAdding = false;
+        } else {
+            if (mAddingPolicies.size() == 0) {
+                ArrayList<DeviceAdminInfo.PolicyInfo> policies = mDeviceAdmin.getUsedPolicies();
+                for (int i=0; i<policies.size(); i++) {
+                    DeviceAdminInfo.PolicyInfo pi = policies.get(i);
+                    View view = AppSecurityPermissions.getPermissionItemView(
+                            this, getText(pi.label), getText(pi.description), true);
+                    mAddingPolicies.add(view);
+                    mAdminPolicies.addView(view);
+                }
+            }
+            setViewVisibility(mAddingPolicies, View.VISIBLE);
+            setViewVisibility(mActivePolicies, View.GONE);
+            mAdminWarning.setText(getString(R.string.device_admin_warning,
+                    mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
+            mTitle.setText(getText(R.string.add_device_admin_msg));
+            mActionButton.setText(getText(R.string.add_device_admin));
+            mAdding = true;
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java
new file mode 100644
index 0000000..cbf446d
--- /dev/null
+++ b/src/com/android/settings/DeviceAdminSettings.java
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.DeviceAdmin;
+import android.app.DeviceAdminInfo;
+import android.app.DevicePolicyManager;
+import android.app.Dialog;
+import android.app.ListActivity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.RemoteCallback;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+public class DeviceAdminSettings extends ListActivity {
+    static final String TAG = "DeviceAdminSettings";
+    
+    static final int DIALOG_WARNING = 1;
+    
+    DevicePolicyManager mDPM;
+    final HashSet<ComponentName> mActiveAdmins = new HashSet<ComponentName>();
+    final ArrayList<DeviceAdminInfo> mAvailableAdmins = new ArrayList<DeviceAdminInfo>();
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
+        
+        setContentView(R.layout.device_admin_settings);
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        updateList();
+    }
+
+    void updateList() {
+        mActiveAdmins.clear();
+        List<ComponentName> cur = mDPM.getActiveAdmins();
+        if (cur != null) {
+            for (int i=0; i<cur.size(); i++) {
+                mActiveAdmins.add(cur.get(i));
+            }
+        }
+        
+        mAvailableAdmins.clear();
+        List<ResolveInfo> avail = getPackageManager().queryBroadcastReceivers(
+                new Intent(DeviceAdmin.ACTION_DEVICE_ADMIN_ENABLED),
+                PackageManager.GET_META_DATA);
+        for (int i=0; i<avail.size(); i++) {
+            ResolveInfo ri = avail.get(i);
+            try {
+                DeviceAdminInfo dpi = new DeviceAdminInfo(this, ri);
+                mAvailableAdmins.add(dpi);
+            } catch (XmlPullParserException e) {
+                Log.w(TAG, "Skipping " + ri.activityInfo, e);
+            } catch (IOException e) {
+                Log.w(TAG, "Skipping " + ri.activityInfo, e);
+            }
+        }
+        
+        getListView().setAdapter(new PolicyListAdapter());
+    }
+    
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        DeviceAdminInfo dpi = (DeviceAdminInfo)l.getAdapter().getItem(position);
+        Intent intent = new Intent();
+        intent.setClass(this, DeviceAdminAdd.class);
+        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, dpi.getComponent());
+        startActivity(intent);
+    }
+    
+    static class ViewHolder {
+        ImageView icon;
+        TextView name;
+        CheckBox checkbox;
+        TextView description;
+    }
+    
+    class PolicyListAdapter extends BaseAdapter {
+        final LayoutInflater mInflater;
+        
+        PolicyListAdapter() {
+            mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        }
+
+        public boolean hasStableIds() {
+            return true;
+        }
+        
+        public int getCount() {
+            return mAvailableAdmins.size();
+        }
+
+        public Object getItem(int position) {
+            return mAvailableAdmins.get(position);
+        }
+
+        public long getItemId(int position) {
+            return position;
+        }
+
+        public boolean areAllItemsEnabled() {
+            return false;
+        }
+
+        public boolean isEnabled(int position) {
+            return true;
+        }
+
+        public View getView(int position, View convertView, ViewGroup parent) {
+            View v;
+            if (convertView == null) {
+                v = newView(parent);
+            } else {
+                v = convertView;
+            }
+            bindView(v, position);
+            return v;
+        }
+        
+        public View newView(ViewGroup parent) {
+            View v = mInflater.inflate(R.layout.device_admin_item, parent, false);
+            ViewHolder h = new ViewHolder();
+            h.icon = (ImageView)v.findViewById(R.id.icon);
+            h.name = (TextView)v.findViewById(R.id.name);
+            h.checkbox = (CheckBox)v.findViewById(R.id.checkbox);
+            h.description = (TextView)v.findViewById(R.id.description);
+            v.setTag(h);
+            return v;
+        }
+        
+        public void bindView(View view, int position) {
+            ViewHolder vh = (ViewHolder) view.getTag();
+            DeviceAdminInfo item = mAvailableAdmins.get(position);
+            vh.icon.setImageDrawable(item.loadIcon(getPackageManager()));
+            vh.name.setText(item.loadLabel(getPackageManager()));
+            vh.checkbox.setChecked(mActiveAdmins.contains(item.getComponent()));
+            try {
+                vh.description.setText(item.loadDescription(getPackageManager()));
+            } catch (Resources.NotFoundException e) {
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
new file mode 100644
index 0000000..28a5829
--- /dev/null
+++ b/src/com/android/settings/DisplaySettings.java
@@ -0,0 +1,177 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
+import com.android.settings.bluetooth.DockEventReceiver;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.os.Bundle;
+import android.os.IMountService;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.view.IWindowManager;
+
+public class DisplaySettings extends PreferenceActivity implements
+        Preference.OnPreferenceChangeListener {
+    private static final String TAG = "DisplaySettings";
+
+    /** If there is no setting in the provider, use this. */
+    private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
+
+    private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
+    private static final String KEY_ANIMATIONS = "animations";
+    private static final String KEY_ACCELEROMETER = "accelerometer";
+
+    private ListPreference mAnimations;
+    private CheckBoxPreference mAccelerometer;
+    private float[] mAnimationScales;
+
+    private IWindowManager mWindowManager;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        ContentResolver resolver = getContentResolver();
+        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
+
+        addPreferencesFromResource(R.xml.display_settings);
+
+        mAnimations = (ListPreference) findPreference(KEY_ANIMATIONS);
+        mAnimations.setOnPreferenceChangeListener(this);
+        mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);
+        mAccelerometer.setPersistent(false);
+
+        ListPreference screenTimeoutPreference =
+            (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);
+        screenTimeoutPreference.setValue(String.valueOf(Settings.System.getInt(
+                resolver, SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE)));
+        screenTimeoutPreference.setOnPreferenceChangeListener(this);
+
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        updateState(true);
+    }
+
+    private void updateState(boolean force) {
+        int animations = 0;
+        try {
+            mAnimationScales = mWindowManager.getAnimationScales();
+        } catch (RemoteException e) {
+        }
+        if (mAnimationScales != null) {
+            if (mAnimationScales.length >= 1) {
+                animations = ((int)(mAnimationScales[0]+.5f)) % 10;
+            }
+            if (mAnimationScales.length >= 2) {
+                animations += (((int)(mAnimationScales[1]+.5f)) & 0x7) * 10;
+            }
+        }
+        int idx = 0;
+        int best = 0;
+        CharSequence[] aents = mAnimations.getEntryValues();
+        for (int i=0; i<aents.length; i++) {
+            int val = Integer.parseInt(aents[i].toString());
+            if (val <= animations && val > best) {
+                best = val;
+                idx = i;
+            }
+        }
+        mAnimations.setValueIndex(idx);
+        updateAnimationsSummary(mAnimations.getValue());
+        mAccelerometer.setChecked(Settings.System.getInt(
+                getContentResolver(),
+                Settings.System.ACCELEROMETER_ROTATION, 0) != 0);
+    }
+
+    private void updateAnimationsSummary(Object value) {
+        CharSequence[] summaries = getResources().getTextArray(R.array.animations_summaries);
+        CharSequence[] values = mAnimations.getEntryValues();
+        for (int i=0; i<values.length; i++) {
+            //Log.i("foo", "Comparing entry "+ values[i] + " to current "
+            //        + mAnimations.getValue());
+            if (values[i].equals(value)) {
+                mAnimations.setSummary(summaries[i]);
+                break;
+            }
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (preference == mAccelerometer) {
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.ACCELEROMETER_ROTATION,
+                    mAccelerometer.isChecked() ? 1 : 0);
+        }
+        return true;
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object objValue) {
+        final String key = preference.getKey();
+        if (KEY_ANIMATIONS.equals(key)) {
+            try {
+                int value = Integer.parseInt((String) objValue);
+                if (mAnimationScales.length >= 1) {
+                    mAnimationScales[0] = value%10;
+                }
+                if (mAnimationScales.length >= 2) {
+                    mAnimationScales[1] = (value/10)%10;
+                }
+                try {
+                    mWindowManager.setAnimationScales(mAnimationScales);
+                } catch (RemoteException e) {
+                }
+                updateAnimationsSummary(objValue);
+            } catch (NumberFormatException e) {
+                Log.e(TAG, "could not persist animation setting", e);
+            }
+
+        }
+        if (KEY_SCREEN_TIMEOUT.equals(key)) {
+            int value = Integer.parseInt((String) objValue);
+            try {
+                Settings.System.putInt(getContentResolver(),
+                        SCREEN_OFF_TIMEOUT, value);
+            } catch (NumberFormatException e) {
+                Log.e(TAG, "could not persist screen timeout setting", e);
+            }
+        }
+
+        return true;
+    }
+}
diff --git a/src/com/android/settings/InstalledAppDetails.java b/src/com/android/settings/InstalledAppDetails.java
index d05014b..eeecf46 100644
--- a/src/com/android/settings/InstalledAppDetails.java
+++ b/src/com/android/settings/InstalledAppDetails.java
@@ -280,7 +280,7 @@
         if (pkgInfo != null) {
             mAppVersion.setVisibility(View.VISIBLE);
             mAppVersion.setText(getString(R.string.version_text,
-                    String.valueOf(pkgInfo.versionCode)));
+                    String.valueOf(pkgInfo.versionName)));
         } else {
             mAppVersion.setVisibility(View.GONE);
         }
@@ -539,7 +539,7 @@
         } else if (v == mForceStopButton) {
             ActivityManager am = (ActivityManager)getSystemService(
                     Context.ACTIVITY_SERVICE);
-            am.restartPackage(packageName);
+            am.forceStopPackage(packageName);
         }
     }
 
diff --git a/src/com/android/settings/LauncherAppWidgetBinder.java b/src/com/android/settings/LauncherAppWidgetBinder.java
deleted file mode 100644
index 98ea246..0000000
--- a/src/com/android/settings/LauncherAppWidgetBinder.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2008 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.app.Activity;
-import android.appwidget.AppWidgetManager;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.content.ComponentName;
-import android.database.Cursor;
-import android.database.SQLException;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.BaseColumns;
-import android.util.Log;
-
-import java.util.ArrayList;
-
-public class LauncherAppWidgetBinder extends Activity {
-    private static final String TAG = "LauncherAppWidgetBinder";
-    private static final boolean LOGD = true;
-    
-    static final String AUTHORITY = "com.android.launcher.settings";
-    static final String TABLE_FAVORITES = "favorites";
-    
-    static final String EXTRA_BIND_SOURCES = "com.android.launcher.settings.bindsources";
-    static final String EXTRA_BIND_TARGETS = "com.android.launcher.settings.bindtargets";
-
-    static final String EXTRA_APPWIDGET_BITMAPS = "com.android.camera.appwidgetbitmaps";
-    
-    /**
-     * {@link ContentProvider} constants pulled over from Launcher
-     */
-    static final class LauncherProvider implements BaseColumns {
-        static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + TABLE_FAVORITES);
-
-        static final String ITEM_TYPE = "itemType";
-        static final String APPWIDGET_ID = "appWidgetId";
-        static final String ICON = "icon";
-
-        static final int ITEM_TYPE_APPWIDGET = 4;
-        static final int ITEM_TYPE_WIDGET_CLOCK = 1000;
-        static final int ITEM_TYPE_WIDGET_SEARCH = 1001;
-        static final int ITEM_TYPE_WIDGET_PHOTO_FRAME = 1002;
-    }
-    
-    static final String[] BIND_PROJECTION = new String[] {
-        LauncherProvider._ID,
-        LauncherProvider.ITEM_TYPE,
-        LauncherProvider.APPWIDGET_ID,
-        LauncherProvider.ICON,
-    };
-    
-    static final int INDEX_ID = 0;
-    static final int INDEX_ITEM_TYPE = 1;
-    static final int INDEX_APPWIDGET_ID = 2;
-    static final int INDEX_ICON = 3;
-    
-    static final ComponentName BIND_PHOTO_APPWIDGET = new ComponentName("com.android.camera",
-            "com.android.camera.PhotoAppWidgetBind");
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        finish();
-
-        // This helper reaches into the Launcher database and binds any unlinked
-        // widgets. If will remove any items that can't be bound successfully.
-        // We protect this binder at the manifest level by asserting the caller
-        // has the Launcher WRITE_SETTINGS permission.
-        
-        final Intent intent = getIntent();
-        final Bundle extras = intent.getExtras();
-        
-        int[] bindSources = null;
-        ArrayList<ComponentName> bindTargets = null;
-        Exception exception = null;
-
-        try {
-            bindSources = extras.getIntArray(EXTRA_BIND_SOURCES);
-            bindTargets = intent.getParcelableArrayListExtra(EXTRA_BIND_TARGETS);
-        } catch (ClassCastException ex) {
-            exception = ex;
-        }
-        
-        if (exception != null || bindSources == null || bindTargets == null ||
-                bindSources.length != bindTargets.size()) {
-            Log.w(TAG, "Problem reading incoming bind request, or invalid request", exception);
-            return;
-        }
-        
-        final String selectWhere = buildOrWhereString(LauncherProvider.ITEM_TYPE, bindSources);
-        
-        final ContentResolver resolver = getContentResolver();
-        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
-        
-        boolean foundPhotoAppWidgets = false;
-        final ArrayList<Integer> photoAppWidgetIds = new ArrayList<Integer>();
-        final ArrayList<Bitmap> photoBitmaps = new ArrayList<Bitmap>();
-        
-        Cursor c = null;
-        
-        try {
-            c = resolver.query(LauncherProvider.CONTENT_URI,
-                    BIND_PROJECTION, selectWhere, null, null);
-            
-            if (LOGD) Log.d(TAG, "found bind cursor count="+c.getCount());
-            
-            final ContentValues values = new ContentValues();
-            while (c != null && c.moveToNext()) {
-                long favoriteId = c.getLong(INDEX_ID);
-                int itemType = c.getInt(INDEX_ITEM_TYPE);
-                int appWidgetId = c.getInt(INDEX_APPWIDGET_ID);
-                byte[] iconData = c.getBlob(INDEX_ICON);
-                
-                // Find the binding target for this type
-                ComponentName targetAppWidget = null;
-                for (int i = 0; i < bindSources.length; i++) {
-                    if (bindSources[i] == itemType) {
-                        targetAppWidget = bindTargets.get(i);
-                        break;
-                    }
-                }
-                
-                if (LOGD) Log.d(TAG, "found matching targetAppWidget="+targetAppWidget.toString()+" for favoriteId="+favoriteId);
-                
-                boolean bindSuccess = false;
-                try {
-                    appWidgetManager.bindAppWidgetId(appWidgetId, targetAppWidget);
-                    bindSuccess = true;
-                } catch (RuntimeException ex) {
-                    Log.w(TAG, "Problem binding widget", ex);
-                }
-                
-                // Handle special case of photo widget by loading bitmap and
-                // preparing for later binding
-                if (bindSuccess && iconData != null &&
-                        itemType == LauncherProvider.ITEM_TYPE_WIDGET_PHOTO_FRAME) {
-                    Bitmap bitmap = BitmapFactory.decodeByteArray(iconData, 0, iconData.length);
-                    
-                    photoAppWidgetIds.add(appWidgetId);
-                    photoBitmaps.add(bitmap);
-                    foundPhotoAppWidgets = true;
-                }
-
-                if (LOGD) Log.d(TAG, "after finished, success="+bindSuccess);
-
-                // Depending on success, update launcher or remove item
-                Uri favoritesUri = ContentUris.withAppendedId(LauncherProvider.CONTENT_URI, favoriteId);
-                if (bindSuccess) {
-                    values.clear();
-                    values.put(LauncherProvider.ITEM_TYPE, LauncherProvider.ITEM_TYPE_APPWIDGET);
-                    values.putNull(LauncherProvider.ICON);
-                    resolver.update(favoritesUri, values, null, null);
-                } else {
-                    resolver.delete(favoritesUri, null, null);
-                }
-                    
-            }
-        } catch (SQLException ex) {
-            Log.w(TAG, "Problem while binding appWidgetIds for Launcher", ex);
-        } finally {
-            if (c != null) {
-                c.close();
-            }
-        }
-        
-        if (foundPhotoAppWidgets) {
-            // Convert appWidgetIds into int[]
-            final int N = photoAppWidgetIds.size();
-            final int[] photoAppWidgetIdsArray = new int[N];
-            for (int i = 0; i < N; i++) {
-                photoAppWidgetIdsArray[i] = photoAppWidgetIds.get(i);
-            }
-            
-            // Launch intent over to handle bitmap binding, but we don't need to
-            // wait around for the result.
-            final Intent bindIntent = new Intent();
-            bindIntent.setComponent(BIND_PHOTO_APPWIDGET);
-            
-            final Bundle bindExtras = new Bundle();
-            bindExtras.putIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS, photoAppWidgetIdsArray);
-            bindExtras.putParcelableArrayList(EXTRA_APPWIDGET_BITMAPS, photoBitmaps);
-            bindIntent.putExtras(bindExtras);
-            
-            startActivity(bindIntent);
-        }
-        
-        if (LOGD) Log.d(TAG, "completely finished with binding for Launcher");
-    }
-    
-    /**
-     * Build a query string that will match any row where the column matches
-     * anything in the values list.
-     */
-    static String buildOrWhereString(String column, int[] values) {
-        StringBuilder selectWhere = new StringBuilder();
-        for (int i = values.length - 1; i >= 0; i--) {
-            selectWhere.append(column).append("=").append(values[i]);
-            if (i > 0) {
-                selectWhere.append(" OR ");
-            }
-        }
-        return selectWhere.toString();
-    }
-    
-}
diff --git a/src/com/android/settings/LocalePicker.java b/src/com/android/settings/LocalePicker.java
index d31e82c..6c73d0a 100644
--- a/src/com/android/settings/LocalePicker.java
+++ b/src/com/android/settings/LocalePicker.java
@@ -37,6 +37,7 @@
 
 public class LocalePicker extends ListActivity {
     private static final String TAG = "LocalePicker";
+    private static final boolean DEBUG = false;
 
     Loc[] mLocales;
     String[] mSpecialLocaleCodes;
@@ -90,8 +91,9 @@
                 Locale l = new Locale(language, country);
 
                 if (finalSize == 0) {
-                    Log.v(TAG, "adding initial "+
-                            toTitleCase(l.getDisplayLanguage(l)));
+                    if (DEBUG) {
+                        Log.v(TAG, "adding initial "+ toTitleCase(l.getDisplayLanguage(l)));
+                    }
                     preprocess[finalSize++] =
                             new Loc(toTitleCase(l.getDisplayLanguage(l)), l);
                 } else {
@@ -101,13 +103,16 @@
                     //  diff lang -> insert ours with lang-only name
                     if (preprocess[finalSize-1].locale.getLanguage().equals(
                             language)) {
-                        Log.v(TAG, "backing up and fixing "+
-                                preprocess[finalSize-1].label+" to "+
-                                getDisplayName(preprocess[finalSize-1].locale));
+                        if (DEBUG) {
+                            Log.v(TAG, "backing up and fixing "+
+                                    preprocess[finalSize-1].label+" to "+
+                                    getDisplayName(preprocess[finalSize-1].locale));
+                        }
                         preprocess[finalSize-1].label = toTitleCase(
                                 getDisplayName(preprocess[finalSize-1].locale));
-                        Log.v(TAG, "  and adding "+
-                                toTitleCase(getDisplayName(l)));
+                        if (DEBUG) {
+                            Log.v(TAG, "  and adding "+ toTitleCase(getDisplayName(l)));
+                        }
                         preprocess[finalSize++] =
                                 new Loc(toTitleCase(getDisplayName(l)), l);
                     } else {
@@ -117,7 +122,9 @@
                         } else {
                             displayName = toTitleCase(l.getDisplayLanguage(l));
                         }
-                        Log.v(TAG, "adding "+displayName);
+                        if (DEBUG) {
+                            Log.v(TAG, "adding "+displayName);
+                        }
                         preprocess[finalSize++] = new Loc(displayName, l);
                     }
                 }
diff --git a/src/com/android/settings/ManageApplications.java b/src/com/android/settings/ManageApplications.java
index 9cd6e23..0525dab 100644
--- a/src/com/android/settings/ManageApplications.java
+++ b/src/com/android/settings/ManageApplications.java
@@ -17,11 +17,12 @@
 package com.android.settings;
 
 import com.android.settings.R;
+
 import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.ListActivity;
 import android.app.ProgressDialog;
+import android.app.TabActivity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -42,8 +43,8 @@
 import android.os.Message;
 import android.os.SystemClock;
 import android.text.format.Formatter;
-import android.util.Config;
 import android.util.Log;
+import android.util.SparseArray;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -56,6 +57,7 @@
 import android.widget.Filterable;
 import android.widget.ImageView;
 import android.widget.ListView;
+import android.widget.TabHost;
 import android.widget.TextView;
 import android.widget.AdapterView.OnItemClickListener;
 
@@ -100,23 +102,23 @@
  *  If the user selects an application, extended info(like size, uninstall/clear data options,
  *  permissions info etc.,) is displayed via the InstalledAppDetails activity.
  */
-public class ManageApplications extends ListActivity implements
+public class ManageApplications extends TabActivity implements
         OnItemClickListener, DialogInterface.OnCancelListener,
-        DialogInterface.OnClickListener {
+        TabHost.TabContentFactory,
+        TabHost.OnTabChangeListener {
     // TAG for this activity
     private static final String TAG = "ManageApplications";
     private static final String PREFS_NAME = "ManageAppsInfo.prefs";
     private static final String PREF_DISABLE_CACHE = "disableCache";
     
     // Log information boolean
-    private boolean localLOGV = Config.LOGV || false;
+    private boolean localLOGV = false;
     private static final boolean DEBUG_SIZE = false;
     private static final boolean DEBUG_TIME = false;
     
     // attributes used as keys when passing values to InstalledAppDetails activity
-    public static final String APP_PKG_PREFIX = "com.android.settings.";
-    public static final String APP_PKG_NAME = APP_PKG_PREFIX+"ApplicationPkgName";
-    public static final String APP_CHG = APP_PKG_PREFIX+"changed";
+    public static final String APP_PKG_NAME = "pkg";
+    public static final String APP_CHG = "chg";
     
     // attribute name used in receiver for tagging names of added/deleted packages
     private static final String ATTR_PKG_NAME="p";
@@ -138,11 +140,10 @@
     public static final int FILTER_APPS_ALL = MENU_OPTIONS_BASE + 0;
     public static final int FILTER_APPS_RUNNING = MENU_OPTIONS_BASE + 1;
     public static final int FILTER_APPS_THIRD_PARTY = MENU_OPTIONS_BASE + 2;
-    public static final int FILTER_OPTIONS = MENU_OPTIONS_BASE + 3;
+    public static final int FILTER_APPS_SDCARD = MENU_OPTIONS_BASE + 3;
+
     public static final int SORT_ORDER_ALPHA = MENU_OPTIONS_BASE + 4;
     public static final int SORT_ORDER_SIZE = MENU_OPTIONS_BASE + 5;
-    // Alert Dialog presented to user to find out the filter option
-    private AlertDialog mAlertDlg;
     // sort order
     private int mSortOrder = SORT_ORDER_ALPHA;
     // Filter value
@@ -612,7 +613,16 @@
         if (installedAppList == null) {
             return new ArrayList<ApplicationInfo> ();
         }
-        if (filterOption == FILTER_APPS_THIRD_PARTY) {
+        if (filterOption == FILTER_APPS_SDCARD) {
+            List<ApplicationInfo> appList =new ArrayList<ApplicationInfo> ();
+            for (ApplicationInfo appInfo : installedAppList) {
+                if ((appInfo.flags & ApplicationInfo.FLAG_ON_SDCARD) != 0) {
+                    // App on sdcard
+                    appList.add(appInfo);
+                }
+            }
+            return appList;
+        } else if (filterOption == FILTER_APPS_THIRD_PARTY) {
             List<ApplicationInfo> appList =new ArrayList<ApplicationInfo> ();
             for (ApplicationInfo appInfo : installedAppList) {
                 boolean flag = false;
@@ -680,7 +690,21 @@
         if(pAppList == null) {
             return retList;
         }
-        if (filterOption == FILTER_APPS_THIRD_PARTY) {
+        if (filterOption == FILTER_APPS_SDCARD) {
+            for (ApplicationInfo appInfo : pAppList) {
+                boolean flag = false;
+                if ((appInfo.flags & ApplicationInfo.FLAG_ON_SDCARD) != 0) {
+                    // App on sdcard
+                    flag = true;
+                }
+                if (flag) {
+                    if (matchFilter(filter, filterMap, appInfo.packageName)) {
+                        retList.add(appInfo);
+                    }
+                }
+            }
+            return retList;
+        } else if (filterOption == FILTER_APPS_THIRD_PARTY) {
             for (ApplicationInfo appInfo : pAppList) {
                 boolean flag = false;
                 if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
@@ -1243,6 +1267,10 @@
                 } else if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
                     return true;
                 }
+            } else if (filterOption == FILTER_APPS_SDCARD) {
+                if ((info.flags & ApplicationInfo.FLAG_ON_SDCARD) != 0) {
+                    return true;
+                }
             } else {
                 return true;
             }
@@ -1529,17 +1557,39 @@
              filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
              filter.addDataScheme("package");
              ManageApplications.this.registerReceiver(this, filter);
+             // Register for events related to sdcard installation.
+             IntentFilter sdFilter = new IntentFilter();
+             sdFilter.addAction(Intent.ACTION_MEDIA_RESOURCES_AVAILABLE);
+             sdFilter.addAction(Intent.ACTION_MEDIA_RESOURCES_UNAVAILABLE);
+             ManageApplications.this.registerReceiver(this, sdFilter);
          }
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String actionStr = intent.getAction();
-            Uri data = intent.getData();
-            String pkgName = data.getEncodedSchemeSpecificPart();
-            if (localLOGV) Log.i(TAG, "action:"+actionStr+", for package:"+pkgName);
-            updatePackageList(actionStr, pkgName);
-        }
+         @Override
+         public void onReceive(Context context, Intent intent) {
+             // technically we dont have to invoke handler since onReceive is invoked on
+             // the main thread but doing it here for better clarity
+             String actionStr = intent.getAction();
+             if (Intent.ACTION_PACKAGE_ADDED.equals(actionStr) ||
+                     Intent.ACTION_PACKAGE_REMOVED.equals(actionStr)) {
+                 Uri data = intent.getData();
+                 String pkgName = data.getEncodedSchemeSpecificPart();
+                 updatePackageList(actionStr, pkgName);
+             } else if (Intent.ACTION_MEDIA_RESOURCES_AVAILABLE.equals(actionStr) ||
+                     Intent.ACTION_MEDIA_RESOURCES_UNAVAILABLE.equals(actionStr)) {
+                 boolean available = Intent.ACTION_MEDIA_RESOURCES_AVAILABLE.equals(actionStr);
+                 String pkgList[] = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
+                 if (pkgList == null || pkgList.length == 0) {
+                     // Ignore
+                     return;
+                 }
+                 String msg = available ? Intent.ACTION_PACKAGE_ADDED :
+                     Intent.ACTION_PACKAGE_REMOVED;
+                 for (String pkgName : pkgList) {
+                     updatePackageList(msg, pkgName);
+                 }
+             }
+         }
     }
-    
+
     private void updatePackageList(String actionStr, String pkgName) {
         // technically we dont have to invoke handler since onReceive is invoked on
         // the main thread but doing it here for better clarity
@@ -1554,6 +1604,11 @@
         }
     }
 
+    static final String TAB_DOWNLOADED = "Downloaded";
+    static final String TAB_RUNNING = "Running";
+    static final String TAB_ALL = "All";
+    static final String TAB_SDCARD = "OnSdCard";
+    private View mRootView;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -1564,9 +1619,11 @@
         }
         Intent intent = getIntent();
         String action = intent.getAction();
+        String defaultTabTag = TAB_DOWNLOADED;
         if (action.equals(Intent.ACTION_MANAGE_PACKAGE_STORAGE)) {
             mSortOrder = SORT_ORDER_SIZE;
             mFilterApps = FILTER_APPS_ALL;
+            defaultTabTag = TAB_ALL;
             mSizesFirst = true;
         }
         mPm = getPackageManager();
@@ -1574,20 +1631,20 @@
         requestWindowFeature(Window.FEATURE_RIGHT_ICON);
         requestWindowFeature(Window.FEATURE_PROGRESS);
         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
-        setContentView(R.layout.compute_sizes);
         showLoadingMsg();
-        mDefaultAppIcon =Resources.getSystem().getDrawable(
+        mDefaultAppIcon = Resources.getSystem().getDrawable(
                 com.android.internal.R.drawable.sym_def_app_icon);
         mInvalidSizeStr = getText(R.string.invalid_size_value);
         mComputingSizeStr = getText(R.string.computing_size);
         // initialize the inflater
         mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mRootView = mInflater.inflate(R.layout.compute_sizes, null);
         mReceiver = new PackageIntentReceiver();
         mObserver = new PkgSizeObserver();
         // Create adapter and list view here
         List<ApplicationInfo> appList = getInstalledApps(mSortOrder);
         mAppInfoAdapter = new AppInfoAdapter(this, appList);
-        ListView lv= (ListView) findViewById(android.R.id.list);
+        ListView lv = (ListView) mRootView.findViewById(android.R.id.list);
         lv.setOnItemClickListener(this);
         lv.setSaveEnabled(true);
         lv.setItemsCanFocus(true);
@@ -1607,6 +1664,22 @@
         if (DEBUG_TIME) {
             Log.i(TAG, "Took " + (SystemClock.elapsedRealtime()-sStart) + " ms to init cache");
         }
+        final TabHost tabHost = getTabHost();
+        tabHost.addTab(tabHost.newTabSpec(TAB_DOWNLOADED)
+                .setIndicator(getString(R.string.filter_apps_third_party))
+                .setContent(this));
+        tabHost.addTab(tabHost.newTabSpec(TAB_RUNNING)
+                .setIndicator(getString(R.string.filter_apps_running))
+                .setContent(this));
+        tabHost.addTab(tabHost.newTabSpec(TAB_ALL)
+                .setIndicator(getString(R.string.filter_apps_all))
+                .setContent(this));
+        tabHost.addTab(tabHost.newTabSpec(TAB_SDCARD)
+                .setIndicator(getString(R.string.filter_apps_onsdcard))
+                .setContent(this));
+
+        tabHost.setCurrentTabByTag(defaultTabTag);
+        tabHost.setOnTabChangedListener(this);
     }
     
     protected void onDestroy() {
@@ -1922,8 +1995,6 @@
                 .setIcon(android.R.drawable.ic_menu_sort_alphabetically);
         menu.add(0, SORT_ORDER_SIZE, 2, R.string.sort_order_size)
                 .setIcon(android.R.drawable.ic_menu_sort_by_size); 
-        menu.add(0, FILTER_OPTIONS, 3, R.string.filter)
-                .setIcon(R.drawable.ic_menu_filter_settings);
         return true;
     }
     
@@ -1932,7 +2003,6 @@
         if (mFirst) {
             menu.findItem(SORT_ORDER_ALPHA).setVisible(mSortOrder != SORT_ORDER_ALPHA);
             menu.findItem(SORT_ORDER_SIZE).setVisible(mSortOrder != SORT_ORDER_SIZE);
-            menu.findItem(FILTER_OPTIONS).setVisible(true);
             return true;
         }
         return false;
@@ -1943,20 +2013,6 @@
         int menuId = item.getItemId();
         if ((menuId == SORT_ORDER_ALPHA) || (menuId == SORT_ORDER_SIZE)) {
             sendMessageToHandler(REORDER_LIST, menuId);
-        } else if (menuId == FILTER_OPTIONS) {
-            // Pick up the selection value from the list of added choice items.
-            int selection = mFilterApps - MENU_OPTIONS_BASE;
-            if (mAlertDlg == null) {
-                mAlertDlg = new AlertDialog.Builder(this).
-                        setTitle(R.string.filter_dlg_title).
-                        setNeutralButton(R.string.cancel, this).
-                        setSingleChoiceItems(new CharSequence[] {getText(R.string.filter_apps_all),
-                                getText(R.string.filter_apps_running),
-                                getText(R.string.filter_apps_third_party)},
-                                selection, this).
-                        create();
-            }
-            mAlertDlg.show();
         }
         return true;
     }
@@ -1973,22 +2029,24 @@
         finish();
     }
 
-    public void onClick(DialogInterface dialog, int which) {
+    public View createTabContent(String tag) {
+        return mRootView;
+    }
+
+    public void onTabChanged(String tabId) {
         int newOption;
-        switch (which) {
-        // Make sure that values of 0, 1, 2 match options all, running, third_party when
-        // created via the AlertDialog.Builder
-        case FILTER_APPS_ALL:
-            break;
-        case FILTER_APPS_RUNNING:
-            break;
-        case FILTER_APPS_THIRD_PARTY:
-            break;
-        default:
+        if (TAB_DOWNLOADED.equalsIgnoreCase(tabId)) {
+            newOption = FILTER_APPS_THIRD_PARTY;
+        } else if (TAB_RUNNING.equalsIgnoreCase(tabId)) {
+            newOption = FILTER_APPS_RUNNING;
+        } else if (TAB_ALL.equalsIgnoreCase(tabId)) {
+            newOption = FILTER_APPS_ALL;
+        } else if (TAB_SDCARD.equalsIgnoreCase(tabId)) {
+            newOption = FILTER_APPS_SDCARD;
+        } else {
+            // Invalid option. Do nothing
             return;
         }
-        newOption = which;
-        mAlertDlg.dismiss();
         sendMessageToHandler(REORDER_LIST, newOption);
     }
 }
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index fd4a411..d33e1e8 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -53,7 +53,7 @@
     private View mFinalView;
     private Button mFinalButton;
 
-    /** 
+    /**
      * The user has gone through the multiple confirmation, so now we go ahead
      * and invoke the Checkin Service to reset the device to its factory-default
      * state (rebooting in the process).
@@ -65,7 +65,7 @@
                     return;
                 }
 
-                ICheckinService service = 
+                ICheckinService service =
                         ICheckinService.Stub.asInterface(ServiceManager.getService("checkin"));
                 if (service != null) {
                     try {
@@ -159,7 +159,7 @@
      * click in order to initiate a confirmation sequence.  This method is
      * called from various other points in the code to reset the activity to
      * this base state.
-     * 
+     *
      * <p>Reinflating views from resources is expensive and prevents us from
      * caching widget pointers, so we use a single-inflate pattern:  we lazy-
      * inflate each view, caching all of the widget pointers we'll need at the
@@ -184,7 +184,7 @@
         mInitialView = null;
         mFinalView = null;
         mInflater = LayoutInflater.from(this);
-        mLockUtils = new LockPatternUtils(getContentResolver());
+        mLockUtils = new LockPatternUtils(this);
 
         establishInitialState();
     }
diff --git a/src/com/android/settings/MediaFormat.java b/src/com/android/settings/MediaFormat.java
index e0d9af6..40ae0d7 100644
--- a/src/com/android/settings/MediaFormat.java
+++ b/src/com/android/settings/MediaFormat.java
@@ -68,7 +68,7 @@
                         IMountService.Stub.asInterface(ServiceManager.getService("mount"));
                 if (service != null) {
                     try {
-                        service.formatMedia(Environment.getExternalStorageDirectory().toString());
+                        service.formatVolume(Environment.getExternalStorageDirectory().toString());
                     } catch (android.os.RemoteException e) {
                         // Intentionally blank - there's nothing we can do here
                         Log.w("MediaFormat", "Unable to invoke IMountService.formatMedia()");
@@ -147,7 +147,7 @@
      * click in order to initiate a confirmation sequence.  This method is
      * called from various other points in the code to reset the activity to
      * this base state.
-     * 
+     *
      * <p>Reinflating views from resources is expensive and prevents us from
      * caching widget pointers, so we use a single-inflate pattern:  we lazy-
      * inflate each view, caching all of the widget pointers we'll need at the
@@ -172,7 +172,7 @@
         mInitialView = null;
         mFinalView = null;
         mInflater = LayoutInflater.from(this);
-        mLockUtils = new LockPatternUtils(getContentResolver());
+        mLockUtils = new LockPatternUtils(this);
 
         establishInitialState();
     }
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index 2edb328..a92f09b 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -45,14 +45,16 @@
     private static final String PREFS_USE_LOCATION = "use_location";
 
     // Vendor specific
-    private static final String GSETTINGS_PROVIDER = "com.google.android.providers.settings";
+    private static final String GSETTINGS_PROVIDER = "com.google.settings";
     private static final String LOCATION_CATEGORY = "location_category";
-    private static final String SETTINGS_CATEGORY = "settings_category";
+    private static final String BACKUP_CATEGORY = "backup_category";
     private static final String USE_LOCATION = "use_location";
     private static final String BACKUP_SETTINGS = "backup_settings";
+    private static final String AUTO_RESTORE = "auto_restore";
     private static final String KEY_DONE_USE_LOCATION = "doneLocation";
     private CheckBoxPreference mUseLocation;
     private CheckBoxPreference mBackup;
+    private CheckBoxPreference mAutoRestore;
     private boolean mOkClicked;
     private Dialog mConfirmDialog;
 
@@ -64,18 +66,16 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.privacy_settings);
+        final PreferenceScreen screen = getPreferenceScreen();
 
-        mUseLocation = (CheckBoxPreference) getPreferenceScreen().findPreference(USE_LOCATION);
-        mBackup = (CheckBoxPreference) getPreferenceScreen().findPreference(BACKUP_SETTINGS);
+        mUseLocation = (CheckBoxPreference) screen.findPreference(USE_LOCATION);
+        mBackup = (CheckBoxPreference) screen.findPreference(BACKUP_SETTINGS);
+        mAutoRestore = (CheckBoxPreference) screen.findPreference(AUTO_RESTORE);
 
         // Vendor specific
-        try {
-            if (mUseLocation != null) {
-                getPackageManager().getPackageInfo(GSETTINGS_PROVIDER, 0);
-            }
-        } catch (NameNotFoundException nnfe) {
-            getPreferenceScreen().removePreference(findPreference(LOCATION_CATEGORY));
-            getPreferenceScreen().removePreference(findPreference(SETTINGS_CATEGORY));
+        if (getPackageManager().resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) {
+            screen.removePreference(findPreference(LOCATION_CATEGORY));
+            screen.removePreference(findPreference(BACKUP_CATEGORY));
         }
         updateToggles();
 
@@ -122,6 +122,18 @@
             } else {
                 setBackupEnabled(true);
             }
+        } else if (preference == mAutoRestore) {
+            IBackupManager bm = IBackupManager.Stub.asInterface(
+                    ServiceManager.getService(Context.BACKUP_SERVICE));
+            if (bm != null) {
+                // TODO: disable via the backup manager interface
+                boolean curState = mAutoRestore.isChecked();
+                try {
+                    bm.setAutoRestore(curState);
+                } catch (RemoteException e) {
+                    mAutoRestore.setChecked(!curState);
+                }
+            }
         }
 
         return false;
@@ -175,8 +187,14 @@
         ContentResolver res = getContentResolver();
         mUseLocation.setChecked(Settings.Secure.getInt(res,
                 Settings.Secure.USE_LOCATION_FOR_SERVICES, 2) == 1);
-        mBackup.setChecked(Settings.Secure.getInt(res,
-                Settings.Secure.BACKUP_ENABLED, 0) == 1);
+
+        final boolean backupEnabled = Settings.Secure.getInt(res,
+                Settings.Secure.BACKUP_ENABLED, 0) == 1;
+        mBackup.setChecked(backupEnabled);
+
+        mAutoRestore.setChecked(Settings.Secure.getInt(res,
+                Settings.Secure.BACKUP_AUTO_RESTORE, 0) == 1);
+        mAutoRestore.setEnabled(backupEnabled);
     }
 
     private void updateUseLocation() {
@@ -200,6 +218,7 @@
                 mUseLocation.setChecked(false);
             } else if (mDialogType == DIALOG_ERASE_BACKUP) {
                 mBackup.setChecked(true);
+                mAutoRestore.setEnabled(true);
             }
         }
         updateUseLocation();
@@ -252,9 +271,11 @@
                 bm.setBackupEnabled(enable);
             } catch (RemoteException e) {
                 mBackup.setChecked(!enable);
+                mAutoRestore.setEnabled(!enable);
                 return;
             }
         }
         mBackup.setChecked(enable);
+        mAutoRestore.setEnabled(enable);
     }
 }
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index ce236fd..f0fcdd7 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -20,6 +20,8 @@
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.net.Uri;
@@ -57,8 +59,7 @@
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.PhoneStateIntentReceiver;
 import com.android.internal.telephony.TelephonyProperties;
-import com.android.internal.telephony.gsm.GSMPhone;
-import com.android.internal.telephony.gsm.PdpConnection;
+import com.android.internal.telephony.gsm.GsmDataConnection;
 
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
@@ -72,6 +73,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import android.util.Log;
+
 public class RadioInfo extends Activity {
     private final String TAG = "phone";
 
@@ -83,8 +86,6 @@
     private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
     private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
     private static final int EVENT_QUERY_NEIGHBORING_CIDS_DONE = 1002;
-    private static final int EVENT_SET_QXDMLOG_DONE = 1003;
-    private static final int EVENT_SET_CIPHER_DONE = 1004;
     private static final int EVENT_QUERY_SMSC_DONE = 1005;
     private static final int EVENT_UPDATE_SMSC_DONE = 1006;
 
@@ -94,7 +95,9 @@
     private static final int MENU_ITEM_VIEW_SDN     = 3;
     private static final int MENU_ITEM_GET_PDP_LIST = 4;
     private static final int MENU_ITEM_TOGGLE_DATA  = 5;
-    private static final int MENU_ITEM_TOGGLE_DATA_ON_BOOT = 6;
+
+    static final String ENABLE_DATA_STR = "Enable data connection";
+    static final String DISABLE_DATA_STR = "Disable data connection";
 
     private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
     private TextView number;
@@ -119,16 +122,14 @@
     private TextView mPingIpAddr;
     private TextView mPingHostname;
     private TextView mHttpClientTest;
-    private TextView cipherState;
     private TextView dnsCheckState;
     private EditText smsc;
     private Button radioPowerButton;
-    private Button qxdmLogButton;
-    private Button cipherToggleButton;
     private Button dnsCheckToggleButton;
     private Button pingTestButton;
     private Button updateSmscButton;
     private Button refreshSmscButton;
+    private Button oemInfoButton;
     private Spinner preferredNetworkType;
 
     private TelephonyManager mTelephonyManager;
@@ -136,11 +137,6 @@
     private PhoneStateIntentReceiver mPhoneStateReceiver;
     private INetStatService netstat;
 
-    private OemCommands mOem = null;
-    private boolean mQxdmLogEnabled;
-    // The requested cipher state
-    private boolean mCipherOn;
-
     private String mPingIpAddrResult;
     private String mPingHostnameResult;
     private String mHttpClientTestResult;
@@ -220,22 +216,6 @@
                         mNeighboringCids.setText("unknown");
                     }
                     break;
-                case EVENT_SET_QXDMLOG_DONE:
-                    ar= (AsyncResult) msg.obj;
-                    if (ar.exception == null) {
-                        mQxdmLogEnabled = !mQxdmLogEnabled;
-
-                        updateQxdmState(mQxdmLogEnabled);
-                        displayQxdmEnableResult();
-                    }
-                    break;
-                case EVENT_SET_CIPHER_DONE:
-                    ar= (AsyncResult) msg.obj;
-                    if (ar.exception == null) {
-                        setCiphPref(mCipherOn);
-                    }
-                    updateCiphState();
-                    break;
                 case EVENT_QUERY_SMSC_DONE:
                     ar= (AsyncResult) msg.obj;
                     if (ar.exception != null) {
@@ -258,116 +238,6 @@
         }
     };
 
-    static private class OemCommands {
-
-        public static final int OEM_QXDM_SDLOG_DEFAULT_FILE_SIZE = 32;
-        public static final int OEM_QXDM_SDLOG_DEFAULT_MASK = 0;
-        public static final int OEM_QXDM_SDLOG_DEFAULT_MAX_INDEX = 8;
-
-        static final int SIZE_OF_INT = 4;
-        static final int OEM_FEATURE_ENABLE = 1;
-        static final int OEM_FEATURE_DISABLE = 0;
-        static final int OEM_SIMPE_FEAUTURE_LEN = 1;
-
-        static final int OEM_QXDM_SDLOG_FUNCTAG = 0x00010000;
-        static final int OEM_QXDM_SDLOG_LEN = 4;
-        static final int OEM_PS_AUTO_ATTACH_FUNCTAG = 0x00020000;
-        static final int OEM_CIPHERING_FUNCTAG = 0x00020001;
-
-        /**
-         * The OEM interface to store QXDM to SD.
-         *
-         * To start/stop logging QXDM logs to SD card, use tag
-         * OEM_RIL_HOOK_QXDM_SD_LOG_SETUP 0x00010000
-         *
-         * "data" is a const oem_ril_hook_qxdm_sdlog_setup_data_st *
-         * ((const oem_ril_hook_qxdm_sdlog_setup_data_st *)data)->head.func_tag
-         * should be OEM_RIL_HOOK_QXDM_SD_LOG_SETUP
-         * ((const oem_ril_hook_qxdm_sdlog_setup_data_st *)data)->head.len
-         * should be "sizeof(unsigned int) * 4"
-         * ((const oem_ril_hook_qxdm_sdlog_setup_data_st *)data)->mode
-         * could be 0 for 'stop logging', or 1 for 'start logging'
-         * ((const oem_ril_hook_qxdm_sdlog_setup_data_st *)data)->log_file_size
-         * will assign the size of each log file, and it could be a value between
-         * 1 and 512 (in megabytes, default value is recommended to set as 32).
-         * This value will be ignored when mode == 0.
-         * ((const oem_ril_hook_qxdm_sdlog_setup_data_st *)data)->log_mask will
-         * assign the rule to filter logs, and it is a bitmask (bit0 is for MsgAll,
-         * bit1 is for LogAll, and bit2 is for EventAll) recommended to be set as 0
-         * by default. This value will be ignored when mode == 0.
-         * ((const oem_ril_hook_qxdm_sdlog_setup_data_st *)data)->log_max_fileindex
-         * set the how many logfiles will storted before roll over. This value will
-         * be ignored when mode == 0.
-         *
-         * "response" is NULL
-         *
-         * typedef struct _oem_ril_hook_raw_head_st {
-         *      unsigned int func_tag;
-         *      unsigned int len;
-         * } oem_ril_hook_raw_head_st;
-         *
-         * typedef struct _oem_ril_hook_qxdm_sdlog_setup_data_st {
-         *      oem_ril_hook_raw_head_st head;
-         *      unsigned int mode;
-         *      unsigned int log_file_size;
-         *      unsigned int log_mask;
-         *      unsigned int log_max_fileindex;
-         * } oem_ril_hook_qxdm_sdlog_setup_data_st;
-         *
-         * @param enable set true to start logging QXDM in SD card
-         * @param fileSize is the log file size in MB
-         * @param mask is the log mask to filter
-         * @param maxIndex is the maximum roll-over file number
-         * @return byteArray to use in RIL RAW command
-         */
-        byte[] getQxdmSdlogData(boolean enable, int fileSize, int mask, int maxIndex) {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(bos);
-            try {
-                writeIntLittleEndian(dos, OEM_QXDM_SDLOG_FUNCTAG);
-                writeIntLittleEndian(dos, OEM_QXDM_SDLOG_LEN * SIZE_OF_INT);
-                writeIntLittleEndian(dos, enable ?
-                        OEM_FEATURE_ENABLE : OEM_FEATURE_DISABLE);
-                writeIntLittleEndian(dos, fileSize);
-                writeIntLittleEndian(dos, mask);
-                writeIntLittleEndian(dos, maxIndex);
-            } catch (IOException e) {
-                return null;
-            }
-            return bos.toByteArray();
-        }
-
-        byte[] getPsAutoAttachData(boolean enable) {
-            return getSimpleFeatureData(OEM_PS_AUTO_ATTACH_FUNCTAG, enable);
-        }
-
-        byte[] getCipheringData(boolean enable) {
-            return getSimpleFeatureData(OEM_CIPHERING_FUNCTAG, enable);
-        }
-
-        private byte[] getSimpleFeatureData(int tag, boolean enable) {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(bos);
-            try {
-                writeIntLittleEndian(dos, tag);
-                writeIntLittleEndian(dos, OEM_SIMPE_FEAUTURE_LEN * SIZE_OF_INT);
-                writeIntLittleEndian(dos, enable ?
-                        OEM_FEATURE_ENABLE : OEM_FEATURE_DISABLE);
-            } catch (IOException e) {
-                return null;
-            }
-            return bos.toByteArray();
-        }
-
-        private void writeIntLittleEndian(DataOutputStream dos, int val)
-                throws IOException {
-            dos.writeByte(val);
-            dos.writeByte(val >> 8);
-            dos.writeByte(val >> 16);
-            dos.writeByte(val >> 24);
-        }
-    }
-
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -398,7 +268,6 @@
         sentSinceReceived = (TextView) findViewById(R.id.sentSinceReceived);
         sent = (TextView) findViewById(R.id.sent);
         received = (TextView) findViewById(R.id.received);
-        cipherState = (TextView) findViewById(R.id.ciphState);
         smsc = (EditText) findViewById(R.id.smsc);
         dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
 
@@ -416,11 +285,6 @@
         radioPowerButton = (Button) findViewById(R.id.radio_power);
         radioPowerButton.setOnClickListener(mPowerButtonHandler);
 
-        qxdmLogButton = (Button) findViewById(R.id.qxdm_log);
-        qxdmLogButton.setOnClickListener(mQxdmButtonHandler);
-
-        cipherToggleButton = (Button) findViewById(R.id.ciph_toggle);
-        cipherToggleButton.setOnClickListener(mCipherButtonHandler);
         pingTestButton = (Button) findViewById(R.id.ping_test);
         pingTestButton.setOnClickListener(mPingButtonHandler);
         updateSmscButton = (Button) findViewById(R.id.update_smsc);
@@ -430,14 +294,20 @@
         dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
         dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
 
+        oemInfoButton = (Button) findViewById(R.id.oem_info);
+        oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
+        PackageManager pm = getPackageManager();
+        Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
+        List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
+        if (oemInfoIntentList.size() == 0) {
+            oemInfoButton.setEnabled(false);
+        }
+
         mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
         mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
         mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
         mPhoneStateReceiver.notifyPhoneCallState(EVENT_PHONE_STATE_CHANGED);
 
-        updateQxdmState(null);
-        mOem = new OemCommands();
-
         phone.getPreferredNetworkType(
                 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
         phone.getNeighboringCids(
@@ -462,9 +332,7 @@
         updateDataStats();
         updateDataStats2();
         updatePowerState();
-        updateQxdmState(null);
         updateProperties();
-        updateCiphState();
         updateDnsCheckState();
 
         Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
@@ -502,14 +370,10 @@
         menu.add(1, MENU_ITEM_GET_PDP_LIST,
                 0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
         menu.add(1, MENU_ITEM_TOGGLE_DATA,
-                0, R.string.radioInfo_menu_disableData).setOnMenuItemClickListener(mToggleData);
-        menu.add(1, MENU_ITEM_TOGGLE_DATA_ON_BOOT,
-                0, R.string.radioInfo_menu_disableDataOnBoot).setOnMenuItemClickListener(
-                mToggleDataOnBoot);
+                0, DISABLE_DATA_STR).setOnMenuItemClickListener(mToggleData);
         return true;
     }
 
-
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         // Get the TOGGLE DATA menu item in the right state.
@@ -520,26 +384,16 @@
         switch (state) {
             case TelephonyManager.DATA_CONNECTED:
             case TelephonyManager.DATA_SUSPENDED:
-                item.setTitle(R.string.radioInfo_menu_disableData);
+                item.setTitle(DISABLE_DATA_STR);
                 break;
             case TelephonyManager.DATA_DISCONNECTED:
-                item.setTitle(R.string.radioInfo_menu_enableData);
+                item.setTitle(ENABLE_DATA_STR);
                 break;
             default:
                 visible = false;
                 break;
         }
         item.setVisible(visible);
-
-        // Get the toggle-data-on-boot menu item in the right state.
-        item = menu.findItem(MENU_ITEM_TOGGLE_DATA_ON_BOOT);
-        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        boolean value = sp.getBoolean(GSMPhone.DATA_DISABLED_ON_BOOT_KEY, false);
-        if (value) {
-            item.setTitle(R.string.radioInfo_menu_enableDataOnBoot);
-        } else {
-            item.setTitle(R.string.radioInfo_menu_disableDataOnBoot);
-        }
         return true;
     }
 
@@ -554,42 +408,6 @@
         radioPowerButton.setText(buttonText);
     }
 
-    private void updateQxdmState(Boolean newQxdmStatus) {
-        SharedPreferences sp =
-          PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        mQxdmLogEnabled = sp.getBoolean("qxdmstatus", false);
-        // This is called from onCreate, onResume, and the handler when the status
-        // is updated.
-        if (newQxdmStatus != null) {
-            SharedPreferences.Editor editor = sp.edit();
-            editor.putBoolean("qxdmstatus", newQxdmStatus);
-            editor.commit();
-            mQxdmLogEnabled = newQxdmStatus;
-        }
-
-        String buttonText = mQxdmLogEnabled ?
-                            getString(R.string.turn_off_qxdm) :
-                            getString(R.string.turn_on_qxdm);
-        qxdmLogButton.setText(buttonText);
-    }
-
-    private void setCiphPref(boolean value) {
-        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        SharedPreferences.Editor editor = sp.edit();
-        editor.putBoolean(GSMPhone.CIPHERING_KEY, value);
-        editor.commit();
-    }
-
-    private boolean getCiphPref() {
-        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        boolean ret = sp.getBoolean(GSMPhone.CIPHERING_KEY, true);
-        return ret;
-    }
-
-    private void updateCiphState() {
-        cipherState.setText(getCiphPref() ? "Ciphering ON" : "Ciphering OFF");
-    }
-
     private void updateDnsCheckState() {
         dnsCheckState.setText(phone.isDnsCheckDisabled() ?
                 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
@@ -942,8 +760,8 @@
         List<DataConnection> dcs = phone.getCurrentDataConnectionList();
 
         for (DataConnection dc : dcs) {
-            sb.append("    State: ").append(dc.getState().toString()).append("\n");
-            if (dc.getState().isActive()) {
+            sb.append("    State: ").append(dc.getStateAsString()).append("\n");
+            if (dc.isActive()) {
                 long timeElapsed =
                     (System.currentTimeMillis() - dc.getConnectionTime())/1000;
                 sb.append("    connected at ")
@@ -951,8 +769,8 @@
                   .append(" and elapsed ")
                   .append(DateUtils.formatElapsedTime(timeElapsed));
 
-                if (dc instanceof PdpConnection) {
-                    PdpConnection pdp = (PdpConnection)dc;
+                if (dc instanceof GsmDataConnection) {
+                    GsmDataConnection pdp = (GsmDataConnection)dc;
                     sb.append("\n    to ")
                       .append(pdp.getApn().toString());
                 }
@@ -966,14 +784,14 @@
                 if (dns != null) {
                     sb.append("\ndns: ").append(dns[0]).append(", ").append(dns[1]);
                 }
-            } else if (dc.getState().isInactive()) {
+            } else if (dc.isInactive()) {
                 sb.append("    disconnected with last try at ")
                   .append(DateUtils.timeString(dc.getLastFailTime()))
                   .append("\n    fail because ")
                   .append(dc.getLastFailCause().toString());
             } else {
-                if (dc instanceof PdpConnection) {
-                    PdpConnection pdp = (PdpConnection)dc;
+                if (dc instanceof GsmDataConnection) {
+                    GsmDataConnection pdp = (GsmDataConnection)dc;
                     sb.append("    is connecting to ")
                       .append(pdp.getApn().toString());
                 } else {
@@ -987,19 +805,6 @@
         disconnects.setText(sb.toString());
     }
 
-    private void displayQxdmEnableResult() {
-        String status = mQxdmLogEnabled ? "Start QXDM Log" : "Stop QXDM Log";
-
-        new AlertDialog.Builder(this).setMessage(status).show();
-
-        mHandler.postDelayed(
-                new Runnable() {
-                    public void run() {
-                        finish();
-                    }
-                }, 2000);
-    }
-
     private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
         public boolean onMenuItemClick(MenuItem item) {
             Intent intent = new Intent(Intent.ACTION_VIEW);
@@ -1046,24 +851,18 @@
         }
     };
 
-    private void toggleDataDisabledOnBoot() {
-        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        SharedPreferences.Editor editor = sp.edit();
-        boolean value = sp.getBoolean(GSMPhone.DATA_DISABLED_ON_BOOT_KEY, false);
-        editor.putBoolean(GSMPhone.DATA_DISABLED_ON_BOOT_KEY, !value);
-        byte[] data = mOem.getPsAutoAttachData(value);
-        if (data == null) {
-            // don't commit
-            return;
-        }
-
-        editor.commit();
-        phone.invokeOemRilRequestRaw(data, null);
-    }
-
-    private MenuItem.OnMenuItemClickListener mToggleDataOnBoot = new MenuItem.OnMenuItemClickListener() {
+    private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
         public boolean onMenuItemClick(MenuItem item) {
-            toggleDataDisabledOnBoot();
+            phone.getDataCallList(null);
+            return true;
+        }
+    };
+
+    private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
+        public boolean onMenuItemClick(MenuItem item) {
+            Intent intent = new Intent();
+            intent.setClass(RadioInfo.this, BandMode.class);
+            startActivity(intent);
             return true;
         }
     };
@@ -1086,22 +885,6 @@
         }
     };
 
-    private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
-        public boolean onMenuItemClick(MenuItem item) {
-            phone.getDataCallList(null);
-            return true;
-        }
-    };
-
-    private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
-        public boolean onMenuItemClick(MenuItem item) {
-            Intent intent = new Intent();
-            intent.setClass(RadioInfo.this, BandMode.class);
-            startActivity(intent);
-            return true;
-        }
-    };
-
     OnClickListener mPowerButtonHandler = new OnClickListener() {
         public void onClick(View v) {
             //log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
@@ -1109,20 +892,6 @@
         }
     };
 
-    OnClickListener mCipherButtonHandler = new OnClickListener() {
-        public void onClick(View v) {
-            mCipherOn = !getCiphPref();
-            byte[] data = mOem.getCipheringData(mCipherOn);
-
-            if (data == null)
-                return;
-
-            cipherState.setText("Setting...");
-            phone.invokeOemRilRequestRaw(data,
-                    mHandler.obtainMessage(EVENT_SET_CIPHER_DONE));
-        }
-    };
-
     OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
         public void onClick(View v) {
             phone.disableDnsCheck(!phone.isDnsCheckDisabled());
@@ -1130,6 +899,19 @@
         }
     };
 
+    OnClickListener mOemInfoButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
+            try {
+                startActivity(intent);
+            } catch (android.content.ActivityNotFoundException ex) {
+                Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
+                // If the activity does not exist, there are no OEM
+                // settings, and so we can just do nothing...
+            }
+        }
+    };
+
     OnClickListener mPingButtonHandler = new OnClickListener() {
         public void onClick(View v) {
             updatePingState();
@@ -1150,22 +932,6 @@
         }
     };
 
-    OnClickListener mQxdmButtonHandler = new OnClickListener() {
-        public void onClick(View v) {
-            byte[] data = mOem.getQxdmSdlogData(
-                    !mQxdmLogEnabled,
-                    mOem.OEM_QXDM_SDLOG_DEFAULT_FILE_SIZE,
-                    mOem.OEM_QXDM_SDLOG_DEFAULT_MASK,
-                    mOem.OEM_QXDM_SDLOG_DEFAULT_MAX_INDEX);
-
-            if (data == null)
-                return;
-
-            phone.invokeOemRilRequestRaw(data,
-                    mHandler.obtainMessage(EVENT_SET_QXDMLOG_DONE));
-        }
-    };
-
     AdapterView.OnItemSelectedListener
             mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
         public void onItemSelected(AdapterView parent, View v, int pos, long id) {
diff --git a/src/com/android/settings/RingerVolumePreference.java b/src/com/android/settings/RingerVolumePreference.java
index 0d01965..ddadbb6 100644
--- a/src/com/android/settings/RingerVolumePreference.java
+++ b/src/com/android/settings/RingerVolumePreference.java
@@ -39,35 +39,47 @@
     private static final String TAG = "RingerVolumePreference";
 
     private CheckBox mNotificationsUseRingVolumeCheckbox;
-    private SeekBarVolumizer mNotificationSeekBarVolumizer;
+    private SeekBarVolumizer [] mSeekBarVolumizer;
+    private static final int[] SEEKBAR_ID = new int[] {
+        R.id.notification_volume_seekbar,
+        R.id.media_volume_seekbar,
+        R.id.alarm_volume_seekbar
+    };
+    private static final int[] SEEKBAR_TYPE = new int[] {
+        AudioManager.STREAM_NOTIFICATION,
+        AudioManager.STREAM_MUSIC,
+        AudioManager.STREAM_ALARM
+    };
+    //private SeekBarVolumizer mNotificationSeekBarVolumizer;
     private TextView mNotificationVolumeTitle;
-    
+
     public RingerVolumePreference(Context context, AttributeSet attrs) {
         super(context, attrs);
 
         // The always visible seekbar is for ring volume
         setStreamType(AudioManager.STREAM_RING);
-        
+
         setDialogLayoutResource(R.layout.preference_dialog_ringervolume);
+        mSeekBarVolumizer = new SeekBarVolumizer[SEEKBAR_ID.length];
     }
 
     @Override
     protected void onBindDialogView(View view) {
         super.onBindDialogView(view);
-     
+
+        for (int i = 0; i < SEEKBAR_ID.length; i++) {
+            SeekBar seekBar = (SeekBar) view.findViewById(SEEKBAR_ID[i]);
+            mSeekBarVolumizer[i] = new SeekBarVolumizer(getContext(), seekBar,
+                SEEKBAR_TYPE[i]);
+        }
+
+        mNotificationVolumeTitle = (TextView) view.findViewById(R.id.notification_volume_title);
         mNotificationsUseRingVolumeCheckbox =
                 (CheckBox) view.findViewById(R.id.same_notification_volume);
         mNotificationsUseRingVolumeCheckbox.setOnCheckedChangeListener(this);
         mNotificationsUseRingVolumeCheckbox.setChecked(Settings.System.getInt(
                 getContext().getContentResolver(),
                 Settings.System.NOTIFICATIONS_USE_RING_VOLUME, 1) == 1);
-        
-        final SeekBar seekBar = (SeekBar) view.findViewById(R.id.notification_volume_seekbar);
-        mNotificationSeekBarVolumizer = new SeekBarVolumizer(getContext(), seekBar,
-                AudioManager.STREAM_NOTIFICATION);
-        
-        mNotificationVolumeTitle = (TextView) view.findViewById(R.id.notification_volume_title);
-        
         setNotificationVolumeVisibility(!mNotificationsUseRingVolumeCheckbox.isChecked());
     }
 
@@ -75,10 +87,11 @@
     protected void onDialogClosed(boolean positiveResult) {
         super.onDialogClosed(positiveResult);
         
-        if (!positiveResult && mNotificationSeekBarVolumizer != null) {
-            mNotificationSeekBarVolumizer.revertVolume();
-        }
-        
+        if (!positiveResult) {
+            for (SeekBarVolumizer vol : mSeekBarVolumizer) {
+                if (vol != null) vol.revertVolume();
+            }
+        }        
         cleanup();
     }
 
@@ -107,29 +120,28 @@
     @Override
     protected void onSampleStarting(SeekBarVolumizer volumizer) {
         super.onSampleStarting(volumizer);
-        
-        if (mNotificationSeekBarVolumizer != null && volumizer != mNotificationSeekBarVolumizer) {
-            mNotificationSeekBarVolumizer.stopSample();
+        for (SeekBarVolumizer vol : mSeekBarVolumizer) {
+            if (vol != volumizer) vol.stopSample();
         }
     }
 
     private void setNotificationVolumeVisibility(boolean visible) {
-        if (mNotificationSeekBarVolumizer != null) {
-            mNotificationSeekBarVolumizer.getSeekBar().setVisibility(
-                    visible ? View.VISIBLE : View.GONE);
-            mNotificationVolumeTitle.setVisibility(visible ? View.VISIBLE : View.GONE);
-        }
+        mSeekBarVolumizer[0].getSeekBar().setVisibility(
+                visible ? View.VISIBLE : View.GONE);
+        mNotificationVolumeTitle.setVisibility(visible ? View.VISIBLE : View.GONE);
     }
-    
+
     private void cleanup() {
-        if (mNotificationSeekBarVolumizer != null) {
-            Dialog dialog = getDialog();
-            if (dialog != null && dialog.isShowing()) {
-                // Stopped while dialog was showing, revert changes
-                mNotificationSeekBarVolumizer.revertVolume();
+        for (int i = 0; i < SEEKBAR_ID.length; i++) {
+            if (mSeekBarVolumizer[i] != null) {
+                Dialog dialog = getDialog();
+                if (dialog != null && dialog.isShowing()) {
+                    // Stopped while dialog was showing, revert changes
+                    mSeekBarVolumizer[i].revertVolume();
+                }
+                mSeekBarVolumizer[i].stop();
+                mSeekBarVolumizer[i] = null;
             }
-            mNotificationSeekBarVolumizer.stop();
-            mNotificationSeekBarVolumizer = null;
         }
     }
 
@@ -142,8 +154,12 @@
         }
 
         final SavedState myState = new SavedState(superState);
-        if (mNotificationSeekBarVolumizer != null) {
-            mNotificationSeekBarVolumizer.onSaveInstanceState(myState.getVolumeStore());
+        VolumeStore[] volumeStore = myState.getVolumeStore(SEEKBAR_ID.length);
+        for (int i = 0; i < SEEKBAR_ID.length; i++) {
+            SeekBarVolumizer vol = mSeekBarVolumizer[i];
+            if (vol != null) {
+                vol.onSaveInstanceState(volumeStore[i]);
+            }
         }
         return myState;
     }
@@ -158,28 +174,44 @@
 
         SavedState myState = (SavedState) state;
         super.onRestoreInstanceState(myState.getSuperState());
-        if (mNotificationSeekBarVolumizer != null) {
-            mNotificationSeekBarVolumizer.onRestoreInstanceState(myState.getVolumeStore());
+        VolumeStore[] volumeStore = myState.getVolumeStore(SEEKBAR_ID.length);
+        for (int i = 0; i < SEEKBAR_ID.length; i++) {
+            SeekBarVolumizer vol = mSeekBarVolumizer[i];
+            if (vol != null) {
+                vol.onRestoreInstanceState(volumeStore[i]);
+            }
         }
     }
 
     private static class SavedState extends BaseSavedState {
-        VolumeStore mVolumeStore = new VolumeStore();
+        VolumeStore [] mVolumeStore;
 
         public SavedState(Parcel source) {
             super(source);
-            mVolumeStore.volume = source.readInt();
-            mVolumeStore.originalVolume = source.readInt();
+            mVolumeStore = new VolumeStore[SEEKBAR_ID.length];
+            for (int i = 0; i < SEEKBAR_ID.length; i++) {
+                mVolumeStore[i] = new VolumeStore();
+                mVolumeStore[i].volume = source.readInt();
+                mVolumeStore[i].originalVolume = source.readInt();
+            }
         }
 
         @Override
         public void writeToParcel(Parcel dest, int flags) {
             super.writeToParcel(dest, flags);
-            dest.writeInt(mVolumeStore.volume);
-            dest.writeInt(mVolumeStore.originalVolume);
+            for (int i = 0; i < SEEKBAR_ID.length; i++) {
+                dest.writeInt(mVolumeStore[i].volume);
+                dest.writeInt(mVolumeStore[i].originalVolume);
+            }
         }
 
-        VolumeStore getVolumeStore() {
+        VolumeStore[] getVolumeStore(int count) {
+            if (mVolumeStore == null || mVolumeStore.length != count) {
+                mVolumeStore = new VolumeStore[count];
+                for (int i = 0; i < count; i++) {
+                    mVolumeStore[i] = new VolumeStore();
+                }
+            }
             return mVolumeStore;
         }
 
diff --git a/src/com/android/settings/SdCardSettings.java b/src/com/android/settings/SdCardSettings.java
index 67f3550..4a83843 100644
--- a/src/com/android/settings/SdCardSettings.java
+++ b/src/com/android/settings/SdCardSettings.java
@@ -103,9 +103,13 @@
     }
 
     private void update() {
+
         try {
-            mMassStorage.setChecked(mMountService.getMassStorageEnabled());
-        } catch (RemoteException ex) {
+            String path = Environment.getExternalStorageDirectory().getPath();
+            mMassStorage.setChecked(
+                    mMountService.getVolumeShared(
+                            Environment.getExternalStorageDirectory().getPath(), "ums"));
+        } catch (Exception ex) {
         }
 
         String status = Environment.getExternalStorageState();
@@ -153,8 +157,14 @@
     OnClickListener mMassStorageListener = new OnClickListener() {
         public void onClick(View v) {
             try {
-                mMountService.setMassStorageEnabled(mMassStorage.isChecked());
-            } catch (RemoteException ex) {
+                if (mMassStorage.isChecked()) {
+                    mMountService.shareVolume(
+                            Environment.getExternalStorageDirectory().getPath(), "ums");
+                } else {
+                    mMountService.unshareVolume(
+                            Environment.getExternalStorageDirectory().getPath(), "ums");
+                }
+            } catch (Exception ex) {
             }
         }
     };
@@ -169,7 +179,7 @@
     OnClickListener mUnmountButtonHandler = new OnClickListener() {
         public void onClick(View v) {
             try {
-                mMountService.unmountMedia(Environment.getExternalStorageDirectory().toString());
+                mMountService.unmountVolume(Environment.getExternalStorageDirectory().toString());
             } catch (RemoteException ex) {
             }
         }
@@ -178,7 +188,7 @@
     OnClickListener mFormatButtonHandler = new OnClickListener() {
         public void onClick(View v) {
             try {
-                mMountService.formatMedia(Environment.getExternalStorageDirectory().toString());
+                mMountService.formatVolume(Environment.getExternalStorageDirectory().toString());
             } catch (RemoteException ex) {
             }
         }
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index fcacccc..b8ea18c 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -17,44 +17,42 @@
 package com.android.settings;
 
 
+import java.util.Observable;
+import java.util.Observer;
+
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.app.DevicePolicyManager;
 import android.app.Dialog;
 import android.content.ContentQueryMap;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.database.Cursor;
 import android.location.LocationManager;
 import android.os.Bundle;
+import android.os.ICheckinService;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
-import android.preference.EditTextPreference;
+import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
-import android.preference.PreferenceGroup;
+import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
+import android.preference.Preference.OnPreferenceChangeListener;
 import android.provider.Settings;
 import android.security.Credentials;
 import android.security.KeyStore;
-import android.text.Html;
-import android.text.TextUtils;
-import android.text.method.LinkMovementMethod;
+import android.telephony.TelephonyManager;
 import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
 import android.widget.Toast;
 
 import com.android.internal.widget.LockPatternUtils;
-import android.telephony.TelephonyManager;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Observable;
-import java.util.Observer;
 
 /**
  * Gesture lock pattern settings.
@@ -62,20 +60,28 @@
 public class SecuritySettings extends PreferenceActivity {
 
     // Lock Settings
+    private static final String PACKAGE = "com.android.settings";
+    private static final String LOCK_PATTERN_TUTORIAL = PACKAGE + ".ChooseLockPatternTutorial";
+    private static final String ICC_LOCK_SETTINGS = PACKAGE + ".IccLockSettings";
+    private static final String CHOOSE_LOCK_PATTERN = PACKAGE + ".ChooseLockPattern";
+    private static final String CHOOSE_LOCK_PIN = PACKAGE + ".ChooseLockPassword";
 
     private static final String KEY_LOCK_ENABLED = "lockenabled";
     private static final String KEY_VISIBLE_PATTERN = "visiblepattern";
     private static final String KEY_TACTILE_FEEDBACK_ENABLED = "tactilefeedback";
-    private static final int CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE = 55;
+    private static final String KEY_UNLOCK_METHOD = "unlock_method";
+    private static final int UPDATE_PASSWORD_REQUEST = 56;
+    private static final int CONFIRM_EXISTING_REQUEST = 57;
+
+    // Encrypted File Systems constants
+    private static final String PROPERTY_EFS_ENABLED = "persist.security.efs.enabled";
+    private static final String PROPERTY_EFS_TRANSITION = "persist.security.efs.trans";
 
     private static final String PREFS_NAME = "location_prefs";
     private static final String PREFS_USE_LOCATION = "use_location";
 
-    private LockPatternUtils mLockPatternUtils;
-    private CheckBoxPreference mLockEnabled;
     private CheckBoxPreference mVisiblePattern;
     private CheckBoxPreference mTactileFeedback;
-    private Preference mChoosePattern;
 
     private CheckBoxPreference mShowPassword;
 
@@ -85,24 +91,28 @@
     private static final String LOCATION_GPS = "location_gps";
     private static final String ASSISTED_GPS = "assisted_gps";
 
+    // Default password lengths if device policy isn't in effect. Ignored otherwise.
+    private static final int PASSWORD_MIN_LENGTH = 4;
+    private static final int PASSWORD_MAX_LENGTH = 16;
+
     // Credential storage
-    private static final int CSTOR_MIN_PASSWORD_LENGTH = 8;
-
-    private static final int CSTOR_INIT_DIALOG = 1;
-    private static final int CSTOR_CHANGE_PASSWORD_DIALOG = 2;
-    private static final int CSTOR_UNLOCK_DIALOG = 3;
-    private static final int CSTOR_RESET_DIALOG = 4;
-
     private CredentialStorage mCredentialStorage = new CredentialStorage();
 
+    // Encrypted file system
+    private  CheckBoxPreference mEncryptedFSEnabled;
+
     private CheckBoxPreference mNetwork;
     private CheckBoxPreference mGps;
     private CheckBoxPreference mAssistedGps;
 
+    DevicePolicyManager mDPM;
+    
     // These provide support for receiving notification when Location Manager settings change.
     // This is necessary because the Network Location Provider can change settings
     // if the user does not confirm enabling the provider.
     private ContentQueryMap mContentQueryMap;
+    private ListPreference mUnlockMethod;
+    private ChooseLockSettingsHelper mChooseLockSettingsHelper;
     private final class SettingsObserver implements Observer {
         public void update(Observable o, Object arg) {
             updateToggles();
@@ -114,7 +124,9 @@
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.security_settings);
 
-        mLockPatternUtils = new LockPatternUtils(getContentResolver());
+        mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
+        
+        mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this);
 
         createPreferenceHierarchy();
 
@@ -131,45 +143,28 @@
                 null);
         mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null);
         mContentQueryMap.addObserver(new SettingsObserver());
-
-        mCredentialStorage.handleIntent(getIntent());
     }
 
     private PreferenceScreen createPreferenceHierarchy() {
         // Root
         PreferenceScreen root = this.getPreferenceScreen();
 
-        // Inline preferences
-        PreferenceCategory inlinePrefCat = new PreferenceCategory(this);
-        inlinePrefCat.setTitle(R.string.lock_settings_title);
-        root.addPreference(inlinePrefCat);
+        PreferenceManager pm = getPreferenceManager();
 
-        // change pattern lock
-        Intent intent = new Intent();
-        intent.setClassName("com.android.settings",
-                    "com.android.settings.ChooseLockPatternTutorial");
-        mChoosePattern = getPreferenceManager().createPreferenceScreen(this);
-        mChoosePattern.setIntent(intent);
-        inlinePrefCat.addPreference(mChoosePattern);
-
-        // autolock toggle
-        mLockEnabled = new LockEnabledPref(this);
-        mLockEnabled.setTitle(R.string.lockpattern_settings_enable_title);
-        mLockEnabled.setSummary(R.string.lockpattern_settings_enable_summary);
-        mLockEnabled.setKey(KEY_LOCK_ENABLED);
-        inlinePrefCat.addPreference(mLockEnabled);
+        mUnlockMethod = (ListPreference) pm.findPreference(KEY_UNLOCK_METHOD);
+        mUnlockMethod.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+            public boolean onPreferenceChange(Preference preference, Object newValue) {
+                String value = (String) newValue;
+                handleUpdateUnlockMethod(value);
+                return false;
+            }
+        });
 
         // visible pattern
-        mVisiblePattern = new CheckBoxPreference(this);
-        mVisiblePattern.setKey(KEY_VISIBLE_PATTERN);
-        mVisiblePattern.setTitle(R.string.lockpattern_settings_enable_visible_pattern_title);
-        inlinePrefCat.addPreference(mVisiblePattern);
+        mVisiblePattern = (CheckBoxPreference) pm.findPreference(KEY_VISIBLE_PATTERN);
 
         // tactile feedback
-        mTactileFeedback = new CheckBoxPreference(this);
-        mTactileFeedback.setKey(KEY_TACTILE_FEEDBACK_ENABLED);
-        mTactileFeedback.setTitle(R.string.lockpattern_settings_enable_tactile_feedback_title);
-        inlinePrefCat.addPreference(mTactileFeedback);
+        mTactileFeedback = (CheckBoxPreference) pm.findPreference(KEY_TACTILE_FEEDBACK_ENABLED);
 
         int activePhoneType = TelephonyManager.getDefault().getPhoneType();
 
@@ -180,10 +175,7 @@
                     .createPreferenceScreen(this);
             simLockPreferences.setTitle(R.string.sim_lock_settings_category);
             // Intent to launch SIM lock settings
-            intent = new Intent();
-            intent.setClassName("com.android.settings", "com.android.settings.IccLockSettings");
-            simLockPreferences.setIntent(intent);
-
+            simLockPreferences.setIntent(new Intent().setClassName(PACKAGE, ICC_LOCK_SETTINGS));
             PreferenceCategory simLockCat = new PreferenceCategory(this);
             simLockCat.setTitle(R.string.sim_lock_settings_title);
             root.addPreference(simLockCat);
@@ -202,32 +194,70 @@
         showPassword.setPersistent(false);
         passwordsCat.addPreference(showPassword);
 
+        // Device policies
+        PreferenceCategory devicePoliciesCat = new PreferenceCategory(this);
+        devicePoliciesCat.setTitle(R.string.device_admin_title);
+        root.addPreference(devicePoliciesCat);
+
+        Preference deviceAdminButton = new Preference(this);
+        deviceAdminButton.setTitle(R.string.manage_device_admin);
+        deviceAdminButton.setSummary(R.string.manage_device_admin_summary);
+        Intent deviceAdminIntent = new Intent();
+        deviceAdminIntent.setClass(this, DeviceAdminSettings.class);
+        deviceAdminButton.setIntent(deviceAdminIntent);
+        devicePoliciesCat.addPreference(deviceAdminButton);
+
         // Credential storage
         PreferenceCategory credentialsCat = new PreferenceCategory(this);
         credentialsCat.setTitle(R.string.credentials_category);
         root.addPreference(credentialsCat);
-        mCredentialStorage.createPreferences(credentialsCat);
+        mCredentialStorage.createPreferences(credentialsCat, CredentialStorage.TYPE_KEYSTORE);
+
+        // File System Encryption
+        PreferenceCategory encryptedfsCat = new PreferenceCategory(this);
+        encryptedfsCat.setTitle(R.string.encrypted_fs_category);
+        root.addPreference(encryptedfsCat);
+        mCredentialStorage.createPreferences(encryptedfsCat, CredentialStorage.TYPE_ENCRYPTEDFS);
 
         return root;
     }
 
+    protected void handleUpdateUnlockMethod(final String value) {
+        if ("none".equals(value)) {
+            if (mDPM.getPasswordQuality(null) == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+                mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
+            }
+        } else {
+            int reqMode;
+            if ("password".equals(value)) {
+                reqMode = LockPatternUtils.MODE_PASSWORD;
+            } else if ( "pin".equals(value)) {
+                reqMode = LockPatternUtils.MODE_PIN;
+            } else {
+                reqMode = LockPatternUtils.MODE_PATTERN;
+            }
+            int minMode = mDPM.getPasswordQuality(null);
+            if (reqMode < minMode) {
+                reqMode = minMode;
+            }
+            Intent intent = new Intent();
+            intent.setClass(this, ChooseLockGeneric.class);
+            intent.putExtra(LockPatternUtils.PASSWORD_TYPE_KEY, reqMode);
+            startActivityForResult(intent, UPDATE_PASSWORD_REQUEST);
+        }
+    }
+
     @Override
     protected void onResume() {
         super.onResume();
 
-        boolean patternExists = mLockPatternUtils.savedPatternExists();
-        mLockEnabled.setEnabled(patternExists);
+        final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils();
+        boolean patternExists = lockPatternUtils.savedPatternExists();
         mVisiblePattern.setEnabled(patternExists);
         mTactileFeedback.setEnabled(patternExists);
 
-        mLockEnabled.setChecked(mLockPatternUtils.isLockPatternEnabled());
-        mVisiblePattern.setChecked(mLockPatternUtils.isVisiblePatternEnabled());
-        mTactileFeedback.setChecked(mLockPatternUtils.isTactileFeedbackEnabled());
-
-        int chooseStringRes = mLockPatternUtils.savedPatternExists() ?
-                R.string.lockpattern_settings_change_lock_pattern :
-                R.string.lockpattern_settings_choose_lock_pattern;
-        mChoosePattern.setTitle(chooseStringRes);
+        mVisiblePattern.setChecked(lockPatternUtils.isVisiblePatternEnabled());
+        mTactileFeedback.setChecked(lockPatternUtils.isTactileFeedbackEnabled());
 
         mShowPassword.setChecked(Settings.System.getInt(getContentResolver(),
                 Settings.System.TEXT_SHOW_PASSWORD, 1) != 0);
@@ -240,12 +270,13 @@
             Preference preference) {
         final String key = preference.getKey();
 
+        final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils();
         if (KEY_LOCK_ENABLED.equals(key)) {
-            mLockPatternUtils.setLockPatternEnabled(isToggled(preference));
+            lockPatternUtils.setLockPatternEnabled(isToggled(preference));
         } else if (KEY_VISIBLE_PATTERN.equals(key)) {
-            mLockPatternUtils.setVisiblePatternEnabled(isToggled(preference));
+            lockPatternUtils.setVisiblePatternEnabled(isToggled(preference));
         } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) {
-            mLockPatternUtils.setTactileFeedbackEnabled(isToggled(preference));
+            lockPatternUtils.setTactileFeedbackEnabled(isToggled(preference));
         } else if (preference == mShowPassword) {
             Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD,
                     mShowPassword.isChecked() ? 1 : 0);
@@ -267,11 +298,6 @@
         return false;
     }
 
-    private void showPrivacyPolicy() {
-        Intent intent = new Intent("android.settings.TERMS");
-        startActivity(intent);
-    }
-
     /*
      * Creates toggles for each available location provider
      */
@@ -294,36 +320,6 @@
     }
 
     /**
-     * For the user to disable keyguard, we first make them verify their
-     * existing pattern.
-     */
-    private class LockEnabledPref extends CheckBoxPreference {
-
-        public LockEnabledPref(Context context) {
-            super(context);
-        }
-
-        @Override
-        protected void onClick() {
-            if (mLockPatternUtils.savedPatternExists() && isChecked()) {
-                confirmPatternThenDisableAndClear();
-            } else {
-                super.onClick();
-            }
-        }
-    }
-
-    /**
-     * Launch screen to confirm the existing lock pattern.
-     * @see #onActivityResult(int, int, android.content.Intent)
-     */
-    private void confirmPatternThenDisableAndClear() {
-        final Intent intent = new Intent();
-        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
-        startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE);
-    }
-
-    /**
      * @see #confirmPatternThenDisableAndClear
      */
     @Override
@@ -332,64 +328,61 @@
 
         final boolean resultOk = resultCode == Activity.RESULT_OK;
 
-        if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE)
-                && resultOk) {
-            mLockPatternUtils.setLockPatternEnabled(false);
-            mLockPatternUtils.saveLockPattern(null);
+        LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils();
+        if ((requestCode == CONFIRM_EXISTING_REQUEST) && resultOk) {
+            lockPatternUtils.clearLock();
         }
     }
 
-    @Override
-    protected Dialog onCreateDialog(int id) {
-        return mCredentialStorage.createDialog(id);
-    }
-
     private class CredentialStorage implements DialogInterface.OnClickListener,
             DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener,
             Preference.OnPreferenceClickListener {
         private static final int MINIMUM_PASSWORD_LENGTH = 8;
-        private static final int UNLOCK_DIALOG = 1;
-        private static final int PASSWORD_DIALOG = 2;
-        private static final int RESET_DIALOG = 3;
+
+        private static final int TYPE_KEYSTORE = 0;
+        private static final int TYPE_ENCRYPTEDFS = 1;
+
+        // Dialog identifiers
+        private static final int DLG_BASE = 0;
+        private static final int DLG_UNLOCK = DLG_BASE + 1;
+        private static final int DLG_PASSWORD = DLG_UNLOCK + 1;
+        private static final int DLG_RESET = DLG_PASSWORD + 1;
+        private static final int DLG_ENABLE_EFS = DLG_RESET + 1;
 
         private KeyStore mKeyStore = KeyStore.getInstance();
-        private int mState = mKeyStore.test();
-        private int mDialogId;
-        private boolean mSubmit;
+        private int mState;
+        private boolean mSubmit = false;
+        private boolean mExternal = false;
 
+        private boolean mWillEnableEncryptedFS;
+        private int mShowingDialog = 0;
+
+        // Key Store controls
         private CheckBoxPreference mAccessCheckBox;
         private Preference mInstallButton;
         private Preference mPasswordButton;
         private Preference mResetButton;
 
-        private Intent mExternalIntent;
 
-        void handleIntent(Intent intent) {
-            if (intent != null) {
-                if (Credentials.UNLOCK_ACTION.equals(intent.getAction())) {
-                    mExternalIntent = intent;
-                    showDialog((mState == KeyStore.UNINITIALIZED) ?
-                            PASSWORD_DIALOG : UNLOCK_DIALOG);
-                }
-            }
-        }
+        // Encrypted file system controls
+        private  CheckBoxPreference mEncryptedFSEnabled;
 
         void resume() {
             mState = mKeyStore.test();
             updatePreferences(mState);
-        }
 
-        Dialog createDialog(int id) {
-            mDialogId = id;
-            switch (id) {
-                case UNLOCK_DIALOG:
-                    return createUnlockDialog();
-                case PASSWORD_DIALOG:
-                    return createPasswordDialog();
-                case RESET_DIALOG:
-                    return createResetDialog();
+            Intent intent = getIntent();
+            if (!mExternal && intent != null &&
+                    Credentials.UNLOCK_ACTION.equals(intent.getAction())) {
+                mExternal = true;
+                if (mState == KeyStore.UNINITIALIZED) {
+                    showPasswordDialog();
+                } else if (mState == KeyStore.LOCKED) {
+                    showUnlockDialog();
+                } else {
+                    finish();
+                }
             }
-            return null;
         }
 
         private void initialize(String password) {
@@ -420,23 +413,26 @@
         public boolean onPreferenceChange(Preference preference, Object value) {
             if (preference == mAccessCheckBox) {
                 if ((Boolean) value) {
-                    showDialog((mState == KeyStore.UNINITIALIZED) ?
-                            PASSWORD_DIALOG : UNLOCK_DIALOG);
+                    showUnlockDialog();
                 } else {
                     lock();
                 }
                 return true;
+            } else if (preference == mEncryptedFSEnabled) {
+                Boolean bval = (Boolean)value;
+                mWillEnableEncryptedFS = bval.booleanValue();
+                showSwitchEncryptedFSDialog();
             }
-            return false;
+            return true;
         }
 
         public boolean onPreferenceClick(Preference preference) {
             if (preference == mInstallButton) {
                 Credentials.getInstance().installFromSdCard(SecuritySettings.this);
             } else if (preference == mPasswordButton) {
-                showDialog(PASSWORD_DIALOG);
+                showPasswordDialog();
             } else if (preference == mResetButton) {
-                showDialog(RESET_DIALOG);
+                showResetDialog();
             } else {
                 return false;
             }
@@ -444,9 +440,43 @@
         }
 
         public void onClick(DialogInterface dialog, int button) {
-            mSubmit = (button == DialogInterface.BUTTON_POSITIVE);
-            if (button == DialogInterface.BUTTON_NEUTRAL) {
-                reset();
+            if (mShowingDialog != DLG_ENABLE_EFS) {
+                mSubmit = (button == DialogInterface.BUTTON_POSITIVE);
+                if (button == DialogInterface.BUTTON_NEUTRAL) {
+                    reset();
+                }
+            } else {
+                if (button == DialogInterface.BUTTON_POSITIVE) {
+                    // Perform action
+                    // Reboot and toggle Encrypted File Systems
+                    ICheckinService service =
+                    ICheckinService.Stub.asInterface(ServiceManager.getService("checkin"));
+                    if (service != null) {
+                        try {
+                            // This RPC should never return
+                            if (mWillEnableEncryptedFS) {
+                                service.masterClearAndToggleEFS(true);
+                            } else {
+                                service.masterClearAndToggleEFS(false);
+                            }
+                        } catch (android.os.RemoteException e) {
+                            // Intentionally blank - there's nothing we can do here
+                            Log.w("SecuritySettings",
+                                    "Unable to invoke ICheckinService.masterClearAndToggleEFS()");
+                        }
+                    } else {
+                        Log.w("SecuritySettings", "Unable to locate ICheckinService");
+                    }
+                    updatePreferences(mState);
+                } else if (button == DialogInterface.BUTTON_NEGATIVE) {
+                    // Cancel action
+                    Toast.makeText(SecuritySettings.this, R.string.encrypted_fs_cancel_confirm,
+                            Toast.LENGTH_SHORT).show();
+                    updatePreferences(mState);
+                } else {
+                    // Unknown - should not happen
+                    return;
+                }
             }
         }
 
@@ -454,14 +484,12 @@
             if (mSubmit && !isFinishing()) {
                 mSubmit = false;
                 if (!checkPassword((Dialog) dialog)) {
-                    showDialog(mDialogId);
+                    ((Dialog) dialog).show();
                     return;
                 }
             }
-            removeDialog(mDialogId);
             updatePreferences(mState);
-            if (mExternalIntent != null) {
-                mExternalIntent = null;
+            if (mExternal) {
                 finish();
             }
         }
@@ -534,36 +562,53 @@
             }
         }
 
-        private void createPreferences(PreferenceCategory category) {
-            mAccessCheckBox = new CheckBoxPreference(SecuritySettings.this);
-            mAccessCheckBox.setTitle(R.string.credentials_access);
-            mAccessCheckBox.setSummary(R.string.credentials_access_summary);
-            mAccessCheckBox.setOnPreferenceChangeListener(this);
-            category.addPreference(mAccessCheckBox);
+        private void createPreferences(PreferenceCategory category, int type) {
+            switch(type) {
+            case TYPE_KEYSTORE:
+                mAccessCheckBox = new CheckBoxPreference(SecuritySettings.this);
+                mAccessCheckBox.setTitle(R.string.credentials_access);
+                mAccessCheckBox.setSummary(R.string.credentials_access_summary);
+                mAccessCheckBox.setOnPreferenceChangeListener(this);
+                category.addPreference(mAccessCheckBox);
 
-            mInstallButton = new Preference(SecuritySettings.this);
-            mInstallButton.setTitle(R.string.credentials_install_certificates);
-            mInstallButton.setSummary(R.string.credentials_install_certificates_summary);
-            mInstallButton.setOnPreferenceClickListener(this);
-            category.addPreference(mInstallButton);
+                mInstallButton = new Preference(SecuritySettings.this);
+                mInstallButton.setTitle(R.string.credentials_install_certificates);
+                mInstallButton.setSummary(R.string.credentials_install_certificates_summary);
+                mInstallButton.setOnPreferenceClickListener(this);
+                category.addPreference(mInstallButton);
 
-            mPasswordButton = new Preference(SecuritySettings.this);
-            mPasswordButton.setTitle(R.string.credentials_set_password);
-            mPasswordButton.setSummary(R.string.credentials_set_password_summary);
-            mPasswordButton.setOnPreferenceClickListener(this);
-            category.addPreference(mPasswordButton);
+                mPasswordButton = new Preference(SecuritySettings.this);
+                mPasswordButton.setTitle(R.string.credentials_set_password);
+                mPasswordButton.setSummary(R.string.credentials_set_password_summary);
+                mPasswordButton.setOnPreferenceClickListener(this);
+                category.addPreference(mPasswordButton);
 
-            mResetButton = new Preference(SecuritySettings.this);
-            mResetButton.setTitle(R.string.credentials_reset);
-            mResetButton.setSummary(R.string.credentials_reset_summary);
-            mResetButton.setOnPreferenceClickListener(this);
-            category.addPreference(mResetButton);
+                mResetButton = new Preference(SecuritySettings.this);
+                mResetButton.setTitle(R.string.credentials_reset);
+                mResetButton.setSummary(R.string.credentials_reset_summary);
+                mResetButton.setOnPreferenceClickListener(this);
+                category.addPreference(mResetButton);
+                break;
+
+            case TYPE_ENCRYPTEDFS:
+                mEncryptedFSEnabled = new CheckBoxPreference(SecuritySettings.this);
+                mEncryptedFSEnabled.setTitle(R.string.encrypted_fs_enable);
+                mEncryptedFSEnabled.setSummary(R.string.encrypted_fs_enable_summary);
+                mEncryptedFSEnabled.setOnPreferenceChangeListener(this);
+                category.addPreference(mEncryptedFSEnabled);
+                break;
+            }
         }
 
         private void updatePreferences(int state) {
-            mAccessCheckBox.setEnabled(state != KeyStore.UNINITIALIZED);
             mAccessCheckBox.setChecked(state == KeyStore.NO_ERROR);
-            mResetButton.setEnabled(state != KeyStore.UNINITIALIZED);
+            boolean encFSEnabled = SystemProperties.getBoolean(PROPERTY_EFS_ENABLED,
+                    false);
+            mResetButton.setEnabled((!encFSEnabled) && (state != KeyStore.UNINITIALIZED));
+            mAccessCheckBox.setEnabled((state != KeyStore.UNINITIALIZED) && (!encFSEnabled));
+
+            // Encrypted File system preferences
+            mEncryptedFSEnabled.setChecked(encFSEnabled);
 
             // Show a toast message if the state is changed.
             if (mState == state) {
@@ -581,12 +626,12 @@
             mState = state;
         }
 
-        private Dialog createUnlockDialog() {
+        private void showUnlockDialog() {
             View view = View.inflate(SecuritySettings.this,
                     R.layout.credentials_unlock_dialog, null);
 
-            // show extra hint only when the action comes from outside
-            if (mExternalIntent != null) {
+            // Show extra hint only when the action comes from outside.
+            if (mExternal) {
                 view.findViewById(R.id.hint).setVisibility(View.VISIBLE);
             }
 
@@ -597,10 +642,11 @@
                     .setNegativeButton(android.R.string.cancel, this)
                     .create();
             dialog.setOnDismissListener(this);
-            return dialog;
+            mShowingDialog = DLG_UNLOCK;
+            dialog.show();
         }
 
-        private Dialog createPasswordDialog() {
+        private void showPasswordDialog() {
             View view = View.inflate(SecuritySettings.this,
                     R.layout.credentials_password_dialog, null);
 
@@ -618,17 +664,38 @@
                     .setNegativeButton(android.R.string.cancel, this)
                     .create();
             dialog.setOnDismissListener(this);
-            return dialog;
+            mShowingDialog = DLG_PASSWORD;
+            dialog.show();
         }
 
-        private Dialog createResetDialog() {
-            return new AlertDialog.Builder(SecuritySettings.this)
+        private void showResetDialog() {
+            mShowingDialog = DLG_RESET;
+            new AlertDialog.Builder(SecuritySettings.this)
                     .setTitle(android.R.string.dialog_alert_title)
                     .setIcon(android.R.drawable.ic_dialog_alert)
                     .setMessage(R.string.credentials_reset_hint)
                     .setNeutralButton(getString(android.R.string.ok), this)
                     .setNegativeButton(getString(android.R.string.cancel), this)
-                    .create();
+                    .create().show();
+        }
+
+        private void showSwitchEncryptedFSDialog() {
+            AlertDialog.Builder builder = new AlertDialog.Builder(SecuritySettings.this)
+                    .setCancelable(false)
+                    .setTitle(R.string.encrypted_fs_alert_dialog_title);
+
+            mShowingDialog = DLG_ENABLE_EFS;
+            if (mWillEnableEncryptedFS) {
+                 builder.setMessage(R.string.encrypted_fs_enable_dialog)
+                         .setPositiveButton(R.string.encrypted_fs_enable_button, this)
+                         .setNegativeButton(R.string.encrypted_fs_cancel_button, this)
+                         .create().show();
+            } else {
+                builder.setMessage(R.string.encrypted_fs_disable_dialog)
+                        .setPositiveButton(R.string.encrypted_fs_disable_button, this)
+                        .setNegativeButton(R.string.encrypted_fs_cancel_button, this)
+                        .create().show();
+            }
         }
     }
 }
diff --git a/src/com/android/settings/SettingsSafetyLegalActivity.java b/src/com/android/settings/SettingsSafetyLegalActivity.java
index 619dc94..0c51928 100644
--- a/src/com/android/settings/SettingsSafetyLegalActivity.java
+++ b/src/com/android/settings/SettingsSafetyLegalActivity.java
@@ -58,7 +58,11 @@
 
         // Begin accessing
         mWebView.getSettings().setJavaScriptEnabled(true);
-        mWebView.loadUrl(userSafetylegalUrl);
+        if (savedInstanceState == null) {
+            mWebView.loadUrl(userSafetylegalUrl);
+        } else {
+            mWebView.restoreState(savedInstanceState);
+        }
         mWebView.setWebViewClient(new WebViewClient() {
             @Override
             public void onPageFinished(WebView view, String url) {
@@ -110,4 +114,10 @@
     public void onCancel(DialogInterface dialog) {
         finish();
     }
+
+    @Override
+    public void onSaveInstanceState(Bundle icicle) {
+        mWebView.saveState(icicle);
+        super.onSaveInstanceState(icicle);
+    }
 }
diff --git a/src/com/android/settings/SoundAndDisplaySettings.java b/src/com/android/settings/SoundSettings.java
similarity index 67%
rename from src/com/android/settings/SoundAndDisplaySettings.java
rename to src/com/android/settings/SoundSettings.java
index 29eb878..fb78a80 100644
--- a/src/com/android/settings/SoundAndDisplaySettings.java
+++ b/src/com/android/settings/SoundSettings.java
@@ -40,7 +40,7 @@
 import android.util.Log;
 import android.view.IWindowManager;
 
-public class SoundAndDisplaySettings extends PreferenceActivity implements
+public class SoundSettings extends PreferenceActivity implements
         Preference.OnPreferenceChangeListener {
     private static final String TAG = "SoundAndDisplaysSettings";
 
@@ -50,22 +50,15 @@
 
     private static final String KEY_SILENT = "silent";
     private static final String KEY_VIBRATE = "vibrate";
-    private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
     private static final String KEY_DTMF_TONE = "dtmf_tone";
     private static final String KEY_SOUND_EFFECTS = "sound_effects";
     private static final String KEY_HAPTIC_FEEDBACK = "haptic_feedback";
-    private static final String KEY_ANIMATIONS = "animations";
-    private static final String KEY_ACCELEROMETER = "accelerometer";
-    private static final String KEY_PLAY_MEDIA_NOTIFICATION_SOUNDS =
-            "play_media_notification_sounds";
     private static final String KEY_EMERGENCY_TONE = "emergency_tone";
     private static final String KEY_SOUND_SETTINGS = "sound_settings";
     private static final String KEY_NOTIFICATION_PULSE = "notification_pulse";
 
     private CheckBoxPreference mSilent;
 
-    private CheckBoxPreference mPlayMediaNotificationSounds;
-
     private IMountService mMountService = null;
 
     /*
@@ -79,15 +72,10 @@
     private CheckBoxPreference mDtmfTone;
     private CheckBoxPreference mSoundEffects;
     private CheckBoxPreference mHapticFeedback;
-    private ListPreference mAnimations;
-    private CheckBoxPreference mAccelerometer;
     private CheckBoxPreference mNotificationPulse;
-    private float[] mAnimationScales;
 
     private AudioManager mAudioManager;
 
-    private IWindowManager mWindowManager;
-
     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -106,11 +94,10 @@
         int activePhoneType = TelephonyManager.getDefault().getPhoneType();
 
         mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
-        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
 
         mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));
 
-        addPreferencesFromResource(R.xml.sound_and_display_settings);
+        addPreferencesFromResource(R.xml.sound_settings);
 
         if (TelephonyManager.PHONE_TYPE_CDMA != activePhoneType) {
             // device is not CDMA, do not display CDMA emergency_tone
@@ -118,7 +105,6 @@
         }
 
         mSilent = (CheckBoxPreference) findPreference(KEY_SILENT);
-        mPlayMediaNotificationSounds = (CheckBoxPreference) findPreference(KEY_PLAY_MEDIA_NOTIFICATION_SOUNDS);
 
         mVibrate = (CheckBoxPreference) findPreference(KEY_VIBRATE);
         mDtmfTone = (CheckBoxPreference) findPreference(KEY_DTMF_TONE);
@@ -133,16 +119,6 @@
         mHapticFeedback.setPersistent(false);
         mHapticFeedback.setChecked(Settings.System.getInt(resolver,
                 Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) != 0);
-        mAnimations = (ListPreference) findPreference(KEY_ANIMATIONS);
-        mAnimations.setOnPreferenceChangeListener(this);
-        mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);
-        mAccelerometer.setPersistent(false);
-
-        ListPreference screenTimeoutPreference =
-            (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);
-        screenTimeoutPreference.setValue(String.valueOf(Settings.System.getInt(
-                resolver, SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE)));
-        screenTimeoutPreference.setOnPreferenceChangeListener(this);
 
         if (TelephonyManager.PHONE_TYPE_CDMA == activePhoneType) {
             ListPreference emergencyTonePreference =
@@ -196,11 +172,6 @@
             mSilent.setChecked(silentOrVibrateMode);
         }
 
-        try {
-            mPlayMediaNotificationSounds.setChecked(mMountService.getPlayNotificationSounds());
-        } catch (RemoteException e) {
-        }
-
         boolean vibrateSetting;
         if (silentOrVibrateMode) {
             vibrateSetting = ringerMode == AudioManager.RINGER_MODE_VIBRATE;
@@ -219,47 +190,6 @@
                 R.string.silent_mode_incl_alarm_summary :
                 R.string.silent_mode_summary);
 
-        int animations = 0;
-        try {
-            mAnimationScales = mWindowManager.getAnimationScales();
-        } catch (RemoteException e) {
-        }
-        if (mAnimationScales != null) {
-            if (mAnimationScales.length >= 1) {
-                animations = ((int)(mAnimationScales[0]+.5f)) % 10;
-            }
-            if (mAnimationScales.length >= 2) {
-                animations += (((int)(mAnimationScales[1]+.5f)) & 0x7) * 10;
-            }
-        }
-        int idx = 0;
-        int best = 0;
-        CharSequence[] aents = mAnimations.getEntryValues();
-        for (int i=0; i<aents.length; i++) {
-            int val = Integer.parseInt(aents[i].toString());
-            if (val <= animations && val > best) {
-                best = val;
-                idx = i;
-            }
-        }
-        mAnimations.setValueIndex(idx);
-        updateAnimationsSummary(mAnimations.getValue());
-        mAccelerometer.setChecked(Settings.System.getInt(
-                getContentResolver(),
-                Settings.System.ACCELEROMETER_ROTATION, 0) != 0);
-    }
-
-    private void updateAnimationsSummary(Object value) {
-        CharSequence[] summaries = getResources().getTextArray(R.array.animations_summaries);
-        CharSequence[] values = mAnimations.getEntryValues();
-        for (int i=0; i<values.length; i++) {
-            //Log.i("foo", "Comparing entry "+ values[i] + " to current "
-            //        + mAnimations.getValue());
-            if (values[i].equals(value)) {
-                mAnimations.setSummary(summaries[i]);
-                break;
-            }
-        }
     }
 
     private void setRingerMode(boolean silent, boolean vibrate) {
@@ -279,11 +209,6 @@
         if (preference == mSilent || preference == mVibrate) {
             setRingerMode(mSilent.isChecked(), mVibrate.isChecked());
             if (preference == mSilent) updateState(false);
-        } else if (preference == mPlayMediaNotificationSounds) {
-            try {
-                mMountService.setPlayNotificationSounds(mPlayMediaNotificationSounds.isChecked());
-            } catch (RemoteException e) {
-            }
         } else if (preference == mDtmfTone) {
             Settings.System.putInt(getContentResolver(), Settings.System.DTMF_TONE_WHEN_DIALING,
                     mDtmfTone.isChecked() ? 1 : 0);
@@ -301,10 +226,6 @@
             Settings.System.putInt(getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED,
                     mHapticFeedback.isChecked() ? 1 : 0);
 
-        } else if (preference == mAccelerometer) {
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.ACCELEROMETER_ROTATION,
-                    mAccelerometer.isChecked() ? 1 : 0);
         } else if (preference == mNotificationPulse) {
             boolean value = mNotificationPulse.isChecked();
             Settings.System.putInt(getContentResolver(),
@@ -316,34 +237,7 @@
 
     public boolean onPreferenceChange(Preference preference, Object objValue) {
         final String key = preference.getKey();
-        if (KEY_ANIMATIONS.equals(key)) {
-            try {
-                int value = Integer.parseInt((String) objValue);
-                if (mAnimationScales.length >= 1) {
-                    mAnimationScales[0] = value%10;
-                }
-                if (mAnimationScales.length >= 2) {
-                    mAnimationScales[1] = (value/10)%10;
-                }
-                try {
-                    mWindowManager.setAnimationScales(mAnimationScales);
-                } catch (RemoteException e) {
-                }
-                updateAnimationsSummary(objValue);
-            } catch (NumberFormatException e) {
-                Log.e(TAG, "could not persist animation setting", e);
-            }
-
-        }
-        if (KEY_SCREEN_TIMEOUT.equals(key)) {
-            int value = Integer.parseInt((String) objValue);
-            try {
-                Settings.System.putInt(getContentResolver(),
-                        SCREEN_OFF_TIMEOUT, value);
-            } catch (NumberFormatException e) {
-                Log.e(TAG, "could not persist screen timeout setting", e);
-            }
-        } else if (KEY_EMERGENCY_TONE.equals(key)) {
+        if (KEY_EMERGENCY_TONE.equals(key)) {
             int value = Integer.parseInt((String) objValue);
             try {
                 Settings.System.putInt(getContentResolver(),
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
new file mode 100644
index 0000000..0a63de3
--- /dev/null
+++ b/src/com/android/settings/TetherSettings.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2008 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.os.Bundle;
+import android.os.SystemProperties;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.Log;
+
+/*
+ * Displays preferences for Tethering.
+ */
+public class TetherSettings extends PreferenceActivity {
+
+    private static final String ENABLE_TETHER_NOTICE = "enable_tether_notice";
+    private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
+
+    private CheckBoxPreference mEnableTetherNotice;
+    private PreferenceScreen mUsbTether;
+
+    private BroadcastReceiver mTetherChangeReceiver;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.tether_prefs);
+
+        mEnableTetherNotice = (CheckBoxPreference) findPreference(ENABLE_TETHER_NOTICE);
+        mUsbTether = (PreferenceScreen) findPreference(USB_TETHER_SETTINGS);
+    }
+
+    private class TetherChangeReceiver extends BroadcastReceiver {
+        public void onReceive(Context content, Intent intent) {
+            updateState(intent.getIntExtra(ConnectivityManager.EXTRA_AVAILABLE_TETHER_COUNT,0)>0,
+                    intent.getIntExtra(ConnectivityManager.EXTRA_ACTIVE_TETHER_COUNT,0)>0);
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mEnableTetherNotice.setChecked(Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.TETHER_NOTIFY, 0) != 0);
+
+        IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
+        mTetherChangeReceiver = new TetherChangeReceiver();
+        registerReceiver(mTetherChangeReceiver, filter);
+
+        ConnectivityManager cm =
+                (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+        updateState(cm.getTetherableIfaces().length>0, cm.getTetheredIfaces().length>0);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        unregisterReceiver(mTetherChangeReceiver);
+        mTetherChangeReceiver = null;
+    }
+
+    private void updateState(boolean isAvailable, boolean isTethered) {
+        if (isTethered) {
+            mUsbTether.setSummary(R.string.usb_tethering_active_subtext);
+            mUsbTether.setEnabled(true);
+        } else if (isAvailable) {
+            mUsbTether.setSummary(R.string.usb_tethering_available_subtext);
+            mUsbTether.setEnabled(true);
+        } else {
+            mUsbTether.setSummary(R.string.usb_tethering_unavailable_subtext);
+            mUsbTether.setEnabled(false);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+
+        if (preference == mEnableTetherNotice) {
+            boolean newState = mEnableTetherNotice.isChecked();
+            Settings.Secure.putInt(getContentResolver(),
+                    Settings.Secure.TETHER_NOTIFY, newState ? 1 : 0);
+            return true;
+        }
+        return false;
+    }
+
+}
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index f60d0f2..1a97fbf 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -55,6 +55,7 @@
     private static final String KEY_TTS_DEFAULT_LANG = "tts_default_lang";
     private static final String KEY_TTS_DEFAULT_COUNTRY = "tts_default_country";
     private static final String KEY_TTS_DEFAULT_VARIANT = "tts_default_variant";
+    private static final String KEY_TTS_DEFAULT_SYNTH = "tts_default_synth";
     // TODO move default Locale values to TextToSpeech.Engine
     private static final String DEFAULT_LANG_VAL = "eng";
     private static final String DEFAULT_COUNTRY_VAL = "USA";
@@ -70,6 +71,7 @@
     private CheckBoxPreference mUseDefaultPref = null;
     private ListPreference     mDefaultRatePref = null;
     private ListPreference     mDefaultLocPref = null;
+    private ListPreference     mDefaultSynthPref = null;
     private String             mDefaultLanguage = null;
     private String             mDefaultCountry = null;
     private String             mDefaultLocVariant = null;
@@ -90,6 +92,7 @@
      * startActivityForResult.
      */
     private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
+    private static final int GET_SAMPLE_TEXT = 1983;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -156,7 +159,10 @@
         mUseDefaultPref.setChecked(useDefault == 1);
         mUseDefaultPref.setOnPreferenceChangeListener(this);
 
-        // Default engine
+        // Default synthesis engine
+        mDefaultSynthPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
+        loadEngines();
+        mDefaultSynthPref.setOnPreferenceChangeListener(this);
         String engine = Settings.Secure.getString(resolver, TTS_DEFAULT_SYNTH);
         if (engine == null) {
             // TODO move FALLBACK_TTS_DEFAULT_SYNTH to TextToSpeech
@@ -225,6 +231,30 @@
         }
     }
 
+    /**
+     * Ask the current default engine to return a string of sample text to be
+     * spoken to the user.
+     */
+    private void getSampleText() {
+        PackageManager pm = getPackageManager();
+        Intent intent = new Intent();
+        // TODO (clchen): Replace Intent string with the actual
+        // Intent defined in the list of platform Intents.
+        intent.setAction("android.speech.tts.engine.GET_SAMPLE_TEXT");
+        intent.putExtra("language", mDefaultLanguage);
+        intent.putExtra("country", mDefaultCountry);
+        intent.putExtra("variant", mDefaultLocVariant);
+        List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
+        // query only the package that matches that of the default engine
+        for (int i = 0; i < resolveInfos.size(); i++) {
+            ActivityInfo currentActivityInfo = resolveInfos.get(i).activityInfo;
+            if (mDefaultEng.equals(currentActivityInfo.packageName)) {
+                intent.setClassName(mDefaultEng, currentActivityInfo.name);
+                this.startActivityForResult(intent, GET_SAMPLE_TEXT);
+            }
+        }
+    }
+
 
     /**
      * Called when the TTS engine is initialized.
@@ -258,6 +288,16 @@
                 mEnableDemo = false;
                 updateWidgetState();
             }
+        } else if (requestCode == GET_SAMPLE_TEXT) {
+            if (resultCode == TextToSpeech.LANG_AVAILABLE) {
+                if (mTts != null) {
+                    String sample = data.getExtras().getString("sampleText");
+                    mTts.speak(sample, TextToSpeech.QUEUE_FLUSH, null);
+                }
+            } else {
+                // TODO: Display an error here to the user.
+                Log.e(TAG, "Did not have a sample string for the requested language");
+            }
         }
     }
 
@@ -297,6 +337,14 @@
             int newIndex = mDefaultLocPref.findIndexOfValue((String)objValue);
             Log.v("Settings", " selected is " + newIndex);
             mDemoStringIndex = newIndex > -1 ? newIndex : 0;
+        } else if (KEY_TTS_DEFAULT_SYNTH.equals(preference.getKey())) {
+            // TODO: Do a data check here
+            mDefaultEng = objValue.toString();
+            Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, mDefaultEng);
+            if (mTts != null) {
+                mTts.setEngineByPackageName(mDefaultEng);
+            }
+            Log.v("Settings", "The default synth is: " + objValue.toString());
         }
 
         return true;
@@ -308,10 +356,9 @@
      */
     public boolean onPreferenceClick(Preference preference) {
         if (preference == mPlayExample) {
-            // Play example
-            if (mTts != null) {
-                mTts.speak(mDemoStrings[mDemoStringIndex], TextToSpeech.QUEUE_FLUSH, null);
-            }
+            // Get the sample text from the TTS engine; onActivityResult will do
+            // the actual speaking
+            getSampleText();
             return true;
         }
         if (preference == mInstallData) {
@@ -378,7 +425,9 @@
         // update the demo string
         mDemoStringIndex = mDefaultLocPref.findIndexOfValue(mDefaultLanguage + LOCALE_DELIMITER
                 + mDefaultCountry);
-        mDefaultLocPref.setValueIndex(mDemoStringIndex);
+        if (mDemoStringIndex > -1){
+            mDefaultLocPref.setValueIndex(mDemoStringIndex);
+        }
     }
 
     /**
@@ -424,4 +473,23 @@
         Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, DEFAULT_VARIANT_VAL);
     }
 
+
+  private void loadEngines() {
+    ListPreference enginesPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
+
+    Intent intent = new Intent("android.intent.action.START_TTS_ENGINE");
+
+    ResolveInfo[] enginesArray = new ResolveInfo[0];
+    PackageManager pm = getPackageManager();
+    enginesArray = pm.queryIntentActivities(intent, 0).toArray(enginesArray);
+    CharSequence entries[] = new CharSequence[enginesArray.length];
+    CharSequence values[] = new CharSequence[enginesArray.length];
+    for (int i = 0; i < enginesArray.length; i++) {
+      entries[i] = enginesArray[i].loadLabel(pm);
+      values[i] = enginesArray[i].activityInfo.packageName;
+    }
+    enginesPref.setEntries(entries);
+    enginesPref.setEntryValues(values);
+  }
+
 }
diff --git a/src/com/android/settings/VoiceInputOutputSettings.java b/src/com/android/settings/VoiceInputOutputSettings.java
new file mode 100644
index 0000000..7586bd0
--- /dev/null
+++ b/src/com/android/settings/VoiceInputOutputSettings.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+
+package com.android.settings;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+
+import java.util.List;
+
+/**
+ * Settings screen for voice input/output.
+ */
+public class VoiceInputOutputSettings extends PreferenceActivity {
+    
+    private static final String KEY_PARENT = "parent";
+    private static final String KEY_VOICE_SEARCH_SETTINGS = "voice_search_settings";
+    private static final String KEY_KEYBOARD_SETTINGS = "keyboard_settings";
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.voice_input_output_settings);
+        
+        removePreferenceIfNecessary(KEY_VOICE_SEARCH_SETTINGS);
+        removePreferenceIfNecessary(KEY_KEYBOARD_SETTINGS);
+    }
+
+    /**
+     * Removes a preference if there is no activity to handle its intent.
+     */
+    private void removePreferenceIfNecessary(String preferenceKey) {
+        PreferenceGroup parent = (PreferenceGroup) findPreference(KEY_PARENT);
+        
+        Preference preference = parent.findPreference(preferenceKey);
+        if (preference == null) {
+            return;
+        }
+
+        Intent intent = preference.getIntent();
+        if (intent != null) {
+            PackageManager pm = getPackageManager();
+            if (!pm.queryIntentActivities(intent, 0).isEmpty()) {
+                return;
+            }
+        }
+        
+        // Did not find a matching activity, so remove the preference.
+        parent.removePreference(preference);
+    }
+}
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 22417bb..bf75e27 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * Copyright (C) 2009 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.
@@ -17,10 +17,10 @@
 package com.android.settings;
 
 import android.bluetooth.BluetoothAdapter;
+import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
-import android.os.IBinder;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
@@ -45,10 +45,10 @@
     public static final String EXIT_ECM_RESULT = "exit_ecm_result";
     public static final int REQUEST_CODE_EXIT_ECM = 1;
 
-    private WifiEnabler mWifiEnabler;
     private AirplaneModeEnabler mAirplaneModeEnabler;
-    private BluetoothEnabler mBtEnabler;
     private CheckBoxPreference mAirplaneModePreference;
+    private WifiEnabler mWifiEnabler;
+    private BluetoothEnabler mBtEnabler;
 
     /**
      * Invoked on each preference click in this hierarchy, overrides
@@ -57,96 +57,90 @@
      */
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        if ( (preference == mAirplaneModePreference) &&
-                (Boolean.parseBoolean(
-                    SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) ) {
+        if (preference == mAirplaneModePreference && Boolean.parseBoolean(
+                SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
             // In ECM mode launch ECM app dialog
             startActivityForResult(
                 new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
                 REQUEST_CODE_EXIT_ECM);
-
             return true;
         }
-        else {
-            // Let the intents be launched by the Preference manager
-            return false;
-        }
+        // Let the intents be launched by the Preference manager
+        return false;
     }
-    
+
+    public static boolean isRadioAllowed(Context context, String type) {
+        if (!AirplaneModeEnabler.isAirplaneModeOn(context)) {
+            return true;
+        }
+        // Here we use the same logic in onCreate().
+        String toggleable = Settings.System.getString(context.getContentResolver(),
+                Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
+        return toggleable != null && toggleable.contains(type);
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         addPreferencesFromResource(R.xml.wireless_settings);
 
-        initToggles();
+        CheckBoxPreference airplane = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
+        CheckBoxPreference wifi = (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI);
+        CheckBoxPreference bt = (CheckBoxPreference) findPreference(KEY_TOGGLE_BLUETOOTH);
+
+        mAirplaneModeEnabler = new AirplaneModeEnabler(this, airplane);
         mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
+        mWifiEnabler = new WifiEnabler(this, wifi);
+        mBtEnabler = new BluetoothEnabler(this, bt);
+
+        String toggleable = Settings.System.getString(getContentResolver(),
+                Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
+
+        // Manually set dependencies for Wifi when not toggleable.
+        if (toggleable == null || !toggleable.contains(Settings.System.RADIO_WIFI)) {
+            wifi.setDependency(KEY_TOGGLE_AIRPLANE);
+            findPreference(KEY_WIFI_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
+            findPreference(KEY_VPN_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
+        }
+
+        // Manually set dependencies for Bluetooth when not toggleable.
+        if (toggleable == null || !toggleable.contains(Settings.System.RADIO_BLUETOOTH)) {
+            bt.setDependency(KEY_TOGGLE_AIRPLANE);
+            findPreference(KEY_BT_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
+        }
+
+        // Disable Bluetooth Settings if Bluetooth service is not available.
+        if (ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE) == null) {
+            findPreference(KEY_BT_SETTINGS).setEnabled(false);
+        }
     }
     
     @Override
     protected void onResume() {
         super.onResume();
         
+        mAirplaneModeEnabler.resume();
         mWifiEnabler.resume();
         mBtEnabler.resume();
-        mAirplaneModeEnabler.resume();
     }
     
     @Override
     protected void onPause() {
         super.onPause();
         
-        mWifiEnabler.pause();
         mAirplaneModeEnabler.pause();
+        mWifiEnabler.pause();
         mBtEnabler.pause();
     }
     
-    private void initToggles() {
-        
-        Preference airplanePreference = findPreference(KEY_TOGGLE_AIRPLANE);
-        Preference wifiPreference = findPreference(KEY_TOGGLE_WIFI);
-        Preference btPreference = findPreference(KEY_TOGGLE_BLUETOOTH);
-        Preference wifiSettings = findPreference(KEY_WIFI_SETTINGS);
-        Preference vpnSettings = findPreference(KEY_VPN_SETTINGS);
-
-        IBinder b = ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE);
-        if (b == null) {
-            // Disable BT Settings if BT service is not available.
-            Preference btSettings = findPreference(KEY_BT_SETTINGS);
-            btSettings.setEnabled(false);
-        }
-
-        mWifiEnabler = new WifiEnabler(
-                this, (WifiManager) getSystemService(WIFI_SERVICE),
-                (CheckBoxPreference) wifiPreference);
-        mAirplaneModeEnabler = new AirplaneModeEnabler(
-                this, (CheckBoxPreference) airplanePreference);
-        mBtEnabler = new BluetoothEnabler(this, (CheckBoxPreference) btPreference);
-
-        // manually set up dependencies for Wifi if its radio is not toggleable in airplane mode
-        String toggleableRadios = Settings.System.getString(getContentResolver(),
-                Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
-        if (toggleableRadios == null || !toggleableRadios.contains(Settings.System.RADIO_WIFI)) {
-            wifiPreference.setDependency(airplanePreference.getKey());
-            wifiSettings.setDependency(airplanePreference.getKey());
-            vpnSettings.setDependency(airplanePreference.getKey());
-        }
-    }
-
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        switch(requestCode) {
-        case REQUEST_CODE_EXIT_ECM:
-            Boolean isChoiceYes =
-                data.getBooleanExtra(EXIT_ECM_RESULT, false);
+        if (requestCode == REQUEST_CODE_EXIT_ECM) {
+            Boolean isChoiceYes = data.getBooleanExtra(EXIT_ECM_RESULT, false);
             // Set Airplane mode based on the return value and checkbox state
             mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes,
                     mAirplaneModePreference.isChecked());
-            break;
-
-        default:
-            break;
         }
     }
-
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index b872916..426a4d3 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 The Android Open Source Project
+ * 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.
@@ -17,6 +17,7 @@
 package com.android.settings.bluetooth;
 
 import com.android.settings.R;
+import com.android.settings.WirelessSettings;
 
 import android.bluetooth.BluetoothAdapter;
 import android.content.BroadcastReceiver;
@@ -25,8 +26,9 @@
 import android.content.IntentFilter;
 import android.preference.Preference;
 import android.preference.CheckBoxPreference;
+import android.provider.Settings;
 import android.text.TextUtils;
-import android.util.Config;
+import android.widget.Toast;
 
 /**
  * BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
@@ -34,16 +36,12 @@
  * preference reflects the current state.
  */
 public class BluetoothEnabler implements Preference.OnPreferenceChangeListener {
-
-    private static final boolean LOCAL_LOGD = Config.LOGD || false;
-    private static final String TAG = "BluetoothEnabler";
-
     private final Context mContext;
-    private final CheckBoxPreference mCheckBoxPreference;
+    private final CheckBoxPreference mCheckBox;
     private final CharSequence mOriginalSummary;
 
     private final LocalBluetoothManager mLocalManager;
-
+    private final IntentFilter mIntentFilter;
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -52,18 +50,18 @@
         }
     };
 
-    public BluetoothEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+    public BluetoothEnabler(Context context, CheckBoxPreference checkBox) {
         mContext = context;
-        mCheckBoxPreference = checkBoxPreference;
-
-        mOriginalSummary = checkBoxPreference.getSummary();
-        checkBoxPreference.setPersistent(false);
+        mCheckBox = checkBox;
+        mOriginalSummary = checkBox.getSummary();
+        checkBox.setPersistent(false);
 
         mLocalManager = LocalBluetoothManager.getInstance(context);
         if (mLocalManager == null) {
-            // Bluetooth not supported
-            checkBoxPreference.setEnabled(false);
+            // Bluetooth is not supported
+            checkBox.setEnabled(false);
         }
+        mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
     }
 
     public void resume() {
@@ -71,16 +69,11 @@
             return;
         }
 
-        int state = mLocalManager.getBluetoothState();
-        // This is the widget enabled state, not the preference toggled state
-        mCheckBoxPreference.setEnabled(state == BluetoothAdapter.STATE_ON ||
-                state == BluetoothAdapter.STATE_OFF);
-        // BT state is not a sticky broadcast, so set it manually
-        handleStateChanged(state);
+        // Bluetooth state is not sticky, so set it manually
+        handleStateChanged(mLocalManager.getBluetoothState());
 
-        mContext.registerReceiver(mReceiver,
-                new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
-        mCheckBoxPreference.setOnPreferenceChangeListener(this);
+        mContext.registerReceiver(mReceiver, mIntentFilter);
+        mCheckBox.setOnPreferenceChangeListener(this);
     }
 
     public void pause() {
@@ -89,72 +82,51 @@
         }
 
         mContext.unregisterReceiver(mReceiver);
-        mCheckBoxPreference.setOnPreferenceChangeListener(null);
+        mCheckBox.setOnPreferenceChangeListener(null);
     }
 
     public boolean onPreferenceChange(Preference preference, Object value) {
-        // Turn on/off BT
-        setEnabled((Boolean) value);
+        boolean enable = (Boolean) value;
+
+        // Show toast message if Bluetooth is not allowed in airplane mode
+        if (enable && !WirelessSettings
+                .isRadioAllowed(mContext, Settings.System.RADIO_BLUETOOTH)) {
+            Toast.makeText(mContext, R.string.wifi_in_airplane_mode,
+                    Toast.LENGTH_SHORT).show();
+            return false;
+        }
+
+        mLocalManager.setBluetoothEnabled(enable);
+        mCheckBox.setEnabled(false);
 
         // Don't update UI to opposite state until we're sure
         return false;
     }
 
-    private void setEnabled(final boolean enable) {
-        // Disable preference
-        mCheckBoxPreference.setEnabled(false);
-
-        mLocalManager.setBluetoothEnabled(enable);
-    }
-
     private void handleStateChanged(int state) {
-
-        if (state == BluetoothAdapter.STATE_OFF ||
-                state == BluetoothAdapter.STATE_ON) {
-            mCheckBoxPreference.setChecked(state == BluetoothAdapter.STATE_ON);
-            mCheckBoxPreference.setSummary(state == BluetoothAdapter.STATE_OFF ?
-                                           mOriginalSummary :
-                                           null);
-
-            /*
-             * Don't ever disable the preference. Only enable here. Disablement
-             * is taken care of by the dependency code. If this is disabled
-             * here, it may not be re-enabled from the framework when dependency
-             * is met. http://b/issue?id=2053751
-             */
-            if (isEnabledByDependency()) {
-                mCheckBoxPreference.setEnabled(true);
-            }
-
-        } else if (state == BluetoothAdapter.STATE_TURNING_ON ||
-                state == BluetoothAdapter.STATE_TURNING_OFF) {
-            mCheckBoxPreference.setSummary(state == BluetoothAdapter.STATE_TURNING_ON
-                    ? R.string.wifi_starting
-                    : R.string.wifi_stopping);
-
-        } else {
-            mCheckBoxPreference.setChecked(false);
-            mCheckBoxPreference.setSummary(R.string.wifi_error);
-            mCheckBoxPreference.setEnabled(true);
+        switch (state) {
+            case BluetoothAdapter.STATE_TURNING_ON:
+                mCheckBox.setSummary(R.string.wifi_starting);
+                mCheckBox.setEnabled(false);
+                break;
+            case BluetoothAdapter.STATE_ON:
+                mCheckBox.setChecked(true);
+                mCheckBox.setSummary(null);
+                mCheckBox.setEnabled(true);
+                break;
+            case BluetoothAdapter.STATE_TURNING_OFF:
+                mCheckBox.setSummary(R.string.wifi_stopping);
+                mCheckBox.setEnabled(false);
+                break;
+            case BluetoothAdapter.STATE_OFF:
+                mCheckBox.setChecked(false);
+                mCheckBox.setSummary(mOriginalSummary);
+                mCheckBox.setEnabled(true);
+                break;
+            default:
+                mCheckBox.setChecked(false);
+                mCheckBox.setSummary(R.string.wifi_error);
+                mCheckBox.setEnabled(true);
         }
     }
-
-    private boolean isEnabledByDependency() {
-        Preference dep = getDependencyPreference();
-        if (dep == null) {
-            return true;
-        }
-
-        return !dep.shouldDisableDependents();
-    }
-
-    private Preference getDependencyPreference() {
-        String depKey = mCheckBoxPreference.getDependency();
-        if (TextUtils.isEmpty(depKey)) {
-            return null;
-        }
-
-        return mCheckBoxPreference.getPreferenceManager().findPreference(depKey);
-    }
-
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 4364795..4f3205b 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -202,6 +202,12 @@
         }
     }
 
+    @Override
+    protected void onUserLeaveHint() {
+        super.onUserLeaveHint();
+        mLocalManager.stopScanning();
+    }
+
     private void addDevices() {
         List<CachedBluetoothDevice> cachedDevices =
                 mLocalManager.getCachedDeviceManager().getCachedDevicesCopy();
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index 57bffa9..ec8df3c 100644
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -53,7 +53,7 @@
     private static final String TAG = "CachedBluetoothDevice";
     private static final boolean D = LocalBluetoothManager.D;
     private static final boolean V = LocalBluetoothManager.V;
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true; // STOPSHIP - disable before final rom
 
     private static final int CONTEXT_ITEM_CONNECT = Menu.FIRST + 1;
     private static final int CONTEXT_ITEM_DISCONNECT = Menu.FIRST + 2;
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothManager.java b/src/com/android/settings/bluetooth/LocalBluetoothManager.java
index ec5c6bc..43d4343 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothManager.java
@@ -198,6 +198,12 @@
         }
     }
 
+    public void stopScanning() {
+        if (mAdapter.isDiscovering()) {
+            mAdapter.cancelDiscovery();
+        }
+    }
+
     public int getBluetoothState() {
 
         if (mState == BluetoothAdapter.ERROR) {
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
index 53e2a69..7e22375 100644
--- a/src/com/android/settings/deviceinfo/Memory.java
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -28,6 +28,8 @@
 import android.os.IMountService;
 import android.os.ServiceManager;
 import android.os.StatFs;
+import android.storage.StorageManager;
+import android.storage.StorageEventListener;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
@@ -47,29 +49,36 @@
 
     private static final String MEMORY_SD_AVAIL = "memory_sd_avail";
 
-    private static final String MEMORY_SD_UNMOUNT = "memory_sd_unmount";
+    private static final String MEMORY_SD_MOUNT_TOGGLE = "memory_sd_mount_toggle";
 
     private static final String MEMORY_SD_FORMAT = "memory_sd_format";
     private Resources mRes;
 
     private Preference mSdSize;
     private Preference mSdAvail;
-    private Preference mSdUnmount;
+    private Preference mSdMountToggle;
     private Preference mSdFormat;
     
     // Access using getMountService()
     private IMountService mMountService = null;
 
+    private StorageManager mStorageManager = null;
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        
+
+        if (mStorageManager == null) {
+            mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
+            mStorageManager.registerListener(mStorageListener);
+        }
+
         addPreferencesFromResource(R.xml.device_info_memory);
         
         mRes = getResources();
         mSdSize = findPreference(MEMORY_SD_SIZE);
         mSdAvail = findPreference(MEMORY_SD_AVAIL);
-        mSdUnmount = findPreference(MEMORY_SD_UNMOUNT);
+        mSdMountToggle = findPreference(MEMORY_SD_MOUNT_TOGGLE);
         mSdFormat = findPreference(MEMORY_SD_FORMAT);
     }
     
@@ -77,20 +86,31 @@
     protected void onResume() {
         super.onResume();
         
-        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_REMOVED);
-        intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
-        intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
-        intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);
-        intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
-        intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTABLE);
-        intentFilter.addAction(Intent.ACTION_MEDIA_NOFS);
-        intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
+        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);
         intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
         intentFilter.addDataScheme("file");
         registerReceiver(mReceiver, intentFilter);
 
         updateMemoryStatus();
     }
+
+    StorageEventListener mStorageListener = new StorageEventListener() {
+        public void onShareAvailabilityChanged(String method, boolean available) {
+        }
+
+        public void onMediaInserted(String label, String path, int major, int minor) {
+            updateMemoryStatus();
+        }
+
+        public void onMediaRemoved(String label, String path, int major, int minor, boolean clean) {
+            updateMemoryStatus();
+        }
+
+        public void onVolumeStateChanged(
+                String label, String path, String oldState, String newState) {
+            updateMemoryStatus();
+        }
+    };
     
     @Override
     protected void onPause() {
@@ -112,8 +132,13 @@
     
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        if (preference == mSdUnmount) {
-            unmount();
+        if (preference == mSdMountToggle) {
+            String status = Environment.getExternalStorageState();
+            if (status.equals(Environment.MEDIA_MOUNTED)) {
+                unmount();
+            } else {
+                mount();
+            }
             return true;
         } else if (preference == mSdFormat) {
             Intent intent = new Intent(Intent.ACTION_VIEW);
@@ -136,7 +161,7 @@
         IMountService mountService = getMountService();
         try {
             if (mountService != null) {
-                mountService.unmountMedia(Environment.getExternalStorageDirectory().toString());
+                mountService.unmountVolume(Environment.getExternalStorageDirectory().toString());
             } else {
                 Log.e(TAG, "Mount service is null, can't unmount");
             }
@@ -146,6 +171,20 @@
         }
     }
 
+    private void mount() {
+        IMountService mountService = getMountService();
+        try {
+            if (mountService != null) {
+                mountService.mountVolume(Environment.getExternalStorageDirectory().toString());
+            } else {
+                Log.e(TAG, "Mount service is null, can't mount");
+            }
+        } catch (RemoteException ex) {
+            // Failed for some reason, try to update UI to actual state
+            updateMemoryStatus();
+        }
+    }
+
     private void updateMemoryStatus() {
         String status = Environment.getExternalStorageState();
         String readOnly = "";
@@ -166,7 +205,11 @@
                 
                 mSdSize.setSummary(formatSize(totalBlocks * blockSize));
                 mSdAvail.setSummary(formatSize(availableBlocks * blockSize) + readOnly);
-                mSdUnmount.setEnabled(true);
+
+                mSdMountToggle.setEnabled(true);
+                mSdMountToggle.setTitle(mRes.getString(R.string.sd_eject));
+                mSdMountToggle.setSummary(mRes.getString(R.string.sd_eject_summary));
+
             } catch (IllegalArgumentException e) {
                 // this can occur if the SD card is removed, but we haven't received the 
                 // ACTION_MEDIA_REMOVED Intent yet.
@@ -176,15 +219,20 @@
         } else {
             mSdSize.setSummary(mRes.getString(R.string.sd_unavailable));
             mSdAvail.setSummary(mRes.getString(R.string.sd_unavailable));
-            mSdUnmount.setEnabled(false);
+
 
             if (status.equals(Environment.MEDIA_UNMOUNTED) ||
                 status.equals(Environment.MEDIA_NOFS) ||
                 status.equals(Environment.MEDIA_UNMOUNTABLE) ) {
                 mSdFormat.setEnabled(true);
+                mSdMountToggle.setEnabled(true);
+                mSdMountToggle.setTitle(mRes.getString(R.string.sd_mount));
+                mSdMountToggle.setSummary(mRes.getString(R.string.sd_mount_summary));
+            } else {
+                mSdMountToggle.setEnabled(false);
+                mSdMountToggle.setTitle(mRes.getString(R.string.sd_mount));
+                mSdMountToggle.setSummary(mRes.getString(R.string.sd_insert_summary));
             }
-
-            
         }
 
         File path = Environment.getDataDirectory();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 737627a..a98bfed 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -271,7 +271,7 @@
                 }
                 break;
             case SCREEN:
-                addControl(R.string.sound_and_display_settings,
+                addControl(R.string.display_settings,
                         R.string.battery_sugg_display,
                         ACTION_DISPLAY_SETTINGS);
                 removeHeader = false;
@@ -330,7 +330,7 @@
         ActivityManager am = (ActivityManager)getSystemService(
                 Context.ACTIVITY_SERVICE);
         for (int i = 0; i < mPackages.length; i++) {
-            am.restartPackage(mPackages[i]);
+            am.forceStopPackage(mPackages[i]);
         }
     }
 
diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java
new file mode 100644
index 0000000..9e40bd0
--- /dev/null
+++ b/src/com/android/settings/wifi/AccessPoint.java
@@ -0,0 +1,212 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.wifi;
+
+import com.android.settings.R;
+
+import android.content.Context;
+import android.net.NetworkInfo.DetailedState;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.KeyMgmt;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.net.wifi.ScanResult;
+import android.preference.Preference;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+
+class AccessPoint extends Preference {
+    private static final int[] STATE_SECURED = {R.attr.state_encrypted};
+    private static final int[] STATE_NONE = {};
+
+    static final int SECURITY_NONE = 0;
+    static final int SECURITY_WEP = 1;
+    static final int SECURITY_PSK = 2;
+    static final int SECURITY_EAP = 3;
+
+    final String ssid;
+    final int security;
+    final int networkId;
+
+    private WifiConfiguration mConfig;
+    private int mRssi;
+    private WifiInfo mInfo;
+    private DetailedState mState;
+    private ImageView mSignal;
+
+    private static int getSecurity(WifiConfiguration config) {
+        if (config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
+            return SECURITY_PSK;
+        }
+        if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) ||
+                config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
+            return SECURITY_EAP;
+        }
+        return (config.wepKeys[0] != null) ? SECURITY_WEP : SECURITY_NONE;
+    }
+
+    private static int getSecurity(ScanResult result) {
+        if (result.capabilities.contains("WEP")) {
+            return SECURITY_WEP;
+        } else if (result.capabilities.contains("PSK")) {
+            return SECURITY_PSK;
+        } else if (result.capabilities.contains("EAP")) {
+            return SECURITY_EAP;
+        }
+        return SECURITY_NONE;
+    }
+
+    AccessPoint(Context context, WifiConfiguration config) {
+        super(context);
+        setWidgetLayoutResource(R.layout.preference_widget_wifi_signal);
+        ssid = (config.SSID == null ? "" : config.SSID);
+        security = getSecurity(config);
+        networkId = config.networkId;
+        mConfig = config;
+        mRssi = Integer.MAX_VALUE;
+    }
+
+    AccessPoint(Context context, ScanResult result) {
+        super(context);
+        setWidgetLayoutResource(R.layout.preference_widget_wifi_signal);
+        ssid = result.SSID;
+        security = getSecurity(result);
+        networkId = -1;
+        mRssi = result.level;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        setTitle(ssid);
+        mSignal = (ImageView) view.findViewById(R.id.signal);
+        if (mRssi == Integer.MAX_VALUE) {
+            mSignal.setImageDrawable(null);
+        } else {
+            mSignal.setImageResource(R.drawable.wifi_signal);
+            mSignal.setImageState((security != SECURITY_NONE) ?
+                    STATE_SECURED : STATE_NONE, true);
+        }
+        refresh();
+        super.onBindView(view);
+    }
+
+    @Override
+    public int compareTo(Preference preference) {
+        if (!(preference instanceof AccessPoint)) {
+            return 1;
+        }
+        AccessPoint other = (AccessPoint) preference;
+        // Active one goes first.
+        if (mInfo != other.mInfo) {
+            return (mInfo != null) ? -1 : 1;
+        }
+        // Reachable one goes before unreachable one.
+        if ((mRssi ^ other.mRssi) < 0) {
+            return (mRssi != Integer.MAX_VALUE) ? -1 : 1;
+        }
+        // Configured one goes before unconfigured one.
+        if ((networkId ^ other.networkId) < 0) {
+            return (networkId != -1) ? -1 : 1;
+        }
+        // Sort by signal strength.
+        int difference = WifiManager.compareSignalLevel(other.mRssi, mRssi);
+        if (difference != 0) {
+            return difference;
+        }
+        // Sort by ssid.
+        return ssid.compareToIgnoreCase(other.ssid);
+    }
+
+    boolean update(ScanResult result) {
+        // We do not call refresh() since this is called before onBindView().
+        if (ssid.equals(result.SSID) && security == getSecurity(result)) {
+            if (WifiManager.compareSignalLevel(result.level, mRssi) > 0) {
+                mRssi = result.level;
+            }
+            return true;
+        }
+        return false;
+    }
+
+    void update(WifiInfo info, DetailedState state) {
+        boolean reorder = false;
+        if (info != null && networkId != -1 && networkId == info.getNetworkId()) {
+            reorder = (mInfo == null);
+            mRssi = info.getRssi();
+            mInfo = info;
+            mState = state;
+            refresh();
+        } else if (mInfo != null) {
+            reorder = true;
+            mInfo = null;
+            mState = null;
+            refresh();
+        }
+        if (reorder) {
+            notifyHierarchyChanged();
+        }
+    }
+
+    int getLevel() {
+        if (mRssi == Integer.MAX_VALUE) {
+            return -1;
+        }
+        return WifiManager.calculateSignalLevel(mRssi, 4);
+    }
+
+    WifiConfiguration getConfig() {
+        return mConfig;
+    }
+
+    WifiInfo getInfo() {
+        return mInfo;
+    }
+
+    DetailedState getState() {
+        return mState;
+    }
+
+    private void refresh() {
+        if (mSignal == null) {
+            return;
+        }
+        Context context = getContext();
+        mSignal.setImageLevel(getLevel());
+
+        if (mState != null) {
+            setSummary(Summary.get(context, mState));
+        } else {
+            String status = null;
+            if (mRssi == Integer.MAX_VALUE) {
+                status = context.getString(R.string.wifi_not_in_range);
+            } else if (mConfig != null) {
+                status = context.getString((mConfig.status == WifiConfiguration.Status.DISABLED) ?
+                        R.string.wifi_disabled : R.string.wifi_remembered);
+            }
+
+            if (security == SECURITY_NONE) {
+                setSummary(status);
+            } else {
+                String format = context.getString((status == null) ?
+                        R.string.wifi_secured : R.string.wifi_secured_with_status);
+                String[] type = context.getResources().getStringArray(R.array.wifi_security);
+                setSummary(String.format(format, type[security], status));
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/AccessPointDialog.java b/src/com/android/settings/wifi/AccessPointDialog.java
deleted file mode 100644
index 4804d78..0000000
--- a/src/com/android/settings/wifi/AccessPointDialog.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * Copyright (C) 2007 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.R;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.security.Credentials;
-import android.security.KeyStore;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
-import android.os.Bundle;
-import android.text.InputType;
-import android.text.TextUtils;
-import android.text.format.Formatter;
-import android.text.method.PasswordTransformationMethod;
-import android.text.method.TransformationMethod;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.Spinner;
-import android.widget.TableLayout;
-import android.widget.TextView;
-
-public class AccessPointDialog extends AlertDialog implements DialogInterface.OnClickListener,
-        AdapterView.OnItemSelectedListener, View.OnClickListener {
-
-    private static final String TAG = "AccessPointDialog";
-    private static final String INSTANCE_KEY_ACCESS_POINT_STATE =
-            "com.android.settings.wifi.AccessPointDialog:accessPointState";
-    private static final String INSTANCE_KEY_MODE =
-            "com.android.settings.wifi.AccessPointDialog:mode";
-    private static final String INSTANCE_KEY_CUSTOM_TITLE =
-            "com.android.settings.wifi.AccessPointDialog:customTitle";
-    private static final String INSTANCE_KEY_AUTO_SECURITY_ALLOWED =
-            "com.android.settings.wifi.AccessPointDialog:autoSecurityAllowed";
-    
-    private static final int POSITIVE_BUTTON = BUTTON1;
-    private static final int NEGATIVE_BUTTON = BUTTON2;
-    private static final int NEUTRAL_BUTTON = BUTTON3;
-    
-    /** The dialog should show info connectivity functionality */
-    public static final int MODE_INFO = 0;
-    /** The dialog should configure the detailed AP properties */
-    public static final int MODE_CONFIGURE = 1;
-    /** The dialog should have the password field and connect/cancel */
-    public static final int MODE_RETRY_PASSWORD = 2;
-    
-    // These should be matched with the XML. Both arrays in XML depend on this
-    // ordering!
-    private static final int SECURITY_AUTO = 0;
-    private static final int SECURITY_NONE = 1;
-    private static final int SECURITY_WEP = 2;
-    private static final int SECURITY_PSK = 3;
-    private static final int SECURITY_EAP = 4;
-
-    private static final int[] WEP_TYPE_VALUES = {
-            AccessPointState.WEP_PASSWORD_AUTO, AccessPointState.WEP_PASSWORD_ASCII,
-            AccessPointState.WEP_PASSWORD_HEX
-    };
-    private static final String NOT_APPLICABLE = "N/A";
-    private static final String KEYSTORE_HEADER = "keystore://";
-
-    // Button positions, default to impossible values
-    private int mConnectButtonPos = Integer.MAX_VALUE; 
-    private int mForgetButtonPos = Integer.MAX_VALUE;
-    private int mSaveButtonPos = Integer.MAX_VALUE;
-
-    // Client configurable items. Generally, these should be saved in instance state
-    private int mMode = MODE_INFO;
-    private boolean mAutoSecurityAllowed = true;
-    private CharSequence mCustomTitle;
-    // This does not need to be saved in instance state.
-    private WifiLayer mWifiLayer;
-    private AccessPointState mState;
-    
-    // General views
-    private View mView;
-    private View mEnterpriseView;
-    private TextView mPasswordText;
-    private EditText mPasswordEdit;
-    private CheckBox mShowPasswordCheckBox;
-
-    // Enterprise fields
-    private TextView mEapText;
-    private Spinner mEapSpinner;
-    private TextView mPhase2Text;
-    private Spinner mPhase2Spinner;
-    private TextView mIdentityText;
-    private EditText mIdentityEdit;
-    private TextView mAnonymousIdentityText;
-    private EditText mAnonymousIdentityEdit;
-    private TextView mCaCertText;
-    private Spinner mCaCertSpinner;
-    private TextView mClientCertText;
-    private Spinner mClientCertSpinner;
-    private EditText[] mEnterpriseTextFields;
-
-    
-    // Info-specific views
-    private ViewGroup mTable;
-    
-    // Configure-specific views
-    private EditText mSsidEdit;
-    private TextView mSsidText;
-    private TextView mSecurityText;
-    private Spinner mSecuritySpinner;
-    private Spinner mWepTypeSpinner;
-    private KeyStore mKeyStore;
-
-    public AccessPointDialog(Context context, WifiLayer wifiLayer) {
-        super(context);
-
-        mWifiLayer = wifiLayer;
-        mKeyStore = KeyStore.getInstance();
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        onLayout();
-        onFill();
-
-        super.onCreate(savedInstanceState);
-    }
-    
-    @Override
-    public void onRestoreInstanceState(Bundle savedInstanceState) {
-        // Set to a class loader that can find AccessPointState
-        savedInstanceState.setClassLoader(getClass().getClassLoader());
-        
-        mState = savedInstanceState.getParcelable(INSTANCE_KEY_ACCESS_POINT_STATE);
-        mState.setContext(getContext());
-        
-        mMode = savedInstanceState.getInt(INSTANCE_KEY_MODE, mMode);
-        mAutoSecurityAllowed = savedInstanceState.getBoolean(INSTANCE_KEY_AUTO_SECURITY_ALLOWED,
-                mAutoSecurityAllowed);
-        mCustomTitle = savedInstanceState.getCharSequence(INSTANCE_KEY_CUSTOM_TITLE);
-        if (mCustomTitle != null) {
-            setTitle(mCustomTitle);
-        }
-
-        // This is called last since it depends on the above values 
-        super.onRestoreInstanceState(savedInstanceState);
-        
-        if (mShowPasswordCheckBox != null) {
-            // Restore the show-password-state on the edit text
-            setShowPassword(mShowPasswordCheckBox.isChecked());
-        }
-    }
-
-    @Override
-    public Bundle onSaveInstanceState() {
-        Bundle bundle = super.onSaveInstanceState();
-        bundle.putParcelable(INSTANCE_KEY_ACCESS_POINT_STATE, mState);
-        bundle.putInt(INSTANCE_KEY_MODE, mMode);
-        bundle.putBoolean(INSTANCE_KEY_AUTO_SECURITY_ALLOWED, mAutoSecurityAllowed);
-        bundle.putCharSequence(INSTANCE_KEY_CUSTOM_TITLE, mCustomTitle);
-        return bundle;
-    }
-
-    /**
-     * Sets state to show in this dialog.
-     * 
-     * @param state The state.
-     */
-    public void setState(AccessPointState state) {
-        mState = state;
-    }
-
-    /**
-     * Sets the dialog mode.
-     * @param mode One of {@link #MODE_CONFIGURE} or {@link #MODE_INFO}
-     */
-    public void setMode(int mode) {
-        mMode = mode;
-    }
-
-    public void setAutoSecurityAllowed(boolean autoSecurityAllowed) {
-        mAutoSecurityAllowed = autoSecurityAllowed;
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        super.setTitle(title);
-        mCustomTitle = title;
-    }
-
-    @Override
-    public void setTitle(int titleId) {
-        setTitle(getContext().getString(titleId));
-    }
-
-    public void enableEnterpriseFields() {
-        setEnterpriseFieldsVisible(true);
-        updateCertificateSelection();
-        setGenericPasswordVisible(true);
-        // Both WPA and WPA2 show the same caption, so either is ok
-        updatePasswordCaption(AccessPointState.PSK);
-    }
-
-    /** Called after flags are set, the dialog's layout/etc should be set up here */
-    private void onLayout() {
-        final Context context = getContext();
-        final String ssid = mState.getHumanReadableSsid();
-        
-        int positiveButtonResId = 0;
-        int negativeButtonResId = R.string.cancel;
-        int neutralButtonResId = 0;
-
-        if (mCustomTitle == null) {
-            // Generic title is the SSID
-            // We don't want to trigger this as a custom title, so call super's
-            super.setTitle(ssid);
-        }
-        setInverseBackgroundForced(true);
-
-        boolean defaultPasswordVisibility = true;
-        
-        if (mMode == MODE_CONFIGURE) {
-            setLayout(R.layout.wifi_ap_configure);
-
-            positiveButtonResId = R.string.wifi_save_config;
-            mSaveButtonPos = POSITIVE_BUTTON;
-
-            setEnterpriseFieldsVisible(false);
-
-        } else if (mMode == MODE_INFO) {
-            if (mState.isEnterprise() && !mState.configured) {
-                setLayout(R.layout.wifi_ap_configure);
-                setEnterpriseFieldsVisible(true);
-            } else {
-                setLayout(R.layout.wifi_ap_info);
-            }
-
-            if (mState.isConnectable()) {
-                if (mCustomTitle == null) {
-                    // We don't want to trigger this as a custom title, so call super's
-                    super.setTitle(context.getString(R.string.connect_to_blank, ssid));
-                }
-                positiveButtonResId = R.string.connect;
-                mConnectButtonPos = POSITIVE_BUTTON;
-            }
-
-            if (mState.isForgetable()) {
-                if (positiveButtonResId == 0) {
-                    positiveButtonResId = R.string.forget_network;
-                    mForgetButtonPos = POSITIVE_BUTTON;
-                } else {
-                    neutralButtonResId = R.string.forget_network;
-                    mForgetButtonPos = NEUTRAL_BUTTON;
-                }
-            }
-        } else if (mMode == MODE_RETRY_PASSWORD) {
-            setLayout(R.layout.wifi_ap_retry_password);
-            
-            positiveButtonResId = R.string.connect;
-            mConnectButtonPos = POSITIVE_BUTTON;
-            
-            setGenericPasswordVisible(true);
-            defaultPasswordVisibility = false;
-        }
-
-        if (defaultPasswordVisibility) {
-            if (!mState.configured && mState.seen && mState.hasSecurity()) {
-                setGenericPasswordVisible(true);
-            } else {
-                setGenericPasswordVisible(false);
-            }
-        }
-        
-        setButtons(positiveButtonResId, negativeButtonResId, neutralButtonResId);
-    }
-
-    /** Called when we need to set our member variables to point to the views. */
-    private void onReferenceViews(View view) {
-        mPasswordText = (TextView) view.findViewById(R.id.password_text);
-        mPasswordEdit = (EditText) view.findViewById(R.id.password_edit);
-        mSsidText = (TextView) view.findViewById(R.id.ssid_text);
-        mSsidEdit = (EditText) view.findViewById(R.id.ssid_edit);
-        mSecurityText = (TextView) view.findViewById(R.id.security_text);
-        mSecuritySpinner = (Spinner) view.findViewById(R.id.security_spinner);
-        mWepTypeSpinner = (Spinner) view.findViewById(R.id.wep_type_spinner);
-        mEnterpriseView = mView.findViewById(R.id.enterprise_wrapper);
-
-        mShowPasswordCheckBox = (CheckBox) view.findViewById(R.id.show_password_checkbox);
-        if (mShowPasswordCheckBox != null) {
-            mShowPasswordCheckBox.setOnClickListener(this);
-        }
-        if (mMode == MODE_CONFIGURE) {
-            mSecuritySpinner.setOnItemSelectedListener(this);
-            mSecuritySpinner.setPromptId(R.string.security);
-            setSpinnerAdapter(mSecuritySpinner, mAutoSecurityAllowed ?
-                R.array.wifi_security_entries
-                : R.array.wifi_security_without_auto_entries);
-        } else if (mMode == MODE_INFO) {
-            mTable = (ViewGroup) view.findViewById(R.id.table);
-        }
-        /* for enterprise one */
-        if (mMode == MODE_CONFIGURE ||
-                (mState.isEnterprise() && !mState.configured)) {
-            setEnterpriseFields(view);
-            updateCertificateSelection();
-        }
-    }
-
-    private void updateCertificateSelection() {
-        setSpinnerAdapter(mClientCertSpinner, getAllUserCertificateKeys());
-        setSpinnerAdapter(mCaCertSpinner, getAllCaCertificateKeys());
-
-        mPhase2Spinner.setSelection(getSelectionIndex(
-                R.array.wifi_phase2_entries, mState.getPhase2()));
-        mEapSpinner.setSelection(getSelectionIndex(
-                R.array.wifi_eap_entries, mState.getEap()));
-        mClientCertSpinner.setSelection(getSelectionIndex(
-                getAllUserCertificateKeys(), mState.getEnterpriseField(
-                AccessPointState.CLIENT_CERT)));
-        mCaCertSpinner.setSelection(getSelectionIndex(
-                getAllCaCertificateKeys(), mState.getEnterpriseField(
-                AccessPointState.CA_CERT)));
-    }
-
-    private String[] getAllCaCertificateKeys() {
-        return appendEmptyInSelection(mKeyStore.saw(Credentials.CA_CERTIFICATE));
-    }
-
-    private String[] getAllUserCertificateKeys() {
-        return appendEmptyInSelection(mKeyStore.saw(Credentials.USER_CERTIFICATE));
-    }
-
-    private String[] appendEmptyInSelection(String[] keys) {
-        if (keys == null) {
-            return new String[] {NOT_APPLICABLE};
-        } else {
-            String[] selections = new String[keys.length + 1];
-            System.arraycopy(keys, 0, selections, 0, keys.length);
-            selections[keys.length] = NOT_APPLICABLE;
-            return selections;
-        }
-    }
-
-    private void setEnterpriseFields(View view) {
-        mIdentityText = (TextView) view.findViewById(R.id.identity_text);
-        mIdentityEdit = (EditText) view.findViewById(R.id.identity_edit);
-        mAnonymousIdentityText =
-                (TextView) view.findViewById(R.id.anonymous_identity_text);
-        mAnonymousIdentityEdit =
-                (EditText) view.findViewById(R.id.anonymous_identity_edit);
-        mClientCertText =
-                (TextView) view.findViewById(R.id.client_certificate_text);
-        mCaCertText = (TextView) view.findViewById(R.id.ca_certificate_text);
-        mEapText = (TextView) view.findViewById(R.id.eap_text);
-        mEapSpinner = (Spinner) view.findViewById(R.id.eap_spinner);
-        mEapSpinner.setOnItemSelectedListener(this);
-        mEapSpinner.setPromptId(R.string.please_select_eap);
-        setSpinnerAdapter(mEapSpinner, R.array.wifi_eap_entries);
-
-        mPhase2Text = (TextView) view.findViewById(R.id.phase2_text);
-        mPhase2Spinner = (Spinner) view.findViewById(R.id.phase2_spinner);
-        mPhase2Spinner.setOnItemSelectedListener(this);
-        mPhase2Spinner.setPromptId(R.string.please_select_phase2);
-        setSpinnerAdapter(mPhase2Spinner, R.array.wifi_phase2_entries);
-
-        mClientCertSpinner =
-                (Spinner) view.findViewById(R.id.client_certificate_spinner);
-        mClientCertSpinner.setOnItemSelectedListener(this);
-        mClientCertSpinner.setPromptId(
-                R.string.please_select_client_certificate);
-        setSpinnerAdapter(mClientCertSpinner, getAllUserCertificateKeys());
-
-        mCaCertSpinner =
-                (Spinner) view.findViewById(R.id.ca_certificate_spinner);
-        mCaCertSpinner.setOnItemSelectedListener(this);
-        mCaCertSpinner.setPromptId(R.string.please_select_ca_certificate);
-        setSpinnerAdapter(mCaCertSpinner, getAllCaCertificateKeys());
-
-        mEnterpriseTextFields = new EditText[] {
-            mIdentityEdit, mAnonymousIdentityEdit
-        };
-
-    }
-
-    private void setSpinnerAdapter(Spinner spinner, String[] items) {
-        if (items != null) {
-            ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
-                    getContext(), android.R.layout.simple_spinner_item, items);
-            adapter.setDropDownViewResource(
-                    android.R.layout.simple_spinner_dropdown_item);
-            spinner.setAdapter(adapter);
-        }
-    }
-
-    private void setSpinnerAdapter(Spinner spinner, int arrayResId) {
-        setSpinnerAdapter(spinner,
-            getContext().getResources().getStringArray(arrayResId));
-    }
-
-    /** Called when the widgets are in-place waiting to be filled with data */
-    private void onFill() {
-
-        // Appears in the order added
-        if (mMode == MODE_INFO) {
-            if (mState.primary) {
-                addInfoRow(R.string.wifi_status, mState.getSummarizedStatus());
-                addInfoRow(R.string.wifi_link_speed, mState.linkSpeed + WifiInfo.LINK_SPEED_UNITS);
-            }
-    
-            if (mState.seen) {
-                addInfoRow(R.string.signal, getSignalResId(mState.signal));
-            }
-            
-            if (mState.security != null) {
-                addInfoRow(R.string.security, mState.getHumanReadableSecurity());
-            }
-    
-            if (mState.primary && mState.ipAddress != 0) {
-                addInfoRow(R.string.ip_address, Formatter.formatIpAddress(mState.ipAddress));
-            }
-            
-        } else if (mMode == MODE_CONFIGURE) {
-            String ssid = mState.getHumanReadableSsid();
-            if (!TextUtils.isEmpty(ssid)) {
-                mSsidEdit.setText(ssid);
-            }
-            if (mState.configured) {
-                mPasswordEdit.setHint(R.string.wifi_password_unchanged);
-            }
-        }
-
-        updatePasswordCaption(mState.security);
-    }
-
-    private void updatePasswordCaption(String security) {
-        if (mPasswordText != null) {
-            if (security != null && security.equals(AccessPointState.WEP)) {
-                mPasswordText.setText(R.string.please_type_hex_key);
-            } else {
-                mPasswordText.setText(R.string.please_type_passphrase);
-            }
-        }
-    }
-    
-    private void addInfoRow(int nameResId, String value) {
-        View rowView = getLayoutInflater().inflate(R.layout.wifi_ap_info_row, mTable, false);
-        ((TextView) rowView.findViewById(R.id.name)).setText(nameResId);
-        ((TextView) rowView.findViewById(R.id.value)).setText(value);
-        mTable.addView(rowView);
-    }
-        
-    private void addInfoRow(int nameResId, int valueResId) {
-        addInfoRow(nameResId, getContext().getString(valueResId));
-    }
-    
-    private void setButtons(int positiveResId, int negativeResId, int neutralResId) {
-        final Context context = getContext();
-        
-        if (positiveResId > 0) {
-            setButton(context.getString(positiveResId), this);
-        }
-        
-        if (negativeResId > 0) {
-            setButton2(context.getString(negativeResId), this);
-        }
-
-        if (neutralResId > 0) {
-            setButton3(context.getString(neutralResId), this);
-        }
-    }
-    
-    private void setLayout(int layoutResId) {
-        setView(mView = getLayoutInflater().inflate(layoutResId, null));
-        onReferenceViews(mView);
-    }
-    
-    public void onClick(DialogInterface dialog, int which) {
-        if (which == mForgetButtonPos) {
-            handleForget();
-        } else if (which == mConnectButtonPos) {
-            handleConnect();
-        } else if (which == mSaveButtonPos) {
-            handleSave();
-        }
-    }
-    
-    private void handleForget() {
-        if (!replaceStateWithWifiLayerInstance()) return;
-        mWifiLayer.forgetNetwork(mState);
-    }
-    
-    private void handleConnect() {
-        if (!replaceStateWithWifiLayerInstance()) {
-            Log.w(TAG, "Assuming connecting to a new network.");
-        }
-
-        if (mState.isEnterprise()) {
-            if(!mState.configured) {
-                updateEnterpriseFields();
-            }
-        }
-        updatePasswordField();
-
-        mWifiLayer.connectToNetwork(mState);
-    }
-
-    /*
-     * If the network is secured and they haven't entered a password, popup an
-     * error. Allow empty passwords if the state already has a password set
-     * (since in that scenario, an empty password means keep the old password).
-     */
-    private void updatePasswordField() {
-
-      String password = getEnteredPassword();
-      boolean passwordIsEmpty = TextUtils.isEmpty(password);
-      /*
-       * When 'retry password', they can not enter a blank password. In any
-       * other mode, we let them enter a blank password if the state already
-       * has a password.
-       */
-      if (passwordIsEmpty && (!mState.hasPassword() ||
-              mMode == MODE_RETRY_PASSWORD) &&
-              (mState.security != null) &&
-              !mState.security.equals(AccessPointState.OPEN) &&
-              !mState.isEnterprise()) {
-          new AlertDialog.Builder(getContext())
-                  .setTitle(R.string.error_title)
-                  .setIcon(android.R.drawable.ic_dialog_alert)
-                  .setMessage(R.string.wifi_password_incorrect_error)
-                  .setPositiveButton(android.R.string.ok, null)
-                  .show();
-          return;
-      }
-
-      if (!passwordIsEmpty) {
-          mState.setPassword(password);
-      }
-    }
-
-    private void handleSave() {
-        replaceStateWithWifiLayerInstance();
-
-        String ssid = mSsidEdit.getText().toString();
-        String password = mPasswordEdit.getText().toString();
-        
-        mState.setSsid(ssid);
-        
-        int securityType = getSecurityTypeFromSpinner();
-
-        if (!TextUtils.isEmpty(password) && (securityType != SECURITY_WEP)) {
-            mState.setPassword(password);
-        }
-
-        switch (securityType) {
-            case SECURITY_PSK: {
-                mState.setSecurity(AccessPointState.PSK);
-                break;
-            }
-
-            case SECURITY_AUTO: {
-                break;
-            }
-
-            case SECURITY_WEP: {
-                mState.setSecurity(AccessPointState.WEP);
-                mState.setPassword(password, WEP_TYPE_VALUES[
-                        mWepTypeSpinner.getSelectedItemPosition()]);
-                    break;
-            }
-
-            case SECURITY_EAP:
-                mState.setSecurity(AccessPointState.EAP);
-                break;
-
-            case SECURITY_NONE:
-            default:
-                mState.setSecurity(AccessPointState.OPEN);
-                break;
-        }
-
-        if (mState.isEnterprise() && !mState.configured) {
-            updateEnterpriseFields();
-        }
-
-        if (!mWifiLayer.saveNetwork(mState)) {
-            return;
-        }
-        
-        // Connect right away if they've touched it
-        if (!mWifiLayer.connectToNetwork(mState)) {
-            return;
-        }
-        
-    }
-    
-    private int getSelectionIndex(String[] array, String selection) {
-        if(selection != null) {
-            for (int i = 0 ; i < array.length ; i++) {
-                if (selection.contains(array[i])) return i;
-            }
-        }
-        return 0;
-    }
-
-    private int getSelectionIndex(int arrayResId, String selection) {
-        return getSelectionIndex(
-            getContext().getResources().getStringArray(arrayResId), selection);
-    }
-
-    private void updateEnterpriseFields() {
-        int i;
-        String value;
-        for (i = AccessPointState.IDENTITY ;
-                i <= AccessPointState.ANONYMOUS_IDENTITY ; i++) {
-            value = mEnterpriseTextFields[i].getText().toString();
-            if (!TextUtils.isEmpty(value)) {
-                mState.setEnterpriseField(i, value);
-            }
-        }
-        Spinner spinner = mClientCertSpinner;
-        int index = spinner.getSelectedItemPosition();
-        if (index != (spinner.getCount() - 1)) {
-            String key = (String) spinner.getSelectedItem();
-            mState.setEnterpriseField(AccessPointState.CLIENT_CERT,
-                    KEYSTORE_HEADER + Credentials.USER_CERTIFICATE + key);
-            mState.setEnterpriseField(AccessPointState.PRIVATE_KEY,
-                    KEYSTORE_HEADER + Credentials.USER_PRIVATE_KEY + key);
-        }
-        spinner = mCaCertSpinner;
-        index = spinner.getSelectedItemPosition();
-        if (index != (spinner.getCount() - 1)) {
-            String key = (String) spinner.getSelectedItem();
-            mState.setEnterpriseField(AccessPointState.CA_CERT,
-                    KEYSTORE_HEADER + Credentials.CA_CERTIFICATE + key);
-        }
-        mState.setSecurity(AccessPointState.EAP);
-        mState.setEap(mEapSpinner.getSelectedItemPosition());
-        mState.setPhase2((String) mPhase2Spinner.getSelectedItem());
-    }
-
-    /**
-     * Replaces our {@link #mState} with the equal WifiLayer instance.  This is useful after
-     * we unparceled the state previously and before we are calling methods on {@link #mWifiLayer}.
-     * 
-     * @return Whether WifiLayer was able to find an equal state in its set.
-     */
-    private boolean replaceStateWithWifiLayerInstance() {
-        AccessPointState state = mWifiLayer.getWifiLayerApInstance(mState);
-        if (state == null) {
-            return false;
-        }
-        
-        mState = state;
-        return true;
-    }
-    
-    private int getSecurityTypeFromSpinner() {
-        int position = mSecuritySpinner.getSelectedItemPosition();
-        // If there is no AUTO choice, the position needs 1 added to get
-        // to the proper spinner position -> security constants mapping
-        return mAutoSecurityAllowed ? position : position + 1;
-    }
-    
-    private String getEnteredPassword() {
-        return mPasswordEdit != null ? mPasswordEdit.getText().toString() : null;
-    }
-    
-    /**
-     * Call the one you want to hide first.
-     */
-    private void setWepVisible(boolean visible) {
-        setGenericPasswordVisible(visible);
-        int visibility = visible ? View.VISIBLE : View.GONE;
-        mWepTypeSpinner.setVisibility(visibility);
-    }
-    
-    /**
-     * @see #setWepVisible(boolean)
-     */
-    private void setGenericPasswordVisible(boolean visible) {
-        int visibility = visible ? View.VISIBLE : View.GONE;
-        mPasswordText.setVisibility(visibility);
-        mPasswordEdit.setVisibility(visibility);
-        mShowPasswordCheckBox.setVisibility(visibility);
-    }
-
-    private void setEnterpriseFieldsVisible(boolean visible) {
-        int visibility = visible ? View.VISIBLE : View.GONE;
-        mEnterpriseView.setVisibility(visibility);
-        if (visible) {
-            setWepVisible(false);
-        }
-        if (mMode != MODE_CONFIGURE) {
-            mSsidText.setVisibility(View.GONE);
-            mSsidEdit.setVisibility(View.GONE);
-            mSecurityText.setVisibility(View.GONE);
-            mSecuritySpinner.setVisibility(View.GONE);
-        }
-    }
-
-    public void onItemSelected(AdapterView parent, View view, int position, long id) {
-        if (parent == mSecuritySpinner) {
-            handleSecurityChange(getSecurityTypeFromSpinner());
-        }
-    }
-
-    public void onNothingSelected(AdapterView parent) {
-    }
-
-    private void handleSecurityChange(int security) {
-        setEnterpriseFieldsVisible(false);
-        switch (security) {
-            
-            case SECURITY_NONE: {
-                setWepVisible(false);
-                setGenericPasswordVisible(false);
-                break;
-            }
-            
-            case SECURITY_WEP: {
-                setGenericPasswordVisible(false);
-                setWepVisible(true);
-                updatePasswordCaption(AccessPointState.WEP);
-                break;
-            }
-            
-            case SECURITY_AUTO: {
-                setWepVisible(false);
-                setGenericPasswordVisible(mState.hasSecurity());
-                // Shows the generic 'wireless password'
-                updatePasswordCaption(AccessPointState.PSK);
-                break;
-            }
-
-            case SECURITY_PSK: {
-                setWepVisible(false);
-                setGenericPasswordVisible(true);
-                // Both WPA and WPA2 show the same caption, so either is ok
-                updatePasswordCaption(AccessPointState.PSK);
-                break;
-            }
-            case SECURITY_EAP: {
-                // Unlock the keystore if it is not unlocked yet.
-                if (mKeyStore.test() != KeyStore.NO_ERROR) {
-                    Credentials.getInstance().unlock(getContext());
-                    return;
-                }
-                enableEnterpriseFields();
-                break;
-            }
-        }
-    }
-
-    private static int getSignalResId(int signal) {
-        switch (WifiManager.calculateSignalLevel(signal, 4)) {
-            case 0: {
-                return R.string.wifi_signal_0;
-            }
-            case 1: {
-                return R.string.wifi_signal_1;
-            }
-            case 2: {
-                return R.string.wifi_signal_2;
-            }
-            case 3: {
-                return R.string.wifi_signal_3;
-            }
-        }
-        
-        return 0;
-    }
-    
-
-    public void onClick(View v) {
-        if (v == mShowPasswordCheckBox) {
-            setShowPassword(mShowPasswordCheckBox.isChecked());
-        }
-    }
-    
-    private void setShowPassword(boolean showPassword) {
-        if (mPasswordEdit != null) {
-            mPasswordEdit.setInputType(InputType.TYPE_CLASS_TEXT |
-                    (showPassword ? InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
-                            : InputType.TYPE_TEXT_VARIATION_PASSWORD));
-        }
-    }
-    
-}
diff --git a/src/com/android/settings/wifi/AccessPointPreference.java b/src/com/android/settings/wifi/AccessPointPreference.java
deleted file mode 100644
index 6dd5492..0000000
--- a/src/com/android/settings/wifi/AccessPointPreference.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2007 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.R;
-
-import android.net.wifi.WifiManager;
-import android.preference.Preference;
-import android.view.View;
-import android.widget.ImageView;
-
-public class AccessPointPreference extends Preference implements
-        AccessPointState.AccessPointStateCallback {
-    
-    // UI states
-    private static final int[] STATE_ENCRYPTED = { R.attr.state_encrypted };
-    private static final int[] STATE_EMPTY = { };
-    
-    // Signal strength indicator
-    private static final int UI_SIGNAL_LEVELS = 4;
-
-    private AccessPointState mState;
-
-    public AccessPointPreference(WifiSettings wifiSettings, AccessPointState state) {
-        super(wifiSettings, null);
-        
-        mState = state;
-        
-        setWidgetLayoutResource(R.layout.preference_widget_wifi_signal);
-        
-        state.setCallback(this);
-        
-        refresh();
-    }
-    
-    public void refresh() {
-        setTitle(mState.getHumanReadableSsid());
-        setSummary(mState.getSummarizedStatus());
-
-        notifyChanged();
-    }
-    
-    public void refreshAccessPointState() {
-        refresh();
-        
-        // The ordering of access points could have changed due to the state change, so
-        // re-evaluate ordering
-        notifyHierarchyChanged();
-    }
-
-    @Override
-    protected void onBindView(View view) {
-        super.onBindView(view);
-
-        ImageView signal = (ImageView) view.findViewById(R.id.signal);
-        if (mState.seen) {
-            signal.setImageResource(R.drawable.wifi_signal);
-            signal.setImageState(mState.hasSecurity() ? STATE_ENCRYPTED : STATE_EMPTY, true);
-            signal.setImageLevel(getUiSignalLevel());
-        } else {
-            signal.setImageDrawable(null);
-        }
-    }
-
-    private int getUiSignalLevel() {
-        return mState != null ? WifiManager.calculateSignalLevel(mState.signal, UI_SIGNAL_LEVELS)
-                : 0; 
-    }
-
-    /**
-     * Returns the {@link AccessPointState} associated with this preference.
-     * @return The {@link AccessPointState}.
-     */
-    public AccessPointState getAccessPointState() {
-        return mState;
-    }
-    
-    @Override
-    public int compareTo(Preference another) {
-        if (!(another instanceof AccessPointPreference)) {
-            // Let normal preferences go before us.
-            // NOTE: we should only be compared to Preference in our
-            //       category.
-            return 1;
-        }
-        
-        return mState.compareTo(((AccessPointPreference) another).mState);
-    }
-    
-}
-
diff --git a/src/com/android/settings/wifi/AccessPointState.java b/src/com/android/settings/wifi/AccessPointState.java
deleted file mode 100644
index 5aefa55..0000000
--- a/src/com/android/settings/wifi/AccessPointState.java
+++ /dev/null
@@ -1,898 +0,0 @@
-/*
- * Copyright (C) 2007 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.R;
-
-import android.content.Context;
-import android.net.NetworkInfo;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiConfiguration.AuthAlgorithm;
-import android.net.wifi.WifiConfiguration.GroupCipher;
-import android.net.wifi.WifiConfiguration.KeyMgmt;
-import android.net.wifi.WifiConfiguration.PairwiseCipher;
-import android.net.wifi.WifiConfiguration.Protocol;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-import android.util.Log;
-
-public final class AccessPointState implements Comparable<AccessPointState>, Parcelable {
-
-    private static final String TAG = "AccessPointState";
-    
-    // Constants used for different security types
-    public static final String PSK = "PSK";
-    public static final String WEP = "WEP";
-    public static final String EAP = "EAP";
-    public static final String OPEN = "Open";
-
-    public static final String[] EAP_METHOD = { "PEAP", "TLS", "TTLS" };
-
-    /** String present in capabilities if the scan result is ad-hoc */
-    private static final String ADHOC_CAPABILITY = "[IBSS]";
-    /** String present in capabilities if the scan result is enterprise secured */
-    private static final String ENTERPRISE_CAPABILITY = "-EAP-";
-
-    public static final String BSSID_ANY = "any";
-    public static final int NETWORK_ID_NOT_SET = -1;
-    /** This should be used with care! */
-    static final int NETWORK_ID_ANY = -2;
-    
-    public static final int MATCH_NONE = 0;
-    public static final int MATCH_WEAK = 1;
-    public static final int MATCH_STRONG = 2;
-    public static final int MATCH_EXACT = 3;
-    
-    // Don't set these directly, use the setters.
-    public int networkId;
-    public int priority;
-    public boolean hiddenSsid;
-    public int linkSpeed;
-    public int ipAddress;
-    public String bssid;
-    public String ssid;
-    public int signal;
-    public boolean primary;
-    public boolean seen;
-    public boolean configured;
-    public NetworkInfo.DetailedState status;
-    public String security;
-    public boolean disabled;
-    
-    /**
-     * Use this for sorting based on signal strength. It is a heavily-damped
-     * time-averaged weighted signal.
-     */
-    private float signalForSorting = Float.MIN_VALUE;
-    
-    private static final float DAMPING_FACTOR = 0.2f;
-    
-    /**
-     * This will be a user entered password, and NOT taken from wpa_supplicant
-     * (since it would give us *)
-     */
-    private String mPassword; 
-    private boolean mConfigHadPassword;
-    
-    public static final int WEP_PASSWORD_AUTO = 0;
-    public static final int WEP_PASSWORD_ASCII = 1;
-    public static final int WEP_PASSWORD_HEX = 2;
-    private int mWepPasswordType;
-
-    /* Enterprise Fields */
-    public static final int IDENTITY = 0;
-    public static final int ANONYMOUS_IDENTITY = 1;
-    public static final int CLIENT_CERT = 2;
-    public static final int CA_CERT = 3;
-    public static final int PRIVATE_KEY = 4;
-    public static final int MAX_ENTRPRISE_FIELD = 5;
-    private String mEnterpriseFields[] = new String[MAX_ENTRPRISE_FIELD];
-    private String mEap;
-    private String mPhase2;
-
-    private Context mContext;
-
-    /**
-     * If > 0, don't refresh (changes are being batched), use
-     * {@link #blockRefresh()} and {@link #unblockRefresh()} only.
-     */
-    private int mBlockRefresh;
-    /**
-     * This will be set by {@link #requestRefresh} and shouldn't be written to
-     * elsewhere.
-     */
-    private boolean mNeedsRefresh;    
-    
-    private AccessPointStateCallback mCallback;
-    
-    private StringBuilder mSummaryBuilder = new StringBuilder();
-    
-    interface AccessPointStateCallback {
-        void refreshAccessPointState();
-    }
-    
-    public AccessPointState(Context context) {
-        this();
-        
-        setContext(context);
-    }
-
-    private AccessPointState() {
-        bssid = BSSID_ANY;
-        ssid = "";
-        networkId = NETWORK_ID_NOT_SET;
-        hiddenSsid = false;
-    }
-
-    void setContext(Context context) {
-        mContext = context;
-    }
-
-    public void setNetworkId(int networkId) {
-        this.networkId = networkId;
-    }
-    
-    public void setBssid(String bssid) {
-        if (bssid != null) {
-            // If the BSSID is a wildcard, do NOT let a specific BSSID replace it
-            if (!this.bssid.equals(BSSID_ANY)) {
-                this.bssid = bssid;
-            }
-        }
-    }
-
-    private String getWpaSupplicantBssid() {
-        return bssid.equals(BSSID_ANY) ? null : bssid;
-    }
-    
-    public static String convertToQuotedString(String string) {
-        if (TextUtils.isEmpty(string)) {
-            return "";
-        }
-        
-        final int lastPos = string.length() - 1;
-        if (lastPos < 0 || (string.charAt(0) == '"' && string.charAt(lastPos) == '"')) {
-            return string;
-        }
-        
-        return "\"" + string + "\"";
-    }
-    
-    public void setPrimary(boolean primary) {
-        if (this.primary != primary) {
-            this.primary = primary;
-            requestRefresh();
-        }
-    }
-    
-    public void setSeen(boolean seen) {
-        if (this.seen != seen) {
-            this.seen = seen;
-            requestRefresh();
-        }
-    }
-    
-    public void setDisabled(boolean disabled) {
-        if (this.disabled != disabled) {
-            this.disabled = disabled;
-            requestRefresh();
-        }
-    }
-    
-    public void setSignal(int signal) {
-
-        if (signalForSorting == Float.MIN_VALUE) {
-            signalForSorting = signal;
-        } else {
-            signalForSorting = (DAMPING_FACTOR * signal) + ((1-DAMPING_FACTOR) * signalForSorting);
-        }
-
-        if (this.signal != signal) {
-            this.signal = signal;
-            requestRefresh();
-        }
-    }
-    
-    public String getHumanReadableSsid() {
-        if (TextUtils.isEmpty(ssid)) {
-            return "";
-        }
-        
-        final int lastPos = ssid.length() - 1;
-        if (ssid.charAt(0) == '"' && ssid.charAt(lastPos) == '"') {
-            return ssid.substring(1, lastPos);
-        }
-        
-        return ssid;
-    }
-    
-    public void setSsid(String ssid) {
-        if (ssid != null) {
-            this.ssid = convertToQuotedString(ssid);
-            requestRefresh();
-        }
-    }
-    
-    public void setPriority(int priority) {
-        if (this.priority != priority) {
-            this.priority = priority;
-            requestRefresh();
-        }
-    }
-
-    public void setHiddenSsid(boolean hiddenSsid) {
-        if (this.hiddenSsid != hiddenSsid) {
-            this.hiddenSsid = hiddenSsid;
-            requestRefresh();
-        }
-    }
-
-    public void setLinkSpeed(int linkSpeed) {
-        if (this.linkSpeed != linkSpeed) {
-            this.linkSpeed = linkSpeed;
-            requestRefresh();
-        }
-    }
-    
-    public void setIpAddress(int address) {
-        if (ipAddress != address) {
-            ipAddress = address;
-            requestRefresh();
-        }
-    }
-    
-    public void setConfigured(boolean configured) {
-        if (this.configured != configured) {
-            this.configured = configured;
-            requestRefresh();
-        }
-    }
-    
-    public void setStatus(NetworkInfo.DetailedState status) {
-        if (this.status != status) {
-            this.status = status;
-            requestRefresh();
-        }
-    }
-
-    public boolean isEnterprise() {
-        return (AccessPointState.EAP.equals(security));
-    }
-
-    public void setSecurity(String security) {
-        if (TextUtils.isEmpty(this.security) || !this.security.equals(security)) {
-            this.security = security;
-            requestRefresh();
-        }
-    }
-
-    public boolean hasSecurity() {
-        return security != null && !security.contains(OPEN);
-    }
-    
-    public String getHumanReadableSecurity() {
-        if (security.equals(OPEN)) return mContext.getString(R.string.wifi_security_open);
-        else if (security.equals(WEP)) return mContext.getString(R.string.wifi_security_wep);
-        else if (security.equals(PSK)) return mContext.getString(R.string.wifi_security_psk);
-        else if (security.equals(EAP)) return mContext.getString(R.string.wifi_security_eap);
-
-        return mContext.getString(R.string.wifi_security_unknown);
-    }
-    
-    public void updateFromScanResult(ScanResult scanResult) {
-        blockRefresh();
-        
-        // We don't keep specific AP BSSIDs and instead leave that as wildcard
-        
-        setSeen(true);
-        setSsid(scanResult.SSID);
-        if (networkId == NETWORK_ID_NOT_SET) {
-            // Since ScanResults don't cross-reference network ID, we set it as a wildcard
-            setNetworkId(NETWORK_ID_ANY);
-        }
-        setSignal(scanResult.level);
-        setSecurity(getScanResultSecurity(scanResult));
-        unblockRefresh();
-    }
-    
-    /**
-     * @return The security of a given {@link ScanResult}.
-     */
-    public static String getScanResultSecurity(ScanResult scanResult) {
-        final String cap = scanResult.capabilities;
-        final String[] securityModes = { WEP, PSK, EAP };
-        for (int i = securityModes.length - 1; i >= 0; i--) {
-            if (cap.contains(securityModes[i])) {
-                return securityModes[i];
-            }
-        }
-        
-        return OPEN;
-    }
-    
-    /**
-     * @return Whether the given ScanResult represents an adhoc network.
-     */
-    public static boolean isAdhoc(ScanResult scanResult) {
-        return scanResult.capabilities.contains(ADHOC_CAPABILITY);
-    }
-    
-    /**
-     * @return Whether the given ScanResult has enterprise security.
-     */
-    public static boolean isEnterprise(ScanResult scanResult) {
-        return scanResult.capabilities.contains(ENTERPRISE_CAPABILITY);
-    }
-    
-    public void updateFromWifiConfiguration(WifiConfiguration wifiConfig) {
-        if (wifiConfig != null) {
-            blockRefresh();
-            setBssid(wifiConfig.BSSID);
-            setNetworkId(wifiConfig.networkId);
-            setPriority(wifiConfig.priority);
-            setHiddenSsid(wifiConfig.hiddenSSID);
-            setSsid(wifiConfig.SSID);
-            setConfigured(true);
-            setDisabled(wifiConfig.status == WifiConfiguration.Status.DISABLED);
-            parseWifiConfigurationSecurity(wifiConfig);
-            unblockRefresh();
-        }
-    }
-    
-    public void setPassword(String password) {
-        setPassword(password, WEP_PASSWORD_AUTO);
-    }
-    
-    public void setPassword(String password, int wepPasswordType) {
-        mPassword = password;
-        mWepPasswordType = wepPasswordType;
-    }
-
-    /* For Enterprise Fields */
-    public void setEnterpriseField(int field, String value) {
-        if ((value != null) && (field >= 0) && (field < MAX_ENTRPRISE_FIELD)) {
-            this.mEnterpriseFields[field] = value;
-            requestRefresh();
-        }
-    }
-
-    public void setPhase2(String phase2) {
-        if (!TextUtils.isEmpty(phase2) && (!phase2.equals("None"))) {
-            mPhase2 = phase2;
-        }
-    }
-
-    public String getPhase2() {
-        return mPhase2;
-    }
-
-    public void setEap(int method) {
-        mEap =  EAP_METHOD[method];
-        requestRefresh();
-    }
-
-    public String getEap() {
-        return mEap;
-    }
-    public String getEnterpriseField(int field) {
-        if(field >=0 && field < MAX_ENTRPRISE_FIELD) {
-            return mEnterpriseFields[field];
-        }
-        return null;
-    }
-
-    public boolean hasPassword() {
-        return !TextUtils.isEmpty(mPassword) || mConfigHadPassword; 
-    }
-    
-    private static boolean hasPassword(WifiConfiguration wifiConfig) {
-        return !TextUtils.isEmpty(wifiConfig.preSharedKey)
-                || !TextUtils.isEmpty(wifiConfig.wepKeys[0])
-                || !TextUtils.isEmpty(wifiConfig.wepKeys[1])
-                || !TextUtils.isEmpty(wifiConfig.wepKeys[2])
-                || !TextUtils.isEmpty(wifiConfig.wepKeys[3]);        
-    }
-    
-    private void parseWifiConfigurationSecurity(WifiConfiguration wifiConfig) {
-        setSecurity(getWifiConfigurationSecurity(wifiConfig));
-        mConfigHadPassword = hasPassword(wifiConfig);
-    }
-    
-    /**
-     * @return The security of a given {@link WifiConfiguration}.
-     */
-    public static String getWifiConfigurationSecurity(WifiConfiguration wifiConfig) {
-        if (!TextUtils.isEmpty(wifiConfig.eap.value())) {
-            return EAP;
-        } else if (!TextUtils.isEmpty(wifiConfig.preSharedKey)) {
-            return PSK;
-        } else if (!TextUtils.isEmpty(wifiConfig.wepKeys[0])) {
-            return WEP;
-        }
-        return OPEN;
-    }
-    
-    public void updateFromWifiInfo(WifiInfo wifiInfo, NetworkInfo.DetailedState state) {
-        if (wifiInfo != null) {
-            blockRefresh();
-            setBssid(wifiInfo.getBSSID());
-            setLinkSpeed(wifiInfo.getLinkSpeed());
-            setNetworkId(wifiInfo.getNetworkId());
-            setIpAddress(wifiInfo.getIpAddress());
-            setSsid(wifiInfo.getSSID());
-            if (state != null) {
-                setStatus(state);
-            }
-            setHiddenSsid(wifiInfo.getHiddenSSID());
-            unblockRefresh();
-        }
-    }
-    
-    /**
-     * @return Whether this AP can be connected to at the moment.
-     */
-    public boolean isConnectable() {
-        return !primary && seen;
-    }
-
-    /**
-     * @return Whether this AP can be forgotten at the moment.
-     */
-    public boolean isForgetable() {
-        return configured;
-    }
-    
-    /**
-     * Updates the state as if it were never configured.
-     * <p>
-     * Note: This will not pass the forget call to the Wi-Fi API.
-     */
-    public void forget() {
-        blockRefresh();
-        setConfigured(false);
-        setNetworkId(NETWORK_ID_NOT_SET);
-        setPrimary(false);
-        setStatus(null);
-        setDisabled(false);
-        unblockRefresh();
-    }
-    
-    public void updateWifiConfiguration(WifiConfiguration config) {
-        config.BSSID = getWpaSupplicantBssid();
-        config.priority = priority;
-        config.hiddenSSID = hiddenSsid;
-        config.SSID = convertToQuotedString(ssid);
-        config.eap.setValue(mEap);
-
-        if (!TextUtils.isEmpty(mPhase2)) {
-            config.phase2.setValue(convertToQuotedString("auth=" + mPhase2));
-        } else {
-            config.phase2.setValue(null);
-        }
-        if (!TextUtils.isEmpty(mEnterpriseFields[IDENTITY])) {
-            config.identity.setValue(
-                    convertToQuotedString(mEnterpriseFields[IDENTITY]));
-        } else {
-            config.identity.setValue(null);
-        }
-        if (!TextUtils.isEmpty(mEnterpriseFields[ANONYMOUS_IDENTITY])) {
-            config.anonymous_identity.setValue(convertToQuotedString(
-                    mEnterpriseFields[ANONYMOUS_IDENTITY]));
-        } else {
-            config.anonymous_identity.setValue(null);
-        }
-        if (!TextUtils.isEmpty(mEnterpriseFields[CLIENT_CERT])) {
-            config.client_cert.setValue(convertToQuotedString(
-                    mEnterpriseFields[CLIENT_CERT]));
-        } else {
-            config.client_cert.setValue(null);
-        }
-        if (!TextUtils.isEmpty(mEnterpriseFields[CA_CERT])) {
-            config.ca_cert.setValue(convertToQuotedString(
-                    mEnterpriseFields[CA_CERT]));
-        } else {
-            config.ca_cert.setValue(null);
-        }
-        if (!TextUtils.isEmpty(mEnterpriseFields[PRIVATE_KEY])) {
-            config.private_key.setValue(convertToQuotedString(
-                    mEnterpriseFields[PRIVATE_KEY]));
-        } else {
-            config.private_key.setValue(null);
-        }
-        setupSecurity(config);
-    }
-    
-    private void setupSecurity(WifiConfiguration config) {
-        config.allowedAuthAlgorithms.clear();
-        config.allowedGroupCiphers.clear();
-        config.allowedKeyManagement.clear();
-        config.allowedPairwiseCiphers.clear();
-        config.allowedProtocols.clear();
-        
-        if (TextUtils.isEmpty(security)) {
-            security = OPEN;
-            Log.w(TAG, "Empty security, assuming open");
-        }
-        
-        if (security.equals(WEP)) {
-            // If password is empty, it should be left untouched
-            if (!TextUtils.isEmpty(mPassword)) {
-                if (mWepPasswordType == WEP_PASSWORD_AUTO) {
-                    if (isHexWepKey(mPassword)) {
-                        config.wepKeys[0] = mPassword;
-                    } else {
-                        config.wepKeys[0] = convertToQuotedString(mPassword);
-                    }
-                } else {
-                    config.wepKeys[0] = mWepPasswordType == WEP_PASSWORD_ASCII
-                            ? convertToQuotedString(mPassword)
-                            : mPassword;
-                }
-            }
-            config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
-            config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
-            config.allowedKeyManagement.set(KeyMgmt.NONE);
-            config.wepTxKeyIndex = 0;
-        } else if (security.equals(PSK)){
-            // If password is empty, it should be left untouched
-            if (!TextUtils.isEmpty(mPassword)) {
-                if (mPassword.length() == 64 && isHex(mPassword)) {
-                    // Goes unquoted as hex
-                    config.preSharedKey = mPassword;
-                } else {
-                    // Goes quoted as ASCII
-                    config.preSharedKey = convertToQuotedString(mPassword);
-                }
-            }
-        } else if (security.equals(EAP)) {
-            config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
-            config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
-            if (!TextUtils.isEmpty(mPassword)) {
-                config.password.setValue(convertToQuotedString(mPassword));
-            }
-        } else if (security.equals(OPEN)) {
-            config.allowedKeyManagement.set(KeyMgmt.NONE);
-        }
-    }
-    
-    private static boolean isHexWepKey(String wepKey) {
-        final int len = wepKey.length();
-        
-        // WEP-40, WEP-104, and some vendors using 256-bit WEP (WEP-232?)
-        if (len != 10 && len != 26 && len != 58) {
-            return false;
-        }
-        
-        return isHex(wepKey);
-    }
-    
-    private static boolean isHex(String key) {
-        for (int i = key.length() - 1; i >= 0; i--) {
-            final char c = key.charAt(i);
-            if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f')) {
-                return false;
-            }
-        }
-        
-        return true;
-    }
-    
-    public void setCallback(AccessPointStateCallback callback) {
-        mCallback = callback;
-    }
-    
-    void blockRefresh() {
-        mBlockRefresh++;
-    }
-    
-    void unblockRefresh() {
-        if (--mBlockRefresh == 0 && mNeedsRefresh) {
-            requestRefresh();
-        }
-    }
-    
-    private void requestRefresh() {
-        if (mBlockRefresh > 0) {
-            mNeedsRefresh = true;
-            return;
-        }
-        
-        if (mCallback != null) {
-            mCallback.refreshAccessPointState();
-        }
-        
-        mNeedsRefresh = false;
-    }
-    
-    /**
-     * {@inheritDoc}
-     * @see #hashCode()
-     * @see #equals(Object)
-     */
-    public int matches(int otherNetworkId, String otherBssid, String otherSsid,
-            String otherSecurity) {
-        
-        // Whenever this method is touched, please ensure #equals and #hashCode
-        // still work with the changes here!
-        
-        if (otherSsid == null) {
-            if (WifiLayer.LOGV) {
-                Log.w(TAG, "BSSID: " + otherBssid + ", SSID: " + otherSsid);
-            }
-            return MATCH_NONE;
-        }
-
-        /*
-         * If we both have 'security' set, it must match (an open network still
-         * has 'security' set to OPEN)
-         */
-        if (security != null && otherSecurity != null) {
-            if (!security.equals(otherSecurity)) {
-                return MATCH_NONE;
-            }
-        }
-        
-        // WifiConfiguration gives an empty bssid as a BSSID wildcard
-        if (TextUtils.isEmpty(otherBssid)) {
-            otherBssid = AccessPointState.BSSID_ANY;
-        }
-
-        final boolean networkIdMatches = networkId == otherNetworkId;
-        if (!networkIdMatches && networkId != NETWORK_ID_ANY && otherNetworkId != NETWORK_ID_ANY) {
-            // Network IDs don't match (e.g., 1 & 2 or unset & 1) and neither is a wildcard
-            return MATCH_NONE;
-        }
-        
-        if (networkIdMatches && otherNetworkId != NETWORK_ID_NOT_SET
-                && otherNetworkId != NETWORK_ID_ANY) {
-            // Network ID matches (they're set to the same ID)
-            return MATCH_EXACT;
-        }
-        
-        // So now, network IDs aren't set or at least one is a wildcard 
-        
-        final boolean bssidMatches = bssid.equals(otherBssid);
-        final boolean otherBssidIsWildcard = otherBssid.equals(BSSID_ANY);
-        if (bssidMatches && !otherBssidIsWildcard) {
-            // BSSID matches (and neither is a wildcard)
-            return MATCH_STRONG;
-        }
-
-        if (!bssidMatches && !bssid.equals(BSSID_ANY) && !otherBssidIsWildcard) {
-            // BSSIDs don't match (e.g., 00:24:21:21:42:12 & 42:12:44:21:22:52)
-            // and neither is a wildcard
-            return MATCH_NONE;
-        }
-        
-        // So now, BSSIDs are both wildcards
-        
-        final boolean ssidMatches = ssid.equals(otherSsid); 
-        if (ssidMatches) {
-            // SSID matches
-            return MATCH_WEAK;
-        }
-
-        return MATCH_NONE;
-    }
-    
-    /**
-     * {@inheritDoc}
-     * @see #matches(int, String, String)
-     * @see #equals(Object)
-     */
-    @Override
-    public int hashCode() {
-        // Two equal() objects must have same hashCode.
-        // With Wi-Fi, the broadest match is if two SSIDs are the same.  The finer-grained matches
-        // imply this (for example, the same network IDs means the same WifiConfiguration which
-        // means the same SSID).
-        // See #matches for the exact matching algorithm we use.
-        return ssid != null ? ssid.hashCode() : 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @see #matches(int, String, String)
-     * @see #hashCode()
-     */
-    @Override
-    public boolean equals(Object o) {
-        if (!o.getClass().equals(getClass())) {
-            return false;
-        }
-        
-        final AccessPointState other = (AccessPointState) o;
-
-        // To see which conditions cause two AccessPointStates to be equal, see
-        // where #matches returns MATCH_WEAK or greater.
-        
-        return matches(other.networkId, other.bssid, other.ssid, other.security) >= MATCH_WEAK;
-    }
-
-    public int matchesWifiConfiguration(WifiConfiguration wifiConfig) {
-        String security = getWifiConfigurationSecurity(wifiConfig);
-        return matches(wifiConfig.networkId, wifiConfig.BSSID, wifiConfig.SSID, security);
-    }
-    
-    String getSummarizedStatus() {
-        StringBuilder sb = mSummaryBuilder;
-        sb.delete(0, sb.length());
-        
-        if (primary && status != null) {
-            buildSummary(sb, WifiStatus.getPrintable(mContext, status), true);
-            
-        } else if (!seen) {
-            buildSummary(sb, mContext.getString(R.string.summary_not_in_range), true);
-
-            // Remembered comes second in this case
-            if (!primary && configured) {
-                buildSummary(sb, mContext.getString(R.string.summary_remembered), true);
-            }
-            
-        } else {
-            if (configured && disabled) {
-                // The connection failure overrides all in this case
-                return mContext.getString(R.string.summary_connection_failed);
-            }
-
-            // Remembered comes first in this case
-            if (!primary && configured) {
-                buildSummary(sb, mContext.getString(R.string.summary_remembered), true);
-            }
-            
-            // If it is seen (and not the primary), show the security type
-            String verboseSecurity = getVerboseSecurity();
-            if (verboseSecurity != null) {
-                buildSummary(sb, verboseSecurity, true);
-            }
-        }
-        
-        return sb.toString();
-    }
-    
-    private String getVerboseSecurity() {
-        if (WEP.equals(security)) {
-            return mContext.getString(R.string.wifi_security_verbose_wep);
-        } else if (PSK.equals(security)) {
-            return mContext.getString(R.string.wifi_security_verbose_psk);
-        } else if (EAP.equals(security)) {
-            return mContext.getString(R.string.wifi_security_verbose_eap);
-        } else {
-            return null;
-        }
-    }
-
-    private void buildSummary(StringBuilder sb, String string, boolean autoUpperCaseFirstLetter) {
-        if (sb.length() == 0) {
-            if (autoUpperCaseFirstLetter && string.length() > 1
-                    && Character.isLowerCase(string.charAt(0))
-                    && !Character.isUpperCase(string.charAt(1))) {
-                sb.append(Character.toUpperCase(string.charAt(0))).append(string, 1,
-                        string.length());
-            } else {
-                sb.append(string);
-            }
-        } else {
-            sb.append(", ");
-            sb.append(string);
-        }
-    }
-
-    public int compareTo(AccessPointState other) {
-        // This ranks the states for displaying in the AP list, not for
-        // connecting to (wpa_supplicant does that using the WifiConfiguration's
-        // priority field).
-        
-        // Clarity > efficiency, of this logic:
-        int comparison;
-        
-        // Primary
-        comparison = (other.primary ? 1 : 0) - (primary ? 1 : 0);
-        if (comparison != 0) return comparison;
-        
-        // Currently seen (similar to, but not always the same as within range)
-        comparison = (other.seen ? 1 : 0) - (seen ? 1 : 0);
-        if (comparison != 0) return comparison;
-
-        // Configured
-        comparison = (other.configured ? 1 : 0) - (configured ? 1 : 0);
-        if (comparison != 0) return comparison;
-
-        if (!configured) {
-            // Neither are configured
-
-            // Open network
-            comparison = (hasSecurity() ? 1 : 0) - (other.hasSecurity() ? 1 : 0);
-            if (comparison != 0) return comparison;
-        }
-
-        // Signal strength
-        comparison = (int) (other.signalForSorting - signalForSorting);
-        if (comparison != 0) return comparison;
-
-        // Alphabetical
-        return ssid.compareToIgnoreCase(other.ssid);
-    }
-
-    public String toString() {
-        return ssid + " (" + bssid + ", " + networkId + ", " + super.toString() + ")";
-    }
-    
-    /** Implement the Parcelable interface */
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeString(bssid);
-        dest.writeInt(configured ? 1 : 0);
-        dest.writeInt(ipAddress);
-        dest.writeInt(linkSpeed);
-        dest.writeInt(networkId);
-        dest.writeInt(primary ? 1 : 0);
-        dest.writeInt(priority);
-        dest.writeInt(hiddenSsid ? 1 : 0);
-        dest.writeString(security);
-        dest.writeInt(seen ? 1 : 0);
-        dest.writeInt(disabled ? 1 : 0);
-        dest.writeInt(signal);
-        dest.writeString(ssid);
-        dest.writeString(status != null ? status.toString() : null);
-        dest.writeString(mPassword);
-        dest.writeInt(mConfigHadPassword ? 1 : 0);
-        dest.writeInt(mWepPasswordType);
-    }
-
-    /** Implement the Parcelable interface */
-    public int describeContents() {
-        return 0;
-    }
-
-    /** Implement the Parcelable interface */
-    public static final Creator<AccessPointState> CREATOR =
-        new Creator<AccessPointState>() {
-            public AccessPointState createFromParcel(Parcel in) {
-                AccessPointState state = new AccessPointState();
-                state.bssid = in.readString();
-                state.configured = in.readInt() == 1;
-                state.ipAddress = in.readInt();
-                state.linkSpeed = in.readInt();
-                state.networkId = in.readInt();
-                state.primary = in.readInt() == 1;
-                state.priority = in.readInt();
-                state.hiddenSsid = in.readInt() == 1;
-                state.security = in.readString();
-                state.seen = in.readInt() == 1;
-                state.disabled = in.readInt() == 1;
-                state.signal = in.readInt();
-                state.ssid = in.readString();
-                String statusStr = in.readString();
-                if (statusStr != null) {
-                    state.status = NetworkInfo.DetailedState.valueOf(statusStr);
-                }
-                state.mPassword = in.readString();
-                state.mConfigHadPassword = in.readInt() == 1;
-                state.mWepPasswordType = in.readInt();
-                return state;
-            }
-
-            public AccessPointState[] newArray(int size) {
-                return new AccessPointState[size];
-            }
-        };
-
-        
-}
diff --git a/src/com/android/settings/wifi/AdvancedSettings.java b/src/com/android/settings/wifi/AdvancedSettings.java
index ff485de..7d62f8e 100644
--- a/src/com/android/settings/wifi/AdvancedSettings.java
+++ b/src/com/android/settings/wifi/AdvancedSettings.java
@@ -34,6 +34,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.widget.Toast;
+import android.os.SystemProperties;
 
 public class AdvancedSettings extends PreferenceActivity
         implements Preference.OnPreferenceChangeListener {
@@ -57,6 +58,9 @@
     private static final int MENU_ITEM_SAVE = Menu.FIRST;
     private static final int MENU_ITEM_CANCEL = Menu.FIRST + 1;
     
+    //Tracks ro.debuggable (1 on userdebug builds)
+    private static int DEBUGGABLE;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -71,19 +75,24 @@
             preference.setOnPreferenceChangeListener(this);
         }
 
-//        /*
-//         * Fix the Run-time IllegalStateException that ListPreference requires an entries
-//         * array and an entryValues array, this exception occurs when user open/close the
-//         * slider in the Regulatory domain dialog.
-//         */
-//        initNumChannelsPreference();
+        DEBUGGABLE = SystemProperties.getInt("ro.debuggable", 0);
+
         /**
          * Remove user control of regulatory domain
-         * channel count settings
+         * channel count settings in non userdebug builds
          */
-        Preference chanPref = findPreference(KEY_NUM_CHANNELS);
-        if (chanPref != null) {
-            getPreferenceScreen().removePreference(chanPref);
+        if (DEBUGGABLE == 1) {
+            /*
+             * Fix the Run-time IllegalStateException that ListPreference requires an entries
+             * array and an entryValues array, this exception occurs when user open/close the
+             * slider in the Regulatory domain dialog.
+             */
+            initNumChannelsPreference();
+        } else {
+            Preference chanPref = findPreference(KEY_NUM_CHANNELS);
+            if (chanPref != null) {
+              getPreferenceScreen().removePreference(chanPref);
+            }
         }
     }
     
@@ -94,9 +103,11 @@
         updateUi();
         /**
          * Remove user control of regulatory domain
-         * channel count settings
+         * channel count settings in non userdebug builds
          */
-        //initNumChannelsPreference();
+        if (DEBUGGABLE == 1) {
+            initNumChannelsPreference();
+        }
         initSleepPolicyPreference();
         refreshMacAddress();
     }
diff --git a/src/com/android/settings/wifi/Summary.java b/src/com/android/settings/wifi/Summary.java
new file mode 100644
index 0000000..6da2fa5
--- /dev/null
+++ b/src/com/android/settings/wifi/Summary.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.wifi;
+
+import com.android.settings.R;
+
+import android.content.Context;
+import android.net.NetworkInfo.DetailedState;
+import android.text.TextUtils;
+
+class Summary {
+    static String get(Context context, String ssid, DetailedState state) {
+        String[] formats = context.getResources().getStringArray((ssid == null)
+                ? R.array.wifi_status : R.array.wifi_status_with_ssid);
+        int index = state.ordinal();
+
+        if (index >= formats.length || formats[index].length() == 0) {
+            return null;
+        }
+        return String.format(formats[index], ssid);
+    }
+
+    static String get(Context context, DetailedState state) {
+        return get(context, null, state);
+    }
+}
diff --git a/src/com/android/settings/wifi/WifiAPITest.java b/src/com/android/settings/wifi/WifiAPITest.java
new file mode 100644
index 0000000..4a9a075
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiAPITest.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2009 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.R;
+
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.wifi.WifiManager;
+
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.text.Editable;
+import android.widget.EditText;
+
+
+/**
+ * Provide an interface for testing out the Wifi API
+ */
+public class WifiAPITest extends PreferenceActivity implements
+Preference.OnPreferenceClickListener {
+
+    private static final String TAG = "WifiAPITest";
+    private int netid;
+
+    //============================
+    // Preference/activity member variables
+    //============================
+
+    private static final String KEY_DISCONNECT = "disconnect";
+    private static final String KEY_DISABLE_NETWORK = "disable_network";
+    private static final String KEY_ENABLE_NETWORK = "enable_network";
+
+    private Preference mWifiDisconnect;
+    private Preference mWifiDisableNetwork;
+    private Preference mWifiEnableNetwork;
+
+    private WifiManager mWifiManager;
+
+
+    //============================
+    // Activity lifecycle
+    //============================
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        onCreatePreferences();
+        mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+    }
+
+
+    private void onCreatePreferences() {
+        addPreferencesFromResource(R.layout.wifi_api_test);
+
+        final PreferenceScreen preferenceScreen = getPreferenceScreen();
+
+        mWifiDisconnect = (Preference) preferenceScreen.findPreference(KEY_DISCONNECT);
+        mWifiDisconnect.setOnPreferenceClickListener(this);
+
+        mWifiDisableNetwork = (Preference) preferenceScreen.findPreference(KEY_DISABLE_NETWORK);
+        mWifiDisableNetwork.setOnPreferenceClickListener(this);
+
+        mWifiEnableNetwork = (Preference) preferenceScreen.findPreference(KEY_ENABLE_NETWORK);
+        mWifiEnableNetwork.setOnPreferenceClickListener(this);
+
+    }
+
+    //============================
+    // Preference callbacks
+    //============================
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        super.onPreferenceTreeClick(preferenceScreen, preference);
+        return false;
+    }
+
+    /**
+     *  Implements OnPreferenceClickListener interface
+     */
+    public boolean onPreferenceClick(Preference pref) {
+        if (pref == mWifiDisconnect) {
+            mWifiManager.disconnect();
+        } else if (pref == mWifiDisableNetwork) {
+            AlertDialog.Builder alert = new AlertDialog.Builder(this);
+            alert.setTitle("Input");
+            alert.setMessage("Enter Network ID");
+            // Set an EditText view to get user input
+            final EditText input = new EditText(this);
+            alert.setView(input);
+            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                    Editable value = input.getText();
+                    netid = Integer.parseInt(value.toString());
+                    mWifiManager.disableNetwork(netid);
+                    }
+                    });
+            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                    // Canceled.
+                    }
+                    });
+            alert.show();
+        } else if (pref == mWifiEnableNetwork) {
+            AlertDialog.Builder alert = new AlertDialog.Builder(this);
+            alert.setTitle("Input");
+            alert.setMessage("Enter Network ID");
+            // Set an EditText view to get user input
+            final EditText input = new EditText(this);
+            alert.setView(input);
+            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                    Editable value = input.getText();
+                    netid =  Integer.parseInt(value.toString());
+                    mWifiManager.enableNetwork(netid, false);
+                    }
+                    });
+            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                    // Canceled.
+                    }
+                    });
+            alert.show();
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/settings/wifi/WifiConfigInfo.java b/src/com/android/settings/wifi/WifiConfigInfo.java
new file mode 100644
index 0000000..2ed4f02
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiConfigInfo.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2009 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 android.app.Activity;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.widget.TextView;
+import android.net.wifi.WifiConfiguration;
+import java.util.List;
+
+import com.android.settings.R;
+
+
+/**
+ * Configuration details saved by the user on the WifiSettings screen
+ */
+public class WifiConfigInfo extends Activity {
+
+    private static final String TAG = "WifiConfigInfo";
+
+    private TextView mConfigList;
+    private WifiManager mWifiManager;
+
+    //============================
+    // Activity lifecycle
+    //============================
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+        setContentView(R.layout.wifi_config_info);
+        mConfigList = (TextView) findViewById(R.id.config_list);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        final List<WifiConfiguration> wifiConfigs = mWifiManager.getConfiguredNetworks();
+        StringBuffer configList  = new StringBuffer();
+        for (int i = wifiConfigs.size() - 1; i >= 0; i--) {
+            configList.append(wifiConfigs.get(i));
+        }
+        mConfigList.setText(configList);
+    }
+
+}
diff --git a/src/com/android/settings/wifi/WifiDialog.java b/src/com/android/settings/wifi/WifiDialog.java
new file mode 100644
index 0000000..9250ee0
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiDialog.java
@@ -0,0 +1,362 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.wifi;
+
+import com.android.settings.R;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.net.NetworkInfo.DetailedState;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.AuthAlgorithm;
+import android.net.wifi.WifiConfiguration.KeyMgmt;
+import android.net.wifi.WifiInfo;
+import android.os.Bundle;
+import android.security.Credentials;
+import android.security.KeyStore;
+import android.text.Editable;
+import android.text.InputType;
+import android.text.TextWatcher;
+import android.text.format.Formatter;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+class WifiDialog extends AlertDialog implements View.OnClickListener,
+        TextWatcher, AdapterView.OnItemSelectedListener {
+    private static final String KEYSTORE_SPACE = "keystore://";
+
+    static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE;
+    static final int BUTTON_FORGET = DialogInterface.BUTTON_NEUTRAL;
+
+    final boolean edit;
+    private final DialogInterface.OnClickListener mListener;
+    private final AccessPoint mAccessPoint;
+
+    private View mView;
+    private TextView mSsid;
+    private int mSecurity;
+    private TextView mPassword;
+
+    private Spinner mEapMethod;
+    private Spinner mEapCaCert;
+    private Spinner mEapUserCert;
+    private TextView mEapIdentity;
+    private TextView mEapAnonymous;
+
+    static boolean requireKeyStore(WifiConfiguration config) {
+        String values[] = {config.ca_cert.value(), config.client_cert.value(),
+                config.private_key.value()};
+        for (String value : values) {
+            if (value != null && value.startsWith(KEYSTORE_SPACE)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    WifiDialog(Context context, DialogInterface.OnClickListener listener,
+            AccessPoint accessPoint, boolean edit) {
+        super(context);
+        this.edit = edit;
+        mListener = listener;
+        mAccessPoint = accessPoint;
+        mSecurity = (accessPoint == null) ? AccessPoint.SECURITY_NONE : accessPoint.security;
+    }
+
+    WifiConfiguration getConfig() {
+        if (mAccessPoint != null && mAccessPoint.networkId != -1 && !edit) {
+            return null;
+        }
+
+        WifiConfiguration config = new WifiConfiguration();
+
+        if (mAccessPoint == null) {
+            config.SSID = mSsid.getText().toString();
+            // If the user adds a network manually, assume that it is hidden.
+            config.hiddenSSID = true;
+        } else if (mAccessPoint.networkId == -1) {
+            config.SSID = mAccessPoint.ssid;
+        } else {
+            config.networkId = mAccessPoint.networkId;
+        }
+
+        switch (mSecurity) {
+            case AccessPoint.SECURITY_NONE:
+                config.allowedKeyManagement.set(KeyMgmt.NONE);
+                return config;
+
+            case AccessPoint.SECURITY_WEP:
+                config.allowedKeyManagement.set(KeyMgmt.NONE);
+                config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
+                if (mPassword.length() != 0) {
+                    int length = mPassword.length();
+                    String password = mPassword.getText().toString();
+                    // WEP-40, WEP-104, and 256-bit WEP (WEP-232?)
+                    if ((length == 10 || length == 26 || length == 58) &&
+                            password.matches("[0-9A-Fa-f]*")) {
+                        config.wepKeys[0] = password;
+                    } else {
+                        config.wepKeys[0] = '"' + password + '"';
+                    }
+                }
+                return config;
+
+            case AccessPoint.SECURITY_PSK:
+                config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
+                config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
+                if (mPassword.length() != 0) {
+                    String password = mPassword.getText().toString();
+                    if (password.matches("[0-9A-Fa-f]{64}")) {
+                        config.preSharedKey = password;
+                    } else {
+                        config.preSharedKey = '"' + password + '"';
+                    }
+                }
+                return config;
+
+            case AccessPoint.SECURITY_EAP:
+                config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
+                config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
+                config.eap.setValue((String) mEapMethod.getSelectedItem());
+                config.ca_cert.setValue((mEapCaCert.getSelectedItemPosition() == 0) ? "" :
+                        KEYSTORE_SPACE + Credentials.CA_CERTIFICATE +
+                        (String) mEapCaCert.getSelectedItem());
+                config.client_cert.setValue((mEapUserCert.getSelectedItemPosition() == 0) ? "" :
+                        KEYSTORE_SPACE + Credentials.USER_CERTIFICATE +
+                        (String) mEapUserCert.getSelectedItem());
+                config.private_key.setValue((mEapUserCert.getSelectedItemPosition() == 0) ? "" :
+                        KEYSTORE_SPACE + Credentials.PRIVATE_KEY +
+                        (String) mEapUserCert.getSelectedItem());
+                config.identity.setValue((mEapIdentity.length() == 0) ? "" :
+                        mEapIdentity.getText().toString());
+                config.anonymous_identity.setValue((mEapAnonymous.length() == 0) ? "" :
+                        mEapAnonymous.getText().toString());
+                if (mPassword.length() != 0) {
+                    config.password.setValue(mPassword.getText().toString());
+                }
+                return config;
+        }
+        return null;
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
+        setView(mView);
+        setInverseBackgroundForced(true);
+
+        Context context = getContext();
+        Resources resources = context.getResources();
+
+        if (mAccessPoint == null) {
+            setTitle(R.string.wifi_add_network);
+            mView.findViewById(R.id.type).setVisibility(View.VISIBLE);
+            mSsid = (TextView) mView.findViewById(R.id.ssid);
+            mSsid.addTextChangedListener(this);
+            ((Spinner) mView.findViewById(R.id.security)).setOnItemSelectedListener(this);
+            setButton(BUTTON_SUBMIT, context.getString(R.string.wifi_save), mListener);
+        } else {
+            setTitle(mAccessPoint.ssid);
+            ViewGroup group = (ViewGroup) mView.findViewById(R.id.info);
+
+            DetailedState state = mAccessPoint.getState();
+            if (state != null) {
+                addRow(group, R.string.wifi_status, Summary.get(getContext(), state));
+            }
+
+            String[] type = resources.getStringArray(R.array.wifi_security);
+            addRow(group, R.string.wifi_security, type[mAccessPoint.security]);
+
+            int level = mAccessPoint.getLevel();
+            if (level != -1) {
+                String[] signal = resources.getStringArray(R.array.wifi_signal);
+                addRow(group, R.string.wifi_signal, signal[level]);
+            }
+
+            WifiInfo info = mAccessPoint.getInfo();
+            if (info != null) {
+                addRow(group, R.string.wifi_speed, info.getLinkSpeed() + WifiInfo.LINK_SPEED_UNITS);
+                // TODO: fix the ip address for IPv6.
+                int address = info.getIpAddress();
+                if (address != 0) {
+                    addRow(group, R.string.wifi_ip_address, Formatter.formatIpAddress(address));
+                }
+            }
+
+            if (mAccessPoint.networkId == -1 || edit) {
+                showSecurityFields();
+            }
+
+            if (edit) {
+                setButton(BUTTON_SUBMIT, context.getString(R.string.wifi_save), mListener);
+            } else {
+                if (state == null && level != -1) {
+                    setButton(BUTTON_SUBMIT, context.getString(R.string.wifi_connect), mListener);
+                }
+                if (mAccessPoint.networkId != -1) {
+                    setButton(BUTTON_FORGET, context.getString(R.string.wifi_forget), mListener);
+                }
+            }
+        }
+
+        setButton(DialogInterface.BUTTON_NEGATIVE,
+                context.getString(R.string.wifi_cancel), mListener);
+
+        super.onCreate(savedInstanceState);
+
+        if (getButton(BUTTON_SUBMIT) != null) {
+            validate();
+        }
+    }
+
+    private void addRow(ViewGroup group, int name, String value) {
+        View row = getLayoutInflater().inflate(R.layout.wifi_dialog_row, group, false);
+        ((TextView) row.findViewById(R.id.name)).setText(name);
+        ((TextView) row.findViewById(R.id.value)).setText(value);
+        group.addView(row);
+    }
+
+    private void validate() {
+        // TODO: make sure this is complete.
+        if ((mSsid != null && mSsid.length() == 0) ||
+                ((mAccessPoint == null || mAccessPoint.networkId == -1) &&
+                ((mSecurity == AccessPoint.SECURITY_WEP && mPassword.length() == 0) ||
+                (mSecurity == AccessPoint.SECURITY_PSK && mPassword.length() < 8)))) {
+            getButton(BUTTON_SUBMIT).setEnabled(false);
+        } else {
+            getButton(BUTTON_SUBMIT).setEnabled(true);
+        }
+    }
+
+    public void onClick(View view) {
+        mPassword.setInputType(
+                InputType.TYPE_CLASS_TEXT | (((CheckBox) view).isChecked() ?
+                InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD :
+                InputType.TYPE_TEXT_VARIATION_PASSWORD));
+    }
+
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+    }
+
+    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+    }
+    
+    public void afterTextChanged(Editable editable) {
+        validate();
+    }
+
+    public void onItemSelected(AdapterView parent, View view, int position, long id) {
+        mSecurity = position;
+        showSecurityFields();
+        validate();
+    }
+
+    public void onNothingSelected(AdapterView parent) {
+    }
+
+    private void showSecurityFields() {
+        if (mSecurity == AccessPoint.SECURITY_NONE) {
+            mView.findViewById(R.id.fields).setVisibility(View.GONE);
+            return;
+        }
+        mView.findViewById(R.id.fields).setVisibility(View.VISIBLE);
+
+        if (mPassword == null) {
+            mPassword = (TextView) mView.findViewById(R.id.password);
+            mPassword.addTextChangedListener(this);
+            ((CheckBox) mView.findViewById(R.id.show_password)).setOnClickListener(this);
+
+            if (mAccessPoint != null && mAccessPoint.networkId != -1) {
+                mPassword.setHint(R.string.wifi_unchanged);
+            }
+        }
+
+        if (mSecurity != AccessPoint.SECURITY_EAP) {
+            mView.findViewById(R.id.eap).setVisibility(View.GONE);
+            return;
+        }
+        mView.findViewById(R.id.eap).setVisibility(View.VISIBLE);
+
+        if (mEapMethod == null) {
+            mEapMethod = (Spinner) mView.findViewById(R.id.method);
+            mEapCaCert = (Spinner) mView.findViewById(R.id.ca_cert);
+            mEapUserCert = (Spinner) mView.findViewById(R.id.user_cert);
+            mEapIdentity = (TextView) mView.findViewById(R.id.identity);
+            mEapAnonymous = (TextView) mView.findViewById(R.id.anonymous);
+
+            loadCertificates(mEapCaCert, Credentials.CA_CERTIFICATE);
+            loadCertificates(mEapUserCert, Credentials.USER_PRIVATE_KEY);
+
+            if (mAccessPoint != null && mAccessPoint.networkId != -1) {
+                WifiConfiguration config = mAccessPoint.getConfig();
+                setSelection(mEapMethod, config.eap.value());
+                setCertificate(mEapCaCert, Credentials.CA_CERTIFICATE,
+                        config.ca_cert.value());
+                setCertificate(mEapUserCert, Credentials.USER_PRIVATE_KEY,
+                        config.private_key.value());
+                mEapIdentity.setText(config.identity.value());
+                mEapAnonymous.setText(config.anonymous_identity.value());
+            }
+        }
+    }
+
+    private void loadCertificates(Spinner spinner, String prefix) {
+        String[] certs = KeyStore.getInstance().saw(prefix);
+        Context context = getContext();
+        String unspecified = context.getString(R.string.wifi_unspecified);
+
+        if (certs == null || certs.length == 0) {
+            certs = new String[] {unspecified};
+        } else {
+            String[] array = new String[certs.length + 1];
+            array[0] = unspecified;
+            System.arraycopy(certs, 0, array, 1, certs.length);
+            certs = array;
+        }
+
+        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
+                context, android.R.layout.simple_spinner_item, certs);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        spinner.setAdapter(adapter);
+    }
+
+    private void setCertificate(Spinner spinner, String prefix, String cert) {
+        prefix = KEYSTORE_SPACE + prefix;
+        if (cert != null && cert.startsWith(prefix)) {
+            setSelection(spinner, cert.substring(prefix.length()));
+        }
+    }
+
+    private void setSelection(Spinner spinner, String value) {
+        if (value != null) {
+            ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinner.getAdapter();
+            for (int i = adapter.getCount() - 1; i >= 0; --i) {
+                if (value.equals(adapter.getItem(i))) {
+                    spinner.setSelection(i);
+                    break;
+                }
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java
index 10a672b..6c55136 100644
--- a/src/com/android/settings/wifi/WifiEnabler.java
+++ b/src/com/android/settings/wifi/WifiEnabler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * 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.
@@ -16,174 +16,127 @@
 
 package com.android.settings.wifi;
 
-import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;
-import static android.net.wifi.WifiManager.WIFI_STATE_DISABLING;
-import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
-import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING;
-import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN;
-
 import com.android.settings.R;
-import com.android.settings.AirplaneModeEnabler;
+import com.android.settings.WirelessSettings;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.NetworkInfo;
+import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.preference.Preference;
 import android.preference.CheckBoxPreference;
 import android.provider.Settings;
 import android.text.TextUtils;
-import android.util.Config;
-import android.util.Log;
+import android.widget.Toast;
 
 public class WifiEnabler implements Preference.OnPreferenceChangeListener {
-    
-    private static final boolean LOCAL_LOGD = Config.LOGD || WifiLayer.LOGV;
-    private static final String TAG = "SettingsWifiEnabler";
-    
     private final Context mContext; 
-    private final WifiManager mWifiManager;
-    private final CheckBoxPreference mWifiCheckBoxPref;
+    private final CheckBoxPreference mCheckBox;
     private final CharSequence mOriginalSummary;
-    
-    private final IntentFilter mWifiStateFilter;
-    private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
 
+    private final WifiManager mWifiManager;
+    private final IntentFilter mIntentFilter;
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
-                handleWifiStateChanged(
-                        intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WIFI_STATE_UNKNOWN),
-                        intent.getIntExtra(WifiManager.EXTRA_PREVIOUS_WIFI_STATE,
-                                WIFI_STATE_UNKNOWN));
-            } else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                handleNetworkStateChanged(
-                        (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO));
+            String action = intent.getAction();
+            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
+                handleWifiStateChanged(intent.getIntExtra(
+                        WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN));
+            } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
+                handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState)
+                        intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE)));
+            } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
+                handleStateChanged(((NetworkInfo) intent.getParcelableExtra(
+                        WifiManager.EXTRA_NETWORK_INFO)).getDetailedState());
             }
         }
     };
-    
-    public WifiEnabler(Context context, WifiManager wifiManager,
-            CheckBoxPreference wifiCheckBoxPreference) {
+
+    public WifiEnabler(Context context, CheckBoxPreference checkBox) {
         mContext = context;
-        mWifiCheckBoxPref = wifiCheckBoxPreference;
-        mWifiManager = wifiManager;
-        
-        mOriginalSummary = wifiCheckBoxPreference.getSummary();
-        wifiCheckBoxPreference.setPersistent(false);
-        
-        mWifiStateFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        mWifiStateFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        mCheckBox = checkBox;
+        mOriginalSummary = checkBox.getSummary();
+        checkBox.setPersistent(false);
+
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        // The order matters! We really should not depend on this. :(
+        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
     }
 
     public void resume() {
-        int state = mWifiManager.getWifiState();
-        // This is the widget enabled state, not the preference toggled state
-        mWifiCheckBoxPref.setEnabled(state == WIFI_STATE_ENABLED || state == WIFI_STATE_DISABLED
-                || state == WIFI_STATE_UNKNOWN);
-
-        mContext.registerReceiver(mWifiStateReceiver, mWifiStateFilter);
-        mWifiCheckBoxPref.setOnPreferenceChangeListener(this);
+        // Wi-Fi state is sticky, so just let the receiver update UI
+        mContext.registerReceiver(mReceiver, mIntentFilter);
+        mCheckBox.setOnPreferenceChangeListener(this);
     }
     
     public void pause() {
-        mContext.unregisterReceiver(mWifiStateReceiver);
-        mWifiCheckBoxPref.setOnPreferenceChangeListener(null);
+        mContext.unregisterReceiver(mReceiver);
+        mCheckBox.setOnPreferenceChangeListener(null);
     }
     
     public boolean onPreferenceChange(Preference preference, Object value) {
-        // Turn on/off Wi-Fi
-        setWifiEnabled((Boolean) value);
-        
+        boolean enable = (Boolean) value;
+    
+        // Show toast message if Wi-Fi is not allowed in airplane mode
+        if (enable && !WirelessSettings
+                .isRadioAllowed(mContext, Settings.System.RADIO_WIFI)) {
+            Toast.makeText(mContext, R.string.wifi_in_airplane_mode,
+                    Toast.LENGTH_SHORT).show();
+            return false;
+        }
+
+        if (mWifiManager.setWifiEnabled(enable)) {
+            mCheckBox.setEnabled(false);
+        } else {
+            mCheckBox.setSummary(R.string.wifi_error);
+        }
+
         // Don't update UI to opposite state until we're sure
         return false;
     }
     
-    private void setWifiEnabled(final boolean enable) {
-        // Disable button
-        mWifiCheckBoxPref.setEnabled(false);
-        
-        if (!mWifiManager.setWifiEnabled(enable)) {
-            mWifiCheckBoxPref.setSummary(enable ? R.string.error_starting : R.string.error_stopping);
-        }
-    }
-    
-    private void handleWifiStateChanged(int wifiState, int previousWifiState) {
-
-        if (LOCAL_LOGD) {
-            Log.d(TAG, "Received wifi state changed from "
-                    + getHumanReadableWifiState(previousWifiState) + " to "
-                    + getHumanReadableWifiState(wifiState));
-        }
-        
-        if (wifiState == WIFI_STATE_DISABLED || wifiState == WIFI_STATE_ENABLED) {
-            mWifiCheckBoxPref.setChecked(wifiState == WIFI_STATE_ENABLED);
-            mWifiCheckBoxPref
-                    .setSummary(wifiState == WIFI_STATE_DISABLED ? mOriginalSummary : null);
-            
-            mWifiCheckBoxPref.setEnabled(isWifiAllowed(mContext));
-            
-        } else if (wifiState == WIFI_STATE_DISABLING || wifiState == WIFI_STATE_ENABLING) {
-            mWifiCheckBoxPref.setSummary(wifiState == WIFI_STATE_ENABLING ? R.string.wifi_starting
-                    : R.string.wifi_stopping);
-            
-        } else if (wifiState == WIFI_STATE_UNKNOWN) {
-            int message = R.string.wifi_error;
-            if (previousWifiState == WIFI_STATE_ENABLING) message = R.string.error_starting;
-            else if (previousWifiState == WIFI_STATE_DISABLING) message = R.string.error_stopping;
-            
-            mWifiCheckBoxPref.setChecked(false);
-            mWifiCheckBoxPref.setSummary(message);
-            mWifiCheckBoxPref.setEnabled(true);
-        }
-    }
-
-    private void handleNetworkStateChanged(NetworkInfo networkInfo) {
-
-        if (LOCAL_LOGD) {
-            Log.d(TAG, "Received network state changed to " + networkInfo);
-        }
-        
-        if (mWifiManager.isWifiEnabled()) {
-            String summary = WifiStatus.getStatus(mContext, 
-                    mWifiManager.getConnectionInfo().getSSID(), networkInfo.getDetailedState());
-            mWifiCheckBoxPref.setSummary(summary);
-        }
-    }
-
-    private static boolean isWifiAllowed(Context context) {
-        // allowed if we are not in airplane mode
-        if (!AirplaneModeEnabler.isAirplaneModeOn(context)) {
-            return true;
-        }
-        // allowed if wifi is not in AIRPLANE_MODE_RADIOS
-        String radios = Settings.System.getString(context.getContentResolver(),
-                Settings.System.AIRPLANE_MODE_RADIOS);
-        if (radios == null || !radios.contains(Settings.System.RADIO_WIFI)) {
-            return true;
-        }
-        // allowed if wifi is in AIRPLANE_MODE_TOGGLEABLE_RADIOS
-        radios = Settings.System.getString(context.getContentResolver(),
-                Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
-        return (radios != null && radios.contains(Settings.System.RADIO_WIFI));
-    }
-
-    private static String getHumanReadableWifiState(int wifiState) {
-        switch (wifiState) {
-            case WIFI_STATE_DISABLED:
-                return "Disabled";
-            case WIFI_STATE_DISABLING:
-                return "Disabling";
-            case WIFI_STATE_ENABLED:
-                return "Enabled";
-            case WIFI_STATE_ENABLING:
-                return "Enabling";
-            case WIFI_STATE_UNKNOWN:
-                return "Unknown";
+    private void handleWifiStateChanged(int state) {
+        switch (state) {
+            case WifiManager.WIFI_STATE_ENABLING:
+                mCheckBox.setSummary(R.string.wifi_starting);
+                mCheckBox.setEnabled(false);
+                break;
+            case WifiManager.WIFI_STATE_ENABLED:
+                mCheckBox.setChecked(true);
+                mCheckBox.setSummary(null);
+                mCheckBox.setEnabled(true);
+                break;
+            case WifiManager.WIFI_STATE_DISABLING:
+                mCheckBox.setSummary(R.string.wifi_stopping);
+                mCheckBox.setEnabled(false);
+                break;
+            case WifiManager.WIFI_STATE_DISABLED:
+                mCheckBox.setChecked(false);
+                mCheckBox.setSummary(mOriginalSummary);
+                mCheckBox.setEnabled(true);
+                break;
             default:
-                return "Some other state!";    
+                mCheckBox.setChecked(false);
+                mCheckBox.setSummary(R.string.wifi_error);
+                mCheckBox.setEnabled(true);
+        }
+    }
+
+    private void handleStateChanged(NetworkInfo.DetailedState state) {
+        // WifiInfo is valid if and only if Wi-Fi is enabled.
+        // Here we use the state of the check box as an optimization.
+        if (state != null && mCheckBox.isChecked()) {
+            WifiInfo info = mWifiManager.getConnectionInfo();
+            if (info != null) {
+                mCheckBox.setSummary(Summary.get(mContext, info.getSSID(), state));
+            }
         }
     }
 }
diff --git a/src/com/android/settings/wifi/WifiInfo.java b/src/com/android/settings/wifi/WifiInfo.java
new file mode 100644
index 0000000..291a495
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiInfo.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2009 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.R;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+
+/**
+ * Wifi information menu item on the diagnostic screen
+ */
+public class WifiInfo extends PreferenceActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.testing_wifi_settings);
+    }
+
+}
diff --git a/src/com/android/settings/wifi/WifiLayer.java b/src/com/android/settings/wifi/WifiLayer.java
deleted file mode 100644
index ce518e1..0000000
--- a/src/com/android/settings/wifi/WifiLayer.java
+++ /dev/null
@@ -1,1316 +0,0 @@
-/*
- * Copyright (C) 2007 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 static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;
-import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
-
-import com.android.settings.R;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.NetworkInfo;
-import android.net.NetworkInfo.DetailedState;
-import android.net.NetworkInfo.State;
-import android.net.wifi.ScanResult;
-import android.net.wifi.SupplicantState;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Config;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * Helper class for abstracting Wi-Fi.
- * <p>
- * Client must call {@link #onCreate()}, {@link #onCreatedCallback()},
- * {@link #onPause()}, {@link #onResume()}.
- */
-public class WifiLayer {
-    
-    private static final String TAG = "SettingsWifiLayer";
-    static final boolean LOGV = false || Config.LOGV;
-    
-    //============================
-    // Other member variables
-    //============================
-    
-    private Context mContext;
-    private Callback mCallback;
-
-    static final int MESSAGE_ATTEMPT_SCAN = 1;
-    private Handler mHandler = new MyHandler();
-    
-    //============================
-    // Wifi member variables
-    //============================
-    
-    private WifiManager mWifiManager;
-    private IntentFilter mIntentFilter;
-    private List<AccessPointState> mApScanList = new ArrayList<AccessPointState>();
-    private List<AccessPointState> mApOtherList = new ArrayList<AccessPointState>();
-    private AccessPointState mCurrentPrimaryAp;
-    
-    /** The last access point that we were authenticating with. */
-    private AccessPointState mLastAuthenticatingAp;
-    
-    /** The delay between scans when we're continually scanning. */
-    private static final int CONTINUOUS_SCAN_DELAY_MS = 6000; 
-    /** On failure, the maximum retries for scanning. */
-    private static final int SCAN_MAX_RETRY = 5;
-    /** On failure, the delay between each scan retry. */
-    private static final int SCAN_RETRY_DELAY_MS = 1000;
-    /** On failure, the number of retries so far. */
-    private int mScanRetryCount = 0;
-    /**
-     * Whether we're currently obtaining an address. Continuous scanning will be
-     * disabled in this state.
-     */
-    private boolean mIsObtainingAddress;
-
-    /**
-     * See {@link android.provider.Settings.Secure#WIFI_NUM_OPEN_NETWORKS_KEPT}.
-     */
-    private int WIFI_NUM_OPEN_NETWORKS_KEPT;
-    /**
-     * Once the highest priority exceeds this value, all networks will be
-     * wrapped around starting at 0. This is so another client of the Wi-Fi
-     * API can have access points that aren't managed by us. (If the other
-     * client wants lower-priority access points than ours, it can use negative
-     * priority.)
-     */
-    private static final int HIGHEST_PRIORITY_MAX_VALUE = 99999;
-    /**
-     * Never access directly, only the related methods should.
-     */
-    private int mNextHighestPriority;
-    
-    /**
-     * This is used to track when the user wants to connect to a specific AP. We
-     * disable all other APs, set this to true, and let wpa_supplicant connect.
-     * Once we get a network state change, we re-enable the rest of them.
-     */
-    private boolean mReenableApsOnNetworkStateChange = false;
-
-    /**
-     * The current supplicant state, as broadcasted.
-     */
-    private SupplicantState mCurrentSupplicantState;
-    
-    //============================
-    // Inner classes
-    //============================
-    
-    interface Callback {
-        void onError(int messageResId);
-        
-        /**
-         * Called when an AP is added or removed.
-         * 
-         * @param ap The AP.
-         * @param added {@code true} if added, {@code false} if removed.
-         */
-        void onAccessPointSetChanged(AccessPointState ap, boolean added);
-        
-        /**
-         * Called when the scanning status changes.
-         * 
-         * @param started {@code true} if the scanning just started,
-         *            {@code false} if it just ended.
-         */
-        void onScanningStatusChanged(boolean started);
-
-        /**
-         * Called when the access points should be enabled or disabled. This is
-         * called from both wpa_supplicant being connected/disconnected and Wi-Fi
-         * being enabled/disabled.
-         * 
-         * @param enabled {@code true} if they should be enabled, {@code false}
-         *            if they should be disabled.
-         */
-        void onAccessPointsStateChanged(boolean enabled);   
-        
-        /**
-         * Called when there is trouble authenticating and the retry-password
-         * dialog should be shown.
-         * 
-         * @param ap The access point.
-         */
-        void onRetryPassword(AccessPointState ap);
-    }
-    
-    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
-
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            final String action = intent.getAction();
-            if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                handleNetworkStateChanged(
-                        (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO),
-                        intent.getStringExtra(WifiManager.EXTRA_BSSID));
-            } else if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
-                handleScanResultsAvailable();
-            } else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
-                handleSupplicantConnectionChanged(
-                        intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false));
-            } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
-                handleSupplicantStateChanged(
-                        (SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE),
-                        intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR),
-                        intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 0));
-            } else if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
-                handleWifiStateChanged(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
-                        WifiManager.WIFI_STATE_UNKNOWN));
-            } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
-                handleSignalChanged(intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, 0));
-            } else if (action.equals(WifiManager.NETWORK_IDS_CHANGED_ACTION)) {
-                handleNetworkIdsChanged();
-            }
-        }
-    };
-    
-    /**
-     * If using this class, make sure to call the callbacks of this class, such
-     * as {@link #onCreate()}, {@link #onCreatedCallback()},
-     * {@link #onPause()}, {@link #onResume()}.
-     * 
-     * @param context The context.
-     * @param callback The interface that will be invoked when events from this
-     *            class are generated.
-     */
-    public WifiLayer(Context context, Callback callback) {
-        mContext = context;
-        mCallback = callback;
-    }
-    
-    //============================
-    // Lifecycle
-    //============================
-
-    /**
-     * The client MUST call this.
-     * <p>
-     * This shouldn't have any dependency on the callback.
-     */
-    public void onCreate() {
-        mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
-        
-        mIntentFilter = new IntentFilter();
-        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
-        mIntentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
-        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
-        
-        WIFI_NUM_OPEN_NETWORKS_KEPT = Settings.Secure.getInt(mContext.getContentResolver(),
-            Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT, 10);
-    }
-    
-    /**
-     * The client MUST call this.
-     * <p>
-     * Callback is ready, this can do whatever it wants with it.
-     */
-    public void onCreatedCallback() {
-        if (isWifiEnabled()) {
-            refreshAll(false);
-        }
-    }
-    
-    /**
-     * The client MUST call this.
-     * 
-     * @see android.app.Activity#onResume
-     */
-    public void onResume() {
-        mContext.registerReceiver(mReceiver, mIntentFilter);
-        
-        if (isWifiEnabled()) {
-            // Kick start the continual scan
-            queueContinuousScan();
-        }
-    }
-
-    /**
-     * The client MUST call this.
-     * 
-     * @see android.app.Activity#onPause
-     */
-    public void onPause() {
-        mContext.unregisterReceiver(mReceiver);
-        
-        attemptReenableAllAps();
-        
-        removeFutureScans();
-    }
-    
-    //============================
-    // "Public" API
-    //============================
-
-    /**
-     * Returns an AccessPointState instance (that we track locally in WifiLayer)
-     * for the given state. First, we check if we track the given instance. If
-     * not, we find an equal AccessPointState instance that we track.
-     * 
-     * @param state An AccessPointState instance that does not necessarily have
-     *            to be one that this WifiLayer class tracks. For example, it
-     *            could be the result of unparceling.
-     * @return An AccessPointState instance that this WifiLayer class tracks.
-     */
-    public AccessPointState getWifiLayerApInstance(AccessPointState state) {
-        synchronized (this) {
-            
-            if (hasApInstanceLocked(state)) {
-                return state;
-            }
-            
-            return findApLocked(state.networkId, state.bssid, state.ssid, state.security);
-        }
-    }
-    
-    /**
-     * Connects to the network, and creates the Wi-Fi API config if necessary.
-     * 
-     * @param state The state of the network to connect to. This MUST be an
-     *            instance that was given to you by this class. If you
-     *            constructed the instance yourself (for example, after
-     *            unparceling it), you should use
-     *            {@link #getWifiLayerApInstance(AccessPointState)}.
-     * @return Whether the operation was successful.
-     */
-    public boolean connectToNetwork(AccessPointState state) {
-        if (LOGV) {
-            Log.v(TAG, "Connecting to " + state);
-        }
-        
-        // Need WifiConfiguration for the AP
-        WifiConfiguration config = findConfiguredNetwork(state);
-
-        if (LOGV) {
-            Log.v(TAG, " Found configured network " + config);
-        }
-        
-        if (config == null) {
-            /*
-             * Connecting for the first time, need to create it. We will enable
-             * and save it below (when we set priority).
-             */
-            config = addConfiguration(state, 0);
-
-            if (config == null) {
-                Log.e(TAG, "Config is still null, even after attempting to add it.");
-                error(R.string.error_connecting);
-                return false;
-            }
-
-            /*
-             * We could reload the configured networks, but instead just
-             * shortcut and add this state to our list in memory.
-             */
-            ensureTrackingState(state);
-        } else {
-            // Make sure the configuration has the latest from the state
-            state.updateWifiConfiguration(config);
-        }
-
-        // Enable this network before we save to storage
-        if (!managerEnableNetwork(state, false)) {
-            Log.e(TAG, "Could not enable network ID " + state.networkId);
-            error(R.string.error_connecting);
-            return false;
-        }
-        
-        /*
-         * Give it highest priority, this could cause a network ID change, so do
-         * it after any modifications to the network we're connecting to
-         */
-        setHighestPriorityStateAndSave(state, config);
-        
-        /*
-         * We force supplicant to connect to this network by disabling the
-         * others. We do this AFTER we save above so this disabled flag isn't
-         * persisted.
-         */
-        mReenableApsOnNetworkStateChange = true;
-        if (!managerEnableNetwork(state, true)) {
-            Log.e(TAG, "Could not enable network ID " + state.networkId);
-            error(R.string.error_connecting);
-            return false;
-        }
-
-        if (LOGV) {
-            Log.v(TAG, " Enabled network " + state.networkId);
-        }
-
-        if (mCurrentSupplicantState == SupplicantState.DISCONNECTED ||
-                mCurrentSupplicantState == SupplicantState.SCANNING) {
-            mWifiManager.reconnect();
-        }
-        
-        // Check for too many configured open networks
-        if (!state.hasSecurity()) {
-            checkForExcessOpenNetworks();
-        }
-        
-        return true;
-    }
-    
-    /**
-     * Saves a network, and creates the Wi-Fi API config if necessary.
-     * 
-     * @param state The state of the network to save. If you constructed the
-     *            instance yourself (for example, after unparceling it), you
-     *            should use {@link #getWifiLayerApInstance(AccessPointState)}.
-     * @return Whether the operation was successful.
-     */
-    public boolean saveNetwork(AccessPointState state) {
-        WifiConfiguration config = findConfiguredNetwork(state);
-        
-        if (config == null) {
-            // if the user is adding a new network, assume that it is hidden
-            state.setHiddenSsid(true);
-
-            config = addConfiguration(state, ADD_CONFIGURATION_ENABLE);
-
-            if (config == null) {
-                Log.e(TAG, "Could not save configuration, call to addConfiguration failed.");
-                error(R.string.error_saving);
-                return false;
-            }
-            
-        } else {
-            state.updateWifiConfiguration(config);
-            if (mWifiManager.updateNetwork(config) == -1) {
-                Log.e(TAG, "Could not update configuration, call to WifiManager failed.");
-                error(R.string.error_saving);
-                return false;
-            }
-        }
-        
-        // Successfully added network, go ahead and persist
-        if (!managerSaveConfiguration()) {
-            Log.e(TAG, "Could not save configuration, call to WifiManager failed.");
-            error(R.string.error_saving);
-            return false;
-        }
-        
-        /*
-         * It's necessary to update the network id of this state because the network id
-         * could have changed after the configuration is saved. For example, if there are
-         * more than 10 saved open-networks, some older open-networks will have been be forgotten.
-         */
-        state.setNetworkId(AccessPointState.NETWORK_ID_ANY);
-        config = findConfiguredNetwork(state);
-        if (config != null) {
-            state.setNetworkId(config.networkId);
-        }
-
-        /*
-         * We could reload the configured networks, but instead just shortcut
-         * and add this state to our list in memory
-         */
-        ensureTrackingState(state);
-        
-        return true;
-    }
-    
-    /**
-     * Forgets a network.
-     * 
-     * @param state The state of the network to forget. If you constructed the
-     *            instance yourself (for example, after unparceling it), you
-     *            should use {@link #getWifiLayerApInstance(AccessPointState)}.
-     * @return Whether the operation was succesful.
-     */
-    public boolean forgetNetwork(AccessPointState state) {
-        if (!state.configured) {
-            Log.w(TAG, "Inconsistent state:  Forgetting a network that is not configured.");
-            return true;
-        }
-        
-        int oldNetworkId = state.networkId;
-        state.forget();
-        
-        if (!state.seen) {
-            // If it is not seen, it should be removed from the UI
-            removeApFromUi(state);
-        }
-                    
-        synchronized (this) {
-            mApOtherList.remove(state);
-            // It should not be removed from the scan list, since if it was
-            // there that means it's still seen
-        }
-
-        if (!mWifiManager.removeNetwork(oldNetworkId)) {
-            Log.e(TAG, "Removing network " + state.ssid + " (network ID " + oldNetworkId +
-                    ") failed.");
-            return false;
-        }
-        
-        if (!managerSaveConfiguration()) {
-            error(R.string.error_saving);
-            return false;
-        }
-
-        return true;
-    }
-    
-    /**
-     * This ensures this class is tracking the given state. This means it is in
-     * our list of access points, either in the scanned list or in the
-     * remembered list.
-     * 
-     * @param state The state that will be checked for tracking, and if not
-     *            tracking will be added to the remembered list in memory.
-     */
-    private void ensureTrackingState(AccessPointState state) {
-        synchronized (this) {
-            if (hasApInstanceLocked(state)) {
-                return;
-            }
-            
-            mApOtherList.add(state);
-        }
-    }
-    
-    /**
-     * Attempts to scan networks.  This has a retry mechanism.
-     */
-    public void attemptScan() {
-        
-        // Remove any future scans since we're scanning right now
-        removeFutureScans();
-        
-        if (!mWifiManager.isWifiEnabled()) return;
-        
-        if (!mWifiManager.startScanActive()) {
-            postAttemptScan();
-        } else {
-            mScanRetryCount = 0;
-        }
-    }
-
-    private void queueContinuousScan() {
-        mHandler.removeMessages(MESSAGE_ATTEMPT_SCAN);
-        
-        if (!mIsObtainingAddress) {
-            // Don't do continuous scan while in obtaining IP state
-            mHandler.sendEmptyMessageDelayed(MESSAGE_ATTEMPT_SCAN, CONTINUOUS_SCAN_DELAY_MS);
-        }
-    }
-    
-    private void removeFutureScans() {
-        mHandler.removeMessages(MESSAGE_ATTEMPT_SCAN);
-    }
-    
-    public boolean isWifiEnabled() {
-        return mWifiManager.isWifiEnabled();
-    }
-    
-    public void error(int messageResId) {
-        Log.e(TAG, mContext.getResources().getString(messageResId));
-        
-        if (mCallback != null) {
-            mCallback.onError(messageResId);
-        }
-    }
-    
-    //============================
-    // Wifi logic
-    //============================
-
-    private void refreshAll(boolean attemptScan) {
-        loadConfiguredAccessPoints();
-        refreshStatus();
-        
-        if (attemptScan) {
-            attemptScan();
-        }
-    }
-    
-    private void postAttemptScan() {
-        onScanningStarted();
-
-        if (++mScanRetryCount < SCAN_MAX_RETRY) {
-            // Just in case, remove previous ones first
-            removeFutureScans();
-            mHandler.sendEmptyMessageDelayed(MESSAGE_ATTEMPT_SCAN, SCAN_RETRY_DELAY_MS);
-        } else {
-            // Show an error once we run out of attempts
-            error(R.string.error_scanning);
-            onScanningEnded();
-        }
-    }
-    
-    private void onScanningStarted() {
-        if (mCallback != null) {
-            mCallback.onScanningStatusChanged(true);
-        }
-    }
-    
-    private void onScanningEnded() {
-        queueContinuousScan();
-        
-        if (mCallback != null) {
-            mCallback.onScanningStatusChanged(false);
-        }
-    }
-    
-    private void clearApLists() {
-        List<AccessPointState> accessPoints = new ArrayList<AccessPointState>();
-        
-        synchronized(this) {
-            // Clear the logic's list of access points
-            accessPoints.addAll(mApScanList);
-            accessPoints.addAll(mApOtherList);
-            mApScanList.clear();
-            mApOtherList.clear();
-        }
-        
-        for (int i = accessPoints.size() - 1; i >= 0; i--) {
-            removeApFromUi(accessPoints.get(i));
-        }
-    }
-    
-    private boolean managerSaveConfiguration() {
-        boolean retValue = mWifiManager.saveConfiguration();
-        
-        /*
-         * We need to assume the network IDs have changed, so handle this. Note:
-         * we also have a receiver on the broadcast intent in case another wifi
-         * framework client caused the change. In this case, we will handle the
-         * possible network ID change twice (but it's not too costly).
-         */
-        handleNetworkIdsChanged();
-        
-        return retValue;
-    }
-    
-    private boolean managerEnableNetwork(AccessPointState state, boolean disableOthers) {
-        if (!mWifiManager.enableNetwork(state.networkId, disableOthers)) {
-            return false;
-        }
-        
-        // Enabling was successful, make sure the state is not disabled
-        state.setDisabled(false);
-        
-        return true;
-    }
-    
-    private static final int ADD_CONFIGURATION_ENABLE = 1;
-    private static final int ADD_CONFIGURATION_SAVE = 2;
-    private WifiConfiguration addConfiguration(AccessPointState state, int flags) {
-        // Create and add
-        WifiConfiguration config = new WifiConfiguration();
-        
-        state.updateWifiConfiguration(config);
-        
-        final int networkId = mWifiManager.addNetwork(config);
-        if (networkId == -1) {
-            return null;
-        }
-        
-        state.setNetworkId(networkId);
-        state.setConfigured(true);
-        
-        // If we should, then enable it, since it comes disabled by default
-        if ((flags & ADD_CONFIGURATION_ENABLE) != 0
-                && !managerEnableNetwork(state, false)) {
-            return null;
-        }
-
-        // If we should, then save it
-        if ((flags & ADD_CONFIGURATION_SAVE) != 0 && !managerSaveConfiguration()) {
-            return null;
-        }
-
-        if (mCallback != null) {
-            mCallback.onAccessPointSetChanged(state, true);
-        }
-
-        return config;
-    }
-    
-    private WifiConfiguration findConfiguredNetwork(AccessPointState state) {
-        final List<WifiConfiguration> wifiConfigs = getConfiguredNetworks();
-        
-        for (int i = wifiConfigs.size() - 1; i >= 0; i--) {
-            final WifiConfiguration wifiConfig = wifiConfigs.get(i); 
-            if (state.matchesWifiConfiguration(wifiConfig) >= AccessPointState.MATCH_WEAK) {
-                return wifiConfig;
-            }
-        }
-        
-        return null;
-    }
-    
-    private List<WifiConfiguration> getConfiguredNetworks() {
-        final List<WifiConfiguration> wifiConfigs = mWifiManager.getConfiguredNetworks();
-        return wifiConfigs;
-    }
-    
-    /**
-     * Must call while holding the lock for the list, which is usually the
-     * WifiLayer instance.
-     */
-    private static AccessPointState findApLocked(List<AccessPointState> list, int networkId,
-            String bssid, String ssid, String security) {
-        AccessPointState ap;
-        for (int i = list.size() - 1; i >= 0; i--) {
-            ap = list.get(i);
-            if (ap.matches(networkId, bssid, ssid, security) >= AccessPointState.MATCH_WEAK) {
-                return ap;
-            }
-        }
-
-        return null;
-    }
-    
-    /**
-     * Must call while holding the lock for the lists, which is usually this
-     * WifiLayer instance.
-     */
-    private AccessPointState findApLocked(int networkId, String bssid, String ssid,
-            String security) {
-        AccessPointState ap = findApLocked(mApScanList, networkId, bssid, ssid, security);
-        if (ap == null) {
-            ap = findApLocked(mApOtherList, networkId, bssid, ssid, security);
-        }
-        return ap;
-    }
-
-    /**
-     * Returns whether we have the exact instance of the access point state
-     * given. This is useful in cases where an AccessPointState has been
-     * parceled by the client and the client is attempting to use it to
-     * connect/forget/save.
-     * <p>
-     * Must call while holding the lock for the lists, which is usually this
-     * WifiLayer instance.
-     */
-    private boolean hasApInstanceLocked(AccessPointState state) {
-        
-        for (int i = mApScanList.size() - 1; i >= 0; i--) {
-            if (mApScanList.get(i) == state) {
-                return true;
-            }
-        }
-
-        for (int i = mApOtherList.size() - 1; i >= 0; i--) {
-            if (mApOtherList.get(i) == state) {
-                return true;
-            }
-        }
-        
-        return false;
-    }
-    
-    private void loadConfiguredAccessPoints() {
-        final List<WifiConfiguration> configs = getConfiguredNetworks();
-        
-        for (int i = configs.size() - 1; i >= 0; i--) {
-            final WifiConfiguration config = configs.get(i);
-            
-            AccessPointState ap;
-            synchronized(this) {
-                ap = findApLocked(config.networkId, config.BSSID, config.SSID,
-                        AccessPointState.getWifiConfigurationSecurity(config));
-                
-                if (ap != null) {
-                    // We already know about this one
-                    continue;
-                }
-    
-                ap = new AccessPointState(mContext);
-                ap.updateFromWifiConfiguration(config);
-                if (LOGV) Log.v(TAG, "Created " + ap + " in loadConfiguredAccessPoints");
-                mApOtherList.add(ap);
-            }
-
-            // Make sure our next highest priority is greater than this
-            checkNextHighestPriority(ap.priority);
-            
-            if (mCallback != null) {
-                mCallback.onAccessPointSetChanged(ap, true);
-            }
-        }
-    }
-
-    private AccessPointState getCurrentAp() {
-        final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
-        
-        String ssid = wifiInfo.getSSID();
-        if (ssid != null) {
-            /*
-             * We pass null for security since we have a network ID (i.e., it's
-             * not a wildcard), and rely on it matching.
-             */
-            synchronized (this) {
-                return findApLocked(wifiInfo.getNetworkId(), wifiInfo.getBSSID(), ssid, null);
-            }
-        } else {
-            return null;
-        }
-    }
-    
-    private void setPrimaryAp(AccessPointState ap) {
-        synchronized (this) {
-            // Unset other
-            if (mCurrentPrimaryAp != null) {
-                mCurrentPrimaryAp.setPrimary(false);
-            }
-
-            mCurrentPrimaryAp = ap;
-        }
-
-        if (ap != null) {
-            ap.setPrimary(true);
-        }
-    }
-
-    private void attemptReenableAllAps() {
-        if (mReenableApsOnNetworkStateChange) {
-            mReenableApsOnNetworkStateChange = false;
-            enableAllAps();
-        }
-    }
-    
-    private void enableAllAps() {
-        synchronized(this) {
-            if (LOGV) {
-                Log.v(TAG, " Enabling all APs");
-            }
-            
-            enableApsLocked(mApOtherList);
-            enableApsLocked(mApScanList);
-        }
-    }
-    
-    private void enableApsLocked(List<AccessPointState> apList) {
-        for (int i = apList.size() - 1; i >= 0; i--) {
-            AccessPointState state = apList.get(i);
-            int networkId = state.networkId;
-            if (networkId != AccessPointState.NETWORK_ID_NOT_SET &&
-                    networkId != AccessPointState.NETWORK_ID_ANY) {
-                managerEnableNetwork(state, false);
-            }
-        }
-    }
-    
-    private void removeApFromUi(AccessPointState ap) {
-        if (mCallback != null) {
-            mCallback.onAccessPointSetChanged(ap, false);
-        }
-    }
-    
-    /**
-     * Sets the access point state to the highest priority.
-     * <p>
-     * If you have a list of configured networks from WifiManager, you probably
-     * shouldn't call this until you're done traversing the list.
-     * 
-     * @param state The state to set as the highest priority.
-     * @param reusableConfiguration An optional WifiConfiguration that will be
-     *            given to the WifiManager as updated data for the network ID.
-     *            This will be filled with the new priority.
-     * @return Whether the operation was successful.
-     */
-    private boolean setHighestPriorityStateAndSave(AccessPointState state,
-            WifiConfiguration reusableConfiguration) {
-
-        if (!isConsideredForHighestPriority(state)) {
-            Log.e(TAG,
-                    "Could not set highest priority on state because state is not being considered.");
-            return false;
-        }
-        
-        if (reusableConfiguration == null) {
-            reusableConfiguration = new WifiConfiguration();
-        }
-        
-        int oldPriority = reusableConfiguration.priority;
-        reusableConfiguration.priority = getNextHighestPriority();
-        reusableConfiguration.networkId = state.networkId;
-        
-        if (mWifiManager.updateNetwork(reusableConfiguration) == -1) {
-            // Rollback priority
-            reusableConfiguration.priority = oldPriority;
-            Log.e(TAG,
-                    "Could not set highest priority on state because updating the supplicant network failed.");
-            return false;
-        }
-
-        if (!managerSaveConfiguration()) {
-            reusableConfiguration.priority = oldPriority;
-            Log.e(TAG,
-                    "Could not set highest priority on state because saving config failed.");
-            return false;
-        }
-        
-        state.priority = reusableConfiguration.priority;
-        
-        if (LOGV) {
-            Log.v(TAG, " Set highest priority to "
-                    + state.priority + " from " + oldPriority);
-        }
-        
-        return true;
-    }
-
-    /**
-     * Makes sure the next highest priority is larger than the given priority.
-     */
-    private void checkNextHighestPriority(int priority) {
-        if (priority > HIGHEST_PRIORITY_MAX_VALUE || priority < 0) {
-            // This is a priority that we aren't managing
-            return;
-        }
-        
-        if (mNextHighestPriority <= priority) {
-            mNextHighestPriority = priority + 1;
-        }
-    }
-
-    /**
-     * Checks if there are too many open networks, and removes the excess ones.
-     */
-    private void checkForExcessOpenNetworks() {
-        synchronized(this) {
-            ArrayList<AccessPointState> allAps = getApsSortedByPriorityLocked();
-
-            // Walk from highest to lowest priority
-            int openConfiguredCount = 0;
-            for (int i = allAps.size() - 1; i >= 0; i--) {
-                AccessPointState state = allAps.get(i);
-                if (state.configured && !state.hasSecurity()) {
-                    openConfiguredCount++;
-                    if (openConfiguredCount > WIFI_NUM_OPEN_NETWORKS_KEPT) {
-                        // Remove this network
-                        forgetNetwork(state);
-                    }
-                }
-            }
-        }
-    }
-    
-    private boolean isConsideredForHighestPriority(AccessPointState state) {
-        return state.configured && state.networkId != AccessPointState.NETWORK_ID_ANY &&
-                state.networkId != AccessPointState.NETWORK_ID_NOT_SET;
-    }
-    
-    /**
-     * Gets the next highest priority. If this value is larger than the max,
-     * shift all the priorities so the lowest starts at 0.
-     * <p>
-     * Only
-     * {@link #setHighestPriorityStateAndSave(AccessPointState, WifiConfiguration)}
-     * should call this.
-     * 
-     * @return The next highest priority to use.
-     */
-    private int getNextHighestPriority() {
-        if (mNextHighestPriority > HIGHEST_PRIORITY_MAX_VALUE) {
-            shiftPriorities();
-        }
-        
-        return mNextHighestPriority++;
-    }
-
-    /**
-     * Shift all the priorities so the lowest starts at 0.
-     * 
-     * @return Whether the operation was successful.
-     */
-    private boolean shiftPriorities() {
-        synchronized(this) {
-
-            ArrayList<AccessPointState> allAps = getApsSortedByPriorityLocked();
-
-            // Re-usable WifiConfiguration for setting priority
-            WifiConfiguration updatePriorityConfig = new WifiConfiguration();
-            
-            // Set new priorities
-            mNextHighestPriority = 0;
-            int size = allAps.size();
-            for (int i = 0; i < size; i++) {
-                AccessPointState state = allAps.get(i);
-                
-                if (!isConsideredForHighestPriority(state)) {
-                    continue;
-                }
-                
-                if (!setHighestPriorityStateAndSave(state, updatePriorityConfig)) {
-                    Log.e(TAG,
-                            "Could not shift priorities because setting the new priority failed.");
-                    return false;
-                }
-            }
-            
-            return true;
-        }
-    }
-
-    private ArrayList<AccessPointState> getApsSortedByPriorityLocked() {
-        // Get all of the access points we have
-        ArrayList<AccessPointState> allAps = new ArrayList<AccessPointState>(mApScanList.size()
-                + mApOtherList.size());
-        allAps.addAll(mApScanList);
-        allAps.addAll(mApOtherList);
-        
-        // Sort them based on priority
-        Collections.sort(allAps, new Comparator<AccessPointState>() {
-            public int compare(AccessPointState object1, AccessPointState object2) {
-                return object1.priority - object2.priority;
-            }
-        });
-
-        return allAps;
-    }
-    
-    //============================
-    // Status related
-    //============================
-
-    private void refreshStatus() {
-        refreshStatus(null, null);
-    }
-    
-    private void refreshStatus(AccessPointState ap, NetworkInfo.DetailedState detailedState) {
-        final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
-        if (detailedState == null) {
-            detailedState = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());
-        }
-
-        if (ap == null && WifiStatus.isLiveConnection(detailedState)) {
-            /*
-             * We pass null for security since we have a network ID (i.e., it's
-             * not a wildcard), and rely on it matching.
-             */
-            synchronized (this) {
-                ap = findApLocked(wifiInfo.getNetworkId(), wifiInfo.getBSSID(), wifiInfo
-                        .getSSID(), null);
-            }
-        }
-
-        if (ap != null) {
-            ap.blockRefresh();
-
-            // Let the AP get the latest info from the WifiInfo 
-            ap.updateFromWifiInfo(wifiInfo, detailedState);
-
-            // The detailed state from the Intent has more states than the WifiInfo's detailed
-            // state can have (for example, DHCP completion).  Set the status using
-            // the Intent's detailed state.
-            ap.setStatus(detailedState);
-            ap.unblockRefresh();
-        }
-    }
-    
-    //============================
-    // Wifi callbacks
-    //============================
-    
-    private void handleNetworkStateChanged(NetworkInfo info, String bssid) {
-        final AccessPointState ap = getCurrentAp();
-        NetworkInfo.DetailedState detailedState = info.getDetailedState(); 
-
-        if (LOGV) {
-            Log.v(TAG, "State change received " + info.toString() + ", or "
-                    + detailedState + " on " + bssid + " matched to " + ap);
-        }
-
-        handleDisablingScanWhileObtainingAddress(detailedState);
-        
-        // This will update the AP with its new info
-        refreshStatus(ap, detailedState);
-        
-        boolean isDisconnected = info.getState().equals(State.DISCONNECTED);
-        if (ap != null && info.isConnectedOrConnecting()) {
-            setPrimaryAp(ap);
-
-            if (LOGV) {
-                Log.v(TAG, " Updated " + ap + " to be primary");
-            }
-            
-        } else if (isDisconnected) {
-            
-            /*
-             * When we drop off a network (for example, the router is powered
-             * down when we were connected), we received a DISCONNECT event
-             * without a BSSID. We should not have a primary AP anymore.
-             */
-            setPrimaryAp(null);
-            
-            if (LOGV) {
-                Log.v(TAG, " Cleared primary");
-            }
-            
-        } else if (detailedState.equals(DetailedState.FAILED)) {
-
-            /*
-             * Doh, failed for whatever reason. Unset the primary AP, but set
-             * failed status on the AP that failed.
-             */
-            setPrimaryAp(null);
-            ap.setStatus(DetailedState.FAILED);
-            
-            // Bring up error dialog
-            error(R.string.wifi_generic_connection_error);
-            
-        } else if (LOGV) {
-            Log.v(TAG, " Did not update any AP to primary, could have updated "
-                    + ap + " but we aren't connected or connecting");
-        }
-
-        if ((ap != null) && (info.isConnected()
-                    || (detailedState == DetailedState.OBTAINING_IPADDR))) {
-            /*
-             * Sometimes the scan results do not contain the AP even though it's
-             * clearly connected. This may be because we do passive background
-             * scanning that isn't as 'strong' as active scanning, so even
-             * though a network is nearby, it won't be seen by the passive
-             * scanning. If we are connected (or obtaining IP) then we know it
-             * is seen.
-             */
-            ap.setSeen(true);
-        }
-
-        attemptReenableAllAps();
-    }
-
-    private void handleDisablingScanWhileObtainingAddress(DetailedState detailedState) {
-        
-        if (detailedState == DetailedState.OBTAINING_IPADDR) {
-            mIsObtainingAddress = true;
-
-            // We will not scan while obtaining an IP address
-            removeFutureScans();
-            
-        } else {
-            mIsObtainingAddress = false;
-            
-            // Start continuous scan
-            queueContinuousScan();
-        }
-    }
-    
-    private void handleScanResultsAvailable() {
-        synchronized(this) {
-            // In the end, we'll moved the ones no longer seen into the mApOtherList
-            List<AccessPointState> oldScanList = mApScanList;
-            List<AccessPointState> newScanList =
-                    new ArrayList<AccessPointState>(oldScanList.size());
-
-            List<ScanResult> list = mWifiManager.getScanResults();
-            if (list != null) {
-                for (int i = list.size() - 1; i >= 0; i--) {
-                    final ScanResult scanResult = list.get(i);
-                    
-                    if (LOGV) {
-//                        Log.v(TAG, "    " + scanResult);
-                    }
-                    
-                    if (scanResult == null) {
-                        continue;
-                    }
-                    
-                    /*
-                     * Ignore adhoc, enterprise-secured, or hidden networks.
-                     * Hidden networks show up with empty SSID.
-                     */
-                    if (AccessPointState.isAdhoc(scanResult)
-                            || TextUtils.isEmpty(scanResult.SSID)) {
-                        continue;
-                    }
-                    
-                    final String ssid = AccessPointState.convertToQuotedString(scanResult.SSID);
-                    String security = AccessPointState.getScanResultSecurity(scanResult);
-                    
-                    // See if this AP is part of a group of APs (e.g., any large
-                    // wifi network has many APs, we'll only show one) that we've
-                    // seen in this scan
-                    AccessPointState ap = findApLocked(newScanList, AccessPointState.NETWORK_ID_ANY,
-                                                 AccessPointState.BSSID_ANY, ssid, security);
-
-                    // Yup, we've seen this network.
-                    if (ap != null) {
-                        // Use the better signal
-                        if (WifiManager.compareSignalLevel(scanResult.level, ap.signal) > 0) {
-                            ap.setSignal(scanResult.level);
-                        }
-                        
-                        if (LOGV) {
-//                            Log.v(TAG, "         Already seen, continuing..");
-                        }
-                        
-                        continue;
-                    }
-
-                    // Find the AP in either our old scan list, or our non-seen
-                    // configured networks list
-                    ap = findApLocked(AccessPointState.NETWORK_ID_ANY, AccessPointState.BSSID_ANY,
-                                ssid, security);
-
-                    if (ap != null) {
-                        // Remove the AP from both (no harm if one doesn't contain it)
-                        oldScanList.remove(ap);
-                        mApOtherList.remove(ap);
-                    } else {
-                        ap = new AccessPointState(mContext);
-//                        if (LOGV) Log.v(TAG, "Created " + ap);
-                    }
-
-                    // Give it the latest state
-                    ap.updateFromScanResult(scanResult);
-
-                    if (mCallback != null) {
-                        mCallback.onAccessPointSetChanged(ap, true);
-                    }
-
-                    newScanList.add(ap);
-                }
-            }
-            
-            // oldScanList contains the ones no longer seen
-            List<AccessPointState> otherList = mApOtherList;
-            for (int i = oldScanList.size() - 1; i >= 0; i--) {
-                final AccessPointState ap = oldScanList.get(i);
-                
-                if (ap.configured) {
-                    
-                    // Keep it around, since it is configured
-                    ap.setSeen(false);
-                    otherList.add(ap);
-                    
-                } else {
-                    
-                    // Remove it since it is not configured and not seen
-                    removeApFromUi(ap);
-                }
-            }
-            
-            mApScanList = newScanList;
-        }
-
-        onScanningEnded();
-    }
-    
-    private void handleSupplicantConnectionChanged(boolean connected) {
-        if (mCallback != null) {
-            mCallback.onAccessPointsStateChanged(connected);
-        }
-        
-        if (connected) {
-            refreshAll(true);
-        }
-    }
-
-    private void handleWifiStateChanged(int wifiState) {
-        
-        if (wifiState == WIFI_STATE_ENABLED) {
-            loadConfiguredAccessPoints();
-            attemptScan();
-
-        } else if (wifiState == WIFI_STATE_DISABLED) {
-            removeFutureScans();
-            if (LOGV) Log.v(TAG, "Clearing AP lists because wifi is disabled");
-            clearApLists();
-        }
-        
-        if (mCallback != null) {
-            mCallback.onAccessPointsStateChanged(wifiState == WIFI_STATE_ENABLED);
-        }
-    }
-    
-    private void handleSignalChanged(int rssi) {
-        
-        if (mCurrentPrimaryAp != null) {
-            mCurrentPrimaryAp.setSignal(rssi);
-        }
-    }
-
-    private void handleSupplicantStateChanged(SupplicantState state, boolean hasError, int error) {
-        mCurrentSupplicantState = state;
-        
-        if (SupplicantState.FOUR_WAY_HANDSHAKE.equals(state)) {
-            mLastAuthenticatingAp = getCurrentAp();
-        }
-        
-        if (hasError) {
-            handleSupplicantStateError(error);
-        }
-    }
-    
-    private void handleSupplicantStateError(int supplicantError) {
-        if (supplicantError == WifiManager.ERROR_AUTHENTICATING) {
-            if (mCallback != null) {
-                if (mLastAuthenticatingAp != null) {
-                    mCallback.onRetryPassword(mLastAuthenticatingAp);
-                }
-            }
-        }
-    }
-    
-    private void handleNetworkIdsChanged() {
-        synchronized (this) {
-            final List<WifiConfiguration> configs = getConfiguredNetworks();
-            
-            for (int i = configs.size() - 1; i >= 0; i--) {
-                final WifiConfiguration config = configs.get(i);
-                
-                AccessPointState ap;
-                // Since network IDs have changed, we can't use it to find our previous AP state
-                ap = findApLocked(AccessPointState.NETWORK_ID_ANY, config.BSSID, config.SSID,
-                        AccessPointState.getWifiConfigurationSecurity(config));
-                
-                if (ap == null) {
-                    continue;
-                }
-
-                ap.setNetworkId(config.networkId);
-            }
-        }
-    }
-    
-    private class MyHandler extends Handler {
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MESSAGE_ATTEMPT_SCAN:
-                    attemptScan();
-                    break;
-            }
-        }
-    }
-    
-}
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index cac77e3..e06dcd4 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * 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.
@@ -19,463 +19,472 @@
 import com.android.settings.ProgressCategory;
 import com.android.settings.R;
 
-import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.NetworkInfo;
+import android.net.NetworkInfo.DetailedState;
+import android.net.wifi.ScanResult;
+import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.KeyMgmt;
+import android.net.wifi.WifiConfiguration.Status;
+import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
-import android.preference.CheckBoxPreference;
-import android.provider.Settings;
+import android.provider.Settings.Secure;
 import android.security.Credentials;
 import android.security.KeyStore;
-import android.util.Log;
+import android.text.TextUtils;
 import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.widget.AdapterView;
-import android.widget.Toast;
 import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.Toast;
 
-import java.util.Set;
-import java.util.WeakHashMap;
+import java.util.ArrayList;
+import java.util.List;
 
-/**
- * Settings screen for WiFi. This will be launched from the main system settings.
- */
-public class WifiSettings extends PreferenceActivity implements WifiLayer.Callback,
-        DialogInterface.OnDismissListener {
-
-    private static final String TAG = "WifiSettings";
-
-    //============================
-    // Preference/activity member variables
-    //============================
-
-    private static final String INSTANCE_KEY_DIALOG_BUNDLE =
-            "com.android.settings.wifi.WifiSettings:dialogBundle";
-    /*
-     * We don't use Activity's dialog management because AlertDialog isn't fully
-     * able to change many of its features after it's been created, and the
-     * dialog management only creates once.
-     */
-    private Dialog mDialog;
-
-    private static final String KEY_ONLY_ACCESS_POINTS = "only_access_points";
-    private static final String KEY_ADD_OTHER_NETWORK = "add_other_network";
-
-    private static final int CONTEXT_MENU_ID_CONNECT = Menu.FIRST;
-    private static final int CONTEXT_MENU_ID_FORGET = Menu.FIRST + 1;
-    private static final int CONTEXT_MENU_ID_CHANGE_PASSWORD = Menu.FIRST + 2;
-
+public class WifiSettings extends PreferenceActivity implements DialogInterface.OnClickListener {
     private static final int MENU_ID_SCAN = Menu.FIRST;
     private static final int MENU_ID_ADVANCED = Menu.FIRST + 1;
+    private static final int MENU_ID_CONNECT = Menu.FIRST + 2;
+    private static final int MENU_ID_FORGET = Menu.FIRST + 3;
+    private static final int MENU_ID_MODIFY = Menu.FIRST + 4;
 
-    private static final String KEY_WIFI_ENABLED = "wifi_enabled";
-    private static final String KEY_OPEN_NETWORK_NOTIFICATIONS_ENABLED =
-            "open_network_notifications_enabled";
-    private static final String KEY_ACCESS_POINTS = "access_points";
+    private final IntentFilter mFilter;
+    private final BroadcastReceiver mReceiver;
+    private final Scanner mScanner;
 
-    private ProgressCategory mApCategory;
-    private CheckBoxPreference mWifiEnabled;
+    private WifiManager mWifiManager;
     private WifiEnabler mWifiEnabler;
-    private CheckBoxPreference mOpenNetworkNotificationsEnabled;
-    private Preference mAddOtherNetwork;
+    private CheckBoxPreference mNotifyOpenNetworks;
+    private ProgressCategory mAccessPoints;
+    private Preference mAddNetwork;
 
-    private WeakHashMap<AccessPointState, AccessPointPreference> mAps;
+    private DetailedState mLastState;
+    private WifiInfo mLastInfo;
+    private int mLastPriority;
 
-    private KeyStore mKeyStore = KeyStore.getInstance();
-    private AccessPointState mResumeState = null;
-    private int mResumeMode;
+    private boolean mResetNetworks = false;
+    private int mKeyStoreNetworkId = -1;
 
-    //============================
-    // Wifi member variables
-    //============================
-
-    private WifiLayer mWifiLayer;
-
-    //============================
-    // Activity lifecycle
-    //============================
+    private AccessPoint mSelected;
+    private WifiDialog mDialog;
 
     public WifiSettings() {
-        mAps = new WeakHashMap<AccessPointState, AccessPointPreference>();
-        mWifiLayer = new WifiLayer(this, this);
+        mFilter = new IntentFilter();
+        mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
+        mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
+        mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+        mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+
+        mReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                handleEvent(intent);
+            }
+        };
+
+        mScanner = new Scanner();
     }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        onCreatePreferences();
-        mWifiLayer.onCreate();
+        mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
 
-        onCreatedWifi();
-        mWifiLayer.onCreatedCallback();
-    }
-
-    private int getPreferenceResource() {
-        if (getIntent().getBooleanExtra(KEY_ONLY_ACCESS_POINTS, false)) {
-            return R.xml.wifi_access_points;
+        if (getIntent().getBooleanExtra("only_access_points", false)) {
+            addPreferencesFromResource(R.xml.wifi_access_points);
         } else {
-            return R.xml.wifi_settings;
-        }
-    }
-
-    /**
-     * Shouldn't have any dependency on the wifi layer.
-     */
-    private void onCreatePreferences() {
-        addPreferencesFromResource(getPreferenceResource());
-
-        final PreferenceScreen preferenceScreen = getPreferenceScreen();
-
-        mApCategory = (ProgressCategory) preferenceScreen.findPreference(KEY_ACCESS_POINTS);
-        // We don't want the ordering to be the order preferences are added,
-        // instead we want*:
-        //   1) preferred, visible APs
-        //   2) visible APs
-        //   3) preferred, APs out of range
-        //   * this ordering logic is in AccessPointPreference's compareTo
-        mApCategory.setOrderingAsAdded(false);
-
-        if (!getIntent().getBooleanExtra(KEY_ONLY_ACCESS_POINTS, false)) {
-            mWifiEnabled = (CheckBoxPreference) preferenceScreen.findPreference(KEY_WIFI_ENABLED);
-            mWifiEnabler = new WifiEnabler(this, (WifiManager) getSystemService(WIFI_SERVICE),
-                    mWifiEnabled);
-
-            mOpenNetworkNotificationsEnabled = (CheckBoxPreference) preferenceScreen
-                    .findPreference(KEY_OPEN_NETWORK_NOTIFICATIONS_ENABLED);
-            mOpenNetworkNotificationsEnabled.setChecked(Settings.Secure.getInt(getContentResolver(),
-                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1);
+            addPreferencesFromResource(R.xml.wifi_settings);
+            mWifiEnabler = new WifiEnabler(this,
+                    (CheckBoxPreference) findPreference("enable_wifi"));
+            mNotifyOpenNetworks =
+                    (CheckBoxPreference) findPreference("notify_open_networks");
+            mNotifyOpenNetworks.setChecked(Secure.getInt(getContentResolver(),
+                    Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1);
         }
 
-        mAddOtherNetwork = preferenceScreen.findPreference(KEY_ADD_OTHER_NETWORK);
+        mAccessPoints = (ProgressCategory) findPreference("access_points");
+        mAccessPoints.setOrderingAsAdded(false);
+        mAddNetwork = findPreference("add_network");
 
         registerForContextMenu(getListView());
     }
 
-    private void onCreatedWifi() {
-    }
-
     @Override
     protected void onResume() {
         super.onResume();
-        mWifiLayer.onResume();
         if (mWifiEnabler != null) {
             mWifiEnabler.resume();
         }
-        // do what we should have after keystore is unlocked.
-        if (mResumeState != null) {
-            if (mKeyStore.test() == KeyStore.NO_ERROR) {
-                showAccessPointDialog(mResumeState, mResumeMode);
-            }
-            mResumeMode = -1;
-            mResumeState = null;
-        } else {
-            if (mResumeMode == AccessPointDialog.MODE_CONFIGURE) {
-                if (mKeyStore.test() == KeyStore.NO_ERROR) {
-                    ((AccessPointDialog) mDialog).enableEnterpriseFields();
+        registerReceiver(mReceiver, mFilter);
+        if (mKeyStoreNetworkId != -1 && KeyStore.getInstance().test() == KeyStore.NO_ERROR) {
+            connect(mKeyStoreNetworkId);
+        }
+        mKeyStoreNetworkId = -1;
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (mWifiEnabler != null) {
+            mWifiEnabler.pause();
+        }
+        unregisterReceiver(mReceiver);
+        mScanner.pause();
+        if (mDialog != null) {
+            mDialog.dismiss();
+            mDialog = null;
+        }
+        if (mResetNetworks) {
+            enableNetworks();
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.wifi_menu_scan)
+                .setIcon(R.drawable.ic_menu_scan_network);
+        menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced)
+                .setIcon(android.R.drawable.ic_menu_manage);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case MENU_ID_SCAN:
+                mScanner.resume();
+                return true;
+            case MENU_ID_ADVANCED:
+                startActivity(new Intent(this, AdvancedSettings.class));
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo info) {
+        if (info instanceof AdapterContextMenuInfo) {
+            Preference preference = (Preference) getListView().getItemAtPosition(
+                    ((AdapterContextMenuInfo) info).position);
+
+            if (preference instanceof AccessPoint) {
+                mSelected = (AccessPoint) preference;
+                menu.setHeaderTitle(mSelected.ssid);
+                if (mSelected.getLevel() != -1 && mSelected.getState() == null) {
+                    menu.add(Menu.NONE, MENU_ID_CONNECT, 0, R.string.wifi_menu_connect);
+                }
+                if (mSelected.networkId != -1) {
+                    menu.add(Menu.NONE, MENU_ID_FORGET, 0, R.string.wifi_menu_forget);
+                    if (mSelected.security != AccessPoint.SECURITY_NONE) {
+                        menu.add(Menu.NONE, MENU_ID_MODIFY, 0, R.string.wifi_menu_modify);
+                    }
                 }
             }
         }
     }
 
     @Override
-    protected void onPause() {
-        super.onPause();
-        mWifiLayer.onPause();
-        if (mWifiEnabler != null) {
-            mWifiEnabler.pause();
+    public boolean onContextItemSelected(MenuItem item) {
+        if (mSelected == null) {
+            return super.onContextItemSelected(item);
         }
+        switch (item.getItemId()) {
+            case MENU_ID_CONNECT:
+                if (mSelected.networkId != -1) {
+                    if (!requireKeyStore(mSelected.getConfig())) {
+                        connect(mSelected.networkId);
+                    }
+                } else if (mSelected.security == AccessPoint.SECURITY_NONE) {
+                    // Shortcut for open networks.
+                    WifiConfiguration config = new WifiConfiguration();
+                    config.SSID = mSelected.ssid;
+                    config.allowedKeyManagement.set(KeyMgmt.NONE);
+                    int networkId = mWifiManager.addNetwork(config);
+                    mWifiManager.enableNetwork(networkId, false);
+                    connect(networkId);
+                } else {
+                    showDialog(mSelected, false);
+                }
+                return true;
+            case MENU_ID_FORGET:
+                forget(mSelected.networkId);
+                return true;
+            case MENU_ID_MODIFY:
+                showDialog(mSelected, true);
+                return true;
+        }
+        return super.onContextItemSelected(item);
     }
 
     @Override
-    protected void onDestroy() {
-        super.onDestroy();
-
-        if (mDialog != null) {
-            mDialog.dismiss();
+    public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
+        if (preference instanceof AccessPoint) {
+            mSelected = (AccessPoint) preference;
+            showDialog(mSelected, false);
+        } else if (preference == mAddNetwork) {
+            mSelected = null;
+            showDialog(null, true);
+        } else if (preference == mNotifyOpenNetworks) {
+            Secure.putInt(getContentResolver(),
+                    Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
+                    mNotifyOpenNetworks.isChecked() ? 1 : 0);
+        } else {
+            return super.onPreferenceTreeClick(screen, preference);
         }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-
-        menu.add(0, MENU_ID_SCAN, 0, R.string.scan_wifi)
-            .setIcon(R.drawable.ic_menu_scan_network);
-
-        menu.add(0, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced)
-            .setIcon(android.R.drawable.ic_menu_manage);
-
         return true;
     }
 
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        super.onOptionsItemSelected(item);
+    public void onClick(DialogInterface dialogInterface, int button) {
+        if (button == WifiDialog.BUTTON_FORGET && mSelected != null) {
+            forget(mSelected.networkId);
+        } else if (button == WifiDialog.BUTTON_SUBMIT) {
+            WifiConfiguration config = mDialog.getConfig();
 
-        switch (item.getItemId()) {
-
-            case MENU_ID_SCAN:
-                mWifiLayer.attemptScan();
-                return true;
-
-            case MENU_ID_ADVANCED:
-                Intent intent = new Intent(this, AdvancedSettings.class);
-                startActivity(intent);
-                return true;
-
-            default:
-                return false;
-        }
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-
-        if (mDialog != null) {
-            Bundle dialogBundle = mDialog.onSaveInstanceState();
-            outState.putBundle(INSTANCE_KEY_DIALOG_BUNDLE, dialogBundle);
-        }
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Bundle state) {
-        super.onRestoreInstanceState(state);
-
-        Bundle dialogBundle = state.getBundle(INSTANCE_KEY_DIALOG_BUNDLE);
-        if (dialogBundle != null) {
-            mDialog = new AccessPointDialog(this, mWifiLayer);
-            mDialog.onRestoreInstanceState(dialogBundle);
-            showDialog(mDialog);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void onDismiss(DialogInterface dialog) {
-        if (dialog == mDialog) {
-            mDialog = null;
-            mResumeMode = -1;
-        }
-    }
-
-    @Override
-    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
-        super.onCreateContextMenu(menu, v, menuInfo);
-
-        AccessPointState state = getStateFromMenuInfo(menuInfo);
-        if (state == null) {
-            return;
-        }
-
-        menu.setHeaderTitle(state.getHumanReadableSsid());
-
-        if (state.isConnectable()) {
-            menu.add(0, CONTEXT_MENU_ID_CONNECT, 0, R.string.wifi_context_menu_connect);
-        }
-
-        if (state.isForgetable()) {
-            menu.add(0, CONTEXT_MENU_ID_FORGET, 1, R.string.wifi_context_menu_forget);
-
-            if (state.hasPassword()) {
-                menu.add(0, CONTEXT_MENU_ID_CHANGE_PASSWORD, 2,
-                        R.string.wifi_context_menu_change_password);
+            if (config == null) {
+                if (mSelected != null && !requireKeyStore(mSelected.getConfig())) {
+                    connect(mSelected.networkId);
+                }
+            } else if (config.networkId != -1) {
+                if (mSelected != null) {
+                    mWifiManager.updateNetwork(config);
+                    saveNetworks();
+                }
+            } else {
+                int networkId = mWifiManager.addNetwork(config);
+                if (networkId != -1) {
+                    mWifiManager.enableNetwork(networkId, false);
+                    config.networkId = networkId;
+                    if (mDialog.edit || requireKeyStore(config)) {
+                        saveNetworks();
+                    } else {
+                        connect(networkId);
+                    }
+                }
             }
         }
     }
 
-    @Override
-    public boolean onContextItemSelected(MenuItem item) {
-
-        AccessPointState state = getStateFromMenuInfo(item.getMenuInfo());
-        if (state == null) {
-            return false;
-        }
-
-        switch (item.getItemId()) {
-
-            case CONTEXT_MENU_ID_CONNECT:
-                connectToNetwork(state);
-                return true;
-
-            case CONTEXT_MENU_ID_FORGET:
-                mWifiLayer.forgetNetwork(state);
-                return true;
-
-            case CONTEXT_MENU_ID_CHANGE_PASSWORD:
-                showAccessPointDialog(state, AccessPointDialog.MODE_CONFIGURE);
-                return true;
-
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * Decides what needs to happen to connect to a particular access point. If
-     * it is secured and doesn't already have a password, it will bring up a
-     * password box. Otherwise it will just connect.
-     */
-    private void connectToNetwork(AccessPointState state) {
-        if (state.hasSecurity() && !state.hasPassword()) {
-            showAccessPointDialog(state, AccessPointDialog.MODE_INFO);
-        } else {
-            mWifiLayer.connectToNetwork(state);
-        }
-    }
-
-    private AccessPointState getStateFromMenuInfo(ContextMenuInfo menuInfo) {
-        if ((menuInfo == null) || !(menuInfo instanceof AdapterContextMenuInfo)) {
-            return null;
-        }
-
-        AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
-        Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem(
-                adapterMenuInfo.position);
-        if (pref == null || !(pref instanceof AccessPointPreference)) {
-            return null;
-        }
-
-        return ((AccessPointPreference) pref).getAccessPointState();
-    }
-
-    //============================
-    // Preference callbacks
-    //============================
-
-    @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        super.onPreferenceTreeClick(preferenceScreen, preference);
-
-        if (preference == mAddOtherNetwork) {
-            showAddOtherNetworkDialog();
-        } else if (preference == mOpenNetworkNotificationsEnabled) {
-            Settings.Secure.putInt(getContentResolver(),
-                Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
-                mOpenNetworkNotificationsEnabled.isChecked() ? 1 : 0);
-        } else if (preference instanceof AccessPointPreference) {
-            AccessPointState state = ((AccessPointPreference) preference).getAccessPointState();
-            showAccessPointDialog(state, AccessPointDialog.MODE_INFO);
-        }
-
-        return false;
-    }
-
-    //============================
-    // Wifi-related
-    //============================
-
-    public WifiLayer getWifiLayer() {
-        return mWifiLayer;
-    }
-
-    private void showAddOtherNetworkDialog() {
-        AccessPointDialog dialog = new AccessPointDialog(this, mWifiLayer);
-        dialog.setState(new AccessPointState(this));
-        dialog.setMode(AccessPointDialog.MODE_CONFIGURE);
-        dialog.setTitle(R.string.wifi_add_other_network);
-        dialog.setAutoSecurityAllowed(false);
-        mResumeMode = AccessPointDialog.MODE_CONFIGURE;
-        showDialog(dialog);
-    }
-
-    public void showAccessPointDialog(AccessPointState state, int mode) {
-        if (state.isEnterprise() && mKeyStore.test() != KeyStore.NO_ERROR) {
-            Credentials.getInstance().unlock(this);
-            mResumeState = state;
-            mResumeMode = mode;
-            return;
-        }
-        AccessPointDialog dialog = new AccessPointDialog(this, mWifiLayer);
-        dialog.setMode(mode);
-        dialog.setState(state);
-        showDialog(dialog);
-    }
-
-    private void showDialog(Dialog dialog) {
-        // Have only one dialog open at a time
+    private void showDialog(AccessPoint accessPoint, boolean edit) {
         if (mDialog != null) {
             mDialog.dismiss();
         }
+        mDialog = new WifiDialog(this, this, accessPoint, edit);
+        mDialog.show();
+    }
 
-        mDialog = dialog;
-        if (dialog != null) {
-            dialog.setOnDismissListener(this);
-            dialog.show();
+    private boolean requireKeyStore(WifiConfiguration config) {
+        if (WifiDialog.requireKeyStore(config) &&
+                KeyStore.getInstance().test() != KeyStore.NO_ERROR) {
+            mKeyStoreNetworkId = config.networkId;
+            Credentials.getInstance().unlock(this);
+            return true;
         }
+        return false;
     }
 
-    //============================
-    // Wifi callbacks
-    //============================
-
-    public void onError(int messageResId) {
-        Toast.makeText(this, messageResId, Toast.LENGTH_LONG).show();
+    private void forget(int networkId) {
+        mWifiManager.removeNetwork(networkId);
+        saveNetworks();
     }
 
-    public void onScanningStatusChanged(boolean started) {
-        mApCategory.setProgress(started);
-    }
-
-    public void onAccessPointSetChanged(AccessPointState ap, boolean added) {
-
-        AccessPointPreference pref = mAps.get(ap);
-
-        if (WifiLayer.LOGV) {
-            Log.v(TAG, "onAccessPointSetChanged with " + ap + " and "
-                    + (added ? "added" : "removed") + ", found pref " + pref);
-        }
-
-        if (added) {
-
-            if (pref == null) {
-                pref = new AccessPointPreference(this, ap);
-                mAps.put(ap, pref);
-            } else {
-                pref.setEnabled(true);
-            }
-
-            mApCategory.addPreference(pref);
-
-        } else {
-
-            mAps.remove(ap);
-
-            if (pref != null) {
-                mApCategory.removePreference(pref);
-            }
-
-        }
-    }
-
-    public void onAccessPointsStateChanged(boolean enabled) {
-        if (enabled) {
-            mApCategory.setEnabled(true);
-        } else {
-            mApCategory.removeAll();
-            mAps.clear();
-        }
-
-        mAddOtherNetwork.setEnabled(enabled);
-    }
-
-    public void onRetryPassword(AccessPointState ap) {
-
-        if ((mDialog != null) && mDialog.isShowing()) {
-            // If we're already showing a dialog, ignore this request
+    private void connect(int networkId) {
+        if (networkId == -1) {
             return;
         }
 
-        showAccessPointDialog(ap, AccessPointDialog.MODE_RETRY_PASSWORD);
+        // Reset the priority of each network if it goes too high.
+        if (mLastPriority > 1000000) {
+            for (int i = mAccessPoints.getPreferenceCount() - 1; i >= 0; --i) {
+                AccessPoint accessPoint = (AccessPoint) mAccessPoints.getPreference(i);
+                if (accessPoint.networkId != -1) {
+                    WifiConfiguration config = new WifiConfiguration();
+                    config.networkId = accessPoint.networkId;
+                    config.priority = 0;
+                    mWifiManager.updateNetwork(config);
+                }
+            }
+            mLastPriority = 0;
+        }
+
+        // Set to the highest priority and save the configuration.
+        WifiConfiguration config = new WifiConfiguration();
+        config.networkId = networkId;
+        config.priority = ++mLastPriority;
+        mWifiManager.updateNetwork(config);
+        saveNetworks();
+
+        // Connect to network by disabling others.
+        mWifiManager.enableNetwork(networkId, true);
+        mWifiManager.reconnect();
+        mResetNetworks = true;
     }
 
+    private void enableNetworks() {
+        for (int i = mAccessPoints.getPreferenceCount() - 1; i >= 0; --i) {
+            WifiConfiguration config = ((AccessPoint) mAccessPoints.getPreference(i)).getConfig();
+            if (config != null && config.status != Status.ENABLED) {
+                mWifiManager.enableNetwork(config.networkId, false);
+            }
+        }
+        mResetNetworks = false;
+    }
+
+    private void saveNetworks() {
+        // Always save the configuration with all networks enabled.
+        enableNetworks();
+        mWifiManager.saveConfiguration();
+        updateAccessPoints();
+    }
+
+    private void updateAccessPoints() {
+        List<AccessPoint> accessPoints = new ArrayList<AccessPoint>();
+
+        List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
+        if (configs != null) {
+            mLastPriority = 0;
+            for (WifiConfiguration config : configs) {
+                if (config.priority > mLastPriority) {
+                    mLastPriority = config.priority;
+                }
+
+                // Shift the status to make enableNetworks() more efficient.
+                if (config.status == Status.CURRENT) {
+                    config.status = Status.ENABLED;
+                } else if (mResetNetworks && config.status == Status.DISABLED) {
+                    config.status = Status.CURRENT;
+                }
+
+                AccessPoint accessPoint = new AccessPoint(this, config);
+                accessPoint.update(mLastInfo, mLastState);
+                accessPoints.add(accessPoint);
+            }
+        }
+
+        List<ScanResult> results = mWifiManager.getScanResults();
+        if (results != null) {
+            for (ScanResult result : results) {
+                // Ignore hidden and ad-hoc networks.
+                if (result.SSID == null || result.SSID.length() == 0 ||
+                        result.capabilities.contains("[IBSS]")) {
+                    continue;
+                }
+
+                boolean found = false;
+                for (AccessPoint accessPoint : accessPoints) {
+                    if (accessPoint.update(result)) {
+                        found = true;
+                    }
+                }
+                if (!found) {
+                    accessPoints.add(new AccessPoint(this, result));
+                }
+            }
+        }
+
+        mAccessPoints.removeAll();
+        for (AccessPoint accessPoint : accessPoints) {
+            mAccessPoints.addPreference(accessPoint);
+        }
+    }
+
+    private void handleEvent(Intent intent) {
+        String action = intent.getAction();
+        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
+            updateWifiState(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
+                    WifiManager.WIFI_STATE_UNKNOWN));
+        } else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
+            updateAccessPoints();
+        } else if (WifiManager.NETWORK_IDS_CHANGED_ACTION.equals(action)) {
+            if (mSelected != null && mSelected.networkId != -1) {
+                mSelected = null;
+            }
+            updateAccessPoints();
+        } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
+            updateConnectionState(WifiInfo.getDetailedStateOf((SupplicantState)
+                    intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE)));
+        } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
+            updateConnectionState(((NetworkInfo) intent.getParcelableExtra(
+                    WifiManager.EXTRA_NETWORK_INFO)).getDetailedState());
+        } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
+            updateConnectionState(null);
+        }
+    }
+
+    private void updateConnectionState(DetailedState state) {
+        if (state == DetailedState.OBTAINING_IPADDR) {
+            mScanner.pause();
+        } else {
+            mScanner.resume();
+        }
+
+        mLastInfo = mWifiManager.getConnectionInfo();
+        if (state != null) {
+            mLastState = state;
+        }
+
+        for (int i = mAccessPoints.getPreferenceCount() - 1; i >= 0; --i) {
+            ((AccessPoint) mAccessPoints.getPreference(i)).update(mLastInfo, mLastState);
+        }
+
+        if (mResetNetworks && (state == DetailedState.CONNECTED ||
+                state == DetailedState.DISCONNECTED || state == DetailedState.FAILED)) {
+            enableNetworks();
+        }
+    }
+
+    private void updateWifiState(int state) {
+        if (state == WifiManager.WIFI_STATE_ENABLED) {
+            mScanner.resume();
+            updateAccessPoints();
+        } else {
+            mScanner.pause();
+            mAccessPoints.removeAll();
+        }
+    }
+
+    private class Scanner extends Handler {
+        private int mRetry = 0;
+
+        void resume() {
+            if (!hasMessages(0)) {
+                sendEmptyMessage(0);
+            }
+        }
+
+        void pause() {
+            mRetry = 0;
+            mAccessPoints.setProgress(false);
+            removeMessages(0);
+        }
+
+        @Override
+        public void handleMessage(Message message) {
+            if (mWifiManager.startScanActive()) {
+                mRetry = 0;
+            } else if (++mRetry >= 3) {
+                mRetry = 0;
+                Toast.makeText(WifiSettings.this, R.string.wifi_fail_to_scan,
+                        Toast.LENGTH_LONG).show();
+            }
+            mAccessPoints.setProgress(mRetry != 0);
+            sendEmptyMessageDelayed(0, 6000);
+        }
+    }
 }
diff --git a/src/com/android/settings/wifi/WifiStatus.java b/src/com/android/settings/wifi/WifiStatus.java
deleted file mode 100644
index e10ab8d..0000000
--- a/src/com/android/settings/wifi/WifiStatus.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2007 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.R;
-
-import android.content.Context;
-import android.net.NetworkInfo;
-import android.text.TextUtils;
-
-public class WifiStatus {
-    public static String getStatus(Context context, String ssid,
-            NetworkInfo.DetailedState detailedState) {
-        
-        if (!TextUtils.isEmpty(ssid) && isLiveConnection(detailedState)) {
-            return getPrintableFragment(context, detailedState, ssid);
-        } else {
-            return getPrintable(context, detailedState);
-        }
-    }
-    
-    public static boolean isLiveConnection(NetworkInfo.DetailedState detailedState) {
-        return detailedState != NetworkInfo.DetailedState.DISCONNECTED
-                && detailedState != NetworkInfo.DetailedState.FAILED
-                && detailedState != NetworkInfo.DetailedState.IDLE
-                && detailedState != NetworkInfo.DetailedState.SCANNING;
-    }
-    
-    public static String getPrintable(Context context,
-            NetworkInfo.DetailedState detailedState) {
-        
-        switch (detailedState) {
-            case AUTHENTICATING:
-                return context.getString(R.string.status_authenticating);
-            case CONNECTED:
-                return context.getString(R.string.status_connected);
-            case CONNECTING:
-                return context.getString(R.string.status_connecting);
-            case DISCONNECTED:
-                return context.getString(R.string.status_disconnected);
-            case DISCONNECTING:
-                return context.getString(R.string.status_disconnecting);
-            case FAILED:
-                return context.getString(R.string.status_failed);
-            case OBTAINING_IPADDR:
-                return context.getString(R.string.status_obtaining_ip);
-            case SCANNING:
-                return context.getString(R.string.status_scanning);
-            default:
-                return null;
-        }
-    }
-    
-    public static String getPrintableFragment(Context context,
-            NetworkInfo.DetailedState detailedState, String apName) {
-        
-        String fragment = null;
-        switch (detailedState) {
-            case AUTHENTICATING:
-                fragment = context.getString(R.string.fragment_status_authenticating);
-                break;
-            case CONNECTED:
-                fragment = context.getString(R.string.fragment_status_connected);
-                break;
-            case CONNECTING:
-                fragment = context.getString(R.string.fragment_status_connecting);
-                break;
-            case DISCONNECTED:
-                fragment = context.getString(R.string.fragment_status_disconnected);
-                break;
-            case DISCONNECTING:
-                fragment = context.getString(R.string.fragment_status_disconnecting);
-                break;
-            case FAILED:
-                fragment = context.getString(R.string.fragment_status_failed);
-                break;
-            case OBTAINING_IPADDR:
-                fragment = context.getString(R.string.fragment_status_obtaining_ip);
-                break;
-            case SCANNING:
-                fragment = context.getString(R.string.fragment_status_scanning);
-                break;
-        }
-        
-        return String.format(fragment, apName);
-    }
-    
-}
diff --git a/src/com/android/settings/wifi/WifiStatusTest.java b/src/com/android/settings/wifi/WifiStatusTest.java
new file mode 100644
index 0000000..1b23834
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiStatusTest.java
@@ -0,0 +1,407 @@
+/*
+ * Copyright (C) 2009 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.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;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.NetworkInfo;
+import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+import java.io.IOException;
+import java.net.UnknownHostException;
+
+
+/**
+ * Show the current status details of Wifi related fields
+ */
+public class WifiStatusTest extends Activity {
+
+    private static final String TAG = "WifiStatusTest";
+
+    private Button updateButton;
+    private TextView mWifiState;
+    private TextView mNetworkState;
+    private TextView mSupplicantState;
+    private TextView mRSSI;
+    private TextView mBSSID;
+    private TextView mSSID;
+    private TextView mHiddenSSID;
+    private TextView mIPAddr;
+    private TextView mMACAddr;
+    private TextView mNetworkId;
+    private TextView mLinkSpeed;
+    private TextView mScanList;
+
+
+    private TextView mPingIpAddr;
+    private TextView mPingHostname;
+    private TextView mHttpClientTest;
+    private Button pingTestButton;
+
+    private String mPingIpAddrResult;
+    private String mPingHostnameResult;
+    private String mHttpClientTestResult;
+
+
+    private WifiManager mWifiManager;
+    private IntentFilter mWifiStateFilter;
+
+
+    //============================
+    // Activity lifecycle
+    //============================
+
+    private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
+                handleWifiStateChanged(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
+                            WifiManager.WIFI_STATE_UNKNOWN));
+            } else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+                handleNetworkStateChanged(
+                        (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO));
+            } else if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
+                handleScanResultsAvailable();
+            } else if (intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
+                /* TODO: handle supplicant connection change later */
+            } else if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
+                handleSupplicantStateChanged(
+                        (SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE),
+                        intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR),
+                        intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 0));
+            } else if (intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION)) {
+                handleSignalChanged(intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, 0));
+            } else if (intent.getAction().equals(WifiManager.NETWORK_IDS_CHANGED_ACTION)) {
+                /* TODO: handle network id change info later */
+            } else {
+                Log.e(TAG, "Received an unknown Wifi Intent");
+            }
+        }
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+
+        mWifiStateFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        mWifiStateFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        mWifiStateFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
+        mWifiStateFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+        mWifiStateFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+        mWifiStateFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+
+        registerReceiver(mWifiStateReceiver, mWifiStateFilter);
+
+        setContentView(R.layout.wifi_status_test);
+
+        updateButton = (Button) findViewById(R.id.update);
+        updateButton.setOnClickListener(updateButtonHandler);
+
+        mWifiState = (TextView) findViewById(R.id.wifi_state);
+        mNetworkState = (TextView) findViewById(R.id.network_state);
+        mSupplicantState = (TextView) findViewById(R.id.supplicant_state);
+        mRSSI = (TextView) findViewById(R.id.rssi);
+        mBSSID = (TextView) findViewById(R.id.bssid);
+        mSSID = (TextView) findViewById(R.id.ssid);
+        mHiddenSSID = (TextView) findViewById(R.id.hidden_ssid);
+        mIPAddr = (TextView) findViewById(R.id.ipaddr);
+        mMACAddr = (TextView) findViewById(R.id.macaddr);
+        mNetworkId = (TextView) findViewById(R.id.networkid);
+        mLinkSpeed = (TextView) findViewById(R.id.link_speed);
+        mScanList = (TextView) findViewById(R.id.scan_list);
+
+
+        mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
+        mPingHostname = (TextView) findViewById(R.id.pingHostname);
+        mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
+
+        pingTestButton = (Button) findViewById(R.id.ping_test);
+        pingTestButton.setOnClickListener(mPingButtonHandler);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        registerReceiver(mWifiStateReceiver, mWifiStateFilter);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        unregisterReceiver(mWifiStateReceiver);
+    }
+
+    OnClickListener mPingButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            updatePingState();
+        }
+    };
+
+    OnClickListener updateButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+
+            setWifiStateText(mWifiManager.getWifiState());
+            mBSSID.setText(wifiInfo.getBSSID());
+            mHiddenSSID.setText(String.valueOf(wifiInfo.getHiddenSSID()));
+            int ipAddr = wifiInfo.getIpAddress();
+            StringBuffer ipBuf = new StringBuffer();
+            ipBuf.append(ipAddr  & 0xff).append('.').
+                append((ipAddr >>>= 8) & 0xff).append('.').
+                append((ipAddr >>>= 8) & 0xff).append('.').
+                append((ipAddr >>>= 8) & 0xff);
+
+            mIPAddr.setText(ipBuf);
+            mLinkSpeed.setText(String.valueOf(wifiInfo.getLinkSpeed())+" Mbps");
+            mMACAddr.setText(wifiInfo.getMacAddress());
+            mNetworkId.setText(String.valueOf(wifiInfo.getNetworkId()));
+            mRSSI.setText(String.valueOf(wifiInfo.getRssi()));
+            mSSID.setText(wifiInfo.getSSID());
+
+            SupplicantState supplicantState = wifiInfo.getSupplicantState();
+            setSupplicantStateText(supplicantState);
+        }
+    };
+
+    private void setSupplicantStateText(SupplicantState supplicantState) {
+        if(SupplicantState.FOUR_WAY_HANDSHAKE.equals(supplicantState)) {
+            mSupplicantState.setText("FOUR WAY HANDSHAKE");
+        } else if(SupplicantState.ASSOCIATED.equals(supplicantState)) {
+            mSupplicantState.setText("ASSOCIATED");
+        } else if(SupplicantState.ASSOCIATING.equals(supplicantState)) {
+            mSupplicantState.setText("ASSOCIATING");
+        } else if(SupplicantState.COMPLETED.equals(supplicantState)) {
+            mSupplicantState.setText("COMPLETED");
+        } else if(SupplicantState.DISCONNECTED.equals(supplicantState)) {
+            mSupplicantState.setText("DISCONNECTED");
+        } else if(SupplicantState.DORMANT.equals(supplicantState)) {
+            mSupplicantState.setText("DORMANT");
+        } else if(SupplicantState.GROUP_HANDSHAKE.equals(supplicantState)) {
+            mSupplicantState.setText("GROUP HANDSHAKE");
+        } else if(SupplicantState.INACTIVE.equals(supplicantState)) {
+            mSupplicantState.setText("INACTIVE");
+        } else if(SupplicantState.INVALID.equals(supplicantState)) {
+            mSupplicantState.setText("INVALID");
+        } else if(SupplicantState.SCANNING.equals(supplicantState)) {
+            mSupplicantState.setText("SCANNING");
+        } else if(SupplicantState.UNINITIALIZED.equals(supplicantState)) {
+            mSupplicantState.setText("UNINITIALIZED");
+        } else {
+            mSupplicantState.setText("BAD");
+            Log.e(TAG, "supplicant state is bad");
+        }
+    }
+
+    private void setWifiStateText(int wifiState) {
+        String wifiStateString;
+        switch(wifiState) {
+            case WifiManager.WIFI_STATE_DISABLING:
+                wifiStateString = getString(R.string.wifi_state_disabling);
+                break;
+            case WifiManager.WIFI_STATE_DISABLED:
+                wifiStateString = getString(R.string.wifi_state_disabled);
+                break;
+            case WifiManager.WIFI_STATE_ENABLING:
+                wifiStateString = getString(R.string.wifi_state_enabling);
+                break;
+            case WifiManager.WIFI_STATE_ENABLED:
+                wifiStateString = getString(R.string.wifi_state_enabled);
+                break;
+            case WifiManager.WIFI_STATE_UNKNOWN:
+                wifiStateString = getString(R.string.wifi_state_unknown);
+                break;
+            default:
+                wifiStateString = "BAD";
+                Log.e(TAG, "wifi state is bad");
+                break;
+        }
+
+        mWifiState.setText(wifiStateString);
+    }
+
+    private void handleSignalChanged(int rssi) {
+        mRSSI.setText(String.valueOf(rssi));
+    }
+
+    private void handleWifiStateChanged(int wifiState) {
+        setWifiStateText(wifiState);
+    }
+
+    private void handleScanResultsAvailable() {
+        List<ScanResult> list = mWifiManager.getScanResults();
+
+        StringBuffer scanList = new StringBuffer();
+        if (list != null) {
+            for (int i = list.size() - 1; i >= 0; i--) {
+                final ScanResult scanResult = list.get(i);
+
+                if (scanResult == null) {
+                    continue;
+                }
+
+                if (TextUtils.isEmpty(scanResult.SSID)) {
+                    continue;
+                }
+
+                scanList.append(scanResult.SSID+" ");
+            }
+        }
+        mScanList.setText(scanList);
+    }
+
+    private void handleSupplicantStateChanged(SupplicantState state, boolean hasError, int error) {
+        if (hasError) {
+            mSupplicantState.setText("ERROR AUTHENTICATING");
+        } else {
+            setSupplicantStateText(state);
+        }
+    }
+
+    private void handleNetworkStateChanged(NetworkInfo networkInfo) {
+        if (mWifiManager.isWifiEnabled()) {
+            String summary = Summary.get(this, mWifiManager.getConnectionInfo().getSSID(),
+                    networkInfo.getDetailedState());
+            mNetworkState.setText(summary);
+        }
+    }
+
+    private final void updatePingState() {
+        final Handler handler = new Handler();
+        // Set all to unknown since the threads will take a few secs to update.
+        mPingIpAddrResult = getResources().getString(R.string.radioInfo_unknown);
+        mPingHostnameResult = getResources().getString(R.string.radioInfo_unknown);
+        mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
+
+        mPingIpAddr.setText(mPingIpAddrResult);
+        mPingHostname.setText(mPingHostnameResult);
+        mHttpClientTest.setText(mHttpClientTestResult);
+
+        final Runnable updatePingResults = new Runnable() {
+            public void run() {
+                mPingIpAddr.setText(mPingIpAddrResult);
+                mPingHostname.setText(mPingHostnameResult);
+                mHttpClientTest.setText(mHttpClientTestResult);
+            }
+        };
+        Thread ipAddrThread = new Thread() {
+            @Override
+            public void run() {
+                pingIpAddr();
+                handler.post(updatePingResults);
+            }
+        };
+        ipAddrThread.start();
+
+        Thread hostnameThread = new Thread() {
+            @Override
+            public void run() {
+                pingHostname();
+                handler.post(updatePingResults);
+            }
+        };
+        hostnameThread.start();
+
+        Thread httpClientThread = new Thread() {
+            @Override
+            public void run() {
+                httpClientTest();
+                handler.post(updatePingResults);
+            }
+        };
+        httpClientThread.start();
+    }
+
+    /**
+     * The ping functions have been borrowed from Radio diagnostic app to
+     * enable quick access on the wifi status screen
+     */
+    private final void pingIpAddr() {
+        try {
+            // TODO: Hardcoded for now, make it UI configurable
+            String ipAddress = "74.125.47.104";
+            Process p = Runtime.getRuntime().exec("ping -c 1 -w 100 " + ipAddress);
+            int status = p.waitFor();
+            if (status == 0) {
+                mPingIpAddrResult = "Pass";
+            } else {
+                mPingIpAddrResult = "Fail: IP addr not reachable";
+            }
+        } catch (IOException e) {
+            mPingIpAddrResult = "Fail: IOException";
+        } catch (InterruptedException e) {
+            mPingIpAddrResult = "Fail: InterruptedException";
+        }
+    }
+
+    private final void pingHostname() {
+        try {
+            // TODO: Hardcoded for now, make it UI configurable
+            Process p = Runtime.getRuntime().exec("ping -c 1 -w 100 www.google.com");
+            int status = p.waitFor();
+            if (status == 0) {
+                mPingHostnameResult = "Pass";
+            } else {
+                mPingHostnameResult = "Fail: Host unreachable";
+            }
+        } catch (UnknownHostException e) {
+            mPingHostnameResult = "Fail: Unknown Host";
+        } catch (IOException e) {
+            mPingHostnameResult= "Fail: IOException";
+        } catch (InterruptedException e) {
+            mPingHostnameResult = "Fail: InterruptedException";
+        }
+    }
+
+    private void httpClientTest() {
+        HttpClient client = new DefaultHttpClient();
+        try {
+            // TODO: Hardcoded for now, make it UI configurable
+            HttpGet request = new HttpGet("http://www.google.com");
+            HttpResponse response = client.execute(request);
+            if (response.getStatusLine().getStatusCode() == 200) {
+                mHttpClientTestResult = "Pass";
+            } else {
+                mHttpClientTestResult = "Fail: Code: " + String.valueOf(response);
+            }
+            request.abort();
+        } catch (IOException e) {
+            mHttpClientTestResult = "Fail: IOException";
+        }
+    }
+
+}
diff --git a/tests/res/layout/bluetooth_request_permission_test.xml b/tests/res/layout/bluetooth_request_permission_test.xml
index 8bb0daa..4d54544 100644
--- a/tests/res/layout/bluetooth_request_permission_test.xml
+++ b/tests/res/layout/bluetooth_request_permission_test.xml
@@ -16,18 +16,18 @@
 
 <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">
 
     <ListView android:id="@+id/msg_container"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1"
         android:transcriptMode="normal"/>
 
     <LinearLayout
         android:orientation="horizontal"
-        android:layout_width="fill_parent"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         style="@android:style/ButtonBar">
 
