diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..0955671
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := user development
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := Settings
+LOCAL_CERTIFICATE := platform
+
+include $(BUILD_PACKAGE)
+
+# Use the folloing include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100644
index 0000000..cab768d
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,508 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        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="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <uses-permission android:name="android.permission.HARDWARE_TEST" />
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+    <uses-permission android:name="android.permission.MASTER_CLEAR" />
+    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
+    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
+    <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.PACKAGE_USAGE_STATS"/>
+    <uses-permission android:name="android.permission.BATTERY_STATS"/>
+    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
+    <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
+
+    <application android:label="@string/settings_label" android:icon="@drawable/ic_launcher_settings">
+
+        <!-- Settings -->
+
+        <activity android:name="Settings" android:label="@string/settings_label"
+                android:clearTaskOnLaunch="true"
+                android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <!-- Wireless Controls -->
+
+        <activity android:name="WirelessSettings" 
+                android:label="@string/radio_controls_title"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.WIRELESS_SETTINGS" />
+                <action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+
+        <!-- Top-level settings -->
+
+        <activity android:name=".wifi.WifiSettings" android:label="@string/wifi_settings"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.WIFI_SETTINGS" />
+                <action android:name="android.net.wifi.PICK_WIFI_NETWORK" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".wifi.AdvancedSettings" android:label="@string/wifi_ip_settings_titlebar"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.WIFI_IP_SETTINGS" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="ApnSettings" android:label="@string/apn_settings"
+                  android:configChanges="orientation|keyboardHidden"
+                  android:launchMode="singleInstance" 
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.APN_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".bluetooth.BluetoothSettings"
+                  android:label="@string/bluetooth_settings_title"
+                  >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.BLUETOOTH_SETTINGS" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DateTimeSettings" android:label="@string/date_and_time"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.DATE_SETTINGS" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DateTimeSettingsSetupWizard" android:label="@string/date_and_time">
+            android:screenOrientation="portrait"
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="LocalePicker" android:label="@string/language_picker_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.LOCALE_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+        
+        <activity android:name="LocalePickerInSetupWizard" android:label="@string/language_picker_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="LanguageSettings" android:label="@string/language_picker_title"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="InputMethodsSettings" android:icon="@drawable/app_settings"
+                android:label="@string/input_methods_settings_title"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.INPUT_METHOD_SETTINGS" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="UserDictionarySettings" android:icon="@drawable/app_settings"
+                android:label="@string/user_dict_settings_titlebar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.USER_DICTIONARY_SETTINGS" />
+                <action android:name="com.android.settings.USER_DICTIONARY_INSERT" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="SoundAndDisplaySettings" android:label="@string/sound_and_display_settings"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="com.android.settings.SOUND_SETTINGS" />
+                <action android:name="com.android.settings.DISPLAY_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DeviceInfoSettings" android:label="@string/device_info_settings"
+                >
+            <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="SettingsLicenseActivity"
+                android:label="@string/settings_license_activity_title"
+                android:theme="@*android:style/Theme.Dialog.Alert">
+            <intent-filter>
+                <action android:name="android.settings.LICENSE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="ApplicationSettings" android:label="@string/applications_settings_header"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.APPLICATION_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="ManageApplications"
+                  android:label="@string/manageapplications_settings_title"
+                  android:configChanges="orientation|keyboardHidden">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.intent.action.MANAGE_PACKAGE_STORAGE" />
+                <action android:name="android.settings.MANAGE_APPLICATIONS_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.MONKEY" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+        
+        <activity android:name="InstalledAppDetails" android:label="@string/application_info_label">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="SecuritySettings" android:label="@string/security_settings_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.SECURITY_SETTINGS" />
+                <action android:name="android.settings.LOCATION_SOURCE_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="SimLockSettings" android:label="@string/sim_lock_settings"
+                android:process="com.android.phone">
+            <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>
+
+
+
+
+        <!-- Second and third-level settings -->
+
+        <activity android:name="ConfirmLockPattern"/>
+        
+        <activity android:name="ChooseLockPattern" android:label="@string/lockpattern_change_lock_pattern_label">
+            <intent-filter>
+                <action android:name="android.intent.action.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="ChooseLockPatternTutorial" 
+            android:label="@string/lockpattern_change_lock_pattern_label"
+            >
+            <intent-filter>
+                <action android:name="android.intent.action.DEFAULT" />
+            </intent-filter>
+        </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" />
+
+        <activity android:name=".deviceinfo.Status" android:label="@string/device_status_activity_title"
+                android:process="com.android.phone">
+            <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=".deviceinfo.Memory" android:label="@string/storage_settings_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.INTERNAL_STORAGE_SETTINGS" />
+                <action android:name="android.settings.MEMORY_CARD_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="ApnEditor" android:label="@string/apn_edit">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <action android:name="android.intent.action.EDIT" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="vnd.android.cursor.item/telephony-carrier" />
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.INSERT" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="vnd.android.cursor.dir/telephony-carrier" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="MasterClear" android:label="@string/master_clear_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="MediaFormat" android:label="@string/media_format_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".quicklaunch.QuickLaunchSettings" 
+                android:label="@string/quick_launch_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="com.android.settings.QUICK_LAUNCH_SETTINGS" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+        
+        <activity android:name=".quicklaunch.BookmarkPicker" android:label="@string/quick_launch_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DevelopmentSettings" android:icon="@drawable/app_settings"
+                android:label="@string/development_settings_title">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
+            </intent-filter>
+        </activity>
+
+
+
+
+        <!-- Bluetooth stuff -->
+
+        <activity android:name=".bluetooth.ConnectSpecificProfilesActivity"
+                  android:label="@string/bluetooth_connect_specific_profiles_title" />
+
+        <activity android:name=".bluetooth.BluetoothPinDialog"
+                  android:label="@string/bluetooth_pin_entry"
+                  android:theme="@*android:style/Theme.Dialog.Alert">
+            <intent-filter>
+                <action android:name="android.bluetooth.intent.action.PAIRING_REQUEST" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <receiver android:name=".bluetooth.BluetoothPinRequest">
+            <intent-filter>
+                <action android:name="android.bluetooth.intent.action.PAIRING_REQUEST" />
+                <action android:name="android.bluetooth.intent.action.PAIRING_CANCEL" />
+            </intent-filter>
+        </receiver>
+
+        <activity android:name="ActivityPicker" android:label="@string/activity_picker_label">
+            <intent-filter>
+                <action android:name="android.intent.action.PICK_ACTIVITY" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+
+
+
+        <!-- Development settings -->
+
+        <activity android:name="DebugIntentSender" android:label="@string/debug_intent_sender_label">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="DeviceInfo" android:label="@string/device_info_label">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <!-- DeviceInfo adds the user's requested build to stats upload.  -->
+        <receiver android:name=".DeviceInfo$StatsReportReceiver">
+            <intent-filter>
+                <action android:name="android.intent.action.STATISTICS_REPORT" />
+            </intent-filter>
+        </receiver>
+
+        <activity android:name="BatteryInfo" android:label="@string/battery_info_label">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".battery_history.BatteryHistory" android:label="@string/battery_history_label">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Display" android:label="@string/display_label"
+                android:configChanges="fontScale">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="RadioInfo" android:label="@string/phone_info_label"
+            android:process="com.android.phone">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="SdCardSettings" android:label="@string/sd_card_settings_label">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="ProxySelector" android:label="@string/proxy_settings_label"
+		  android:theme="@android:style/Theme.Dialog">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+            </intent-filter>
+        </activity>
+
+        <!-- TODO: Is this needed? -->
+        <activity android:name="BandMode"
+                  android:theme="@android:style/Theme.Dialog"
+                  android:process="com.android.phone">
+            <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="TestingSettings" android:label="@string/testing">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <receiver android:name="TestingSettingsBroadcastReceiver">
+            <intent-filter>
+                 <action android:name="android.provider.Telephony.SECRET_CODE" />
+                 <data android:scheme="android_secret_code" android:host="4636" />
+            </intent-filter>
+       </receiver>
+
+        <!-- Standard picker for gadgets -->
+        <activity android:name="GadgetPickActivity" android:label="@string/widget_picker_title">
+            <intent-filter>
+                <action android:name="android.gadget.action.GADGET_PICK" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <!-- Helper to bind any unbound gadgets in Launcher, used as
+             part of initialization and upgrade process -->
+        <activity android:name="LauncherGadgetBinder"
+                android:permission="com.android.launcher.permission.WRITE_SETTINGS"
+                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" />
+                <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
+            </intent-filter>
+        </activity>
+
+    </application>
+
+</manifest>
+
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..c5b1efa
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,190 @@
+
+   Copyright (c) 2005-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.
+
+   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.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
diff --git a/res/drawable/app_settings.png b/res/drawable/app_settings.png
new file mode 100644
index 0000000..ed23bbf
--- /dev/null
+++ b/res/drawable/app_settings.png
Binary files differ
diff --git a/res/drawable/border_item_thumbnail.png b/res/drawable/border_item_thumbnail.png
new file mode 100755
index 0000000..6454138
--- /dev/null
+++ b/res/drawable/border_item_thumbnail.png
Binary files differ
diff --git a/res/drawable/dotted_line_480px.png b/res/drawable/dotted_line_480px.png
new file mode 100755
index 0000000..a52ca43
--- /dev/null
+++ b/res/drawable/dotted_line_480px.png
Binary files differ
diff --git a/res/drawable/ic_bt_cellphone.png b/res/drawable/ic_bt_cellphone.png
new file mode 100755
index 0000000..4bf7ba5
--- /dev/null
+++ b/res/drawable/ic_bt_cellphone.png
Binary files differ
diff --git a/res/drawable/ic_bt_headphones_a2dp.png b/res/drawable/ic_bt_headphones_a2dp.png
new file mode 100755
index 0000000..b9bfec6
--- /dev/null
+++ b/res/drawable/ic_bt_headphones_a2dp.png
Binary files differ
diff --git a/res/drawable/ic_bt_headset_hfp.png b/res/drawable/ic_bt_headset_hfp.png
new file mode 100644
index 0000000..cd91841
--- /dev/null
+++ b/res/drawable/ic_bt_headset_hfp.png
Binary files differ
diff --git a/res/drawable/ic_bt_laptop.png b/res/drawable/ic_bt_laptop.png
new file mode 100755
index 0000000..49a71c9
--- /dev/null
+++ b/res/drawable/ic_bt_laptop.png
Binary files differ
diff --git a/res/drawable/ic_btn_next.png b/res/drawable/ic_btn_next.png
new file mode 100644
index 0000000..c6cf436
--- /dev/null
+++ b/res/drawable/ic_btn_next.png
Binary files differ
diff --git a/res/drawable/ic_launcher_settings.png b/res/drawable/ic_launcher_settings.png
new file mode 100755
index 0000000..16db056
--- /dev/null
+++ b/res/drawable/ic_launcher_settings.png
Binary files differ
diff --git a/res/drawable/ic_menu_3d_globe.png b/res/drawable/ic_menu_3d_globe.png
new file mode 100644
index 0000000..638e7fd
--- /dev/null
+++ b/res/drawable/ic_menu_3d_globe.png
Binary files differ
diff --git a/res/drawable/ic_menu_add.png b/res/drawable/ic_menu_add.png
new file mode 100755
index 0000000..6752bfd
--- /dev/null
+++ b/res/drawable/ic_menu_add.png
Binary files differ
diff --git a/res/drawable/ic_menu_filter_settings.png b/res/drawable/ic_menu_filter_settings.png
new file mode 100755
index 0000000..7be883a
--- /dev/null
+++ b/res/drawable/ic_menu_filter_settings.png
Binary files differ
diff --git a/res/drawable/ic_menu_scan_network.png b/res/drawable/ic_menu_scan_network.png
new file mode 100644
index 0000000..eed82a2
--- /dev/null
+++ b/res/drawable/ic_menu_scan_network.png
Binary files differ
diff --git a/res/drawable/ic_network_signal_0.png b/res/drawable/ic_network_signal_0.png
new file mode 100755
index 0000000..150e345
--- /dev/null
+++ b/res/drawable/ic_network_signal_0.png
Binary files differ
diff --git a/res/drawable/ic_network_signal_1.png b/res/drawable/ic_network_signal_1.png
new file mode 100755
index 0000000..bc99c0f
--- /dev/null
+++ b/res/drawable/ic_network_signal_1.png
Binary files differ
diff --git a/res/drawable/ic_network_signal_2.png b/res/drawable/ic_network_signal_2.png
new file mode 100755
index 0000000..9d5d611
--- /dev/null
+++ b/res/drawable/ic_network_signal_2.png
Binary files differ
diff --git a/res/drawable/ic_network_signal_3.png b/res/drawable/ic_network_signal_3.png
new file mode 100755
index 0000000..259ba2d
--- /dev/null
+++ b/res/drawable/ic_network_signal_3.png
Binary files differ
diff --git a/res/drawable/ic_network_signal_4.png b/res/drawable/ic_network_signal_4.png
new file mode 100755
index 0000000..605b144
--- /dev/null
+++ b/res/drawable/ic_network_signal_4.png
Binary files differ
diff --git a/res/drawable/ic_popup_brightness.png b/res/drawable/ic_popup_brightness.png
new file mode 100755
index 0000000..e9172a6
--- /dev/null
+++ b/res/drawable/ic_popup_brightness.png
Binary files differ
diff --git a/res/drawable/ic_wifi_lock_signal_1.png b/res/drawable/ic_wifi_lock_signal_1.png
new file mode 100755
index 0000000..af78e05
--- /dev/null
+++ b/res/drawable/ic_wifi_lock_signal_1.png
Binary files differ
diff --git a/res/drawable/ic_wifi_lock_signal_2.png b/res/drawable/ic_wifi_lock_signal_2.png
new file mode 100755
index 0000000..b5b373e
--- /dev/null
+++ b/res/drawable/ic_wifi_lock_signal_2.png
Binary files differ
diff --git a/res/drawable/ic_wifi_lock_signal_3.png b/res/drawable/ic_wifi_lock_signal_3.png
new file mode 100755
index 0000000..49ac417
--- /dev/null
+++ b/res/drawable/ic_wifi_lock_signal_3.png
Binary files differ
diff --git a/res/drawable/ic_wifi_lock_signal_4.png b/res/drawable/ic_wifi_lock_signal_4.png
new file mode 100644
index 0000000..cd86ca0
--- /dev/null
+++ b/res/drawable/ic_wifi_lock_signal_4.png
Binary files differ
diff --git a/res/drawable/ic_wifi_signal_1.png b/res/drawable/ic_wifi_signal_1.png
new file mode 100755
index 0000000..7a524e3
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_1.png
Binary files differ
diff --git a/res/drawable/ic_wifi_signal_2.png b/res/drawable/ic_wifi_signal_2.png
new file mode 100755
index 0000000..efe4b5f
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_2.png
Binary files differ
diff --git a/res/drawable/ic_wifi_signal_3.png b/res/drawable/ic_wifi_signal_3.png
new file mode 100755
index 0000000..a720bb0
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_3.png
Binary files differ
diff --git a/res/drawable/ic_wifi_signal_4.png b/res/drawable/ic_wifi_signal_4.png
new file mode 100644
index 0000000..d45028e
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_4.png
Binary files differ
diff --git a/res/drawable/lock_anim.xml b/res/drawable/lock_anim.xml
new file mode 100644
index 0000000..8ec31a6
--- /dev/null
+++ b/res/drawable/lock_anim.xml
@@ -0,0 +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 
+**
+**     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.
+*/
+-->
+<animation-list
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:oneshot="false">
+    <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/drawable/lock_anim_0.png b/res/drawable/lock_anim_0.png
new file mode 100644
index 0000000..afdda8b
--- /dev/null
+++ b/res/drawable/lock_anim_0.png
Binary files differ
diff --git a/res/drawable/lock_anim_1.png b/res/drawable/lock_anim_1.png
new file mode 100644
index 0000000..6cae8e5
--- /dev/null
+++ b/res/drawable/lock_anim_1.png
Binary files differ
diff --git a/res/drawable/lock_anim_10.png b/res/drawable/lock_anim_10.png
new file mode 100644
index 0000000..5de840e
--- /dev/null
+++ b/res/drawable/lock_anim_10.png
Binary files differ
diff --git a/res/drawable/lock_anim_11.png b/res/drawable/lock_anim_11.png
new file mode 100644
index 0000000..35db815
--- /dev/null
+++ b/res/drawable/lock_anim_11.png
Binary files differ
diff --git a/res/drawable/lock_anim_12.png b/res/drawable/lock_anim_12.png
new file mode 100644
index 0000000..8778d98
--- /dev/null
+++ b/res/drawable/lock_anim_12.png
Binary files differ
diff --git a/res/drawable/lock_anim_13.png b/res/drawable/lock_anim_13.png
new file mode 100644
index 0000000..d0b8cf0
--- /dev/null
+++ b/res/drawable/lock_anim_13.png
Binary files differ
diff --git a/res/drawable/lock_anim_14.png b/res/drawable/lock_anim_14.png
new file mode 100644
index 0000000..ea1aa31
--- /dev/null
+++ b/res/drawable/lock_anim_14.png
Binary files differ
diff --git a/res/drawable/lock_anim_2.png b/res/drawable/lock_anim_2.png
new file mode 100644
index 0000000..0542b1d
--- /dev/null
+++ b/res/drawable/lock_anim_2.png
Binary files differ
diff --git a/res/drawable/lock_anim_3.png b/res/drawable/lock_anim_3.png
new file mode 100644
index 0000000..7e2ba9a
--- /dev/null
+++ b/res/drawable/lock_anim_3.png
Binary files differ
diff --git a/res/drawable/lock_anim_4.png b/res/drawable/lock_anim_4.png
new file mode 100644
index 0000000..a3ca629
--- /dev/null
+++ b/res/drawable/lock_anim_4.png
Binary files differ
diff --git a/res/drawable/lock_anim_5.png b/res/drawable/lock_anim_5.png
new file mode 100644
index 0000000..17e3839
--- /dev/null
+++ b/res/drawable/lock_anim_5.png
Binary files differ
diff --git a/res/drawable/lock_anim_6.png b/res/drawable/lock_anim_6.png
new file mode 100644
index 0000000..90205a6
--- /dev/null
+++ b/res/drawable/lock_anim_6.png
Binary files differ
diff --git a/res/drawable/lock_anim_7.png b/res/drawable/lock_anim_7.png
new file mode 100644
index 0000000..1d94a47
--- /dev/null
+++ b/res/drawable/lock_anim_7.png
Binary files differ
diff --git a/res/drawable/lock_anim_8.png b/res/drawable/lock_anim_8.png
new file mode 100644
index 0000000..af7cd28
--- /dev/null
+++ b/res/drawable/lock_anim_8.png
Binary files differ
diff --git a/res/drawable/lock_anim_9.png b/res/drawable/lock_anim_9.png
new file mode 100644
index 0000000..d401624
--- /dev/null
+++ b/res/drawable/lock_anim_9.png
Binary files differ
diff --git a/res/drawable/signal.xml b/res/drawable/signal.xml
new file mode 100644
index 0000000..f315600
--- /dev/null
+++ b/res/drawable/signal.xml
@@ -0,0 +1,24 @@
+<?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.
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:maxLevel="0" android:drawable="@drawable/ic_network_signal_0" />
+    <item android:maxLevel="1" android:drawable="@drawable/ic_network_signal_1" />
+    <item android:maxLevel="2" android:drawable="@drawable/ic_network_signal_2" />
+    <item android:maxLevel="3" android:drawable="@drawable/ic_network_signal_3" />
+    <item android:maxLevel="4" android:drawable="@drawable/ic_network_signal_4" />
+</level-list>
+
diff --git a/res/drawable/wifi_signal.xml b/res/drawable/wifi_signal.xml
new file mode 100644
index 0000000..86c1ab0
--- /dev/null
+++ b/res/drawable/wifi_signal.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+    <item settings:state_encrypted="true" android:drawable="@drawable/wifi_signal_lock" />
+    <item settings:state_encrypted="false" android:drawable="@drawable/wifi_signal_open" />
+</selector>
+
diff --git a/res/drawable/wifi_signal_lock.xml b/res/drawable/wifi_signal_lock.xml
new file mode 100644
index 0000000..2ad6d91
--- /dev/null
+++ b/res/drawable/wifi_signal_lock.xml
@@ -0,0 +1,23 @@
+<?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.
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_lock_signal_1" />
+    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_lock_signal_2" />
+    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_lock_signal_3" />
+    <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_lock_signal_4" />
+</level-list>
+
diff --git a/res/drawable/wifi_signal_open.xml b/res/drawable/wifi_signal_open.xml
new file mode 100644
index 0000000..b506dd3
--- /dev/null
+++ b/res/drawable/wifi_signal_open.xml
@@ -0,0 +1,23 @@
+<?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.
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
+    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
+    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
+    <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
+</level-list>
+
diff --git a/res/layout-land/choose_lock_pattern.xml b/res/layout-land/choose_lock_pattern.xml
new file mode 100644
index 0000000..1502301
--- /dev/null
+++ b/res/layout-land/choose_lock_pattern.xml
@@ -0,0 +1,86 @@
+<?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.
+-->
+
+<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        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:background="@color/black">
+
+    <!-- left side: instructions and messages -->
+    <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1.0"
+            >
+
+        <!-- header message -->
+        <TextView android:id="@+id/headerText"
+                  android:layout_width="fill_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_height="0dip"
+                android:layout_weight="1.0">
+
+            <!-- left button: skip, or re-try -->
+            <Button android:id="@+id/footerLeftButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentBottom="true"
+                android:text="@string/lockpattern_restart_button_text"/>
+
+            <!-- right button: confirm or ok -->
+            <Button android:id="@+id/footerRightButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_alignParentBottom="true"
+                android:drawableRight="@drawable/ic_btn_next"
+                android:drawablePadding="3dip"
+                android:text="@string/lockpattern_confirm_button_text"/>
+
+            <!-- message above buttons -->
+            <TextView android:id="@+id/footerText"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_above="@+id/footerRightButton"
+                android:layout_centerHorizontal="true"
+                android:layout_marginBottom="4dip"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+    </LinearLayout>
+
+    <View
+         android:background="@*android:drawable/code_lock_left"
+         android:layout_width="2dip"
+         android:layout_height="fill_parent" />
+    <!-- right side: lock pattern -->
+    <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
+         android:layout_width="wrap_content"
+         android:layout_height="wrap_content" />
+
+
+</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
+
diff --git a/res/layout-land/confirm_lock_pattern.xml b/res/layout-land/confirm_lock_pattern.xml
new file mode 100644
index 0000000..6decb14
--- /dev/null
+++ b/res/layout-land/confirm_lock_pattern.xml
@@ -0,0 +1,66 @@
+<?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.
+-->
+
+<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        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:background="@color/black">
+
+    <!-- left side: instructions and messages -->
+    <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1.0"
+            >
+
+        <!-- header message -->
+        <TextView android:id="@+id/headerText"
+                  android:layout_width="fill_parent"
+                  android:layout_height="wrap_content"
+                  android:gravity="center"
+                  android:textSize="18sp"/>
+
+        <!-- fill space between header and button below -->
+        <View
+            android:layout_weight="1.0"
+            android:layout_width="fill_parent"
+            android:layout_height="0dip"
+            />
+
+        <!-- footer message -->
+        <TextView android:id="@+id/footerText"
+                  android:layout_width="fill_parent"
+                  android:layout_height="wrap_content"
+                  android:gravity="center"
+                  android:textSize="14sp"/>
+    </LinearLayout>
+
+    <View
+         android:background="@*android:drawable/code_lock_left"
+         android:layout_width="2dip"
+         android:layout_height="fill_parent" />
+    <!-- right side: lock pattern -->
+    <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
+         android:layout_width="wrap_content"
+         android:layout_height="wrap_content" />
+
+
+</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
+
diff --git a/res/layout/band_mode.xml b/res/layout/band_mode.xml
new file mode 100644
index 0000000..e920af0
--- /dev/null
+++ b/res/layout/band_mode.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:padding="4dip"
+              android:gravity="center_horizontal"
+              android:layout_width="fill_parent"
+              android:layout_height="fill_parent">
+
+    <ListView android:id="@+id/band"
+              android:layout_width="fill_parent"
+              android:layout_height="fill_parent"
+              android:textSize="7sp">
+    </ListView>
+
+</LinearLayout>
diff --git a/res/layout/battery_history.xml b/res/layout/battery_history.xml
new file mode 100644
index 0000000..5421c40
--- /dev/null
+++ b/res/layout/battery_history.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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">
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content" />
+
+    <LinearLayout
+        android:id="@+id/graphLayout"
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent" >
+
+        <Spinner
+            android:id="@+id/typeSpinner"
+            android:layout_width="fill_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_height="wrap_content"
+            android:entries="@array/battery_history_which_spinner" />
+
+        <ScrollView
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content" >
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content" >
+            
+        <TextView
+            android:id="@+id/messageText"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_horizontal"
+            android:textSize="17dp"
+            android:visibility="gone" />
+
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button0"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button1"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button2"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button3"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button4"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button5"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button6"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+    
+        <com.android.settings.battery_history.GraphableButton
+            android:id="@+id/button7"
+            android:layout_width="fill_parent"
+            android:layout_height="0dp"
+            android:layout_marginLeft="4dp"
+            android:layout_marginRight="4dp"
+            android:layout_marginBottom="4dp"
+            android:layout_weight="1" />
+
+        </LinearLayout>
+        </ScrollView>
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:id="@+id/textLayout"
+        android:visibility="gone"
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent" >
+
+        <ScrollView
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent" >
+            <TextView
+                android:id="@+id/detailsText"
+                android:layout_width="fill_parent"
+                android:textSize="17dp"
+                android:layout_height="1000dp"/>
+        </ScrollView>
+
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/battery_info.xml b/res/layout/battery_info.xml
new file mode 100644
index 0000000..3889827
--- /dev/null
+++ b/res/layout/battery_info.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Settings/assets/res/any/layout/battery_info.xml
+**
+** Copyright 2006, 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" style="@style/info_layout">        
+
+    <!-- Battery Status -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_status_label" style="@style/info_label" />
+        <TextView android:id="@+id/status" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Battery Level -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_level_label" style="@style/info_label" />
+        <TextView android:id="@+id/level" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Battery Scale -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_scale_label" style="@style/info_label" />
+        <TextView android:id="@+id/scale" style="@style/info_value" />
+    </LinearLayout>
+    
+    <!-- Battery Health -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_health_label" style="@style/info_label" />
+        <TextView android:id="@+id/health" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Battery Voltage -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_voltage_label" style="@style/info_label" />
+        <TextView android:id="@+id/voltage" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Battery Temperature -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_temperature_label" style="@style/info_label" />
+        <TextView android:id="@+id/temperature" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Battery Technology -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_technology_label" style="@style/info_label" />
+        <TextView android:id="@+id/technology" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Uptime -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_uptime" style="@style/info_label" />
+        <TextView android:id="@+id/uptime" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Awaketime Battery -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_awake_battery" style="@style/info_label" />
+        <TextView android:id="@+id/awakeBattery" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Awaketime Plugged In -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_awake_plugged" style="@style/info_label" />
+        <TextView android:id="@+id/awakePlugged" style="@style/info_value" />
+    </LinearLayout>
+
+    <!-- Screen On Time -->
+    <LinearLayout style="@style/entry_layout">
+        <TextView android:text="@string/battery_info_screen_on" style="@style/info_label" />
+        <TextView android:id="@+id/screenOn" style="@style/info_value" />
+    </LinearLayout>
+</LinearLayout>
+
diff --git a/res/layout/bluetooth.xml b/res/layout/bluetooth.xml
new file mode 100644
index 0000000..530cbbe
--- /dev/null
+++ b/res/layout/bluetooth.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Settings/assets/res/layout/bluetooth.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_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_height="wrap_content"/>
+
+    <Button android:id="@+id/scan"
+        android:textStyle="bold"
+        android:text="@string/bluetooth_scan_text"
+        android:layout_width="fill_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_height="wrap_content"/>
+
+    <ListView android:id="@android:id/list"
+    	android:layout_width="fill_parent"
+    	android:layout_height="fill_parent"
+    	android:drawSelectorOnTop="false">
+    </ListView>
+    
+</LinearLayout>
diff --git a/res/layout/bluetooth_device_info.xml b/res/layout/bluetooth_device_info.xml
new file mode 100644
index 0000000..e589103
--- /dev/null
+++ b/res/layout/bluetooth_device_info.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<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">
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent">
+
+        <TextView
+            android:layout_width="fill_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_height="wrap_content"
+            android:text="@string/bluetooth_device_info_no_alias" />
+
+        <Button android:id="@+id/connectButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/bluetooth_device_info_connectButton_text" />
+
+        <Button android:id="@+id/deleteButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/bluetooth_device_info_delete" />
+
+        <Button android:id="@+id/querySDP"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/bluetooth_device_info_sdp" />
+
+        <TextView
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/bluetooth_device_info" />
+
+        <TextView android:id="@+id/deviceInfo"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/bluetooth_device_info_deviceInfo_text" />
+     </LinearLayout>        
+</ScrollView>
+
diff --git a/res/layout/bluetooth_pin_entry.xml b/res/layout/bluetooth_pin_entry.xml
new file mode 100644
index 0000000..bcb6f16
--- /dev/null
+++ b/res/layout/bluetooth_pin_entry.xml
@@ -0,0 +1,51 @@
+<?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.
+*/
+-->
+
+<ScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="fill_parent"
+    android:layout_width="fill_parent">
+
+    <LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_height="fill_parent"
+        android:layout_width="fill_parent"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/message"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dip"
+            android:layout_marginRight="20dip"
+            android:gravity="center_horizontal"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <EditText
+            android:id="@+id/text"
+            android:layout_height="wrap_content"
+            android:layout_width="fill_parent"
+            android:layout_marginTop="20dip"
+            android:layout_marginLeft="20dip"
+            android:layout_marginRight="20dip"
+            android:singleLine="true" />
+
+    </LinearLayout>
+
+</ScrollView>
\ No newline at end of file
diff --git a/res/layout/bookmark_picker_item.xml b/res/layout/bookmark_picker_item.xml
new file mode 100644
index 0000000..fd764ea
--- /dev/null
+++ b/res/layout/bookmark_picker_item.xml
@@ -0,0 +1,38 @@
+<?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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingLeft="2dip"
+    android:gravity="center_vertical">
+
+    <ImageView android:id="@+id/icon"
+        android:layout_width="@android:dimen/app_icon_size"
+        android:layout_height="@android:dimen/app_icon_size"
+        android:scaleType="fitCenter" />
+
+    <TextView android:id="@+id/title"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:paddingLeft="6dip" />
+        
+</LinearLayout>
+
diff --git a/res/layout/choose_lock_pattern.xml b/res/layout/choose_lock_pattern.xml
new file mode 100644
index 0000000..110b9ad
--- /dev/null
+++ b/res/layout/choose_lock_pattern.xml
@@ -0,0 +1,81 @@
+<?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.
+-->
+<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/topLayout"
+    android:orientation="vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="fill_parent"
+    android:background="@color/black">
+
+    <TextView android:id="@+id/headerText"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:textSize="18sp"/>
+
+    <View
+         android:background="@*android:drawable/code_lock_top"
+         android:layout_width="fill_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_height="8dip" />
+
+    <!-- message just above the button bar -->
+    <TextView android:id="@+id/footerText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:textSize="14sp"/>
+
+    <!-- confirm / restart buttons -->
+    <LinearLayout style="@android:style/ButtonBar"
+        android:orientation="horizontal"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+
+        <!-- left button: skip, or retry -->
+        <Button android:id="@+id/footerLeftButton"
+            android:layout_height="wrap_content"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:text="@string/lockpattern_restart_button_text"/>
+
+        <!-- Placeholder to get blank space between the two buttons -->
+        <View
+            android:visibility="invisible"
+            android:layout_height="0dip"
+            android:layout_width="1dip"
+            android:layout_weight="1" />
+
+        <!-- right button: confirm or ok -->
+        <Button android:id="@+id/footerRightButton"
+            android:layout_height="wrap_content"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:drawableRight="@drawable/ic_btn_next"
+            android:drawablePadding="3dip"
+            android:text="@string/lockpattern_confirm_button_text"/>
+
+    </LinearLayout>
+
+</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
diff --git a/res/layout/choose_lock_pattern_example.xml b/res/layout/choose_lock_pattern_example.xml
new file mode 100644
index 0000000..b2d32e6
--- /dev/null
+++ b/res/layout/choose_lock_pattern_example.xml
@@ -0,0 +1,93 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_height="fill_parent"
+    android:layout_width="fill_parent">
+    
+    <ScrollView 
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:layout_weight="1">
+        
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_height="fill_parent"
+            android:layout_width="fill_parent"
+            android:padding="5dip">
+            
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/lock_example_title"
+                android:gravity="center_horizontal"
+                style="?android:attr/textAppearanceLarge"
+            />
+        
+            <ImageView android:id="@+id/lock_anim"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="11dip"
+                android:layout_gravity="center_horizontal"
+                android:focusable="false"
+                android:clickable="false"
+            />
+            
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="5dip"
+                android:text="@string/lock_example_message"
+                android:layout_gravity="left"
+                style="?android:attr/textAppearanceMedium"
+            />
+            
+        </LinearLayout>
+
+    </ScrollView>
+    
+    <LinearLayout style="@android:style/ButtonBar"
+        android:orientation="horizontal"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+        
+        <Button android:id="@+id/skip_button"
+            android:layout_height="wrap_content"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:text="@string/skip_button_label"
+        />
+      
+        <View
+            android:visibility="invisible"
+            android:layout_height="0dip"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+        />
+
+        <Button android:id="@+id/next_button"
+            android:layout_height="wrap_content"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:drawableRight="@drawable/ic_btn_next"
+            android:drawablePadding="3dip"
+            android:text="@string/next_button_label"
+        />
+        
+    </LinearLayout>
+    
+</LinearLayout>
diff --git a/res/layout/choose_lock_pattern_tutorial.xml b/res/layout/choose_lock_pattern_tutorial.xml
new file mode 100644
index 0000000..47af50b
--- /dev/null
+++ b/res/layout/choose_lock_pattern_tutorial.xml
@@ -0,0 +1,85 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_height="fill_parent"
+    android:layout_width="fill_parent">
+    
+    <ScrollView 
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1">
+        
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:padding="5dip">
+            
+            <TextView
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_horizontal"
+                android:text="@string/lock_title"
+                android:paddingBottom="10dip"
+                android:layout_marginTop="3dip"
+                style="?android:attr/textAppearanceLarge"
+            />
+        
+            <TextView 
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:layout_marginTop="10dip"
+                android:text="@string/lock_intro_message"
+            />
+            
+        </LinearLayout>
+       
+    </ScrollView>
+    
+    <LinearLayout style="@android:style/ButtonBar"
+        android:orientation="horizontal"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+
+        <Button android:id="@+id/skip_button"
+            android:layout_height="wrap_content"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:text="@string/skip_button_label"
+        />
+        
+        <View
+            android:visibility="invisible"
+            android:layout_height="0dip"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+        />
+
+        <Button android:id="@+id/next_button"
+            android:layout_height="wrap_content"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:drawableRight="@drawable/ic_btn_next"
+            android:drawablePadding="3dip"
+            android:text="@string/next_button_label"
+        />
+        
+    </LinearLayout>
+    
+</LinearLayout >
diff --git a/res/layout/compute_sizes.xml b/res/layout/compute_sizes.xml
new file mode 100755
index 0000000..1c8e966
--- /dev/null
+++ b/res/layout/compute_sizes.xml
@@ -0,0 +1,36 @@
+<?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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    <ListView 
+        android:id="@android:id/list"
+        android:drawSelectorOnTop="false"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content" />
+    <TextView android:id="@+id/empty_view"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:paddingLeft="20dip"
+        android:paddingTop="5dip"
+        android:text="@string/empty_list_msg"
+        android:gravity="center"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+</LinearLayout>
+
+
diff --git a/res/layout/confirm_lock_pattern.xml b/res/layout/confirm_lock_pattern.xml
new file mode 100644
index 0000000..52cf24a
--- /dev/null
+++ b/res/layout/confirm_lock_pattern.xml
@@ -0,0 +1,51 @@
+<?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.
+-->
+<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/topLayout"
+    android:orientation="vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="fill_parent"
+    android:background="@color/black">
+
+    <TextView android:id="@+id/headerText"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1.0"
+        android:gravity="center"
+        android:textSize="18sp"/>
+
+    <View
+         android:background="@*android:drawable/code_lock_top"
+         android:layout_width="fill_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_height="8dip" />
+
+    <TextView android:id="@+id/footerText"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1.0"
+        android:gravity="center"
+        android:textSize="14sp"/>
+
+
+</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
diff --git a/res/layout/date_time_settings_setupwizard.xml b/res/layout/date_time_settings_setupwizard.xml
new file mode 100644
index 0000000..fc6f5e2
--- /dev/null
+++ b/res/layout/date_time_settings_setupwizard.xml
@@ -0,0 +1,55 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_height="fill_parent"
+        android:layout_width="fill_parent"
+        android:orientation="vertical">
+     
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_height="0dip"
+        android:layout_width="fill_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:drawSelectorOnTop="false"
+            android:paddingTop="2dip"
+        />
+        
+    </LinearLayout>
+    
+    <RelativeLayout
+        android:layout_height="wrap_content"
+        android:layout_width="fill_parent"
+        android:background="@android:drawable/bottom_bar">
+        
+        <Button android:id="@+id/next_button"
+            android:layout_width="150dip"
+            android:layout_height="wrap_content"
+            android:layout_margin="5dip"
+            android:layout_alignParentRight="true"
+            android:drawableRight="@drawable/ic_btn_next"
+            android:drawablePadding="10dip"
+            android:text="@string/next_label"
+        />
+        
+    </RelativeLayout>
+    
+</LinearLayout>
diff --git a/res/layout/dialog_edittext.xml b/res/layout/dialog_edittext.xml
new file mode 100644
index 0000000..9ef1205
--- /dev/null
+++ b/res/layout/dialog_edittext.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2006 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="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingLeft="8dip"
+    android:paddingRight="8dip">
+    
+    <EditText 
+        android:id="@+id/edittext"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+    />
+        
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/display.xml b/res/layout/display.xml
new file mode 100644
index 0000000..0049025
--- /dev/null
+++ b/res/layout/display.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Settings/res/layout/display.xml
+**
+** Copyright 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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/info_layout">        
+    <LinearLayout style="@style/entry_layout"
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="fill_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_height="wrap_content">
+        </Spinner>
+
+        <TextView
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/display_preview_label" />
+
+        <TextView android:id="@+id/preview"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content" />
+
+        <Button android:id="@+id/save"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/installed_app_details.xml b/res/layout/installed_app_details.xml
new file mode 100644
index 0000000..4c06f99
--- /dev/null
+++ b/res/layout/installed_app_details.xml
@@ -0,0 +1,311 @@
+<?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.
+*/
+-->
+<ScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    <LinearLayout
+        android:id="@+id/all_details"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:paddingRight="6dip"
+        android:paddingTop="5dip"
+        android:paddingBottom="5dip"
+        android:orientation="vertical">
+        <include
+            layout="@layout/manage_applications_item"
+            android:id="@+id/app_snippet"/>
+
+        <TextView
+            style="?android:attr/listSeparatorTextViewStyle"
+            android:text="@string/storage_label" />
+
+        <LinearLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:paddingLeft="6dip"
+            android:orientation="vertical">
+            <LinearLayout
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:baselineAligned="true"
+                android:paddingTop="-1dip">
+                <TextView
+                    android:id="@+id/total_size_prefix"
+                    android:text="@string/total_size_label"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1"
+                    android:paddingTop="6dip"
+                    android:paddingLeft="6dip"/>
+
+                <ImageView
+                    android:id="@+id/info_size_dots"
+                    android:src="@drawable/dotted_line_480px"
+                    android:layout_width="0dip"
+                    android:layout_weight="1"
+                    android:layout_height="1px"
+                    android:layout_gravity="bottom"
+                    android:layout_marginLeft="1dip"
+                    android:layout_marginRight="1dip"
+                    android:layout_marginBottom="4dip"
+                    android:scaleType="center" />
+                <TextView
+                    android:id="@+id/total_size_text"
+                    android:paddingTop="6dip"
+                    android:paddingRight="6dip"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1" />
+
+            </LinearLayout>
+            <LinearLayout
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:baselineAligned="true"
+                android:paddingTop="-1dip">
+                <TextView
+                    android:id="@+id/application_size_prefix"
+                    android:text="@string/application_size_label"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1"
+                    android:paddingTop="6dip"
+                    android:paddingLeft="6dip"/>
+                <ImageView
+                    android:id="@+id/info_size_dots"
+                    android:src="@drawable/dotted_line_480px"
+                    android:layout_width="0dip"
+                    android:layout_weight="1"
+                    android:layout_height="1px"
+                    android:layout_gravity="bottom"
+                    android:layout_marginLeft="1dip"
+                    android:layout_marginRight="1dip"
+                    android:layout_marginBottom="4dip"
+                    android:scaleType="center" />
+                <TextView
+                    android:id="@+id/application_size_text"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:paddingTop="6dip"
+                    android:paddingRight="6dip"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1" />
+
+            </LinearLayout>
+            <LinearLayout
+                android:id="@+id/info_size"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:baselineAligned="true"
+                android:paddingTop="-1dip">
+                <TextView
+                    android:id="@+id/data_size_prefix"
+                    android:text="@string/data_size_label"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1"
+                    android:paddingTop="6dip"
+                    android:paddingLeft="6dip"/>
+                <ImageView
+                    android:id="@+id/info_size_dots"
+                    android:src="@drawable/dotted_line_480px"
+                    android:layout_width="0dip"
+                    android:layout_weight="1"
+                    android:layout_height="1px"
+                    android:layout_gravity="bottom"
+                    android:layout_marginLeft="1dip"
+                    android:layout_marginRight="1dip"
+                    android:layout_marginBottom="4dip"
+                    android:scaleType="center" />
+                <TextView
+                    android:id="@+id/data_size_text"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:paddingTop="6dip"
+                    android:paddingRight="6dip"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1" />
+
+            </LinearLayout>
+            <!-- Manage space, Clear data/Uninstall buttons  -->
+            <LinearLayout
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:gravity="bottom"
+                android:orientation="horizontal">
+                <Button
+                    android:id="@+id/manage_space_button"
+                    android:text="@string/manage_space_text"
+                    android:visibility="invisible"
+                    android:layout_width="150dip"
+                    android:paddingLeft="6dip"
+                    android:layout_gravity="left"
+                    android:layout_weight="0.4"
+                    android:layout_height="wrap_content"/>
+                <!-- Spacer -->
+                <View
+                    android:id="@+id/buttons_spacer_left"
+                    android:layout_width="0dip"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0.2"
+                    android:visibility="gone" />
+ 
+                <Button
+                    android:id="@+id/uninstall_button"
+                    android:layout_width="150dip"
+                    android:paddingRight="6dip"
+                    android:layout_gravity="right"
+                    android:layout_weight="0.4"
+                    android:layout_height="wrap_content"/>
+            </LinearLayout>
+        </LinearLayout>
+
+        <!-- Clear cache section -->
+        <RelativeLayout
+            android:id="@+id/cache_panel"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content" >
+            <TextView
+                android:id="@+id/cache_header"
+                style="?android:attr/listSeparatorTextViewStyle"
+                android:text="@string/cache_header_label" />
+            <LinearLayout
+                android:id="@+id/cache_size"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:baselineAligned="true"
+                android:layout_below="@id/cache_header"
+                android:paddingTop="-1dip">
+                <TextView
+                    android:text="@string/cache_size_label"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:paddingTop="6dip"
+                    android:gravity="center_vertical"
+                    android:paddingLeft="6dip"/>
+                <ImageView
+                    android:src="@drawable/dotted_line_480px"
+                    android:layout_width="0dip"
+                    android:layout_weight="1"
+                    android:layout_height="1px"
+                    android:layout_gravity="bottom"
+                    android:layout_marginLeft="1dip"
+                    android:layout_marginRight="1dip"
+                    android:layout_marginBottom="4dip"
+                    android:scaleType="center" />
+                <TextView
+                    android:id="@+id/cache_size_text"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:paddingTop="6dip"
+                    android:paddingRight="6dip"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    android:maxLines="1" />
+            </LinearLayout>
+
+            <Button android:id="@+id/clear_cache_button"
+                android:layout_alignParentRight="true"
+                android:layout_below="@id/cache_size"
+                android:layout_centerHorizontal="true"
+                android:layout_width="150dip"
+                android:text="@string/clear_cache_btn_text"
+                android:layout_height="wrap_content" />
+        </RelativeLayout>
+
+        <!-- Prefered activities section -->
+        <TextView
+            style="?android:attr/listSeparatorTextViewStyle"
+            android:text="@string/auto_launch_label" />
+
+        <RelativeLayout 
+            android:layout_width="fill_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_height="wrap_content"
+                android:paddingTop="6dip"
+                android:paddingRight="6dip"
+                android:paddingLeft="6dip" />
+            <Button android:id="@+id/clear_activities_button"
+                android:layout_alignParentRight="true"
+                android:layout_below="@id/auto_launch"
+                android:layout_centerHorizontal="true"
+                android:layout_width="150dip"
+                android:text="@string/clear_activities"
+                 android:layout_height="wrap_content" />
+        </RelativeLayout>
+
+        <!-- Permissions section -->
+        <LinearLayout
+            android:id="@+id/permissions_section"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:orientation="vertical">
+            <TextView
+                style="?android:attr/listSeparatorTextViewStyle"
+                android:text="@string/permissions_label" />
+            <TextView
+                android:text="@string/security_settings_desc"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:paddingTop="6dip"
+                android:paddingLeft="6dip"
+                android:paddingBottom="6dip"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content" />
+            <LinearLayout
+                android:id="@+id/security_settings_list"
+                android:layout_width="fill_parent"
+                android:layout_height="fill_parent"
+                android:orientation="vertical"/>
+        </LinearLayout>
+
+        <!-- Prefered activities section -->
+        <TextView
+            style="?android:attr/listSeparatorTextViewStyle"
+            android:text="@string/controls_label" />
+
+        <RelativeLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical">
+            <Button android:id="@+id/force_stop_button"
+                android:layout_alignParentRight="true"
+                android:layout_alignParentTop="true"
+                android:layout_centerHorizontal="true"
+                android:layout_width="150dip"
+                android:text="@string/force_stop"
+                android:layout_height="wrap_content" />
+        </RelativeLayout>
+    </LinearLayout>
+</ScrollView>
+
diff --git a/res/layout/intent_sender.xml b/res/layout/intent_sender.xml
new file mode 100644
index 0000000..07fe67d
--- /dev/null
+++ b/res/layout/intent_sender.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Preferences/assets/res/any/layout/intent_sender.xml
+**
+** Copyright 2006, 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:paddingLeft="6dip"
+    android:paddingRight="6dip"
+    android:paddingBottom="3dip"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent">
+
+        <TextView
+                android:textStyle="bold"
+                android:maxLines="1"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/intent_sender_action_label" />
+
+        <EditText android:id="@+id/intent"
+                android:singleLine="true"
+                android:layout_marginTop="2dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:scrollHorizontally="true"
+                android:capitalize="none"
+                android:autoText="false" />
+
+        <TextView
+                android:textStyle="bold"
+                android:maxLines="1"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/intent_sender_data_label" />
+
+        <EditText android:id="@+id/data"
+                android:singleLine="true"
+                android:layout_marginTop="2dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:scrollHorizontally="true"
+                android:capitalize="none"
+                android:autoText="false" />
+
+        <TextView
+                android:textStyle="bold"
+                android:maxLines="1"
+                android:layout_marginTop="4dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/intent_sender_account_label" />
+
+        <EditText android:id="@+id/account"
+                android:singleLine="true"
+                android:layout_marginTop="2dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:scrollHorizontally="true"
+                android:capitalize="none"
+                android:autoText="false" />
+
+        <TextView
+                android:textStyle="bold"
+                android:maxLines="1"
+                android:layout_marginTop="4dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/intent_sender_resource_label" />
+
+        <EditText android:id="@+id/resource"
+                android:singleLine="true"
+                android:layout_marginTop="2dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:scrollHorizontally="true"
+                android:capitalize="none"
+                android:autoText="false" />
+
+        <Button android:id="@+id/sendbroadcast"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/intent_sender_sendbroadcast_text" />
+
+        <Button android:id="@+id/startactivity"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/intent_sender_startactivity_text" />
+    </LinearLayout>
+</ScrollView>
+
diff --git a/res/layout/list_content_with_empty_view.xml b/res/layout/list_content_with_empty_view.xml
new file mode 100644
index 0000000..324d23f
--- /dev/null
+++ b/res/layout/list_content_with_empty_view.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.
+-->
+
+ 
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_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:drawSelectorOnTop="false"
+        />
+
+    <TextView android:id="@+id/empty"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:padding="5dip"
+        android:gravity="center"
+        android:visibility="gone" />
+
+</FrameLayout>    
diff --git a/res/layout/locale_picker.xml b/res/layout/locale_picker.xml
new file mode 100644
index 0000000..476293f
--- /dev/null
+++ b/res/layout/locale_picker.xml
@@ -0,0 +1,28 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+
+    <ListView android:id="@android:id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:drawSelectorOnTop="false"
+    />
+
+</LinearLayout>
diff --git a/res/layout/locale_picker_in_setupwizard.xml b/res/layout/locale_picker_in_setupwizard.xml
new file mode 100644
index 0000000..184250d
--- /dev/null
+++ b/res/layout/locale_picker_in_setupwizard.xml
@@ -0,0 +1,44 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/select_your_language"
+        android:layout_gravity="center_horizontal"
+        android:paddingBottom="10dip"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+    />
+    
+    <View
+        android:layout_width="fill_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:drawSelectorOnTop="false"
+    />
+
+</LinearLayout>
diff --git a/res/layout/locale_picker_item.xml b/res/layout/locale_picker_item.xml
new file mode 100644
index 0000000..caa6fb5
--- /dev/null
+++ b/res/layout/locale_picker_item.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_height="wrap_content"
+    android:layout_width="fill_parent"
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeight"    
+    android:padding="5dip">
+<!--
+    <ImageView android:id="@+id/icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:focusable="false"
+        android:clickable="false"
+        android:src="@drawable/place_holder_for_locale"
+    />
+-->
+    <TextView android:id="@+id/locale"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+    />
+</LinearLayout >
diff --git a/res/layout/manage_applications_item.xml b/res/layout/manage_applications_item.xml
new file mode 100755
index 0000000..ecefcf5
--- /dev/null
+++ b/res/layout/manage_applications_item.xml
@@ -0,0 +1,59 @@
+<?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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:orientation="horizontal"
+    android:paddingRight="6dip"
+    android:paddingLeft="6dip"
+    android:paddingTop="5dip"
+    android:paddingBottom="5dip"
+    android:gravity="center_vertical" >
+
+    <ImageView android:id="@+id/app_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"/>
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content" >
+        <TextView android:id="@+id/app_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textStyle="bold"
+            android:singleLine="true"
+            android:ellipsize="marquee"
+            android:layout_marginBottom="2dip" />
+        <TextView android:id="@+id/app_size"
+            android:layout_marginTop="-4dip"
+            android:layout_gravity="center_vertical"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+    </LinearLayout>
+</LinearLayout>
+
diff --git a/res/layout/master_clear_final.xml b/res/layout/master_clear_final.xml
new file mode 100644
index 0000000..8de789a
--- /dev/null
+++ b/res/layout/master_clear_final.xml
@@ -0,0 +1,38 @@
+<?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.
+*/
+-->
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        style="@style/info_layout">        
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="20sp"
+        android:text="@string/master_clear_final_desc" />
+
+    <Button android:id="@+id/execute_master_clear"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="40dip"
+        android:layout_width="150dip"
+        android:layout_height="wrap_content"
+        android:text="@string/master_clear_final_button_text"
+        android:gravity="center" />
+        
+</LinearLayout>
diff --git a/res/layout/master_clear_primary.xml b/res/layout/master_clear_primary.xml
new file mode 100644
index 0000000..ffac171
--- /dev/null
+++ b/res/layout/master_clear_primary.xml
@@ -0,0 +1,39 @@
+<?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.
+*/
+-->
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        style="@style/info_layout">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="18sp"
+        android:text="@string/master_clear_desc" />
+
+    <Button android:id="@+id/initiate_master_clear"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="40dip"
+        android:layout_width="150dip"
+        android:layout_height="wrap_content"
+        android:text="@string/master_clear_button_text"
+        android:gravity="center" />
+        
+</LinearLayout>
diff --git a/res/layout/media_format_final.xml b/res/layout/media_format_final.xml
new file mode 100644
index 0000000..ab18f34
--- /dev/null
+++ b/res/layout/media_format_final.xml
@@ -0,0 +1,38 @@
+<?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.
+*/
+-->
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        style="@style/info_layout">        
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="20sp"
+        android:text="@string/media_format_final_desc" />
+
+    <Button android:id="@+id/execute_media_format"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="40dip"
+        android:layout_width="150dip"
+        android:layout_height="wrap_content"
+        android:text="@string/media_format_final_button_text"
+        android:gravity="center" />
+        
+</LinearLayout>
diff --git a/res/layout/media_format_primary.xml b/res/layout/media_format_primary.xml
new file mode 100644
index 0000000..3590492
--- /dev/null
+++ b/res/layout/media_format_primary.xml
@@ -0,0 +1,39 @@
+<?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.
+*/
+-->
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        style="@style/info_layout">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="18sp"
+        android:text="@string/media_format_desc" />
+
+    <Button android:id="@+id/initiate_media_format"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="40dip"
+        android:layout_width="150dip"
+        android:layout_height="wrap_content"
+        android:text="@string/media_format_button_text"
+        android:gravity="center" />
+        
+</LinearLayout>
diff --git a/res/layout/preference_bluetooth.xml b/res/layout/preference_bluetooth.xml
new file mode 100644
index 0000000..e832f20
--- /dev/null
+++ b/res/layout/preference_bluetooth.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2006 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="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingLeft="16dip"
+    android:paddingRight="?android:attr/scrollbarSize">
+    
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="6dip"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
+        android:layout_weight="1">
+    
+        <TextView android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceLarge" />
+            
+        <TextView android:id="@+android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignLeft="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:maxLines="2" />
+
+    </RelativeLayout>
+
+    <ImageView
+        android:id="@+id/btClass"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="12dip"
+        android:layout_gravity="center_vertical" />
+
+</LinearLayout>
diff --git a/res/layout/preference_dialog_ringervolume.xml b/res/layout/preference_dialog_ringervolume.xml
new file mode 100644
index 0000000..63cc97a
--- /dev/null
+++ b/res/layout/preference_dialog_ringervolume.xml
@@ -0,0 +1,71 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:orientation="vertical"
+        android:gravity="center_horizontal"
+        android:paddingBottom="20dip">
+        
+    <ImageView android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingTop="20dip" />
+            
+    <TextView
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/incoming_call_volume_title"
+            android:paddingTop="20dip"
+            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_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_height="wrap_content"
+            android:text="@string/checkbox_notification_same_as_incoming_call"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:layout_marginTop="6dip"
+            android:layout_marginLeft="20dip" 
+            android:layout_marginRight="20dip" />
+
+    <TextView android:id="@+id/notification_volume_title"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/notification_volume_title"
+            android:paddingTop="6dip"
+            android:paddingLeft="20dip" 
+            android:paddingRight="20dip" />
+    
+    <!-- Used for the notification volume -->
+    <SeekBar android:id="@+id/notification_volume_seekbar"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:paddingTop="6dip" 
+            android:paddingLeft="20dip" 
+            android:paddingRight="20dip" />
+    
+</LinearLayout>
+ 
diff --git a/res/layout/preference_progress_category.xml b/res/layout/preference_progress_category.xml
new file mode 100644
index 0000000..6528e54
--- /dev/null
+++ b/res/layout/preference_progress_category.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2006 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.
+-->
+
+<!-- Layout used for ProgressCategory in bluetooth settings. -->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      
+    style="?android:attr/listSeparatorTextViewStyle">
+
+    <!-- This and the other text view have the style of the list separator text view without the background and padding -->
+    <TextView 
+        style="?android:attr/listSeparatorTextViewStyle"
+        android:background="@null"
+        android:paddingLeft="0dip"
+        android:id="@+android:id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_centerVertical="true"
+    />
+        
+    <ProgressBar
+        android:id="@+id/scanning_progress"
+        android:text="@string/progress_scanning"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:layout_marginRight="?android:attr/scrollbarSize"
+        style="?android:attr/progressBarStyleSmallTitle"
+        />
+        
+    <TextView 
+        style="?android:attr/listSeparatorTextViewStyle"
+        android:background="@null"
+        android:paddingLeft="0dip"
+        android:id="@+id/scanning_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerVertical="true"
+        android:layout_toLeftOf="@id/scanning_progress"
+        android:layout_marginRight="5sp"
+        android:text="@string/progress_scanning"
+        />
+        
+</RelativeLayout>
diff --git a/res/layout/preference_widget_shortcut.xml b/res/layout/preference_widget_shortcut.xml
new file mode 100644
index 0000000..bb66f32
--- /dev/null
+++ b/res/layout/preference_widget_shortcut.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/shortcut" 
+    android:layout_width="40dip"
+    android:layout_height="40dip"
+    android:layout_marginRight="4sp"
+    android:layout_gravity="center_vertical"
+    android:background="#55ffffff"
+    android:gravity="center"
+    android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/res/layout/preference_widget_wifi_signal.xml b/res/layout/preference_widget_wifi_signal.xml
new file mode 100644
index 0000000..55dd587
--- /dev/null
+++ b/res/layout/preference_widget_wifi_signal.xml
@@ -0,0 +1,23 @@
+<?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.
+-->
+
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/signal" 
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_marginRight="4sp"
+    android:layout_gravity="center_vertical"
+    android:src="@drawable/wifi_signal" />
diff --git a/res/layout/proxy.xml b/res/layout/proxy.xml
new file mode 100644
index 0000000..914d0ea
--- /dev/null
+++ b/res/layout/proxy.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Browser/res/layout/proxy.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License"); 
+** you may not use this file except in compliance with the License. 
+** You may obtain a copy of the License at 
+**
+**     http://www.apache.org/licenses/LICENSE-2.0 
+**
+** Unless required by applicable law or agreed to in writing, software 
+** distributed under the License is distributed on an "AS IS" BASIS, 
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+** See the License for the specific language governing permissions and 
+** limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
+    android:orientation="vertical"
+    android:paddingLeft="6dip"
+    android:paddingRight="6dip"
+    android:paddingBottom="3dip"
+    android:layout_width="fill_parent" android:layout_height="wrap_content">
+
+    <TextView
+        android:textStyle="bold"
+        android:maxLines="1"
+        android:layout_marginTop="8dip"
+        android:layout_width="wrap_content" android:layout_height="wrap_content"
+        android:text="@string/proxy_hostname_label" />
+
+    <EditText android:id="@+id/hostname"
+        android:maxLines="1"
+        android:layout_marginTop="2dip"
+        android:layout_width="fill_parent" android:layout_height="wrap_content"
+        android:autoText="false"
+        android:capitalize="none"
+        android:scrollHorizontally="true" />
+
+    <TextView
+        android:textStyle="bold"
+        android:maxLines="1"
+        android:layout_marginTop="4dip"
+        android:layout_width="wrap_content" android:layout_height="wrap_content"
+        android:text="@string/proxy_port_label" />
+
+    <EditText android:id="@+id/port" 
+        android:numeric="integer"
+        android:maxLines="1" 
+        android:layout_marginTop="2dip"
+        android:layout_width="fill_parent" android:layout_height="wrap_content"
+        android:scrollHorizontally="true" />
+
+    <LinearLayout 
+        android:orientation="horizontal"
+        android:paddingTop="8dip"
+        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_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_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_weight="1"
+            android:text="@string/proxy_defaultView_text" />
+
+    </LinearLayout>
+</LinearLayout>
+    
diff --git a/res/layout/radio_info.xml b/res/layout/radio_info.xml
new file mode 100644
index 0000000..b560fff
--- /dev/null
+++ b/res/layout/radio_info.xml
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Settings/assets/res/any/layout/radio_info.xml
+**
+** Copyright 2006, 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="fill_parent" >
+
+    <LinearLayout style="@style/info_layout">
+
+        <!-- IMEI -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_imei_label" style="@style/info_label" />
+            <TextView android:id="@+id/imei" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Phone Number -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_phone_number_label" style="@style/info_label" />
+            <TextView android:id="@+id/number" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Network Identifier -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_current_network_label" style="@style/info_label" />
+            <TextView android:id="@+id/operator" 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>
+
+        <!-- Signal Strength -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_signal_strength_label" style="@style/info_label" />
+            <TextView android:id="@+id/dbm" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Location -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_signal_location_label" style="@style/info_label" />
+            <TextView android:id="@+id/location" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Neighboring Cids -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_neighboring_location_label"
+                      style="@style/info_label" />
+            <TextView android:id="@+id/neighboring" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Roaming -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_roaming_label" style="@style/info_label" />
+            <TextView android:id="@+id/roaming" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- GSM Service -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_gsm_service_label" style="@style/info_label" />
+            <TextView android:id="@+id/gsm" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- GPRS Service -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_gprs_service_label" style="@style/info_label" />
+            <TextView android:id="@+id/gprs" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Network Type -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_network_type_label" style="@style/info_label" />
+            <TextView android:id="@+id/network" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Message Waiting Indicator -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_message_waiting_label" style="@style/info_label" />
+            <TextView android:id="@+id/mwi" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Call Forwarding Indicator -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_call_redirect_label" style="@style/info_label" />
+            <TextView android:id="@+id/cfi" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Call Status -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_call_status_label" style="@style/info_label" />
+            <TextView android:id="@+id/call" style="@style/info_value" />
+        </LinearLayout>
+
+
+        <!-- Radio Resets -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_radio_resets_label" style="@style/info_label" />
+            <TextView android:id="@+id/resets" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Attempted Data Connections -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_data_attempts_label"
+                style="@style/info_label" />
+            <TextView android:id="@+id/attempts" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Successful Data Connections -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_data_successes_label"
+                style="@style/info_label" />
+            <TextView android:id="@+id/successes" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- GSM Disconnects -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_gsm_disconnects_label"
+                style="@style/info_label" />
+            <TextView android:id="@+id/disconnects" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- PPP Sent -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_ppp_sent_label"
+                style="@style/info_label" />
+            <TextView android:id="@+id/sent" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- PPP Received -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_ppp_received_label"
+                style="@style/info_label" />
+            <TextView android:id="@+id/received" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- PPP Sent since last received -->
+        <LinearLayout style="@style/entry_layout">
+            <TextView android:text="@string/radio_info_ppp_resets_label"
+                style="@style/info_label" />
+            <TextView android:id="@+id/sentSinceReceived" style="@style/info_value" />
+        </LinearLayout>
+
+        <!-- Preferred Network Type -->
+        <TextView
+                android:layout_width="fill_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_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"
+                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"
+                        android:layout_height="wrap_content">
+            <TextView android:id="@+id/smsc_label"
+                      android:text="@string/radio_info_smsc_label"
+                      android:layout_alignBaseline="@+id/update_smsc"
+                      style="@style/info_label" />
+            <Button android:id="@+id/refresh_smsc"
+                    android:textSize="14sp"
+                    android:layout_marginTop="8dip"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/radio_info_smsc_refresh_label"
+                    android:layout_alignParentRight="true"
+                    />
+            <Button android:id="@+id/update_smsc"
+                    android:textSize="14sp"
+                    android:layout_marginTop="8dip"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/radio_info_smsc_update_label"
+                    android:layout_toLeftOf="@+id/refresh_smsc"
+                    android:layout_alignBaseline="@+id/refresh_smsc"
+                    />
+            <EditText android:id="@+id/smsc"
+                      style="@style/form_value"
+                      android:layout_alignBaseline="@+id/refresh_smsc"
+                      android:layout_toLeftOf="@id/update_smsc"
+                      android:layout_toRightOf="@id/smsc_label" />
+        </RelativeLayout>
+
+        <!-- Test setting to ignore bad DNS, useful in lab environments -->
+        <LinearLayout style="@style/entry_layout">
+            <Button android:id="@+id/dns_check_toggle"
+                    android:textSize="14sp"
+                    android:layout_marginTop="8dip"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/radio_info_toggle_dns_check_label"
+                    />
+            <TextView android:id="@+id/dnsCheckState" style="@style/info_value" />
+        </LinearLayout>
+
+    </LinearLayout>
+</ScrollView>
diff --git a/res/layout/sdcard_settings_screen.xml b/res/layout/sdcard_settings_screen.xml
new file mode 100644
index 0000000..734a5b6
--- /dev/null
+++ b/res/layout/sdcard_settings_screen.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Settings/res/layout/sdcard_settings_screen.xml
+**
+** Copyright 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.
+*/
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+
+    <LinearLayout android:id="@+id/list"
+        android:orientation="vertical"
+        android:padding="10dip"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+    
+        <LinearLayout android:id="@+id/usb"
+            android:orientation="vertical"
+            android:paddingBottom="10dip"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content">
+
+            <CheckBox android:id="@+id/mass_storage"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content" 
+                android:text="@string/sdcard_settings_screen_mass_storage_text">
+                <requestFocus/>
+            </CheckBox>
+            
+            <TextView android:text="@string/sdcard_changes_instructions" style="@style/info_small" />
+        </LinearLayout>
+        
+        <!-- divider line -->
+        <View android:background="#FF000000"
+            android:layout_width="fill_parent"
+            android:layout_height="1dip" />
+    
+        <LinearLayout android:id="@+id/mounted" 
+            android:orientation="vertical" 
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:paddingTop="10dip">
+            
+            <TextView android:id="@+id/read_only"
+                android:text="@string/sdcard_settings_read_only_status" 
+                style="@style/info_label" />
+            
+            <Button android:id="@+id/sdcard_unmount"
+                android:text="@string/sdcard_unmount" 
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content" android:layout_height="wrap_content" />
+
+            <Button android:id="@+id/sdcard_format"
+                android:text="@string/sdcard_format" 
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="wrap_content" android:layout_height="wrap_content" />
+    
+            <TableLayout
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:paddingTop="10dip">
+                <TableRow>
+                    <TextView android:text="@string/sdcard_settings_total_bytes_label" style="@style/info_label" />
+                    <TextView android:id="@+id/total" style="@style/info_value" />
+                </TableRow>
+                <TableRow>
+                    <TextView android:text="@string/sdcard_settings_used_bytes_label" style="@style/info_label" />
+                    <TextView android:id="@+id/used" style="@style/info_value" />
+                </TableRow>
+                <TableRow>
+                    <TextView android:text="@string/sdcard_settings_available_bytes_label" style="@style/info_label" />
+                    <TextView android:id="@+id/available" style="@style/info_value" />
+                </TableRow>
+            </TableLayout>
+    
+        </LinearLayout>
+    
+        <LinearLayout style="@style/entry_layout" 
+            android:id="@+id/scanning" 
+            android:paddingTop="10dip">
+            <TextView android:text="@string/sdcard_settings_scanning_status" style="@style/info_label" />
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout" 
+            android:id="@+id/removed" 
+            android:paddingTop="10dip">
+            <TextView android:text="@string/sdcard_settings_not_present_status" style="@style/info_label" />
+        </LinearLayout>
+
+        <LinearLayout android:id="@+id/shared" 
+            android:orientation="vertical" 
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content" 
+            android:paddingTop="10dip">
+        
+            <LinearLayout style="@style/entry_layout" >
+                <TextView android:text="@string/sdcard_settings_mass_storage_status" style="@style/info_label" />
+            </LinearLayout>
+ 
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout" 
+            android:id="@+id/unmounted" 
+            android:paddingTop="10dip">
+            <TextView android:text="@string/sdcard_settings_unmounted_status" style="@style/info_label" />
+        </LinearLayout>
+
+        <LinearLayout style="@style/entry_layout" 
+            android:id="@+id/bad_removal" 
+            android:paddingTop="10dip">
+            <TextView android:text="@string/sdcard_settings_bad_removal_status" style="@style/info_label" />
+        </LinearLayout>
+    
+    </LinearLayout>
+</ScrollView>
+
diff --git a/res/layout/usage_stats.xml b/res/layout/usage_stats.xml
new file mode 100755
index 0000000..727052d
--- /dev/null
+++ b/res/layout/usage_stats.xml
@@ -0,0 +1,45 @@
+<?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">
+
+    <TextView
+        android:text="@string/display_order_text"
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content" />
+
+    <Spinner
+        android:id="@+id/typeSpinner"
+        android:layout_width="fill_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_height="wrap_content" > 
+        <TextView
+            android:text="@string/app_name_label"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:layout_width="wrap_content"
+            android:paddingRight="6dip"
+            android:layout_height="wrap_content" />
+        <TextView
+            android:text="@string/launch_count_label"
+            android:paddingRight="6dip"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+        <TextView
+            android:text="@string/usage_time_label"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+    </LinearLayout>
+    <ListView android:id="@+id/pkg_list"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:drawSelectorOnTop="false" />
+</LinearLayout>
diff --git a/res/layout/usage_stats_item.xml b/res/layout/usage_stats_item.xml
new file mode 100755
index 0000000..7ab0090
--- /dev/null
+++ b/res/layout/usage_stats_item.xml
@@ -0,0 +1,50 @@
+<?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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal"
+    android:minHeight="?android:attr/listPreferredItemHeight">
+
+    <TextView android:id="@+id/package_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:paddingRight="6dip"
+        android:paddingLeft="12dip"
+        android:maxLines="1" />
+
+    <TextView android:id="@+id/launch_count"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:paddingRight="6dip"
+        android:paddingLeft="12dip"
+        android:maxLines="1" />
+
+    <TextView android:id="@+id/usage_time"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:paddingRight="6dip"
+        android:paddingLeft="12dip"
+        android:maxLines="1" />
+</LinearLayout>
+
diff --git a/res/layout/wifi_ap_configure.xml b/res/layout/wifi_ap_configure.xml
new file mode 100644
index 0000000..d786cff
--- /dev/null
+++ b/res/layout/wifi_ap_configure.xml
@@ -0,0 +1,91 @@
+<?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"> 
+    
+    
+    
+        <!-- SSID -->
+    
+        <TextView
+                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" />
+    
+    
+    
+        <!-- Security -->
+        
+        <TextView
+                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" />
+                
+                
+        
+        <!-- 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
new file mode 100644
index 0000000..8c430fc
--- /dev/null
+++ b/res/layout/wifi_ap_info.xml
@@ -0,0 +1,61 @@
+<?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_info_row.xml b/res/layout/wifi_ap_info_row.xml
new file mode 100644
index 0000000..79064b0
--- /dev/null
+++ b/res/layout/wifi_ap_info_row.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content">
+    <TextView
+            android:id="@+id/name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="8dip"
+            android:textAppearance="?android:attr/textAppearanceSmallInverse" />
+    <TextView
+            android:id="@+id/value"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceSmallInverse"
+            android:textStyle="bold" />
+</LinearLayout>
diff --git a/res/layout/wifi_ap_retry_password.xml b/res/layout/wifi_ap_retry_password.xml
new file mode 100644
index 0000000..14a4eae
--- /dev/null
+++ b/res/layout/wifi_ap_retry_password.xml
@@ -0,0 +1,57 @@
+<?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/values-cs-nokeys/strings.xml b/res/values-cs-nokeys/strings.xml
new file mode 100644
index 0000000..38e089e
--- /dev/null
+++ b/res/values-cs-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Správa aplikací"</string>
+</resources>
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
new file mode 100644
index 0000000..a62f049
--- /dev/null
+++ b/res/values-cs/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Amerika"</item>
+    <item>"Evropa"</item>
+    <item>"Afrika"</item>
+    <item>"Asie"</item>
+    <item>"Austrálie"</item>
+    <item>"Tichomoří"</item>
+    <item>"Všechny"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 sekund"</item>
+    <item>"30 sekund"</item>
+    <item>"1 minuta"</item>
+    <item>"2 minuty"</item>
+    <item>"10 minut"</item>
+    <item>"Nevypínat"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automaticky"</item>
+    <item>"Žádné"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Žádné"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automaticky"</item>
+    <item>"WEP ASCII"</item>
+    <item>"Hexadecimální WEP"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Při vypnutí obrazovky"</item>
+    <item>"Nikdy, je-li zapnuto napájení"</item>
+    <item>"Nikdy"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Doba použití"</item>
+    <item>"Počet spuštění"</item>
+    <item>"Název aplikace"</item>
+  </string-array>
+</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
new file mode 100644
index 0000000..5aca72a
--- /dev/null
+++ b/res/values-cs/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Neznámé"</string>
+    <string name="turn_on_radio">"Zapnout rádio"</string>
+    <string name="turn_off_radio">"Vypnout rádio"</string>
+    <string name="turn_on_qxdm">"Povolit protokol QXDM SD"</string>
+    <string name="turn_off_qxdm">"Zakázat protokol QXDM SD"</string>
+    <string name="radioInfo_menu_viewADN">"Zobrazit adresář karty SIM"</string>
+    <string name="radioInfo_menu_viewFDN">"Zobrazit povolená telefonní čísla"</string>
+    <string name="radioInfo_menu_viewSDN">"Zobrazit čísla volání služeb"</string>
+    <string name="radioInfo_menu_getPDP">"Získat seznam PDP"</string>
+    <string name="radioInfo_menu_enableData">"Povolit připojení datových služeb"</string>
+    <string name="radioInfo_menu_disableData">"Zakázat připojení datových služeb"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Povolit startovací data"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Zakázat startovací data"</string>
+    <string name="radioInfo_service_in">"V provozu"</string>
+    <string name="radioInfo_service_out">"Nepokrytá oblast"</string>
+    <string name="radioInfo_service_emergency">"Pouze tísňová volání"</string>
+    <string name="radioInfo_service_off">"Rádio je vypnuto"</string>
+    <string name="radioInfo_roaming_in">"Roaming"</string>
+    <string name="radioInfo_roaming_not">"Bez roamingu"</string>
+    <string name="radioInfo_phone_idle">"Nečinný"</string>
+    <string name="radioInfo_phone_ringing">"Vyzvánění"</string>
+    <string name="radioInfo_phone_offhook">"Probíhající hovor"</string>
+    <string name="radioInfo_data_disconnected">"Odpojeno"</string>
+    <string name="radioInfo_data_connecting">"Připojování"</string>
+    <string name="radioInfo_data_connected">"Připojeno"</string>
+    <string name="radioInfo_data_suspended">"Pozastaveno"</string>
+    <string name="radioInfo_unknown">"neznámý"</string>
+    <string name="radioInfo_display_packets">"pakety"</string>
+    <string name="radioInfo_display_bytes">"B"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Odpojit kartu SD"</string>
+    <string name="sdcard_format">"Formátovat kartu SD"</string>
+    <string name="small_font">"Malá"</string>
+    <string name="medium_font">"Střední"</string>
+    <string name="large_font">"Velká"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"Karta SD"</string>
+    <string name="battery_info_status_label">"Stav baterie:"</string>
+    <string name="battery_info_scale_label">"Měřítko baterie:"</string>
+    <string name="battery_info_level_label">"Stav baterie:"</string>
+    <string name="battery_info_health_label">"Zdraví baterie:"</string>
+    <string name="battery_info_technology_label">"Technologie baterie:"</string>
+    <string name="battery_info_voltage_label">"Napětí baterie:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Teplota baterie:"</string>
+    <string name="battery_info_temperature_units">"°C"</string>
+    <string name="battery_info_uptime">"Čas od spuštění:"</string>
+    <string name="battery_info_awake_battery">"Doba provozu z baterie:"</string>
+    <string name="battery_info_awake_plugged">"Doba provozu při nabíjení:"</string>
+    <string name="battery_info_screen_on">"Doba zapnutí obrazovky:"</string>
+    <string name="battery_info_status_unknown">"Neznámé"</string>
+    <string name="battery_info_status_charging">"Nabíjení"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Vybíjení"</string>
+    <string name="battery_info_status_not_charging">"Nenabíjí se"</string>
+    <string name="battery_info_status_full">"Plná"</string>
+    <string name="battery_info_health_unknown">"Neznámé"</string>
+    <string name="battery_info_health_good">"Dobrá"</string>
+    <string name="battery_info_health_overheat">"Přehřátá"</string>
+    <string name="battery_info_health_dead">"Vybitá"</string>
+    <string name="battery_info_health_over_voltage">"Přepětí"</string>
+    <string name="battery_info_health_unspecified_failure">"Neznámá chyba"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Viditelné"</string>
+    <string name="bluetooth_is_discoverable">"Zařízení je viditelné v intervalu <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> s."</string>
+    <string name="bluetooth_not_discoverable">"Přepne zařízení do viditelného režimu"</string>
+    <string name="bluetooth_devices">"Zařízení Bluetooth"</string>
+    <string name="bluetooth_device_name">"Název zařízení"</string>
+    <string name="bluetooth_name_not_set">"Název není nastaven, použit název účtu"</string>
+    <string name="bluetooth_scan_for_devices">"Vyhledat zařízení"</string>
+    <string name="bluetooth_disconnect_blank">"Zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g> bude odpojeno."</string>
+    <string name="bluetooth_connected">"Připojeno"</string>
+    <string name="bluetooth_disconnected">"Odpojeno"</string>
+    <string name="bluetooth_disconnecting">"Odpojování..."</string>
+    <string name="bluetooth_connecting">"Připojování..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Párovat s tímto zařízením"</string>
+    <string name="bluetooth_pairing">"Párování..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"Náhlavní souprava či handsfree"</string>
+    <string name="progress_scanning">"Vyhledávání"</string>
+    <string name="bluetooth_notif_ticker">"Požadavek na párování zařízení Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Požadavek na párování"</string>
+    <string name="bluetooth_notif_message">"Povolit párování se zařízením "</string>
+    <string name="date_and_time">"Nastavení data a času"</string>
+    <string name="date_time_12_hour_sample">"13:00"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Volba časového pásma"</string>
+    <string name="display_preview_label">"Náhled:"</string>
+    <string name="display_font_size_label">"Velikost písma:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Odeslat <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"Spustit činnost <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Účet:"</string>
+    <string name="proxy_clear_text">"Vymazat"</string>
+    <string name="proxy_port_label">"Port"</string>
+    <string name="proxy_defaultView_text">"Obnovit výchozí nastavení"</string>
+    <string name="proxy_action_text">"Uložit"</string>
+    <string name="proxy_hostname_label">"Název hostitele"</string>
+    <string name="proxy_error">"Upozornění"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"Zadaný název hostitele není platný."</string>
+    <string name="proxy_error_empty_port">"Je třeba vyplnit pole port."</string>
+    <string name="proxy_error_empty_host_set_port">"Pokud je pole hostitel prázdné, musí být prázdné i pole port."</string>
+    <string name="proxy_error_invalid_port">"Zadaný port není platný."</string>
+    <string name="radio_info_signal_location_label">"Poloha:"</string>
+    <string name="radio_info_neighboring_location_label">"Sousední identifikátor CID:"</string>
+    <string name="radio_info_data_attempts_label">"Pokusy dat:"</string>
+    <string name="radio_info_gprs_service_label">"Služba GPRS:"</string>
+    <string name="radio_info_roaming_label">"Roaming:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Přesměrované hovory:"</string>
+    <string name="radio_info_ppp_resets_label">"Počet obnovení protokolu PPP od spuštění:"</string>
+    <string name="radio_info_gsm_disconnects_label">"Odpojení od sítě GSM:"</string>
+    <string name="radio_info_current_network_label">"Aktuální síť:"</string>
+    <string name="radio_info_data_successes_label">"Úspěšná data:"</string>
+    <string name="radio_info_ppp_received_label">"Přijaté protokoly PPP:"</string>
+    <string name="radio_info_gsm_service_label">"Služba GSM:"</string>
+    <string name="radio_info_signal_strength_label">"Síla signálu:"</string>
+    <string name="radio_info_call_status_label">"Stav hovoru:"</string>
+    <string name="radio_info_ppp_sent_label">"Odeslané informace PPP:"</string>
+    <string name="radio_info_radio_resets_label">"Resety rádia:"</string>
+    <string name="radio_info_message_waiting_label">"Čekající zprávy:"</string>
+    <string name="radio_info_phone_number_label">"Telefonní číslo:"</string>
+    <string name="radio_info_band_mode_label">"Zvolit pásmo rádia"</string>
+    <string name="radio_info_network_type_label">"Typ sítě:"</string>
+    <string name="radio_info_set_perferred_label">"Upřednostňovaný typ sítě:"</string>
+    <string name="radio_info_ping_ipaddr">"Použít test Ping na IpAddr:"</string>
+    <string name="radio_info_ping_hostname">"Provést test Ping hostitele (www.google.cz):"</string>
+    <string name="radio_info_http_client_test">"Test klienta HTTP:"</string>
+    <string name="radio_info_toggle_ciph_label">"Přepnout šifrování"</string>
+    <string name="ping_test_label">"Spustit test Ping"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Aktualizovat"</string>
+    <string name="radio_info_smsc_refresh_label">"Obnovit"</string>
+    <string name="radio_info_toggle_dns_check_label">"Přepnout kontrolu DNS"</string>
+    <string name="band_mode_title">"Nastavit pásmo pro GSM a UMTS"</string>
+    <string name="band_mode_loading">"Načítání seznamu pásem..."</string>
+    <string name="band_mode_set">"Nastavit"</string>
+    <string name="band_mode_failed">"Pásmo nenastaveno."</string>
+    <string name="band_mode_succeeded">"Pásmo nastaveno."</string>
+    <string name="sdcard_changes_instructions">"Změna se projeví při příštím připojení kabelu USB."</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Povolit velkokapacitní paměťové zařízení USB"</string>
+    <string name="sdcard_settings_total_bytes_label">"Celková paměť (bajty):"</string>
+    <string name="sdcard_settings_not_present_status">"Žádná karta SD není dostupná."</string>
+    <string name="sdcard_settings_available_bytes_label">"Dostupná paměť (bajty):"</string>
+    <string name="sdcard_settings_mass_storage_status">"Karta SD je využívána jako velkokapacitní paměťové zařízení."</string>
+    <string name="sdcard_settings_unmounted_status">"Nyní můžete kartu SD bezpečně odebrat."</string>
+    <string name="sdcard_settings_bad_removal_status">"Karta SD byla odstraněna za provozu."</string>
+    <string name="sdcard_settings_used_bytes_label">"Obsazená paměť (bajty):"</string>
+    <string name="sdcard_settings_scanning_status">"Vyhledávání mediálních souborů na kartě SD..."</string>
+    <string name="sdcard_settings_read_only_status">"Karta SD byla připojena pouze pro čtení."</string>
+    <string name="next_label">"Další"</string>
+    <string name="language_picker_title">"Národní prostředí"</string>
+    <string name="select_your_language">"Zvolte jazyk"</string>
+    <string name="activity_picker_label">"Zvolit činnost"</string>
+    <string name="device_info_label">"Info o zařízení"</string>
+    <string name="battery_info_label">"Info o baterii"</string>
+    <string name="battery_history_label">"Historie baterie"</string>
+    <string name="display_label">"Zobrazení"</string>
+    <string name="phone_info_label">"Info o telefonu"</string>
+    <string name="sd_card_settings_label">"Karta SD"</string>
+    <string name="proxy_settings_label">"Nastavení proxy serveru"</string>
+    <string name="cancel">"Zrušit"</string>
+    <string name="settings_label">"Nastavení"</string>
+    <string name="airplane_mode">"Režim V letadle"</string>
+    <string name="airplane_mode_summary">"Vypne všechna bezdrátová připojení"</string>
+    <string name="airplane_mode_turning_on">"Vypínání bezdrátových připojení..."</string>
+    <string name="airplane_mode_turning_off">"Povolování bezdrátových připojení..."</string>
+    <string name="radio_controls_title">"Ovládání bezdrátových sítí"</string>
+    <string name="radio_controls_summary">"Umožňuje spravovat WiFi, Bluetooth, režim v letadle a mobilní sítě"</string>
+    <string name="date_and_time_settings_title">"Datum a čas"</string>
+    <string name="date_and_time_settings_summary">"Umožňuje nastavit datum, čas, časové pásmo a formát"</string>
+    <string name="date_time_auto">"Automaticky"</string>
+    <string name="date_time_auto_summaryOn">"Budou použity hodnoty poskytnuté sítí"</string>
+    <string name="date_time_auto_summaryOff">"Jsou použity hodnoty poskytnuté sítí"</string>
+    <string name="date_time_24hour">"Použít 24hodinový formát"</string>
+    <string name="date_time_set_time">"Nastavení času"</string>
+    <string name="date_time_set_timezone">"Volba časového pásma"</string>
+    <string name="date_time_set_date">"Nastavení data"</string>
+    <string name="date_time_date_format">"Formát data"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Řadit abecedně"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Řadit podle časového pásma"</string>
+    <string name="security_settings_title">"Zabezpečení a poloha"</string>
+    <string name="security_settings_summary">"Umožňuje nastavit vaši polohu, odemknutí obrazovky a blokování karty SIM"</string>
+    <string name="security_passwords_title">"Hesla"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Zapíná Bluetooth"</string>
+    <string name="bluetooth_settings">"Nastavení Bluetooth"</string>
+    <string name="bluetooth_settings_title">"Nastavení Bluetooth"</string>
+    <string name="bluetooth_settings_summary">"Umožňuje spravovat připojení, nastavit název zařízení a viditelnost"</string>
+    <string name="bluetooth_pin_entry">"Požadavek na párování zařízení Bluetooth"</string>
+    <string name="bluetooth_device_info">"Info o zařízení Bluetooth"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Párování začnete zadáním kódu PIN."\n"(Zkuste 0000 nebo 1234.)"</string>
+    <string name="bluetooth_error_title">"Upozornění"</string>
+    <string name="bluetooth_pairing_error_message">"Při párování se zařízením <xliff:g id="DEVICE_NAME">%1$s</xliff:g> došlo k potížím."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Při párování se zařízením <xliff:g id="DEVICE_NAME">%1$s</xliff:g> došlo k potížím. Zadaný kód PIN je nesprávný."</string>
+    <string name="bluetooth_connecting_error_message">"Při připojování k zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g> došlo k potížím."</string>
+    <string name="bluetooth_preference_scan_title">"Vyhledat zařízení"</string>
+    <string name="bluetooth_device_context_connect">"Připojit"</string>
+    <string name="bluetooth_device_context_disconnect">"Odpojit"</string>
+    <string name="bluetooth_device_context_pair_connect">"Párovat a připojit"</string>
+    <string name="bluetooth_device_context_unpair">"Zrušit párování"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Odpojit a zrušit párování"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Možnosti"</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Připojit k síti…"</string>
+    <string name="bluetooth_profile_a2dp">"Média"</string>
+    <string name="bluetooth_profile_headset">"Telefon"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Připojeno ke zvukovému médiu"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Připojeno k náhlavní soupravě"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Připojeno k náhlavní soupravě a zvukovému médiu"</string>
+    <string name="bluetooth_device_advanced_title">"Možnosti zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Připojit"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Umožňuje připojení zařízení s rozhraním Bluetooth"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profily"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Připojeno ke zvukovému médiu"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Připojeno k náhlavní soupravě"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Umožňuje připojení zvukového média"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Umožňuje připojení náhlavní soupravy"</string>
+    <string name="wifi">"WiFi"</string>
+    <string name="wifi_quick_toggle_title">"WiFi"</string>
+    <string name="wifi_quick_toggle_summary">"Zapíná WiFi"</string>
+    <string name="wifi_settings">"Nastavení WiFi"</string>
+    <string name="wifi_settings_category">"Nastavení WiFi"</string>
+    <string name="wifi_settings_summary">"Umožňuje nastavit a spravovat přístupové body bezdrátové sítě"</string>
+    <string name="forget_network">"Odstranit"</string>
+    <string name="wifi_status">"Stav"</string>
+    <string name="wifi_link_speed">"Rychlost"</string>
+    <string name="wifi_signal_3">"Vynikající"</string>
+    <string name="wifi_signal_2">"Dobrá"</string>
+    <string name="wifi_signal_1">"Dostačující"</string>
+    <string name="wifi_signal_0">"Nízká"</string>
+    <string name="security">"Zabezpečení"</string>
+    <string name="wifi_security_open">"Nezabezpečená"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Neznámé"</string>
+    <string name="wifi_security_verbose_open">"Nezabezpečená síť"</string>
+    <string name="wifi_security_verbose_wep">"Zabezpečení WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Zabezpečení WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Zabezpečení WPA2"</string>
+    <string name="ip_address">"Adresa IP"</string>
+    <string name="signal">"Síla signálu"</string>
+    <string name="wifi_starting">"Zapínání WiFi..."</string>
+    <string name="wifi_stopping">"Vypínání..."</string>
+    <string name="wifi_error">"Chyba"</string>
+    <string name="error_starting">"WiFi se nepodařilo spustit."</string>
+    <string name="error_stopping">"WiFi se nepodařilo zastavit."</string>
+    <string name="error_scanning">"Nepodařilo se vyhledávat sítě."</string>
+    <string name="error_connecting">"K síti se nelze připojit."</string>
+    <string name="error_saving">"Síť nelze uložit."</string>
+    <string name="connect">"Připojit"</string>
+    <string name="connect_to_blank">"Připojit k síti <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Heslo bezdrátové sítě"</string>
+    <string name="please_type_hex_key">"Hexadecimální klíč WEP (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Zobrazovat heslo."</string>
+    <string name="scan_wifi">"Vyhledávání"</string>
+    <string name="summary_not_in_range">"Mimo dosah"</string>
+    <string name="summary_remembered">"Uložené nastavení"</string>
+    <string name="summary_connection_failed">"Připojení se nezdařilo, zkuste to znovu."</string>
+    <string name="wifi_access_points">"Sítě WiFi"</string>
+    <string name="wifi_type_ssid">"Identifikátor SSID sítě"</string>
+    <string name="wifi_security">"Zabezpečení"</string>
+    <string name="wifi_save_config">"Uložit"</string>
+    <string name="wifi_password_unchanged">"(nezměněno)"</string>
+    <string name="wifi_add_other_network">"Přidat síť WiFi"</string>
+    <string name="wifi_notify_open_networks">"Oznamování sítě"</string>
+    <string name="wifi_notify_open_networks_summary">"Oznamování dostupných nezabezpečených sítí"</string>
+    <string name="wifi_password_incorrect_error">"Původní síťové heslo bylo zadáno nesprávně. Zkuste to znovu."</string>
+    <string name="wifi_generic_connection_error">"Při připojování k síti došlo k chybě. Zkuste to znovu."</string>
+    <string name="wifi_menu_advanced">"Pokročilé"</string>
+    <string name="wifi_ip_settings_titlebar">"Nastavení adresy IP"</string>
+    <string name="wifi_ip_settings_menu_save">"Uložit"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Zrušit"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Zadejte platnou adresu IP."</string>
+    <string name="wifi_use_static_ip">"Použít statickou adresu IP"</string>
+    <string name="wifi_ip_address">"Adresa IP"</string>
+    <string name="wifi_dns1">"Server DNS 1"</string>
+    <string name="wifi_dns2">"Server DNS 2"</string>
+    <string name="wifi_gateway">"Brána"</string>
+    <string name="wifi_netmask">"Maska sítě"</string>
+    <string name="wifi_context_menu_connect">"Připojit k síti"</string>
+    <string name="wifi_context_menu_forget">"Odstranit záznam sítě"</string>
+    <string name="wifi_context_menu_change_password">"Změnit heslo"</string>
+    <string name="wifi_advanced_titlebar">"Pokročilé"</string>
+    <string name="wifi_setting_num_channels_title">"Regulační doména"</string>
+    <string name="wifi_setting_num_channels_summary">"Umožňuje nastavit počet použitých kanálů"</string>
+    <string name="wifi_setting_num_channels_error">"Při nastavení regulační domény došlo k chybě."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"Kanály: <xliff:g id="NUM_CHANNELS">%1$d</xliff:g>"</string>
+    <string name="wifi_setting_sleep_policy_title">"Zásady používání sítě Wi-Fi v režimu spánku"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Určit, kdy přepnout ze sítě Wi-Fi na mobilní datový přenos"</string>
+    <string name="wifi_setting_sleep_policy_error">"Při nastavení zásad pro režim spánku došlo k problému."</string>
+    <string name="wifi_advanced_mac_address_title">"Adresa MAC"</string>
+    <string name="fragment_status_scanning">"Vyhledávání..."</string>
+    <string name="fragment_status_connecting">"Připojování k síti <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"Ověřování v síti <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_obtaining_ip">"Získávání adresy IP ze sítě <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_connected">"Připojeno k síti <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Odpojování od sítě <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_disconnected">"Odpojeno"</string>
+    <string name="fragment_status_failed">"Připojení se nezdařilo."</string>
+    <string name="status_scanning">"Vyhledávání..."</string>
+    <string name="status_connecting">"Připojování..."</string>
+    <string name="status_authenticating">"Ověřování..."</string>
+    <string name="status_obtaining_ip">"Získávání adresy..."</string>
+    <string name="status_connected">"Připojeno"</string>
+    <string name="status_disconnecting">"Odpojování..."</string>
+    <string name="status_disconnected">"Odpojeno"</string>
+    <string name="status_failed">"Připojení se nezdařilo."</string>
+    <string name="sound_and_display_settings">"Obraz a zvuk"</string>
+    <string name="sound_settings">"Nastavení zvuku"</string>
+    <string name="sound_and_display_settings_summary">"Umožňuje nastavit vyzváněcí tón, oznámení a jas obrazovky"</string>
+    <string name="silent_mode_title">"Tichý režim"</string>
+    <string name="silent_mode_summary">"Ztiší všechny zvuky kromě médií a upozornění"</string>
+    <string name="ringtone_title">"Vyzváněcí tón telefonu"</string>
+    <string name="ringtone_summary">"Umožňuje nastavit výchozí vyzváněcí tón příchozího hovoru"</string>
+    <string name="ring_volume_title">"Hlasitost vyzvánění"</string>
+    <string name="ring_volume_summary">"Umožňuje nastavit hlasitost příchozích hovorů a oznámení"</string>
+    <string name="vibrate_title">"Vibrace telefonu"</string>
+    <string name="vibrate_summary">"Příchozí hovory jsou provázeny vibracemi"</string>
+    <string name="notification_sound_title">"Tón oznámení"</string>
+    <string name="notification_sound_summary">"Umožňuje nastavit výchozí tón oznámení"</string>
+    <string name="incoming_call_volume_title">"Hlasitost příchozího hovoru"</string>
+    <string name="notification_volume_title">"Hlasitost oznámení"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Použije hlasitost příchozích hovorů také pro oznámení"</string>
+    <string name="notification_sound_dialog_title">"Zvolit vyzváněcí tón oznámení"</string>
+    <string name="media_volume_title">"Hlasitost médií"</string>
+    <string name="media_volume_summary">"Umožňuje nastavit hlasitost hudby a videí"</string>
+    <string name="dtmf_tone_enable_title">"Dotyky jsou provázeny zvuky"</string>
+    <string name="dtmf_tone_enable_summary_on">"Tlačítka číselníku jsou provázena zvuky"</string>
+    <string name="dtmf_tone_enable_summary_off">"Tlačítka číselníku jsou provázena zvuky"</string>
+    <string name="sound_effects_enable_title">"Výběr se zvuky"</string>
+    <string name="sound_effects_enable_summary_on">"Výběr na obrazovce je provázen zvuky"</string>
+    <string name="sound_effects_enable_summary_off">"Výběr na obrazovce je provázen zvuky"</string>
+    <string name="play_media_notification_sounds_enable_title">"Oznámení karty SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Vypnout zvuky oznámení karty SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Povolit zvuky oznámení karty SD"</string>
+    <string name="sync_settings">"Synchronizace dat"</string>
+    <string name="sync_settings_summary">"Umožňuje vybrat aplikace pro synchronizaci"</string>
+    <string name="display_settings">"Nastavení zobrazení"</string>
+    <string name="animations_title">"Animace"</string>
+    <string name="animations_summary_on">"Zobrazit animace otevírání a zavírání oken"</string>
+    <string name="animations_summary_off">"Animuje otevírání a zavírání oken"</string>
+    <string name="brightness">"Jas"</string>
+    <string name="brightness_summary">"Nastavte jas displeje"</string>
+    <string name="screen_timeout">"Interval vypnutí obrazovky"</string>
+    <string name="screen_timeout_summary">"Upravte prodlevu, po které se obrazovka automaticky vypne"</string>
+    <string name="sim_lock_settings">"Nastavení zámku karty SIM"</string>
+    <string name="sim_lock_settings_category">"Nastavení zámku karty SIM"</string>
+    <string name="sim_lock_settings_title">"Zámek karty SIM"</string>
+    <string name="sim_pin_toggle">"Zamykat kartu SIM"</string>
+    <string name="sim_lock_on">"K použití telefonu je vyžadován kód PIN"</string>
+    <string name="sim_lock_off">"K použití telefonu je vyžadován PIN"</string>
+    <string name="sim_pin_change">"Změnit kód PIN karty SIM"</string>
+    <string name="sim_enter_pin">"Kód PIN karty SIM"</string>
+    <string name="sim_enable_sim_lock">"Zamykat kartu SIM"</string>
+    <string name="sim_disable_sim_lock">"Odemknout kartu SIM"</string>
+    <string name="sim_enter_old">"Starý kód PIN karty SIM"</string>
+    <string name="sim_enter_new">"Nový kód PIN karty SIM"</string>
+    <string name="sim_reenter_new">"Potvrďte nový kód PIN."</string>
+    <string name="sim_change_pin">"Kód PIN karty SIM"</string>
+    <string name="sim_bad_pin">"Nesprávný kód PIN."</string>
+    <string name="sim_pins_dont_match">"Kódy PIN nejsou shodné."</string>
+    <string name="sim_change_failed">"Změna kódu PIN se nezdařila."\n"Kód PIN je zřejmě nesprávný."</string>
+    <string name="sim_change_succeeded">"Kód PIN karty SIM byl úspěšně změněn."</string>
+    <string name="sim_lock_failed">"Stav zámku karty SIM nelze změnit."\n"Zřejmě jste zadali nesprávný kód PIN."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Zrušit"</string>
+    <string name="device_info_settings">"Stav telefonu"</string>
+    <string name="system_update_settings_list_item_title">"Aktualizace systému"</string>
+    <string name="system_update_settings_list_item_summary">"Zkontrolovat aktualizace systému"</string>
+    <string name="firmware_version">"Verze firmwaru"</string>
+    <string name="model_number">"Označení modelu"</string>
+    <string name="baseband_version">"Verze základního pásma"</string>
+    <string name="kernel_version">"Verze jádra"</string>
+    <string name="build_number">"Číslo sestavení"</string>
+    <string name="device_info_not_available">"Nedostupný"</string>
+    <string name="device_status_activity_title">"Stav"</string>
+    <string name="device_status">"Stav"</string>
+    <string name="device_status_summary">"IMEI, telefonní číslo, signál, atd."</string>
+    <string name="storage_settings_title">"Karta SD a paměť telefonu"</string>
+    <string name="storage_settings_summary">"Odpojuje kartu SD a zobrazuje dostupnou paměť"</string>
+    <string name="status_number">"Telefonní číslo"</string>
+    <string name="status_network_type">"Typ mobilní sítě"</string>
+    <string name="status_data_state">"Stav mobilní sítě"</string>
+    <string name="status_service_state">"Stav služby"</string>
+    <string name="status_signal_strength">"Síla signálu"</string>
+    <string name="status_roaming">"Roaming"</string>
+    <string name="status_operator">"Síť"</string>
+    <string name="status_wifi_mac_address">"Adresa MAC sítě WiFi"</string>
+    <string name="status_bt_address">"Adresa zařízení Bluetooth"</string>
+    <string name="status_unavailable">"Nedostupný údaj"</string>
+    <string name="status_network_traffic_stats">"Využití sítě"</string>
+    <string name="status_network_traffic_summary">"Odesláno: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Přijato: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Doba provozu"</string>
+    <string name="status_awake_time">"Doba provozu"</string>
+    <string name="internal_memory">"Interní paměť telefonu"</string>
+    <string name="sd_memory">"Karta SD"</string>
+    <string name="memory_available">"Dostupná paměť"</string>
+    <string name="memory_size">"Celková paměť"</string>
+    <string name="sd_eject">"Odpojit kartu SD"</string>
+    <string name="sd_eject_summary">"Odpojit kartu SD za účelem bezpečného odebrání"</string>
+    <string name="sd_format">"Formátovat kartu SD"</string>
+    <string name="sd_format_summary">"Formátovat (vymazat) kartu SD"</string>
+    <string name="sd_unavailable">"Nedostupný údaj"</string>
+    <string name="read_only">" (Pouze pro čtení)"</string>
+    <string name="battery_status_title">"Stav baterie"</string>
+    <string name="battery_level_title">"Stav baterie"</string>
+    <string name="apn_settings">"Přístupové body"</string>
+    <string name="apn_edit">"Upravit přístupový bod"</string>
+    <string name="apn_not_set">"&lt;Nenastaveno&gt;"</string>
+    <string name="apn_name">"Jméno"</string>
+    <string name="apn_apn">"Název přístupvého bodu (APN)"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Port"</string>
+    <string name="apn_user">"Uživatelské jméno"</string>
+    <string name="apn_password">"Heslo"</string>
+    <string name="apn_server">"Server"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"Proxy server systému MMS"</string>
+    <string name="apn_mms_port">"Port systému MMS"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"typ APN"</string>
+    <string name="menu_delete">"Smazat APN"</string>
+    <string name="menu_new">"Nový APN"</string>
+    <string name="menu_save">"Uložit"</string>
+    <string name="menu_cancel">"Zrušit"</string>
+    <string name="error_title">"Upozornění"</string>
+    <string name="error_name_empty">"Pole Název nemůže být prázdné."</string>
+    <string name="error_apn_empty">"Název AP nemůže být prázdný."</string>
+    <string name="error_mcc_not3">"Pole MCC musí obsahovat alespoň 3 číslice."</string>
+    <string name="error_mnc_not23">"Pole MNC musí obsahovat 2 nebo 3 číslice."</string>
+    <string name="master_clear_title">"Obnovení továrních dat"</string>
+    <string name="master_clear_summary">"Umožňuje odstranit všechna data v telefonu"</string>
+    <string name="master_clear_desc">"Tato akce obnoví výchozí tovární nastavení telefonu. Všechna data a stažené aplikace budou smazány."</string>
+    <string name="master_clear_button_text">"Resetovat telefon"</string>
+    <string name="master_clear_final_desc">"Opravdu chcete resetovat telefon? Smažete veškerá data a aplikace. Proces nelze zvrátit."</string>
+    <string name="master_clear_final_button_text">"Odstranit vše"</string>
+    <string name="master_clear_gesture_prompt">"Nakreslete své bezpečnostní gesto"</string>
+    <string name="master_clear_gesture_explanation">"Chcete-li potvrdit resetování telefonu, musíte nakreslit bezpečnostní gesto."</string>
+    <string name="master_clear_failed">"Pokus o reset se nezdařil, protože služba System Clear není dostupná."</string>
+    <string name="media_format_title">"Formátovat kartu SD"</string>
+    <string name="media_format_summary">"Vymaže všechna data na kartě SD"</string>
+    <string name="media_format_desc">"Tato akce smaže kartu SD v telefonu. VŠECHNA data na kartě budou ztracena."</string>
+    <string name="media_format_button_text">"Formátovat kartu SD"</string>
+    <string name="media_format_final_desc">"Formátování karty SD. Chcete smazat všechna svoje média? Akci nelze vrátit zpět."</string>
+    <string name="media_format_final_button_text">"Smazat vše"</string>
+    <string name="media_format_gesture_prompt">"Nakreslete své bezpečnostní gesto"</string>
+    <string name="media_format_gesture_explanation">"Formátování karty SD je potřeba potvrdit nakreslením bezpečnostního gesta."</string>
+    <string name="call_settings_title">"Nastavení hovorů"</string>
+    <string name="call_settings_summary">"Umožňuje nastavit hlasovou schránku, přesměrování hovorů, další hovory na lince a ID volajícího"</string>
+    <string name="network_settings_title">"Mobilní sítě"</string>
+    <string name="network_settings_summary">"Umožňuje nastavit možnosti roamingu, sítí a názvy přístupových bodů"</string>
+    <string name="location_title">"Zdroje polohy"</string>
+    <string name="location_network_based">"Zaměření přes bezdrátové sítě"</string>
+    <string name="location_networks_disabled">"Zobrazuje polohu v aplikacích (jako Mapy) pomocí bezdrátových sítí"</string>
+    <string name="location_neighborhood_level">"Poloha je zaměřena pomocí WiFi nebo mobilních sítí"</string>
+    <string name="location_gps">"Zapnout přijímač systému GPS"</string>
+    <string name="location_street_level">"Zaměření je s přesností na úrovni ulic (zrušením této volby lze šetřit baterii)"</string>
+    <string name="location_gps_disabled">"Umožňuje zaměřit na úrovni ulic (vetší spotřeba baterie a nutný výhled na oblohu)"</string>
+    <string name="about_settings">"Info o telefonu"</string>
+    <string name="about_settings_summary">"Zobrazuje právní informace, stav telefonu a verzi softwaru"</string>
+    <string name="legal_information">"Právní informace"</string>
+    <string name="contributors_title">"Přispěvatelé"</string>
+    <string name="copyright_title">"Autorská práva"</string>
+    <string name="license_title">"Licence"</string>
+    <string name="terms_title">"Smluvní podmínky"</string>
+    <string name="settings_license_activity_title">"Licence open source"</string>
+    <string name="settings_license_activity_unavailable">"Při načítání licencí došlo k chybě."</string>
+    <string name="settings_license_activity_loading">"Načítání..."</string>
+    <string name="lock_settings_title">"Gesto pro odemknutí obrazovky"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Změna bezpečnostního gesta"</string>
+    <string name="lockpattern_need_to_unlock">"Potvrďte uložené gesto"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Zkuste to prosím znovu:"</string>
+    <string name="lockpattern_recording_intro_header">"Nakreslete své bezpečnostní gesto."</string>
+    <string name="lockpattern_recording_intro_footer">"Nápovědu zobrazíte stisknutím klávesy Menu."</string>
+    <string name="lockpattern_recording_inprogress">"Na závěr zdvihněte prst z obrazovky."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Minimální počet spojených teček je <xliff:g id="NUMBER">%d</xliff:g>. Zkuste to znovu:"</string>
+    <string name="lockpattern_pattern_entered_header">"Gesto bylo zaznamenáno."</string>
+    <string name="lockpattern_need_to_confirm">"Pro potvrzení nakreslete gesto znovu:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Nové bezpečnostní gesto:"</string>
+    <string name="lockpattern_confirm_button_text">"Potvrdit"</string>
+    <string name="lockpattern_restart_button_text">"Nakreslit znovu"</string>
+    <string name="lockpattern_retry_button_text">"Zkusit znovu"</string>
+    <string name="lockpattern_continue_button_text">"Pokračovat"</string>
+    <string name="lockpattern_settings_title">"Bezpečnostní gesto"</string>
+    <string name="lockpattern_settings_enable_title">"Požadovat gesto"</string>
+    <string name="lockpattern_settings_enable_summary">"Obrazovku je nutné odemknout pomocí bezpečnostního gesta"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Použití viditelného gesta"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Použití dotykového ověření"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Nastavení bezpečnostního gesta"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Změna bezpečnostního gesta"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Bezpečnostní gesto nakreslíte takto"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Příliš mnoho neplatných pokusů."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Sekundy zbývající do dalšího pokusu: <xliff:g id="NUMBER">%d</xliff:g>."</string>
+    <string name="skip_button_label">"Zrušit"</string>
+    <string name="next_button_label">"Další"</string>
+    <string name="lock_title">"Zabezpečení telefonu"</string>
+    <string name="lock_intro_message"><font size="17">"Chraňte svůj telefon před nepovoleným použitím vytvořením osobního bezpečnostního gesta. "\n<font height="17">\n</font><b>"1"</b>"  Příklad takového gesta uvidíte na dalším snímku. "\n<font height="17">\n</font><b>"2"</b>"  Až budete připraveni, nakreslete své osobní bezpečnostní gesto. Vyzkoušejte více gest, ale vždy spojte alespoň čtyři tečky. "\n<font height="17">\n</font><b>"3"</b>"  Chcete-li gesto potvrdit, zopakujte je. "\n<font height="17">\n</font><b>"Jste připraveni začít? Zvolte tlačítko Další "</b>". "\n<font height="3">\n</font>"Chcete-li ponechat telefon nezabezpečený, zvolte tlačítko Zrušit."</font></string>
+    <string name="lock_example_title">"Příklad gesta"</string>
+    <string name="lock_example_message">"Spojte alespoň čtyři tečky."\n" "\n"Až budete připraveni nakreslit vlastní gesto, zvolte tlačítko Další."</string>
+    <string name="manageapplications_settings_title">"Správa aplikací"</string>
+    <string name="manageapplications_settings_summary">"Spravovat a odebrat instalované aplikace"</string>
+    <string name="applications_settings">"Aplikace"</string>
+    <string name="applications_settings_summary">"Umožňuje spravovat aplikace a nastavit klávesové zkratky rychlého spuštění"</string>
+    <string name="applications_settings_header">"Nastavení aplikace"</string>
+    <string name="install_applications">"Neznámé zdroje"</string>
+    <string name="install_unknown_applications">"Povoluje instalaci aplikací mimo službu Market"</string>
+    <string name="install_all_warning">"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">"Info o aplikaci"</string>
+    <string name="storage_label">"Paměť"</string>
+    <string name="auto_launch_label">"Spustit jako výchozí"</string>
+    <string name="permissions_label">"Povolení"</string>
+    <string name="cache_header_label">"Mezipaměť"</string>
+    <string name="clear_cache_btn_text">"Vymazat mezipaměť"</string>
+    <string name="cache_size_label">"Mezipaměť"</string>
+    <string name="controls_label">"Ovládací prvky"</string>
+    <string name="force_stop">"Vynutit ukončení"</string>
+    <string name="total_size_label">"Celkem"</string>
+    <string name="application_size_label">"Aplikace"</string>
+    <string name="data_size_label">"Data"</string>
+    <string name="uninstall_text">"Odinstalovat"</string>
+    <string name="clear_user_data_text">"Vymazat data"</string>
+    <string name="auto_launch_enable_text">"Aplikace byla nastavena, aby se pro některé akce spouštěla jako výchozí."</string>
+    <string name="auto_launch_disable_text">"Žádná výchozí nastavení."</string>
+    <string name="clear_activities">"Vymazat výchozí nastavení"</string>
+    <string name="unknown">"Neznámé"</string>
+    <string name="sort_order_alpha">"Řadit"</string>
+    <string name="sort_order_size">"Řadit podle velikosti"</string>
+    <string name="manage_space_text">"Správa paměti"</string>
+    <string name="filter">"Filtrovat"</string>
+    <string name="filter_dlg_title">"Vyberte možnosti filtru"</string>
+    <string name="filter_apps_all">"Všechny"</string>
+    <string name="filter_apps_third_party">"Aplikace třetí strany"</string>
+    <string name="filter_apps_running">"Spuštěné"</string>
+    <string name="loading">"Načítání..."</string>
+    <string name="recompute_size">"Přepočítávání velikosti..."</string>
+    <string name="clear_data_dlg_title">"Smazat"</string>
+    <string name="clear_data_dlg_text">"Všechny informace uložené v této aplikaci budou trvale smazány."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Zrušit"</string>
+    <string name="app_not_found_dlg_title">"Aplikace nebyla nalezena"</string>
+    <string name="app_not_found_dlg_text">"Aplikaci se nepodařilo najít na seznamu nainstalovaných aplikací."</string>
+    <string name="clear_data_failed">"Nepodařilo se vymazat data aplikace."</string>
+    <string name="security_settings_desc">"Tato aplikace má přístup k následujícím položkám telefonu:"</string>
+    <string name="computing_size">"Probíhá výpočet…"</string>
+    <string name="invalid_size_value">"Nepodařilo se určit velikost balíčku"</string>
+    <string name="empty_list_msg">"Žádné aplikace třetí strany nejsou nainstalovány."</string>
+    <string name="language_settings">"Národní prostředí a text"</string>
+    <string name="language_settings_summary">"Nastavení národního prostředí (jazyka a oblasti) a možností zadávání a automatických oprav textu"</string>
+    <string name="language_category">"Nastavení národního prostředí"</string>
+    <string name="text_category">"Nastavení textu"</string>
+    <string name="phone_language">"Volba národního prostředí"</string>
+    <string name="phone_language_summary">"Vyberte jazyk a oblast"</string>
+    <string name="auto_replace">"Automatické nahrazování"</string>
+    <string name="auto_replace_summary">"Opravuje pravopisné chyby"</string>
+    <string name="auto_caps">"Automatická velká písmena"</string>
+    <string name="auto_caps_summary">"První písmeno ve větě je automaticky velké"</string>
+    <string name="auto_punctuate">"Automatická interpunkce"</string>
+    <string name="hardkeyboard_category">"Nastavení fyzické klávesnice"</string>
+    <string name="auto_punctuate_summary">"Znak „.“ lze vložit dvěma stisky klávesy Mezerník."</string>
+    <string name="show_password">"Zobrazování hesel"</string>
+    <string name="show_password_summary">"Zadávané heslo je zobrazováno"</string>
+    <string name="user_dict_settings_titlebar">"Uživatelský slovník"</string>
+    <string name="user_dict_settings_title">"Uživatelský slovník"</string>
+    <string name="user_dict_settings_summary">"Přidat nebo odebrat slova z uživatelského slovníku"</string>
+    <string name="user_dict_settings_add_menu_title">"Přidat"</string>
+    <string name="user_dict_settings_add_dialog_title">"Přidat do slovníku"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Upravit"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Smazat"</string>
+    <string name="user_dict_settings_empty_text">"V uživatelském slovníku nejsou žádná slova. Slovo můžete přidat pomocí nabídky."</string>
+    <string name="testing">"Testování"</string>
+    <string name="testing_phone_info">"Info o telefonu"</string>
+    <string name="testing_battery_info">"Info o baterii"</string>
+    <string name="testing_battery_history">"Historie baterie"</string>
+    <string name="quick_launch_title">"Rychlé spuštění"</string>
+    <string name="quick_launch_summary">"Umožňuje nastavit klávesové zkratky pro spouštění aplikací"</string>
+    <string name="quick_launch_assign_application">"Přiřadit aplikaci"</string>
+    <string name="quick_launch_no_shortcut">"Žádná klávesová zkratka"</string>
+    <string name="quick_launch_shortcut">"Hledat + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Vymazat"</string>
+    <string name="quick_launch_clear_dialog_message">"Klávesová zkratka <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) bude vymazána."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Zrušit"</string>
+    <string name="quick_launch_display_mode_applications">"Aplikace"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Klávesové zkratky"</string>
+    <string name="input_methods_settings_title">"Zadávání textu"</string>
+    <string name="input_methods_settings_summary">"Správa možností zadávání textu"</string>
+    <string name="input_methods_settings_label_format">"%s: nastavení"</string>
+    <string name="development_settings_title">"Vývoj"</string>
+    <string name="development_settings_summary">"Umožňuje nastavit možnosti pro vývoj aplikace"</string>
+    <string name="enable_adb">"Ladění USB"</string>
+    <string name="enable_adb_summary">"Povoluje režim ladění s připojeným zařízením USB"</string>
+    <string name="keep_screen_on">"Nevypínat obrazovku"</string>
+    <string name="keep_screen_on_summary">"Obrazovka se při nabíjení nepřepne do režimu spánku"</string>
+    <string name="allow_mock_location">"Povoluje simulované polohy"</string>
+    <string name="allow_mock_location_summary">"Povoluje simulované polohy"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Podrobnosti pro UID %d"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Podrobnosti o používání sítě aplikací <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Přijato bytů: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Odesláno bytů: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Celkem bytů: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"Podrobnosti o využívání CPU aplikací <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Čas uživatele:"</string>
+    <string name="battery_history_system_time">"Systémový čas:"</string>
+    <string name="battery_history_total_time">"Celková doba:"</string>
+    <string name="battery_history_starts">"Počet spuštění: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> dní, <xliff:g id="HOURS">%2$d</xliff:g> hod., <xliff:g id="MINUTES">%3$d</xliff:g> min., <xliff:g id="SECONDS">%4$d</xliff:g> s"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> hod., <xliff:g id="MINUTES">%2$d</xliff:g> min., <xliff:g id="SECONDS">%3$d</xliff:g> s"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> min., <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Balíčky sdílející toto UID:"</string>
+    <string name="battery_history_no_data">"Údaje o využití baterie nejsou k dispozici"</string>
+    <string name="battery_history_sensor">"Senzor:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Senzor je používán následujícími balíčky:"</string>
+    <string name="battery_history_sensor_usage">"Použito <xliff:g id="COUNT">%1$d</xliff:g>krát balíčkem <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"Použito <xliff:g id="COUNT">%1$d</xliff:g>krát některým z následujících:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Doba se zapnutou obrazovkou:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"Na baterii:"</string>
+    <string name="battery_history_screen_on_plugged">"Připojeno:"</string>
+    <string name="usage_stats_label">"Statistika použití"</string>
+    <string name="testing_usage_stats">"Statistika použití"</string>
+    <string name="display_order_text">"Řadit podle:"</string>
+    <string name="app_name_label">"Aplikace"</string>
+    <string name="launch_count_label">"Počet"</string>
+    <string name="usage_time_label">"Doba použití"</string>
+</resources>
diff --git a/res/values-de-nokeys/strings.xml b/res/values-de-nokeys/strings.xml
new file mode 100644
index 0000000..3efeb55
--- /dev/null
+++ b/res/values-de-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Anwendungen verwalten"</string>
+</resources>
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
new file mode 100644
index 0000000..e3f0ec1
--- /dev/null
+++ b/res/values-de/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Amerika"</item>
+    <item>"Europa"</item>
+    <item>"Afrika"</item>
+    <item>"Asien"</item>
+    <item>"Australien"</item>
+    <item>"Pacific"</item>
+    <item>"Alle"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 Sekunden"</item>
+    <item>"30 Sekunden"</item>
+    <item>"1 Minute"</item>
+    <item>"2 Minuten"</item>
+    <item>"10 Minuten"</item>
+    <item>"Kein Timeout"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Autom."</item>
+    <item>"Keine"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Keine"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Autom."</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP hexadezimal"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Wenn Bildschirm abschaltet"</item>
+    <item>"Niemals im Netzbetrieb"</item>
+    <item>"Niemals"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Nutzungszeit"</item>
+    <item>"Startzähler"</item>
+    <item>"Name der Anwendung"</item>
+  </string-array>
+</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
new file mode 100644
index 0000000..68790d5
--- /dev/null
+++ b/res/values-de/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Unbekannt"</string>
+    <string name="turn_on_radio">"Radio einschalten"</string>
+    <string name="turn_off_radio">"Radio ausschalten"</string>
+    <string name="turn_on_qxdm">"QXDM-SD-Protokoll aktivieren"</string>
+    <string name="turn_off_qxdm">"QXDM-SD-Protokoll deaktivieren"</string>
+    <string name="radioInfo_menu_viewADN">"SIM-Adressbuch anzeigen"</string>
+    <string name="radioInfo_menu_viewFDN">"Feste Rufnummern anzeigen"</string>
+    <string name="radioInfo_menu_viewSDN">"Servicerufnummern anzeigen"</string>
+    <string name="radioInfo_menu_getPDP">"PDP-Liste abrufen"</string>
+    <string name="radioInfo_menu_enableData">"Datenverbindung aktivieren"</string>
+    <string name="radioInfo_menu_disableData">"Datenverbindung deaktivieren"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Daten beim Start aktivieren"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Daten beim Start deaktivieren"</string>
+    <string name="radioInfo_service_in">"In Betrieb"</string>
+    <string name="radioInfo_service_out">"Außer Betrieb"</string>
+    <string name="radioInfo_service_emergency">"Nur Notrufe"</string>
+    <string name="radioInfo_service_off">"Radio aus"</string>
+    <string name="radioInfo_roaming_in">"Roaming"</string>
+    <string name="radioInfo_roaming_not">"Kein Roaming"</string>
+    <string name="radioInfo_phone_idle">"Inaktiv"</string>
+    <string name="radioInfo_phone_ringing">"Klingelton"</string>
+    <string name="radioInfo_phone_offhook">"Anruf wird getätigt"</string>
+    <string name="radioInfo_data_disconnected">"Nicht verbunden"</string>
+    <string name="radioInfo_data_connecting">"Verbindung wird hergestellt"</string>
+    <string name="radioInfo_data_connected">"Verbunden"</string>
+    <string name="radioInfo_data_suspended">"Angehalten"</string>
+    <string name="radioInfo_unknown">"unbekannt"</string>
+    <string name="radioInfo_display_packets">"Pakete"</string>
+    <string name="radioInfo_display_bytes">"Bytes"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"ASU"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"SD-Karte entnehmen"</string>
+    <string name="sdcard_format">"SD-Karte formatieren"</string>
+    <string name="small_font">"Klein"</string>
+    <string name="medium_font">"Mittel"</string>
+    <string name="large_font">"Groß"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"SD-Karte"</string>
+    <string name="battery_info_status_label">"Akkustatus:"</string>
+    <string name="battery_info_scale_label">"Akkuanzeige:"</string>
+    <string name="battery_info_level_label">"Akkuladung:"</string>
+    <string name="battery_info_health_label">"Akkuzustand:"</string>
+    <string name="battery_info_technology_label">"Akkutechnologie:"</string>
+    <string name="battery_info_voltage_label">"Akkuspannung:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Akkutemperatur:"</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"Zeit seit Start:"</string>
+    <string name="battery_info_awake_battery">"Aktivzeit bei Akku:"</string>
+    <string name="battery_info_awake_plugged">"Aktivzeit beim Laden:"</string>
+    <string name="battery_info_screen_on">"Display eingeschaltet:"</string>
+    <string name="battery_info_status_unknown">"Unbekannt"</string>
+    <string name="battery_info_status_charging">"Wird geladen"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Entladung"</string>
+    <string name="battery_info_status_not_charging">"Wird nicht geladen"</string>
+    <string name="battery_info_status_full">"Voll"</string>
+    <string name="battery_info_health_unknown">"Unbekannt"</string>
+    <string name="battery_info_health_good">"OK"</string>
+    <string name="battery_info_health_overheat">"Überhitzung"</string>
+    <string name="battery_info_health_dead">"Leer"</string>
+    <string name="battery_info_health_over_voltage">"Überspannung"</string>
+    <string name="battery_info_health_unspecified_failure">"Unbekannter Fehler"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Erkennbar"</string>
+    <string name="bluetooth_is_discoverable">"Für <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> Sekunden sichtbar..."</string>
+    <string name="bluetooth_not_discoverable">"Geräteerkennung deaktivieren"</string>
+    <string name="bluetooth_devices">"Bluetooth-Geräte"</string>
+    <string name="bluetooth_device_name">"Gerätename"</string>
+    <string name="bluetooth_name_not_set">"Kein Name festgelegt, Kontoname wird verwendet"</string>
+    <string name="bluetooth_scan_for_devices">"Scannen nach Geräten"</string>
+    <string name="bluetooth_disconnect_blank">"Verbindung mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wird getrennt."</string>
+    <string name="bluetooth_connected">"Verbunden"</string>
+    <string name="bluetooth_disconnected">"Nicht verbunden"</string>
+    <string name="bluetooth_disconnecting">"Verbindung wird getrennt..."</string>
+    <string name="bluetooth_connecting">"Verbindung wird hergestellt..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Pairing mit diesem Gerät"</string>
+    <string name="bluetooth_pairing">"Pairing…"</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"Freisprechfunktion/Headset"</string>
+    <string name="progress_scanning">"Scannen..."</string>
+    <string name="bluetooth_notif_ticker">"Bluetooth-Pairing-Anfrage"</string>
+    <string name="bluetooth_notif_title">"Pairing-Anfrage"</string>
+    <string name="bluetooth_notif_message">"Zum Pairing auswählen "</string>
+    <string name="date_and_time">"Einstellungen"</string>
+    <string name="date_time_12_hour_sample">"1:00"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Zeitzone auswählen"</string>
+    <string name="display_preview_label">"Vorschau:"</string>
+    <string name="display_font_size_label">"Schriftgröße:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"<xliff:g id="BROADCAST">broadcast</xliff:g> senden"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"<xliff:g id="ACTIVITY">activity</xliff:g> starten"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Konto:"</string>
+    <string name="proxy_clear_text">"Löschen"</string>
+    <string name="proxy_port_label">"Port"</string>
+    <string name="proxy_defaultView_text">"Standard wiederherstellen"</string>
+    <string name="proxy_action_text">"Speichern"</string>
+    <string name="proxy_hostname_label">"Hostname"</string>
+    <string name="proxy_error">"Achtung"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"Der eingegebene Hostname ist ungültig."</string>
+    <string name="proxy_error_empty_port">"Sie müssen das Feld für den Port ausfüllen."</string>
+    <string name="proxy_error_empty_host_set_port">"Das Feld für den Port muss leer sein, wenn das Feld für den Host leer ist."</string>
+    <string name="proxy_error_invalid_port">"Der eingegebene Port ist ungültig."</string>
+    <string name="radio_info_signal_location_label">"Standort:"</string>
+    <string name="radio_info_neighboring_location_label">"Benachbarte CID:"</string>
+    <string name="radio_info_data_attempts_label">"Datenversuche:"</string>
+    <string name="radio_info_gprs_service_label">"GPRS-Service:"</string>
+    <string name="radio_info_roaming_label">"Roaming:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Rufumleitung:"</string>
+    <string name="radio_info_ppp_resets_label">"Anzahl der PPP-Zurücksetzungen seit dem Start:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM-Trennungen:"</string>
+    <string name="radio_info_current_network_label">"Aktuelles Netzwerk:"</string>
+    <string name="radio_info_data_successes_label">"Datenerfolge:"</string>
+    <string name="radio_info_ppp_received_label">"PPP empfangen:"</string>
+    <string name="radio_info_gsm_service_label">"GSM-Service"</string>
+    <string name="radio_info_signal_strength_label">"Signalstärke:"</string>
+    <string name="radio_info_call_status_label">"Rufstatus:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP gesendet:"</string>
+    <string name="radio_info_radio_resets_label">"Radiozurücksetzung:"</string>
+    <string name="radio_info_message_waiting_label">"Nachricht liegt vor:"</string>
+    <string name="radio_info_phone_number_label">"Telefonnummer:"</string>
+    <string name="radio_info_band_mode_label">"Frequenzbereich auswählen"</string>
+    <string name="radio_info_network_type_label">"Netzwerktyp:"</string>
+    <string name="radio_info_set_perferred_label">"Bevorzugten Netzwerktyp festlegen:"</string>
+    <string name="radio_info_ping_ipaddr">"IP-Adresse pingen:"</string>
+    <string name="radio_info_ping_hostname">"Hostnamen pingen (www.google.com):"</string>
+    <string name="radio_info_http_client_test">"HTTP Client-Test:"</string>
+    <string name="radio_info_toggle_ciph_label">"Verschlüsselung wechseln"</string>
+    <string name="ping_test_label">"Pingtest ausführen"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Aktualisierung"</string>
+    <string name="radio_info_smsc_refresh_label">"Aktualisieren"</string>
+    <string name="radio_info_toggle_dns_check_label">"DNS-Überprüfung ein-/ausschalten"</string>
+    <string name="band_mode_title">"GSM-/UMTS-Band festlegen"</string>
+    <string name="band_mode_loading">"Bandliste wird geladen..."</string>
+    <string name="band_mode_set">"Festlegen"</string>
+    <string name="band_mode_failed">"Fehlgeschlagen"</string>
+    <string name="band_mode_succeeded">"Erfolgreich"</string>
+    <string name="sdcard_changes_instructions">"Die Änderungen werden nach dem erneuten Anschließen des USB-Kabels übernommen."</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"USB-Massenspeicher aktivieren"</string>
+    <string name="sdcard_settings_total_bytes_label">"Bytes insgesamt:"</string>
+    <string name="sdcard_settings_not_present_status">"Keine SD-Karte"</string>
+    <string name="sdcard_settings_available_bytes_label">"Verfügbare Bytes:"</string>
+    <string name="sdcard_settings_mass_storage_status">"SD-Karte wird als Massenspeichergerät verwendet"</string>
+    <string name="sdcard_settings_unmounted_status">"Die SD-Karte kann jetzt entfernt werden."</string>
+    <string name="sdcard_settings_bad_removal_status">"Die SD-Karte wurde während der Verwendung entfernt!"</string>
+    <string name="sdcard_settings_used_bytes_label">"Verwendete Bytes:"</string>
+    <string name="sdcard_settings_scanning_status">"SD-Karte wird auf Medien gescannt..."</string>
+    <string name="sdcard_settings_read_only_status">"SD-Karte schreibgeschützt aktiviert"</string>
+    <string name="next_label">"Weiter"</string>
+    <string name="language_picker_title">"Sprache"</string>
+    <string name="select_your_language">"Sprache auswählen"</string>
+    <string name="activity_picker_label">"Aktion auswählen"</string>
+    <string name="device_info_label">"Geräteinfo"</string>
+    <string name="battery_info_label">"Akkuinfo"</string>
+    <string name="battery_history_label">"Akkuprotokoll"</string>
+    <string name="display_label">"Display"</string>
+    <string name="phone_info_label">"Telefoninfo"</string>
+    <string name="sd_card_settings_label">"SD-Karte"</string>
+    <string name="proxy_settings_label">"Proxy-Einstellungen"</string>
+    <string name="cancel">"Abbrechen"</string>
+    <string name="settings_label">"Einstellungen"</string>
+    <string name="airplane_mode">"Flugmodus"</string>
+    <string name="airplane_mode_summary">"Alle drahtlosen Verbindungen deaktivieren"</string>
+    <string name="airplane_mode_turning_on">"Wireless-Verbindungen werden deaktiviert..."</string>
+    <string name="airplane_mode_turning_off">"Wireless-Verbindungen werden aktiviert..."</string>
+    <string name="radio_controls_title">"Wireless"</string>
+    <string name="radio_controls_summary">"WLAN, Bluetooth, Flugmodus und mobile Netzwerke verwalten"</string>
+    <string name="date_and_time_settings_title">"Datum und Uhrzeit"</string>
+    <string name="date_and_time_settings_summary">"Datum, Uhrzeit, Zeitzone und Formate festlegen"</string>
+    <string name="date_time_auto">"Automatisch"</string>
+    <string name="date_time_auto_summaryOn">"Vom Netzwerk bereitgestellte Werte verwenden"</string>
+    <string name="date_time_auto_summaryOff">"Vom Netzwerk bereitgestellte Werte verwenden"</string>
+    <string name="date_time_24hour">"24-Stunden-Format"</string>
+    <string name="date_time_set_time">"Uhrzeit festlegen"</string>
+    <string name="date_time_set_timezone">"Zeitzone auswählen"</string>
+    <string name="date_time_set_date">"Datum festlegen"</string>
+    <string name="date_time_date_format">"Datumsformat auswählen"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Alphabetisch sortieren"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Nach Zeitzone sortieren"</string>
+    <string name="security_settings_title">"Sicherheit und Standort"</string>
+    <string name="security_settings_summary">"Meinen Standort, Display-Entsperrung und SIM-Kartensperrung festlegen"</string>
+    <string name="security_passwords_title">"Passwörter"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Bluetooth aktivieren"</string>
+    <string name="bluetooth_settings">"Bluetooth-Einstellungen"</string>
+    <string name="bluetooth_settings_title">"Bluetooth-Einstellungen"</string>
+    <string name="bluetooth_settings_summary">"Verbindungen, Gerätenamen und Erkennbarkeit verwalten"</string>
+    <string name="bluetooth_pin_entry">"Bluetooth-Pairing-Anfrage"</string>
+    <string name="bluetooth_device_info">"Bluetooth-Geräteinfo"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"PIN für Pairing eingeben."\n"(Versuchen Sie 0000 oder 1234.)"</string>
+    <string name="bluetooth_error_title">"Achtung"</string>
+    <string name="bluetooth_pairing_error_message">"Beim Pairing mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ist ein Problem aufgetreten."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Beim Pairing mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ist ein Problem aufgetreten, da die eingegebene PIN falsch ist."</string>
+    <string name="bluetooth_connecting_error_message">"Beim Verbindungsaufbau mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ist ein Problem aufgetreten."</string>
+    <string name="bluetooth_preference_scan_title">"Scan nach Geräten"</string>
+    <string name="bluetooth_device_context_connect">"Verbinden"</string>
+    <string name="bluetooth_device_context_disconnect">"Verbindung trennen"</string>
+    <string name="bluetooth_device_context_pair_connect">"Paaren und verbinden"</string>
+    <string name="bluetooth_device_context_unpair">"Pairing aufheben"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Verbindung trennen und Pairing aufheben"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Optionen..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Verbinden mit..."</string>
+    <string name="bluetooth_profile_a2dp">"Medien"</string>
+    <string name="bluetooth_profile_headset">"Telefon"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Verbunden mit  Audiosystem von Medien"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Verbunden mit Audiosystem des Telefons"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Verbunden mit Audiosystem von Telefon und Medien"</string>
+    <string name="bluetooth_device_advanced_title">"Optionen von <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Verbinden"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Mit Bluetooth-Gerät verbinden"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profile"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Verbunden mit  Audiosystem von Medien"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Verbunden mit Audiosystem des Telefons"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Für Audiosystem von Medien verwenden"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Für Audiosystem des Telefons verwenden"</string>
+    <string name="wifi">"WLAN"</string>
+    <string name="wifi_quick_toggle_title">"WLAN"</string>
+    <string name="wifi_quick_toggle_summary">"Wi-Fi aktivieren"</string>
+    <string name="wifi_settings">"WLAN-Einstellungen"</string>
+    <string name="wifi_settings_category">"WLAN-Einstellungen"</string>
+    <string name="wifi_settings_summary">"Wireless-Zugangspunkte festlegen und verwalten"</string>
+    <string name="forget_network">"Entfernen"</string>
+    <string name="wifi_status">"Status"</string>
+    <string name="wifi_link_speed">"Geschwindigkeit"</string>
+    <string name="wifi_signal_3">"Ausgezeichnet"</string>
+    <string name="wifi_signal_2">"OK"</string>
+    <string name="wifi_signal_1">"Gut"</string>
+    <string name="wifi_signal_0">"Schwach"</string>
+    <string name="security">"Sicherheit"</string>
+    <string name="wifi_security_open">"Öffnen"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Unbekannt"</string>
+    <string name="wifi_security_verbose_open">"Offenes Netzwerk"</string>
+    <string name="wifi_security_verbose_wep">"Gesichert mit WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Gesichert mit WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Gesichert mit WPA2"</string>
+    <string name="ip_address">"IP-Adresse"</string>
+    <string name="signal">"Signalstärke"</string>
+    <string name="wifi_starting">"Aktivierung..."</string>
+    <string name="wifi_stopping">"Wird beendet..."</string>
+    <string name="wifi_error">"Fehler"</string>
+    <string name="error_starting">"WLAN kann nicht gestartet werden"</string>
+    <string name="error_stopping">"WLAN kann nicht beendet werden"</string>
+    <string name="error_scanning">"Netzwerkscan nicht möglich"</string>
+    <string name="error_connecting">"Netzwerkverbindung kann nicht hergestellt werden"</string>
+    <string name="error_saving">"Netzwerk kann nicht gespeichert werden"</string>
+    <string name="connect">"Verbinden"</string>
+    <string name="connect_to_blank">"Mit <xliff:g id="NETWORK_NAME">%1$s</xliff:g> verbinden"</string>
+    <string name="please_type_passphrase">"Passwort für Wireless-Zugang"</string>
+    <string name="please_type_hex_key">"WEP Hexadezimalschlüssel (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Passwort anzeigen"</string>
+    <string name="scan_wifi">"Scannen"</string>
+    <string name="summary_not_in_range">"Nicht in Reichweite"</string>
+    <string name="summary_remembered">"Gespeichert"</string>
+    <string name="summary_connection_failed">"Verbindung fehlgeschlagen, versuchen Sie es erneut."</string>
+    <string name="wifi_access_points">"WLAN-Netzwerke"</string>
+    <string name="wifi_type_ssid">"Netzwerk-SSID"</string>
+    <string name="wifi_security">"Sicherheit"</string>
+    <string name="wifi_save_config">"Speichern"</string>
+    <string name="wifi_password_unchanged">"(nicht geändert)"</string>
+    <string name="wifi_add_other_network">"Wi-Fi-Netzwerk hinzufügen"</string>
+    <string name="wifi_notify_open_networks">"Netzwerkhinweis"</string>
+    <string name="wifi_notify_open_networks_summary">"Benachrichtigen, wenn ein offenes Netzwerk verfügbar ist"</string>
+    <string name="wifi_password_incorrect_error">"Das eingegebene Netzwerkpasswort ist falsch. Bitte versuchen Sie es erneut."</string>
+    <string name="wifi_generic_connection_error">"Beim Herstellen der Netzwerkverbindung ist ein Problem aufgetreten. Bitte versuchen Sie es erneut."</string>
+    <string name="wifi_menu_advanced">"Erweitert"</string>
+    <string name="wifi_ip_settings_titlebar">"IP-Einstellungen"</string>
+    <string name="wifi_ip_settings_menu_save">"Speichern"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Abbrechen"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Bitte geben Sie eine gültige IP-Adresse ein."</string>
+    <string name="wifi_use_static_ip">"Statische IP verwenden"</string>
+    <string name="wifi_ip_address">"IP-Adresse"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Gateway"</string>
+    <string name="wifi_netmask">"Netmask"</string>
+    <string name="wifi_context_menu_connect">"Mit Netzwerk verbinden"</string>
+    <string name="wifi_context_menu_forget">"Netzwerk entfernen"</string>
+    <string name="wifi_context_menu_change_password">"Passwort ändern"</string>
+    <string name="wifi_advanced_titlebar">"Erweitert"</string>
+    <string name="wifi_setting_num_channels_title">"Rechtliche Domain"</string>
+    <string name="wifi_setting_num_channels_summary">"Anzahl an zu verwendenden Kanälen festlegen"</string>
+    <string name="wifi_setting_num_channels_error">"Beim Einrichten der Domain ist ein Problem aufgetreten."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> Kanäle"</string>
+    <string name="wifi_setting_sleep_policy_title">"Wi-Fi Standby-Richtlinie"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Festlegen, wann von Wi-Fi auf mobile Daten umgeschaltet werden soll"</string>
+    <string name="wifi_setting_sleep_policy_error">"Beim Einrichten der Standby-Richtlinie ist ein Problem aufgetreten."</string>
+    <string name="wifi_advanced_mac_address_title">"MAC-Adresse"</string>
+    <string name="fragment_status_scanning">"Scannen…"</string>
+    <string name="fragment_status_connecting">"Verbindung mit <xliff:g id="NETWORK_NAME">%1$s</xliff:g> wird hergestellt..."</string>
+    <string name="fragment_status_authenticating">"Authentifizierung mit <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_obtaining_ip">"IP-Adresse wird von <xliff:g id="NETWORK_NAME">%1$s</xliff:g> abgerufen..."</string>
+    <string name="fragment_status_connected">"Verbunden mit <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Verbindung mit <xliff:g id="NETWORK_NAME">%1$s</xliff:g> wird getrennt..."</string>
+    <string name="fragment_status_disconnected">"Nicht verbunden"</string>
+    <string name="fragment_status_failed">"Fehlgeschlagen"</string>
+    <string name="status_scanning">"Scannen…"</string>
+    <string name="status_connecting">"Verbindung wird hergestellt..."</string>
+    <string name="status_authenticating">"Authentifizierung..."</string>
+    <string name="status_obtaining_ip">"Adresse wird abgerufen..."</string>
+    <string name="status_connected">"Verbunden"</string>
+    <string name="status_disconnecting">"Verbindung wird getrennt..."</string>
+    <string name="status_disconnected">"Nicht verbunden"</string>
+    <string name="status_failed">"Fehlgeschlagen"</string>
+    <string name="sound_and_display_settings">"Töne und Display"</string>
+    <string name="sound_settings">"Toneinstellungen"</string>
+    <string name="sound_and_display_settings_summary">"Klingeltöne, Benachrichtigungen und Helligkeit festlegen"</string>
+    <string name="silent_mode_title">"Lautlosmodus"</string>
+    <string name="silent_mode_summary">"Alle Töne außer für Medien und Warnungen sind stummgeschaltet"</string>
+    <string name="ringtone_title">"Klingelton"</string>
+    <string name="ringtone_summary">"Standardklingelton für eingehende Anrufe festlegen"</string>
+    <string name="ring_volume_title">"Klingeltonlautstärke"</string>
+    <string name="ring_volume_summary">"Lautstärke für eingehende Anrufe und Benachrichtigungen festlegen"</string>
+    <string name="vibrate_title">"Vibration"</string>
+    <string name="vibrate_summary">"Vibration für eingehende Anrufe"</string>
+    <string name="notification_sound_title">"Benachrichtigungston"</string>
+    <string name="notification_sound_summary">"Standard-Benachrichtigungston festlegen"</string>
+    <string name="incoming_call_volume_title">"Lautstärke für eingehende Anrufe"</string>
+    <string name="notification_volume_title">"Benachrichtigungslautstärke"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Lautstärke für eingehende Anrufe für Benachrichtigungen verwenden"</string>
+    <string name="notification_sound_dialog_title">"Benachrichtigungston auswählen"</string>
+    <string name="media_volume_title">"Medienlautstärke"</string>
+    <string name="media_volume_summary">"Lautstärke für Musik und Videos festlegen"</string>
+    <string name="dtmf_tone_enable_title">"Tastentöne"</string>
+    <string name="dtmf_tone_enable_summary_on">"Töne bei Telefonwahl"</string>
+    <string name="dtmf_tone_enable_summary_off">"Töne bei Telefonwahl"</string>
+    <string name="sound_effects_enable_title">"Akustische Auswahl"</string>
+    <string name="sound_effects_enable_summary_on">"Ton bei Auswahl auf Display"</string>
+    <string name="sound_effects_enable_summary_off">"Ton bei Auswahl auf Display"</string>
+    <string name="play_media_notification_sounds_enable_title">"SD-Karten-Benachrichtigungen"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"SD-Karten-Benachrichtigungston deaktivieren"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"SD-Karten-Benachrichtigungston aktivieren"</string>
+    <string name="sync_settings">"Datensynchronisierung"</string>
+    <string name="sync_settings_summary">"Auswählen, welche Anwendungen synchronisiert werden"</string>
+    <string name="display_settings">"Display-Einstellungen"</string>
+    <string name="animations_title">"Animation"</string>
+    <string name="animations_summary_on">"Animation beim Öffnen/Schließen von Fenstern anzeigen"</string>
+    <string name="animations_summary_off">"Animation beim Öffnen/Schließen von Fenstern anzeigen"</string>
+    <string name="brightness">"Helligkeit"</string>
+    <string name="brightness_summary">"Helligkeit des Bildschirms anpassen"</string>
+    <string name="screen_timeout">"Display-Timeout"</string>
+    <string name="screen_timeout_summary">"Verzögerung vor automatischer Bildschirmabschaltung anpassen"</string>
+    <string name="sim_lock_settings">"Einstellungen"</string>
+    <string name="sim_lock_settings_category">"SIM-Kartensperrung einrichten"</string>
+    <string name="sim_lock_settings_title">"SIM-Kartensperrung"</string>
+    <string name="sim_pin_toggle">"SIM-Karte sperren"</string>
+    <string name="sim_lock_on">"PIN zur Verwendung des Telefons erforderlich"</string>
+    <string name="sim_lock_off">"PIN zur Verwendung des Telefons erforderlich"</string>
+    <string name="sim_pin_change">"PIN der SIM-Karte ändern"</string>
+    <string name="sim_enter_pin">"PIN für SIM-Karte"</string>
+    <string name="sim_enable_sim_lock">"SIM-Karte sperren"</string>
+    <string name="sim_disable_sim_lock">"SIM-Karte entsperren"</string>
+    <string name="sim_enter_old">"Alte PIN der SIM-Karte"</string>
+    <string name="sim_enter_new">"Neue PIN für SIM-Karte"</string>
+    <string name="sim_reenter_new">"Neue PIN erneut eingeben"</string>
+    <string name="sim_change_pin">"PIN für SIM-Karte"</string>
+    <string name="sim_bad_pin">"Falsche PIN!"</string>
+    <string name="sim_pins_dont_match">"Die PINs stimmen nicht überein!"</string>
+    <string name="sim_change_failed">"PIN kann nicht geändert werden."\n"Möglicherweise falsche Eingabe."</string>
+    <string name="sim_change_succeeded">"SIM-PIN erfolgreich geändert"</string>
+    <string name="sim_lock_failed">"Status der SIM-Kartensperrung kann nicht geändert werden."\n"Möglicherweise falsche PIN."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Abbrechen"</string>
+    <string name="device_info_settings">"Telefonstatus"</string>
+    <string name="system_update_settings_list_item_title">"Systemaktualisierungen"</string>
+    <string name="system_update_settings_list_item_summary">"Nach Systemaktualisierungen suchen"</string>
+    <string name="firmware_version">"Firmware-Version"</string>
+    <string name="model_number">"Modellnummer"</string>
+    <string name="baseband_version">"Basisband-Version"</string>
+    <string name="kernel_version">"Kernel-Version"</string>
+    <string name="build_number">"Build-Nummer"</string>
+    <string name="device_info_not_available">"Nicht verfügbar"</string>
+    <string name="device_status_activity_title">"Status"</string>
+    <string name="device_status">"Status"</string>
+    <string name="device_status_summary">"IMEI, Telefonnummer, Signal usw."</string>
+    <string name="storage_settings_title">"SD-Karte und Speicher"</string>
+    <string name="storage_settings_summary">"SD-Karte entnehmen, verfügbaren Speicher anzeigen"</string>
+    <string name="status_number">"Telefonnummer"</string>
+    <string name="status_network_type">"Mobiler Netzwerktyp"</string>
+    <string name="status_data_state">"Status des mobilen Netzwerks"</string>
+    <string name="status_service_state">"Servicestatus"</string>
+    <string name="status_signal_strength">"Signalstärke"</string>
+    <string name="status_roaming">"Roaming"</string>
+    <string name="status_operator">"Netzwerk"</string>
+    <string name="status_wifi_mac_address">"WLAN-MAC-Adresse"</string>
+    <string name="status_bt_address">"Bluetooth-Adresse"</string>
+    <string name="status_unavailable">"Nicht verfügbar"</string>
+    <string name="status_network_traffic_stats">"Netzwerknutzung"</string>
+    <string name="status_network_traffic_summary">"Gesendet: \n<xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Erhalt: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Betriebszeit"</string>
+    <string name="status_awake_time">"Aktivzeit"</string>
+    <string name="internal_memory">"Interner Telefonspeicher"</string>
+    <string name="sd_memory">"SD-Karte"</string>
+    <string name="memory_available">"Verfügbarer Speicher"</string>
+    <string name="memory_size">"Gesamtspeicher"</string>
+    <string name="sd_eject">"SD-Karte entnehmen"</string>
+    <string name="sd_eject_summary">"SD-Karte vorsichtig entnehmen"</string>
+    <string name="sd_format">"SD-Karte formatieren"</string>
+    <string name="sd_format_summary">"SD-Karte formatieren (löschen)"</string>
+    <string name="sd_unavailable">"Nicht verfügbar"</string>
+    <string name="read_only">" (schreibgeschützt)"</string>
+    <string name="battery_status_title">"Akkustatus"</string>
+    <string name="battery_level_title">"Akkuladung"</string>
+    <string name="apn_settings">"APNs"</string>
+    <string name="apn_edit">"Zugangspunkt bearbeiten"</string>
+    <string name="apn_not_set">"Nicht festgelegt"</string>
+    <string name="apn_name">"Name"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Port"</string>
+    <string name="apn_user">"Nutzername"</string>
+    <string name="apn_password">"Passwort"</string>
+    <string name="apn_server">"Server"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"MMS-Proxy"</string>
+    <string name="apn_mms_port">"MMS-Port"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APN-Typ"</string>
+    <string name="menu_delete">"APN löschen"</string>
+    <string name="menu_new">"Neuer APN"</string>
+    <string name="menu_save">"Speichern"</string>
+    <string name="menu_cancel">"Verwerfen"</string>
+    <string name="error_title">"Achtung"</string>
+    <string name="error_name_empty">"Das Namensfeld darf nicht leer sein."</string>
+    <string name="error_apn_empty">"Der APN darf nicht leer sein."</string>
+    <string name="error_mcc_not3">"Das MCC-Feld muss 3 Zeichen enthalten."</string>
+    <string name="error_mnc_not23">"Das MNC-Feld muss 2 oder 3 Zeichen enthalten."</string>
+    <string name="master_clear_title">"Auf Werkszustand zurück"</string>
+    <string name="master_clear_summary">"Löscht alle Daten auf dem Telefon"</string>
+    <string name="master_clear_desc">"Durch diese Aktion wird das Telefon auf den Werkszustand zurückgesetzt. Alle Daten und heruntergeladenen Anwendungen werden gelöscht!"</string>
+    <string name="master_clear_button_text">"Telefon zurücksetzen"</string>
+    <string name="master_clear_final_desc">"Telefon zurücksetzen und alle Ihre Daten und Anwendungen löschen? Die Aktion kann nicht rückgängig gemacht werden!"</string>
+    <string name="master_clear_final_button_text">"Alles löschen"</string>
+    <string name="master_clear_gesture_prompt">"Bitte zeichnen Sie Ihr Entsperrungsmuster."</string>
+    <string name="master_clear_gesture_explanation">"Sie müssen Ihr Entsperrungsmuster eingeben, um das Zurücksetzen des Telefons zu bestätigen."</string>
+    <string name="master_clear_failed">"Die Zurücksetzung konnte nicht durchgeführt werden, da der Service zur Systembereinigung nicht verfügbar ist."</string>
+    <string name="media_format_title">"SD-Karte formatieren."</string>
+    <string name="media_format_summary">"Löscht alle Daten auf der SD-Karte"</string>
+    <string name="media_format_desc">"Durch diese Aktion wird die SD-Karte im Telefon gelöscht. Sie verlieren dann ALLE Daten auf der Karte!"</string>
+    <string name="media_format_button_text">"SD-Karte formatieren"</string>
+    <string name="media_format_final_desc">"SD-Karte formatieren und alle Medien löschen? Die Aktion kann nicht rückgängig gemacht werden!"</string>
+    <string name="media_format_final_button_text">"Alles löschen"</string>
+    <string name="media_format_gesture_prompt">"Bitte zeichnen Sie Ihr Entsperrungsmuster."</string>
+    <string name="media_format_gesture_explanation">"Sie müssen Ihr Entsperrungsmuster eingeben, um eine SD-Karten-Formatierung zu bestätigen."</string>
+    <string name="call_settings_title">"Anrufeinstellungen"</string>
+    <string name="call_settings_summary">"Mailbox, Anrufweiterleitung, Anklopfen, Anruferkennung einrichten"</string>
+    <string name="network_settings_title">"Mobile Netzwerke"</string>
+    <string name="network_settings_summary">"Optionen für Roaming, Netzwerke, APNs festlegen"</string>
+    <string name="location_title">"Standortquellen"</string>
+    <string name="location_network_based">"Wireless nutzen"</string>
+    <string name="location_networks_disabled">"Standort über Wireless-Netzwerke anzeigen (z.B. in Google Maps)"</string>
+    <string name="location_neighborhood_level">"Standort bestimmt von WLAN und/oder mobilen Netzwerken"</string>
+    <string name="location_gps">"GPS-Satelliten aktivieren"</string>
+    <string name="location_street_level">"Auf Straßenebene lokalisieren (deaktivieren, um Akku zu sparen)"</string>
+    <string name="location_gps_disabled">"Auf Straßenebene lokalisieren (höherer Akkuverbrauch, im Freien)"</string>
+    <string name="about_settings">"Telefoninfo"</string>
+    <string name="about_settings_summary">"Rechtliche Hinweise, Telefonstatus und Softwareversion anzeigen"</string>
+    <string name="legal_information">"Rechtliche Hinweise"</string>
+    <string name="contributors_title">"Mitwirkende"</string>
+    <string name="copyright_title">"Urheberrecht"</string>
+    <string name="license_title">"Lizenz"</string>
+    <string name="terms_title">"Nutzungsbedingungen"</string>
+    <string name="settings_license_activity_title">"Open Source-Lizenzen"</string>
+    <string name="settings_license_activity_unavailable">"Beim Laden der Lizenzen ist ein Problem aufgetreten."</string>
+    <string name="settings_license_activity_loading">"Wird geladen..."</string>
+    <string name="lock_settings_title">"Display-Entsperrungsmuster"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Entsperrungsmuster ändern"</string>
+    <string name="lockpattern_need_to_unlock">"Gespeichertes Muster bestätigen"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Versuchen Sie es bitte erneut:"</string>
+    <string name="lockpattern_recording_intro_header">"Zeichnen Sie ein Entsperrungsmuster."</string>
+    <string name="lockpattern_recording_intro_footer">"Menütaste drücken, um die Hilfe aufzurufen"</string>
+    <string name="lockpattern_recording_inprogress">"Lassen Sie die Tasten los, wenn Sie fertig sind."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Verbinden Sie mindestens <xliff:g id="NUMBER">%d</xliff:g> Punkte. Versuchen Sie es erneut:"</string>
+    <string name="lockpattern_pattern_entered_header">"Muster wurde aufgezeichnet!"</string>
+    <string name="lockpattern_need_to_confirm">"Zeichnen Sie das Muster zur Bestätigung erneut:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Ihr neues Entsperrungsmuster:"</string>
+    <string name="lockpattern_confirm_button_text">"Bestätigen"</string>
+    <string name="lockpattern_restart_button_text">"Neu aufzeichnen"</string>
+    <string name="lockpattern_retry_button_text">"Erneut versuchen"</string>
+    <string name="lockpattern_continue_button_text">"Weiter"</string>
+    <string name="lockpattern_settings_title">"Entsperrungsmuster"</string>
+    <string name="lockpattern_settings_enable_title">"Muster erforderlich"</string>
+    <string name="lockpattern_settings_enable_summary">"Zum Entsperren muss ein Muster gezeichnet werden"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Muster sichtbar"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Haptisches Feedback verwenden"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Entsperrungsmuster"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Muster ändern"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Zeichnen eines Entsperrungsmusters"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Zu viele fehlgeschlagene Versuche!"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"In <xliff:g id="NUMBER">%d</xliff:g> Sekunden erneut versuchen."</string>
+    <string name="skip_button_label">"Abbrechen"</string>
+    <string name="next_button_label">"Weiter"</string>
+    <string name="lock_title">"Sichern Ihres Telefons"</string>
+    <string name="lock_intro_message"><font size="17">"Schützen Sie Ihr Telefon vor unerlaubter Verwendung, indem Sie ein persönliches Entsperrungsmuster erstellen. "\n<font height="17">\n</font><b>"1"</b>"  Auf dem nächsten Bildschirm sehen Sie, wie ein Beispielmuster gezeichnet wird. "\n<font height="17">\n</font><b>"2"</b>"  Anschließend können Sie Ihr eigenes Entsperrungsmuster aufzeichnen. Sie können verschiedene Muster ausprobieren, müssen jedoch immer mindestens vier Punkte miteinander verbinden. "\n<font height="17">\n</font><b>"3"</b>"  Zeichnen Sie Ihr Muster zur Bestätigung erneut. "\n<font height="17">\n</font><b>"Bereit? Wählen Sie “Weiter”"</b>". "\n<font height="3">\n</font>"Wählen Sie “Abbrechen”, wenn Sie Ihr Telefon nicht schützen möchten."</font></string>
+    <string name="lock_example_title">"Beispielmuster"</string>
+    <string name="lock_example_message">"Verbinden Sie mindestens vier Punkte."\n" "\n"Wählen Sie \"Weiter\", um ein eigenes Muster aufzuzeichnen."</string>
+    <string name="manageapplications_settings_title">"Anwendungen verwalten"</string>
+    <string name="manageapplications_settings_summary">"Installierte Anwendungen verwalten und entfernen"</string>
+    <string name="applications_settings">"Anwendungen"</string>
+    <string name="applications_settings_summary">"Anwendungen verwalten, Tastenkombinationen für Schnellstart einrichten"</string>
+    <string name="applications_settings_header">"Anwendungen"</string>
+    <string name="install_applications">"Unbekannte Quellen"</string>
+    <string name="install_unknown_applications">"Installation von Nicht-Market-Anwendungen zulassen"</string>
+    <string name="install_all_warning">"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">"Anwendungsinfo"</string>
+    <string name="storage_label">"Speicher"</string>
+    <string name="auto_launch_label">"Standardmäßig starten"</string>
+    <string name="permissions_label">"Berechtigungen"</string>
+    <string name="cache_header_label">"Cache"</string>
+    <string name="clear_cache_btn_text">"Cache löschen"</string>
+    <string name="cache_size_label">"Cache"</string>
+    <string name="controls_label">"Steuerung"</string>
+    <string name="force_stop">"Stoppen erzwingen"</string>
+    <string name="total_size_label">"Insgesamt"</string>
+    <string name="application_size_label">"Anwendung"</string>
+    <string name="data_size_label">"Daten"</string>
+    <string name="uninstall_text">"Deinstallieren"</string>
+    <string name="clear_user_data_text">"Daten löschen"</string>
+    <string name="auto_launch_enable_text">"Sie haben diese Anwendung für einige Aktionen als Standard festgelegt."</string>
+    <string name="auto_launch_disable_text">"Kein Standard"</string>
+    <string name="clear_activities">"Standardeinstellungen löschen"</string>
+    <string name="unknown">"Unbekannt"</string>
+    <string name="sort_order_alpha">"Sortieren"</string>
+    <string name="sort_order_size">"Nach Größe sortieren"</string>
+    <string name="manage_space_text">"Speicherplatz verwalten"</string>
+    <string name="filter">"Filter"</string>
+    <string name="filter_dlg_title">"Filteroptionen auswählen"</string>
+    <string name="filter_apps_all">"Alle"</string>
+    <string name="filter_apps_third_party">"Drittanbieter"</string>
+    <string name="filter_apps_running">"Wird ausgeführt"</string>
+    <string name="loading">"Wird geladen..."</string>
+    <string name="recompute_size">"Größe wird neu berechnet..."</string>
+    <string name="clear_data_dlg_title">"Löschen"</string>
+    <string name="clear_data_dlg_text">"Alle in dieser Anwendung gespeicherten Informationen werden endgültig gelöscht."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Abbrechen"</string>
+    <string name="app_not_found_dlg_title">"Anwendung nicht gefunden"</string>
+    <string name="app_not_found_dlg_text">"Diese Anwendung wurde in der Liste der installierten Anwendungen nicht gefunden."</string>
+    <string name="clear_data_failed">"Anwendungsdaten können nicht gelöscht werden."</string>
+    <string name="security_settings_desc">"Diese Anwendung kann auf die folgenden Funktionen Ihres Telefons zugreifen:"</string>
+    <string name="computing_size">"Berechnung..."</string>
+    <string name="invalid_size_value">"Paketgröße kann nicht berechnet werden"</string>
+    <string name="empty_list_msg">"Sie haben keine Anwendungen von Drittanbietern installiert."</string>
+    <string name="language_settings">"Gebietsschema und Text"</string>
+    <string name="language_settings_summary">"Optionen für Gebietsschema (Sprache und Region), Texteingabe und Autokorrektur festlegen"</string>
+    <string name="language_category">"Ländereinstellung"</string>
+    <string name="text_category">"Texteinstellungen"</string>
+    <string name="phone_language">"Sprache wählen"</string>
+    <string name="phone_language_summary">"Sprache und Region auswählen"</string>
+    <string name="auto_replace">"Autom. Ersetzung"</string>
+    <string name="auto_replace_summary">"Tippfehler korrigieren"</string>
+    <string name="auto_caps">"Autom. Großschreibung"</string>
+    <string name="auto_caps_summary">"Jeden Satz mit einem Großbuchstaben beginnen"</string>
+    <string name="auto_punctuate">"Autom. Zeichensetzung"</string>
+    <string name="hardkeyboard_category">"Einstellungen für physische Tastatur"</string>
+    <string name="auto_punctuate_summary">"Leertaste zweimal drücken, um \".\" hinzuzufügen"</string>
+    <string name="show_password">"Sichtbare Passwörter"</string>
+    <string name="show_password_summary">"Passwort bei der Eingabe anzeigen"</string>
+    <string name="user_dict_settings_titlebar">"Wörterbuch des Nutzers"</string>
+    <string name="user_dict_settings_title">"Wörterbuch des Nutzers"</string>
+    <string name="user_dict_settings_summary">"Hinzufügen &amp; Entfernen von Wörtern im Wörterbuch des Nutzers"</string>
+    <string name="user_dict_settings_add_menu_title">"Hinzufügen"</string>
+    <string name="user_dict_settings_add_dialog_title">"Zum Wörterbuch hinzufügen"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Bearbeiten"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Löschen"</string>
+    <string name="user_dict_settings_empty_text">"Sie haben keine Wörter im Nutzerwörterbuch. Sie können über das Menü ein Wort hinzufügen."</string>
+    <string name="testing">"Test"</string>
+    <string name="testing_phone_info">"Telefoninformation"</string>
+    <string name="testing_battery_info">"Akkuinformationen"</string>
+    <string name="testing_battery_history">"Akkuprotokoll"</string>
+    <string name="quick_launch_title">"Schnellstart"</string>
+    <string name="quick_launch_summary">"Tastenkombinationen zum Starten von Anwendungen festlegen"</string>
+    <string name="quick_launch_assign_application">"Anwendung zuweisen"</string>
+    <string name="quick_launch_no_shortcut">"Keine Tastenkombination"</string>
+    <string name="quick_launch_shortcut">"Suchen + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Löschen"</string>
+    <string name="quick_launch_clear_dialog_message">"Die Tastenkombination für <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) wird gelöscht."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Abbrechen"</string>
+    <string name="quick_launch_display_mode_applications">"Anwendungen"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Tastenkombinationen"</string>
+    <string name="input_methods_settings_title">"Texteingabe"</string>
+    <string name="input_methods_settings_summary">"Optionen für Texteingabe verwalten"</string>
+    <string name="input_methods_settings_label_format">"%s Einstellungen"</string>
+    <string name="development_settings_title">"Entwicklung"</string>
+    <string name="development_settings_summary">"Optionen zur Anwendungsentwicklung festlegen"</string>
+    <string name="enable_adb">"USB-Debugging"</string>
+    <string name="enable_adb_summary">"Debugmodus bei Anschluss eines USB-Geräts"</string>
+    <string name="keep_screen_on">"Aktiv bleiben"</string>
+    <string name="keep_screen_on_summary">"Display wird beim Laden nie in den Ruhezustand versetzt"</string>
+    <string name="allow_mock_location">"Falsche Standorte zulassen"</string>
+    <string name="allow_mock_location_summary">"Falsche Standorte zulassen"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Details für UID %d"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Netzwerk-Nutzungsdetails für <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Empfangene Bytes: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Gesendete Bytes: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Bytes insgesamt: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"CPU-Nutzungsdetails für <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Nutzerzeit:"</string>
+    <string name="battery_history_system_time">"Systemzeit:"</string>
+    <string name="battery_history_total_time">"Gesamtzeit:"</string>
+    <string name="battery_history_starts">"Startet: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> Tage, <xliff:g id="HOURS">%2$d</xliff:g> Stunden, <xliff:g id="MINUTES">%3$d</xliff:g> Minuten, <xliff:g id="SECONDS">%4$d</xliff:g> Sekunden"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> Stunden, <xliff:g id="MINUTES">%2$d</xliff:g> Minuten, <xliff:g id="SECONDS">%3$d</xliff:g> Sekunden"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> Minuten, <xliff:g id="SECONDS">%2$d</xliff:g> Sekunden"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> Sekunden"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Pakete, die diese UID teilen:"</string>
+    <string name="battery_history_no_data">"Keine Akku-Nutzungsdaten verfügbar"</string>
+    <string name="battery_history_sensor">"Sensor:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Sensor verwendet von Paketen:"</string>
+    <string name="battery_history_sensor_usage">"<xliff:g id="COUNT">%1$d</xliff:g> mal von <xliff:g id="PACKAGE">%2$s</xliff:g> verwendet"</string>
+    <string name="battery_history_sensor_usage_multi">"<xliff:g id="COUNT">%1$d</xliff:g> mal von einem der folgenden verwendet:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Zeit mit Display eingeschaltet:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"Auf Akku:"</string>
+    <string name="battery_history_screen_on_plugged">"Eingesteckt:"</string>
+    <string name="usage_stats_label">"Nutzungsstatistik"</string>
+    <string name="testing_usage_stats">"Nutzungsstatistik"</string>
+    <string name="display_order_text">"Sortieren nach:"</string>
+    <string name="app_name_label">"Anwendung"</string>
+    <string name="launch_count_label">"Anzahl"</string>
+    <string name="usage_time_label">"Nutzungszeit"</string>
+</resources>
diff --git a/res/values-es-nokeys/strings.xml b/res/values-es-nokeys/strings.xml
new file mode 100644
index 0000000..0a6a749
--- /dev/null
+++ b/res/values-es-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Administrar aplicaciones"</string>
+</resources>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
new file mode 100644
index 0000000..3129a72
--- /dev/null
+++ b/res/values-es/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"América"</item>
+    <item>"Europa"</item>
+    <item>"África"</item>
+    <item>"Asia"</item>
+    <item>"Australia"</item>
+    <item>"Pacífico"</item>
+    <item>"Todas"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 segundos"</item>
+    <item>"30 segundos"</item>
+    <item>"1 minuto"</item>
+    <item>"2 minutos"</item>
+    <item>"10 minutos"</item>
+    <item>"Tiempo de espera ilimitado"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automática"</item>
+    <item>"Ninguna"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Ninguna"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automáticamente"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP hexadecimal"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Cuando la pantalla de apague"</item>
+    <item>"Nunca si está conectado"</item>
+    <item>"Nunca"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Tiempo de uso"</item>
+    <item>"Número de inicios"</item>
+    <item>"Nombre de la aplicación"</item>
+  </string-array>
+</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
new file mode 100644
index 0000000..e22ee4b
--- /dev/null
+++ b/res/values-es/strings.xml
@@ -0,0 +1,671 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Desconocido"</string>
+    <string name="turn_on_radio">"Activar señal móvil"</string>
+    <string name="turn_off_radio">"Desactivar señal móvil"</string>
+    <string name="turn_on_qxdm">"Habilitar registro QXDM de SD"</string>
+    <string name="turn_off_qxdm">"Inhabilitar registro QXDM de SD"</string>
+    <string name="radioInfo_menu_viewADN">"Ver libreta de direcciones de tarjeta SIM"</string>
+    <string name="radioInfo_menu_viewFDN">"Ver números de marcación fija"</string>
+    <string name="radioInfo_menu_viewSDN">"Ver números de marcación de servicio"</string>
+    <string name="radioInfo_menu_getPDP">"Obtener lista PDP"</string>
+    <string name="radioInfo_menu_enableData">"Habilitar conexión de datos"</string>
+    <string name="radioInfo_menu_disableData">"Inhabilitar conexión de datos"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Habilitar datos al iniciar"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Inhabilitar datos al iniciar"</string>
+    <string name="radioInfo_service_in">"En servicio"</string>
+    <string name="radioInfo_service_out">"Fuera de servicio"</string>
+    <string name="radioInfo_service_emergency">"Sólo llamadas de emergencia"</string>
+    <string name="radioInfo_service_off">"Señal móvil desactivada"</string>
+    <string name="radioInfo_roaming_in">"Itinerancia"</string>
+    <string name="radioInfo_roaming_not">"Sin itinerancia"</string>
+    <string name="radioInfo_phone_idle">"Inactivo"</string>
+    <string name="radioInfo_phone_ringing">"Sonando"</string>
+    <string name="radioInfo_phone_offhook">"Llamada en curso"</string>
+    <string name="radioInfo_data_disconnected">"Desconectada"</string>
+    <string name="radioInfo_data_connecting">"Estableciendo conexión..."</string>
+    <string name="radioInfo_data_connected">"Conectado"</string>
+    <string name="radioInfo_data_suspended">"Suspendido"</string>
+    <string name="radioInfo_unknown">"desconocido"</string>
+    <string name="radioInfo_display_packets">"pqts"</string>
+    <string name="radioInfo_display_bytes">"bytes"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Desactivar tarjeta SD"</string>
+    <string name="sdcard_format">"Formatear tarjeta SD"</string>
+    <string name="small_font">"Pequeño"</string>
+    <string name="medium_font">"Mediano"</string>
+    <string name="large_font">"Grande"</string>
+    <string name="font_size_save">"Aceptar"</string>
+    <string name="sdcard_setting">"Tarjeta SD"</string>
+    <string name="battery_info_status_label">"Estado de la batería:"</string>
+    <string name="battery_info_scale_label">"Nivel de batería:"</string>
+    <string name="battery_info_level_label">"Nivel de batería:"</string>
+    <string name="battery_info_health_label">"Estado de la batería:"</string>
+    <string name="battery_info_technology_label">"Tecnología de batería:"</string>
+    <string name="battery_info_voltage_label">"Voltaje de la batería:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Temperatura de la batería:"</string>
+    <string name="battery_info_temperature_units">"°C"</string>
+    <string name="battery_info_uptime">"Tiempo desde el inicio:"</string>
+    <string name="battery_info_awake_battery">"Tiempo de actividad en batería:"</string>
+    <string name="battery_info_awake_plugged">"Tiempo de actividad durante la carga:"</string>
+    <string name="battery_info_screen_on">"Pantalla de duración de encendido"</string>
+    <string name="battery_info_status_unknown">"Desconocido"</string>
+    <string name="battery_info_status_charging">"Cargando..."</string>
+    <string name="battery_info_status_charging_ac">"(CA)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Descargando..."</string>
+    <string name="battery_info_status_not_charging">"No se está cargando."</string>
+    <string name="battery_info_status_full">"Completa"</string>
+    <string name="battery_info_health_unknown">"Desconocido"</string>
+    <string name="battery_info_health_good">"Buena"</string>
+    <string name="battery_info_health_overheat">"Sobrecalentamiento"</string>
+    <string name="battery_info_health_dead">"Agotada"</string>
+    <string name="battery_info_health_over_voltage">"Sobretensión"</string>
+    <string name="battery_info_health_unspecified_failure">"Error desconocido"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Visible"</string>
+    <string name="bluetooth_is_discoverable">"Visible durante <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> segundos..."</string>
+    <string name="bluetooth_not_discoverable">"Hacer visible el dispositivo"</string>
+    <string name="bluetooth_devices">"Dispositivos Bluetooth"</string>
+    <string name="bluetooth_device_name">"Nombre del dispositivo"</string>
+    <string name="bluetooth_name_not_set">"No se ha establecido ningún nombre; se utiliza el nombre de cuenta."</string>
+    <string name="bluetooth_scan_for_devices">"Buscar dispositivos"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> se desconectará."</string>
+    <string name="bluetooth_connected">"Conectado"</string>
+    <string name="bluetooth_disconnected">"Desconectada"</string>
+    <string name="bluetooth_disconnecting">"Desconectando..."</string>
+    <string name="bluetooth_connecting">"Estableciendo conexión..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Sincronizar con este dispositivo"</string>
+    <string name="bluetooth_pairing">"Sincronizando..."</string>
+    <string name="bluetooth_paired">"Sincronizado pero no conectado"</string>
+    <string name="bluetooth_device">"manos libres/auriculares"</string>
+    <string name="progress_scanning">"Buscando..."</string>
+    <string name="bluetooth_notif_ticker">"Solicitud de sincronización de Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Solicitud de sincronización"</string>
+    <string name="bluetooth_notif_message">"Seleccionar dispositivo para sincronización "</string>
+    <string name="date_and_time">"Configuración de fecha y hora"</string>
+    <string name="date_time_12_hour_sample">"1:00 p.m."</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Seleccionar zona horaria"</string>
+    <string name="display_preview_label">"Vista previa:"</string>
+    <string name="display_font_size_label">"Tamaño de fuente:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Enviar <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"Iniciar <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Cuenta:"</string>
+    <string name="proxy_clear_text">"Borrar"</string>
+    <string name="proxy_port_label">"Puerto"</string>
+    <string name="proxy_defaultView_text">"Restaurar valores predeterminados"</string>
+    <string name="proxy_action_text">"Guardar"</string>
+    <string name="proxy_hostname_label">"Nombre de host"</string>
+    <string name="proxy_error">"Atención"</string>
+    <string name="proxy_error_dismiss">"Aceptar"</string>
+    <string name="proxy_error_invalid_host">"El nombre de host introducido no es válido."</string>
+    <string name="proxy_error_empty_port">"Debes completar el campo de puerto."</string>
+    <string name="proxy_error_empty_host_set_port">"El campo de portal debe estar vacío si el campo de host también lo está."</string>
+    <string name="proxy_error_invalid_port">"El puerto introducido no es válido."</string>
+    <string name="radio_info_signal_location_label">"Ubicación:"</string>
+    <string name="radio_info_neighboring_location_label">"CID anexo"</string>
+    <string name="radio_info_data_attempts_label">"Intentos de datos:"</string>
+    <string name="radio_info_gprs_service_label">"Servicio GPRS:"</string>
+    <string name="radio_info_roaming_label">"Itinerancia:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Desvío de llamada:"</string>
+    <string name="radio_info_ppp_resets_label">"Número de PPP restablecidos desde el inicio:"</string>
+    <string name="radio_info_gsm_disconnects_label">"Desconexión de GSM:"</string>
+    <string name="radio_info_current_network_label">"Red actual:"</string>
+    <string name="radio_info_data_successes_label">"Datos correctos:"</string>
+    <string name="radio_info_ppp_received_label">"PPP recibido:"</string>
+    <string name="radio_info_gsm_service_label">"Servicio GSM:"</string>
+    <string name="radio_info_signal_strength_label">"Intensidad de la señal:"</string>
+    <string name="radio_info_call_status_label">"Estado de la llamada:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP enviado:"</string>
+    <string name="radio_info_radio_resets_label">"Restablecimientos de señal móvil:"</string>
+    <string name="radio_info_message_waiting_label">"Mensaje en espera:"</string>
+    <string name="radio_info_phone_number_label">"Número de teléfono:"</string>
+    <string name="radio_info_band_mode_label">"Seleccionar banda de señal móvil"</string>
+    <string name="radio_info_network_type_label">"Tipo de red:"</string>
+    <string name="radio_info_set_perferred_label">"Establecer tipo de red preferido:"</string>
+    <string name="radio_info_ping_ipaddr">"Hacer ping a DirIP:"</string>
+    <string name="radio_info_ping_hostname">"Hacer ping a nombre de host (www.google.com):"</string>
+    <string name="radio_info_http_client_test">"Prueba de cliente HTTP:"</string>
+    <string name="radio_info_toggle_ciph_label">"Alternar cifrado"</string>
+    <string name="ping_test_label">"Ejecutar prueba de ping"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Actualizar"</string>
+    <string name="radio_info_smsc_refresh_label">"Actualizar"</string>
+    <string name="radio_info_toggle_dns_check_label">"alternar comprobación de DNS"</string>
+    <string name="band_mode_title">"Establecer banda GSM/UMTS"</string>
+    <string name="band_mode_loading">"Cargando lista de bandas..."</string>
+    <string name="band_mode_set">"Establecer"</string>
+    <string name="band_mode_failed">"Con error"</string>
+    <string name="band_mode_succeeded">"Correcto"</string>
+    <string name="sdcard_changes_instructions">"Los cambios se aplican cuando se vuelve a conectar el cable USB."</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Habilitar almacenamiento masivo USB"</string>
+    <string name="sdcard_settings_total_bytes_label">"Bytes totales:"</string>
+    <string name="sdcard_settings_not_present_status">"Falta la tarjeta SD"</string>
+    <string name="sdcard_settings_available_bytes_label">"Bytes disponibles:"</string>
+    <string name="sdcard_settings_mass_storage_status">"La tarjeta SD se está utilizando como dispositivo de almacenamiento masivo."</string>
+    <string name="sdcard_settings_unmounted_status">"Es seguro extraer la tarjeta SD"</string>
+    <string name="sdcard_settings_bad_removal_status">"La tarjeta SD se ha extraído mientras estaba en uso."</string>
+    <string name="sdcard_settings_used_bytes_label">"Bytes utilizados:"</string>
+    <string name="sdcard_settings_scanning_status">"Buscando medios en tarjeta SD..."</string>
+    <string name="sdcard_settings_read_only_status">"Tarjeta SD activada en modo de sólo lectura"</string>
+    <string name="next_label">"Siguiente"</string>
+    <string name="language_picker_title">"Configuración local"</string>
+    <string name="select_your_language">"Selecciona el idioma que prefieras."</string>
+    <string name="activity_picker_label">"Seleccionar actividad"</string>
+    <string name="device_info_label">"Información del dispositivo"</string>
+    <string name="battery_info_label">"Información sobre la batería"</string>
+    <string name="battery_history_label">"Historial de la batería"</string>
+    <string name="display_label">"Pantalla"</string>
+    <string name="phone_info_label">"Información sobre el teléfono"</string>
+    <string name="sd_card_settings_label">"Tarjeta SD"</string>
+    <string name="proxy_settings_label">"Configuración de proxy"</string>
+    <string name="cancel">"Cancelar"</string>
+    <string name="settings_label">"Ajustes"</string>
+    <string name="airplane_mode">"Modo avión"</string>
+    <string name="airplane_mode_summary">"Inhabilitar todas las conexiones inalámbricas"</string>
+    <string name="airplane_mode_turning_on">"Inhabilitando conexiones inalámbricas..."</string>
+    <string name="airplane_mode_turning_off">"Habilitando conexiones inalámbricas..."</string>
+    <string name="radio_controls_title">"Conexiones inalámbricas"</string>
+    <string name="radio_controls_summary">"Administrar Wi-Fi, Bluetooth, modo avión y redes móviles"</string>
+    <string name="date_and_time_settings_title">"Fecha y hora"</string>
+    <string name="date_and_time_settings_summary">"Establecer fecha, hora, zona horaria y formatos"</string>
+    <string name="date_time_auto">"Automático"</string>
+    <string name="date_time_auto_summaryOn">"Utilizar valores proporcionados por la red"</string>
+    <string name="date_time_auto_summaryOff">"Utilizar valores proporcionados por la red"</string>
+    <string name="date_time_24hour">"Utilizar formato de 24 horas"</string>
+    <string name="date_time_set_time">"Establecer hora"</string>
+    <string name="date_time_set_timezone">"Seleccionar zona horaria"</string>
+    <string name="date_time_set_date">"Establecer fecha"</string>
+    <string name="date_time_date_format">"Seleccionar formato de fecha"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Ordenar alfabéticamente"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Ordenar por zona horaria"</string>
+    <string name="security_settings_title">"Seguridad y ubicación"</string>
+    <string name="security_settings_summary">"Establecer ubicación, bloqueo de pantalla y bloqueo de tarjeta SIM"</string>
+    <string name="security_passwords_title">"Contraseñas"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Activar Bluetooth"</string>
+    <string name="bluetooth_settings">"Bluetooth"</string>
+    <string name="bluetooth_settings_title">"Ajustes de Bluetooth"</string>
+    <string name="bluetooth_settings_summary">"Administrar conexiones, establecer el nombre del dispositivo y la visibilidad"</string>
+    <string name="bluetooth_pin_entry">"Solicitud de sincronización de Bluetooth"</string>
+    <string name="bluetooth_device_info">"Información de dispositivo Bluetooth"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Introduce el PIN para la sincronización."\n"(Prueba con 0000 ó 1234)."</string>
+    <string name="bluetooth_error_title">"Atención"</string>
+    <string name="bluetooth_pairing_error_message">"Se ha producido un problema al realizar la sincronización con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Se ha producido un problema al realizar la sincronización con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, porque el PIN introducido es incorrecto."</string>
+    <string name="bluetooth_connecting_error_message">"Se ha producido un problema al establecer conexión con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_preference_scan_title">"Buscar dispositivos"</string>
+    <string name="bluetooth_device_context_connect">"Establecer conexión"</string>
+    <string name="bluetooth_device_context_disconnect">"Desconectar"</string>
+    <string name="bluetooth_device_context_pair_connect">"Sincronizar y conectar"</string>
+    <string name="bluetooth_device_context_unpair">"Desincronizar"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Desconectar y desincronizar"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Opciones…"</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Establecer conexión con…"</string>
+    <string name="bluetooth_profile_a2dp">"Multimedia"</string>
+    <string name="bluetooth_profile_headset">"Teléfono"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Conectado al audio del medio"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Conectado al audio del teléfono"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Conectado a audio de medio y del teléfono"</string>
+    <string name="bluetooth_device_advanced_title">"Opciones de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Establecer conexión"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Establecer conexión con dispositivo Bluetooth"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Perfiles"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Conectado al audio del medio"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Conectado al audio del teléfono"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Utilizar para audio de medio"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Utilizar para audio del teléfono"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Activar Wi-Fi"</string>
+    <string name="wifi_settings">"Configuración de Wi-Fi"</string>
+    <string name="wifi_settings_category">"Configuración de Wi-Fi"</string>
+    <string name="wifi_settings_summary">"Configurar y administrar puntos de acceso inalámbricos"</string>
+    <string name="forget_network">"Borrar"</string>
+    <string name="wifi_status">"Estado"</string>
+    <string name="wifi_link_speed">"Velocidad"</string>
+    <string name="wifi_signal_3">"Excelente"</string>
+    <string name="wifi_signal_2">"Buena"</string>
+    <string name="wifi_signal_1">"Aceptable"</string>
+    <string name="wifi_signal_0">"Baja"</string>
+    <string name="security">"Seguridad"</string>
+    <string name="wifi_security_open">"Abierta"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Desconocida"</string>
+    <string name="wifi_security_verbose_open">"Red abierta"</string>
+    <string name="wifi_security_verbose_wep">"Protegido con WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Protegida con WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Protegida con WPA2"</string>
+    <string name="ip_address">"Dirección IP"</string>
+    <string name="signal">"Intensidad de la señal"</string>
+    <string name="wifi_starting">"Activando..."</string>
+    <string name="wifi_stopping">"Desactivando..."</string>
+    <string name="wifi_error">"Error"</string>
+    <string name="error_starting">"No se ha podido iniciar la función Wi-Fi."</string>
+    <string name="error_stopping">"No se ha podido interrumpir la función Wi-Fi."</string>
+    <string name="error_scanning">"No se han podido buscar redes."</string>
+    <string name="error_connecting">"No se ha podido establecer conexión con la red."</string>
+    <string name="error_saving">"No se ha podido guardar la red."</string>
+    <string name="connect">"Establecer conexión"</string>
+    <string name="connect_to_blank">"Establecer conexión con <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Contraseña de red inalámbrica"</string>
+    <string name="please_type_hex_key">"Clave hex. WEP (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Mostrar contraseña"</string>
+    <string name="scan_wifi">"Buscar"</string>
+    <string name="summary_not_in_range">"Fuera de rango"</string>
+    <string name="summary_remembered">"Recordada"</string>
+    <string name="summary_connection_failed">"La conexión no se ha realizado correctamente; selecciónala para volver a intentarlo."</string>
+    <string name="wifi_access_points">"Redes Wi-Fi"</string>
+    <string name="wifi_type_ssid">"SSID de red"</string>
+    <string name="wifi_security">"Seguridad"</string>
+    <string name="wifi_save_config">"Guardar"</string>
+    <string name="wifi_password_unchanged">"(sin modificar)"</string>
+    <string name="wifi_add_other_network">"Añadir red Wi-Fi"</string>
+    <string name="wifi_notify_open_networks">"Notificación de red"</string>
+    <string name="wifi_notify_open_networks_summary">"Informarme cuando haya una red abierta disponible"</string>
+    <string name="wifi_password_incorrect_error">"La contraseña de red que has introducido no es correcta. Inténtalo de nuevo."</string>
+    <string name="wifi_generic_connection_error">"Se ha producido un problema al intentar establecer conexión con la red. Inténtalo de nuevo."</string>
+    <string name="wifi_menu_advanced">"Avanzado"</string>
+    <string name="wifi_ip_settings_titlebar">"Configuración de IP"</string>
+    <string name="wifi_ip_settings_menu_save">"Guardar"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Cancelar"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Introduce una dirección IP válida."</string>
+    <string name="wifi_use_static_ip">"Utilizar IP estática"</string>
+    <string name="wifi_ip_address">"Dirección IP"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Puerta de enlace"</string>
+    <string name="wifi_netmask">"Máscara de red"</string>
+    <string name="wifi_context_menu_connect">"Establecer conexión con red"</string>
+    <string name="wifi_context_menu_forget">"Borrar red"</string>
+    <string name="wifi_context_menu_change_password">"Cambiar contraseña"</string>
+    <string name="wifi_advanced_titlebar">"Avanzado"</string>
+    <string name="wifi_setting_num_channels_title">"Dominio regulador"</string>
+    <string name="wifi_setting_num_channels_summary">"Establecer el número de canales que se van a utilizar"</string>
+    <string name="wifi_setting_num_channels_error">"Se ha producido un problema al intentar establecer el dominio regulador."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> canales"</string>
+    <string name="wifi_setting_sleep_policy_title">"Política de suspensión de Wi-Fi"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Especificar cuándo cambiar de Wi-Fi a datos móviles"</string>
+    <string name="wifi_setting_sleep_policy_error">"Se ha producido un problema al intentar establecer la política de suspensión."</string>
+    <string name="wifi_advanced_mac_address_title">"Dirección MAC"</string>
+    <string name="fragment_status_scanning">"Buscando..."</string>
+    <string name="fragment_status_connecting">"Conectando con <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"Autenticando con <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_obtaining_ip">"Obteniendo dirección IP de <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_connected">"Conectada a <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Desconectando de <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_disconnected">"Desconectada"</string>
+    <string name="fragment_status_failed">"Con error"</string>
+    <string name="status_scanning">"Buscando..."</string>
+    <string name="status_connecting">"Estableciendo conexión..."</string>
+    <string name="status_authenticating">"Autenticando..."</string>
+    <string name="status_obtaining_ip">"Obteniendo dirección..."</string>
+    <string name="status_connected">"Conectada"</string>
+    <string name="status_disconnecting">"Desconectando..."</string>
+    <string name="status_disconnected">"Desconectada"</string>
+    <string name="status_failed">"Con error"</string>
+    <string name="sound_and_display_settings">"Sonido y pantalla"</string>
+    <string name="sound_settings">"Configuración de sonido"</string>
+    <string name="sound_and_display_settings_summary">"Establecer tonos, notificaciones, brillo de la pantalla"</string>
+    <string name="silent_mode_title">"Modo silencio"</string>
+    <string name="silent_mode_summary">"Silencio de todos los sonidos (excepto los multimedia y las alarmas)"</string>
+    <string name="ringtone_title">"Tono del teléfono"</string>
+    <string name="ringtone_summary">"Establecer el tono de llamada entrante predeterminado"</string>
+    <string name="ring_volume_title">"Volumen del timbre"</string>
+    <string name="ring_volume_summary">"Establecer volumen para llamadas entrantes y notificaciones"</string>
+    <string name="vibrate_title">"Teléfono en vibración"</string>
+    <string name="vibrate_summary">"Teléfono en vibración para llamadas entrantes"</string>
+    <string name="notification_sound_title">"Tono de notificación"</string>
+    <string name="notification_sound_summary">"Establecer el tono de notificación predeterminado"</string>
+    <string name="incoming_call_volume_title">"Volumen de llamada entrante"</string>
+    <string name="notification_volume_title">"Volumen de notificaciones"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Utilizar volumen de llamada entrante para notificaciones"</string>
+    <string name="notification_sound_dialog_title">"Seleccionar tono de notificación"</string>
+    <string name="media_volume_title">"Volumen multimedia"</string>
+    <string name="media_volume_summary">"Establecer volumen para música y vídeos"</string>
+    <string name="dtmf_tone_enable_title">"Tonos táctiles sonoros"</string>
+    <string name="dtmf_tone_enable_summary_on">"Reproducir tonos al utilizar teclado de marcado"</string>
+    <string name="dtmf_tone_enable_summary_off">"Reproducir tonos al utilizar teclado de marcado"</string>
+    <string name="sound_effects_enable_title">"Selección sonora"</string>
+    <string name="sound_effects_enable_summary_on">"Reproducir sonido cuando se realiza una selección de pantalla"</string>
+    <string name="sound_effects_enable_summary_off">"Reproducir sonido cuando se realiza una selección de pantalla"</string>
+    <string name="play_media_notification_sounds_enable_title">"Notificaciones de la tarjeta SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Inhabilitar sonidos de notificación de la tarjeta SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Habilitar sonidos de notificación de la tarjeta SD"</string>
+    <string name="sync_settings">"Sincronización de datos"</string>
+    <string name="sync_settings_summary">"Seleccionar las aplicaciones que están sincronizadas"</string>
+    <string name="display_settings">"Configuración de pantalla"</string>
+    <string name="animations_title">"Animación"</string>
+    <string name="animations_summary_on">"Mostrar animación al abrir o cerrar ventanas"</string>
+    <string name="animations_summary_off">"Mostrar animación al abrir o cerrar ventanas"</string>
+    <string name="brightness">"Brillo"</string>
+    <string name="brightness_summary">"Ajustar el brillo de la pantalla"</string>
+    <string name="screen_timeout">"Tiempo de espera de pantalla"</string>
+    <string name="screen_timeout_summary">"Ajustar el tiempo de retraso antes de que la pantalla se apague automáticamente"</string>
+    <string name="sim_lock_settings">"Configuración de bloqueo de tarjeta SIM"</string>
+    <string name="sim_lock_settings_category">"Configurar bloqueo de tarjeta SIM"</string>
+    <string name="sim_lock_settings_title">"Bloqueo de tarjeta SIM"</string>
+    <string name="sim_pin_toggle">"Bloquear tarjeta SIM"</string>
+    <string name="sim_lock_on">"Solicitar PIN para utilizar el teléfono"</string>
+    <string name="sim_lock_off">"Solicitar PIN para utilizar el teléfono"</string>
+    <string name="sim_pin_change">"Cambiar PIN de tarjeta SIM"</string>
+    <string name="sim_enter_pin">"PIN de tarjeta SIM"</string>
+    <string name="sim_enable_sim_lock">"Bloquear tarjeta SIM"</string>
+    <string name="sim_disable_sim_lock">"Desbloquear tarjeta SIM"</string>
+    <string name="sim_enter_old">"PIN de tarjeta SIM antiguo"</string>
+    <string name="sim_enter_new">"Nuevo PIN de tarjeta SIM"</string>
+    <string name="sim_reenter_new">"Volver a introducir PIN nuevo"</string>
+    <string name="sim_change_pin">"PIN de tarjeta SIM"</string>
+    <string name="sim_bad_pin">"PIN incorrecto"</string>
+    <string name="sim_pins_dont_match">"Los códigos PIN no coinciden."</string>
+    <string name="sim_change_failed">"No se ha podido cambiar el PIN."\n"Es posible que no sea correcto."</string>
+    <string name="sim_change_succeeded">"El PIN de la tarjeta SIM se ha modificado correctamente."</string>
+    <string name="sim_lock_failed">"No se ha podido cambiar el estado de bloqueo de la tarjeta SIM."\n"Es posible que el PIN sea incorrecto."</string>
+    <string name="sim_enter_ok">"Aceptar"</string>
+    <string name="sim_enter_cancel">"Cancelar"</string>
+    <string name="device_info_settings">"Estado del teléfono"</string>
+    <string name="system_update_settings_list_item_title">"Actualizaciones del sistema"</string>
+    <string name="system_update_settings_list_item_summary">"Buscar actualizaciones del sistema"</string>
+    <string name="firmware_version">"Versión del firmware"</string>
+    <string name="model_number">"Número de modelo"</string>
+    <string name="baseband_version">"Versión de banda base"</string>
+    <string name="kernel_version">"Versión de kernel"</string>
+    <string name="build_number">"Número de compilación"</string>
+    <string name="device_info_not_available">"No disponible"</string>
+    <string name="device_status_activity_title">"Estado"</string>
+    <string name="device_status">"Estado"</string>
+    <string name="device_status_summary">"IMEI, número de teléfono, señal, etc."</string>
+    <string name="storage_settings_title">"Almacenamiento"</string>
+    <string name="storage_settings_summary">"Tarjeta de SD sin activar, ver almacenamiento disponible"</string>
+    <string name="status_number">"Número de teléfono"</string>
+    <string name="status_network_type">"Tipo de red móvil"</string>
+    <string name="status_data_state">"Estado de red móvil"</string>
+    <string name="status_service_state">"Estado del servicio"</string>
+    <string name="status_signal_strength">"Intensidad de la señal"</string>
+    <string name="status_roaming">"Itinerancia"</string>
+    <string name="status_operator">"Red"</string>
+    <string name="status_wifi_mac_address">"Dirección MAC de la red Wi-Fi"</string>
+    <string name="status_bt_address">"Dirección de Bluetooth"</string>
+    <string name="status_unavailable">"No disponible"</string>
+    <string name="status_network_traffic_stats">"Uso de red"</string>
+    <string name="status_network_traffic_summary">"Enviado: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Recibido: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Tiempo de actividad"</string>
+    <string name="status_awake_time">"Tiempo de actividad"</string>
+    <string name="internal_memory">"Almacenamiento interno del teléfono"</string>
+    <string name="sd_memory">"Tarjeta SD"</string>
+    <string name="memory_available">"Espacio disponible"</string>
+    <string name="memory_size">"Espacio total"</string>
+    <string name="sd_eject">"Desactivar tarjeta SD"</string>
+    <string name="sd_eject_summary">"Desactiva la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
+    <string name="sd_format">"Formatear tarjeta SD"</string>
+    <string name="sd_format_summary">"Formatear (borrar) la tarjeta SD"</string>
+    <string name="sd_unavailable">"No disponible"</string>
+    <string name="read_only">" (Sólo lectura)"</string>
+    <string name="battery_status_title">"Estado de la batería"</string>
+    <string name="battery_level_title">"Nivel de batería"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"Editar punto de acceso"</string>
+    <string name="apn_not_set">"&lt;No establecido&gt;"</string>
+    <string name="apn_name">"Nombre"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Puerto"</string>
+    <string name="apn_user">"Nombre de usuario"</string>
+    <string name="apn_password">"Contraseña"</string>
+    <string name="apn_server">"Servidor"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"Proxy MMS"</string>
+    <string name="apn_mms_port">"Puerto de MMS"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"Tipo de APN"</string>
+    <string name="menu_delete">"Eliminar APN"</string>
+    <string name="menu_new">"APN nuevo"</string>
+    <string name="menu_save">"Guardar"</string>
+    <string name="menu_cancel">"Descartar"</string>
+    <string name="error_title">"Atención"</string>
+    <string name="error_name_empty">"El campo Nombre no puede estar vacío."</string>
+    <string name="error_apn_empty">"El campo de APN no puede estar vacío."</string>
+    <string name="error_mcc_not3">"El campo MMC debe contener 3 dígitos."</string>
+    <string name="error_mnc_not23">"El campo MNC debe contener 2 ó 3 dígitos."</string>
+    <string name="master_clear_title">"Restablecer datos de fábrica"</string>
+    <string name="master_clear_summary">"Borrar todos los datos del teléfono"</string>
+    <string name="master_clear_desc">"Esta acción restablecerá el teléfono a su estado de fábrica inicial y borrará todos los datos y todas las aplicaciones descargadas."</string>
+    <string name="master_clear_button_text">"Reiniciar teléfono"</string>
+    <string name="master_clear_final_desc">"¿Deseas reiniciar el teléfono y borrar todos los datos y todas las aplicaciones? Recuerda que esta acción no se puede deshacer."</string>
+    <string name="master_clear_final_button_text">"Borrar todo"</string>
+    <string name="master_clear_gesture_prompt">"Crea tu patrón de desbloqueo."</string>
+    <string name="master_clear_gesture_explanation">"Debes crear un patrón de desbloqueo para confirmar el reinicio del teléfono."</string>
+    <string name="master_clear_failed">"No se ha reiniciado el sistema porque el servicio Borrado del sistema no está disponible."</string>
+    <string name="media_format_title">"Formatear tarjeta SD"</string>
+    <string name="media_format_summary">"Borra todos los datos de la tarjeta SD."</string>
+    <string name="media_format_desc">"Esta acción borrará el contenido de la tarjeta SD del teléfono. Perderás TODOS los datos de la tarjeta."</string>
+    <string name="media_format_button_text">"Formatear tarjeta SD"</string>
+    <string name="media_format_final_desc">"¿Quieres formatear la tarjeta SD y borrar todos los datos? Esta acción no se puede deshacer."</string>
+    <string name="media_format_final_button_text">"Borrar todo"</string>
+    <string name="media_format_gesture_prompt">"Crea tu patrón de desbloqueo."</string>
+    <string name="media_format_gesture_explanation">"Debes crear un patrón de desbloqueo para confirmar el formato de la tarjeta SD."</string>
+    <string name="call_settings_title">"Ajustes de llamadas"</string>
+    <string name="call_settings_summary">"Configurar buzón, llamada en espera, desvío e identificador"</string>
+    <string name="network_settings_title">"Redes móviles"</string>
+    <string name="network_settings_summary">"Establecer opciones para itinerancia, redes, APN"</string>
+    <string name="location_title">"Fuentes de Mi Ubicación"</string>
+    <string name="location_network_based">"Usar redes inalámbricas"</string>
+    <string name="location_networks_disabled">"Para ver una ubicación en aplicaciones (por ejemplo, Google Maps)"</string>
+    <string name="location_neighborhood_level">"Ubicación determinada por redes móviles o Wi-Fi"</string>
+    <string name="location_gps">"Habilitar satélites GPS"</string>
+    <string name="location_street_level">"Preciso en el nivel de calle (anula la selección para ahorrar batería)"</string>
+    <string name="location_gps_disabled">"Localizar en nivel de calle (requiere más batería además de la vista aérea)"</string>
+    <string name="about_settings">"Acerca del teléfono"</string>
+    <string name="about_settings_summary">"Ver información legal, estado del teléfono, versión del software"</string>
+    <string name="legal_information">"Información legal"</string>
+    <string name="contributors_title">"Contribuidores"</string>
+    <string name="copyright_title">"Derechos de autor"</string>
+    <string name="license_title">"Licencia"</string>
+    <string name="terms_title">"Términos y condiciones"</string>
+    <string name="settings_license_activity_title">"Licencias de software libre"</string>
+    <string name="settings_license_activity_unavailable">"Se ha producido un problema al intentar cargar las licencias."</string>
+    <string name="settings_license_activity_loading">"Cargando..."</string>
+    <string name="lock_settings_title">"Patrón de desbloqueo de pantalla"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Cambiar patrón de desbloqueo"</string>
+    <string name="lockpattern_need_to_unlock">"Confirmar patrón guardado"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Inténtalo de nuevo:"</string>
+    <string name="lockpattern_recording_intro_header">"Crear un patrón de desbloqueo"</string>
+    <string name="lockpattern_recording_intro_footer">"Pulsa la tecla de menú para obtener ayuda."</string>
+    <string name="lockpattern_recording_inprogress">"Levanta el dedo cuando termines."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Une al menos <xliff:g id="NUMBER">%d</xliff:g> puntos. Inténtalo de nuevo:"</string>
+    <string name="lockpattern_pattern_entered_header">"Patrón grabado"</string>
+    <string name="lockpattern_need_to_confirm">"Vuelve a dibujar el patrón para confirmarlo:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Tu patrón de desbloqueo nuevo:"</string>
+    <string name="lockpattern_confirm_button_text">"Confirmar"</string>
+    <string name="lockpattern_restart_button_text">"Crear un patrón nuevo"</string>
+    <string name="lockpattern_retry_button_text">"Reintentar"</string>
+    <string name="lockpattern_continue_button_text">"Seguir"</string>
+    <string name="lockpattern_settings_title">"Patrón de desbloqueo"</string>
+    <string name="lockpattern_settings_enable_title">"Patrón obligatorio"</string>
+    <string name="lockpattern_settings_enable_summary">"Se debe crear un patrón para desbloquear la pantalla."</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Utilizar patrón visible"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Utilizar comentarios al crear patrón"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Establecer patrón de desbloqueo"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Cambiar patrón de desbloqueo"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Cómo crear un patrón de desbloqueo"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Se han realizado demasiados intentos incorrectos."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Espera <xliff:g id="NUMBER">%d</xliff:g> segundos y vuelve a intentarlo."</string>
+    <string name="skip_button_label">"Cancelar"</string>
+    <string name="next_button_label">"Seguir"</string>
+    <string name="lock_title">"Protección del teléfono"</string>
+    <string name="lock_intro_message"><font size="17">"Protege el teléfono de usos no autorizados mediante la creación de un patrón de desbloqueo de pantalla personal. "\n<font height="17">\n</font><b>"1"</b>"  En la siguiente pantalla, puedes observar cómo se crea un patrón de ejemplo. "\n<font height="17">\n</font><b>"2"</b>"  Cuando estés preparado, crea tu propio patrón de desbloqueo personal. Puedes experimentar con distintos patrones, pero recuerda que debes conectar al menos cuatro puntos. "\n<font height="17">\n</font><b>"3"</b>"  Vuelve a dibujar el patrón para confirmarlo. "\n<font height="17">\n</font><b>"Si estás preparado para comenzar, selecciona \"Seguir\""</b>". "\n<font height="3">\n</font>"Para dejar el teléfono desprotegido, selecciona \"Cancelar\"."</font></string>
+    <string name="lock_example_title">"Patrón de ejemplo"</string>
+    <string name="lock_example_message">"Une al menos cuatro puntos."\n" "\n"Selecciona \"Seguir\" cuando estés preparado para crear tu propio patrón."</string>
+    <string name="manageapplications_settings_title">"Administrar aplicaciones"</string>
+    <string name="manageapplications_settings_summary">"Administrar y eliminar aplicaciones instaladas"</string>
+    <string name="applications_settings">"Aplicaciones"</string>
+    <string name="applications_settings_summary">"Administrar aplicaciones, configurar accesos directos de inicio rápido"</string>
+    <string name="applications_settings_header">"Configuración de aplicaciones"</string>
+    <string name="install_applications">"Orígenes desconocidos"</string>
+    <string name="install_unknown_applications">"Permitir la instalación de aplicaciones distintas de Market"</string>
+    <string name="install_all_warning">"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">"Información de la aplicación"</string>
+    <string name="storage_label">"Almacenamiento"</string>
+    <string name="auto_launch_label">"Ejecutar de forma predeterminada"</string>
+    <string name="permissions_label">"Permisos"</string>
+    <string name="cache_header_label">"Caché"</string>
+    <string name="clear_cache_btn_text">"Borrar caché"</string>
+    <string name="cache_size_label">"Caché"</string>
+    <string name="controls_label">"Controles"</string>
+    <string name="force_stop">"Forzar detención"</string>
+    <string name="total_size_label">"Total"</string>
+    <string name="application_size_label">"Aplicación"</string>
+    <string name="data_size_label">"Datos"</string>
+    <string name="uninstall_text">"Desinstalar"</string>
+    <string name="clear_user_data_text">"Borrar datos"</string>
+    <string name="auto_launch_enable_text">"Has elegido ejecutar la aplicación de forma predeterminada para algunas acciones."</string>
+    <string name="auto_launch_disable_text">"No se han establecido valores predeterminados."</string>
+    <string name="clear_activities">"Borrar valores predeterminados"</string>
+    <string name="unknown">"Desconocido"</string>
+    <string name="sort_order_alpha">"Ordenar"</string>
+    <string name="sort_order_size">"Ordenar por tamaño"</string>
+    <string name="manage_space_text">"Administrar espacio"</string>
+    <string name="filter">"Filtrar"</string>
+    <string name="filter_dlg_title">"Seleccionar opciones de filtrado"</string>
+    <string name="filter_apps_all">"Todas"</string>
+    <string name="filter_apps_third_party">"Externas"</string>
+    <string name="filter_apps_running">"En ejecución"</string>
+    <string name="loading">"Cargando..."</string>
+    <string name="recompute_size">"Recalculando tamaño..."</string>
+    <string name="clear_data_dlg_title">"Suprimir"</string>
+    <string name="clear_data_dlg_text">"Toda la información que hayas guardado en la aplicación se eliminará permanentemente."</string>
+    <string name="dlg_ok">"Aceptar"</string>
+    <string name="dlg_cancel">"Cancelar"</string>
+    <string name="app_not_found_dlg_title">"No se ha encontrado la aplicación."</string>
+    <string name="app_not_found_dlg_text">"No se ha encontrado la aplicación en la lista de aplicaciones instaladas."</string>
+    <string name="clear_data_failed">"No se han podido borrar los datos de aplicación."</string>
+    <string name="security_settings_desc">"Esta aplicación puede acceder a los siguientes elementos del teléfono:"</string>
+    <string name="computing_size">"Calculando…"</string>
+    <string name="invalid_size_value">"No se ha podido calcular el tamaño del paquete."</string>
+    <string name="empty_list_msg">"No tienes instalada ninguna aplicación externa."</string>
+    <string name="language_settings">"Idioma y país"</string>
+    <string name="language_settings_summary">"Configuración local, opciones de autocorrección e introducción de texto"</string>
+    <string name="language_category">"Configuración local"</string>
+    <string name="text_category">"Configuración de texto"</string>
+    <string name="phone_language">"Seleccionar configuración local"</string>
+    <string name="phone_language_summary">"Seleccionar idioma y región"</string>
+    <string name="auto_replace">"Corrección automática"</string>
+    <string name="auto_replace_summary">"Corregir palabras con errores de escritura"</string>
+    <string name="auto_caps">"Mayúsculas automáticas"</string>
+    <string name="auto_caps_summary">"Escribir en mayúsculas la primera letra de las frases"</string>
+    <string name="auto_punctuate">"Puntuación automática"</string>
+    <string name="hardkeyboard_category">"Configuración del teclado físico"</string>
+    <string name="auto_punctuate_summary">"Pulsa la barra espaciadora dos veces para insertar el carácter \".\""</string>
+    <string name="show_password">"Contraseñas visibles"</string>
+    <string name="show_password_summary">"Mostrar contraseña mientras se escribe"</string>
+    <string name="user_dict_settings_titlebar">"Diccionario del usuario"</string>
+    <string name="user_dict_settings_title">"Diccionario del usuario"</string>
+    <string name="user_dict_settings_summary">"Añadir y eliminar palabras del diccionario del usuario"</string>
+    <string name="user_dict_settings_add_menu_title">"Añadir"</string>
+    <string name="user_dict_settings_add_dialog_title">"Añadir al usuario"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Editar"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Suprimir"</string>
+    <string name="user_dict_settings_empty_text">"No tienes ninguna palabra en el diccionario del usuario. Puedes añadir una palabra a través del menú."</string>
+    <string name="testing">"Prueba"</string>
+    <string name="testing_phone_info">"Información sobre el teléfono"</string>
+    <string name="testing_battery_info">"Información sobre la batería"</string>
+    <string name="testing_battery_history">"Historial de la batería"</string>
+    <string name="quick_launch_title">"Inicio rápido"</string>
+    <string name="quick_launch_summary">"Establecer accesos rápidos del teclado para ejecutar aplicaciones"</string>
+    <string name="quick_launch_assign_application">"Asignar aplicación"</string>
+    <string name="quick_launch_no_shortcut">"Sin acceso directo"</string>
+    <string name="quick_launch_shortcut">"Buscar + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Borrar"</string>
+    <string name="quick_launch_clear_dialog_message">"Se eliminará el acceso directo <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g><xliff:g id="APPLICATION_NAME">%2$s</xliff:g>."</string>
+    <string name="quick_launch_clear_ok_button">"Aceptar"</string>
+    <string name="quick_launch_clear_cancel_button">"Cancelar"</string>
+    <string name="quick_launch_display_mode_applications">"Aplicaciones"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Accesos directos"</string>
+    <string name="input_methods_settings_title">"Introducción de texto"</string>
+    <string name="input_methods_settings_summary">"Administrar opciones de introducción de texto"</string>
+    <string name="input_methods_settings_label_format">"Configuración de %s"</string>
+    <string name="development_settings_title">"Desarrollo"</string>
+    <string name="development_settings_summary">"Establecer opciones de desarrollo de aplicaciones"</string>
+    <string name="enable_adb">"Depuración USB"</string>
+    <string name="enable_adb_summary">"Modo de depuración cuando está conectado el dispositivo USB"</string>
+    <string name="keep_screen_on">"Pantalla activa"</string>
+    <string name="keep_screen_on_summary">"La pantalla nunca entra en modo de suspensión durante la carga"</string>
+    <string name="allow_mock_location">"Permitir ubicaciones simuladas"</string>
+    <string name="allow_mock_location_summary">"Permitir ubicaciones simuladas"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Detalles del ID único %d"</string>
+    <string name="battery_history_uid">"ID único <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Detalles de uso de red para <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Bytes recibidos: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Bytes enviados: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Bytes totales: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"Detalles de uso de CPU para <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Tiempo de usuario:"</string>
+    <string name="battery_history_system_time">"Tiempo del sistema:"</string>
+    <string name="battery_history_total_time">"Tiempo total"</string>
+    <string name="battery_history_starts">"Inicios: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> días, <xliff:g id="HOURS">%2$d</xliff:g> horas, <xliff:g id="MINUTES">%3$d</xliff:g> minutos, <xliff:g id="SECONDS">%4$d</xliff:g> segundos"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> horas, <xliff:g id="MINUTES">%2$d</xliff:g> minutos, <xliff:g id="SECONDS">%3$d</xliff:g> segundos"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> minutos, <xliff:g id="SECONDS">%2$d</xliff:g> segundos"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> segundos"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Paquetes que comparten este ID único:"</string>
+    <string name="battery_history_no_data">"No hay datos disponibles sobre el uso de la batería."</string>
+    <string name="battery_history_sensor">"Sensor:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Sensor utilizado por paquetes:"</string>
+    <string name="battery_history_sensor_usage">"Utilizado <xliff:g id="COUNT">%1$d</xliff:g> veces por <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"Utilizado <xliff:g id="COUNT">%1$d</xliff:g> veces por uno de:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Tiempo transcurrido con la pantalla encendida:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"En la batería:"</string>
+    <string name="battery_history_screen_on_plugged">"Conectado:"</string>
+    <string name="usage_stats_label">"Estadísticas de uso"</string>
+    <string name="testing_usage_stats">"Estadísticas de uso"</string>
+    <string name="display_order_text">"Ordenar por:"</string>
+    <string name="app_name_label">"Aplicación"</string>
+    <string name="launch_count_label">"Número"</string>
+    <string name="usage_time_label">"Tiempo de uso"</string>
+</resources>
diff --git a/res/values-fr-nokeys/strings.xml b/res/values-fr-nokeys/strings.xml
new file mode 100644
index 0000000..a6e4745
--- /dev/null
+++ b/res/values-fr-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Gérer les applications"</string>
+</resources>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
new file mode 100644
index 0000000..6517114
--- /dev/null
+++ b/res/values-fr/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Amérique"</item>
+    <item>"Europe"</item>
+    <item>"Afrique"</item>
+    <item>"Asie"</item>
+    <item>"Australie"</item>
+    <item>"Pacifique"</item>
+    <item>"Tous"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 secondes"</item>
+    <item>"30 secondes"</item>
+    <item>"1 minute"</item>
+    <item>"2 minutes"</item>
+    <item>"10 minutes"</item>
+    <item>"Ne jamais désactiver"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automatique"</item>
+    <item>"Aucune"</item>
+    <item>"WEP"</item>
+    <item>"WPA personnel"</item>
+    <item>"WPA2 personnel"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Aucun"</item>
+    <item>"WEP"</item>
+    <item>"WPA personnel"</item>
+    <item>"WPA2 personnel"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automatique"</item>
+    <item>"WEP ASCII"</item>
+    <item>"Clé WEP hexadécimale"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Lorsque l\'écran s\'éteint"</item>
+    <item>"Jamais si branché"</item>
+    <item>"Jamais"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Temps d\'utilisation"</item>
+    <item>"Nombre de lancements"</item>
+    <item>"Nom de l\'application"</item>
+  </string-array>
+</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
new file mode 100644
index 0000000..7d8e534
--- /dev/null
+++ b/res/values-fr/strings.xml
@@ -0,0 +1,671 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Inconnu"</string>
+    <string name="turn_on_radio">"Allumer la radio"</string>
+    <string name="turn_off_radio">"Éteindre la radio"</string>
+    <string name="turn_on_qxdm">"Activer le journal SD QXDM"</string>
+    <string name="turn_off_qxdm">"Désactiver le journal QXMD SD"</string>
+    <string name="radioInfo_menu_viewADN">"Afficher le carnet d\'adresses de la carte SIM"</string>
+    <string name="radioInfo_menu_viewFDN">"Afficher les numéros autorisés"</string>
+    <string name="radioInfo_menu_viewSDN">"Afficher les numéros de service"</string>
+    <string name="radioInfo_menu_getPDP">"Récupérer la liste PDP"</string>
+    <string name="radioInfo_menu_enableData">"Activer la connexion des données"</string>
+    <string name="radioInfo_menu_disableData">"Désactiver la connexion des données"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Activer les données au démarrage"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Désactiver les données lors du démarrage"</string>
+    <string name="radioInfo_service_in">"Service en cours"</string>
+    <string name="radioInfo_service_out">"Hors-service"</string>
+    <string name="radioInfo_service_emergency">"Appels d\'urgence uniquement"</string>
+    <string name="radioInfo_service_off">"Radio désactivée"</string>
+    <string name="radioInfo_roaming_in">"Itinérance"</string>
+    <string name="radioInfo_roaming_not">"Sans itinérance"</string>
+    <string name="radioInfo_phone_idle">"Inactif"</string>
+    <string name="radioInfo_phone_ringing">"Sonnerie"</string>
+    <string name="radioInfo_phone_offhook">"Appel en cours"</string>
+    <string name="radioInfo_data_disconnected">"Déconnecté"</string>
+    <string name="radioInfo_data_connecting">"Connexion"</string>
+    <string name="radioInfo_data_connected">"Connecté"</string>
+    <string name="radioInfo_data_suspended">"Interrompu"</string>
+    <string name="radioInfo_unknown">"inconnu"</string>
+    <string name="radioInfo_display_packets">"paquets"</string>
+    <string name="radioInfo_display_bytes">"octets"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Retirer la carte SD"</string>
+    <string name="sdcard_format">"Formater la carte SD"</string>
+    <string name="small_font">"Petite"</string>
+    <string name="medium_font">"Moyenne"</string>
+    <string name="large_font">"Grande"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"Carte SD"</string>
+    <string name="battery_info_status_label">"État de la batterie :"</string>
+    <string name="battery_info_scale_label">"Batterie :"</string>
+    <string name="battery_info_level_label">"Niveau de la batterie :"</string>
+    <string name="battery_info_health_label">"État de la batterie :"</string>
+    <string name="battery_info_technology_label">"Technologie de la batterie :"</string>
+    <string name="battery_info_voltage_label">"Voltage de la batterie :"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Température de la batterie :"</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"Temps depuis le démarrage :"</string>
+    <string name="battery_info_awake_battery">"Temps de veille sur batterie :"</string>
+    <string name="battery_info_awake_plugged">"Temps en activité lors du rechargement :"</string>
+    <string name="battery_info_screen_on">"Écran activé :"</string>
+    <string name="battery_info_status_unknown">"Inconnu"</string>
+    <string name="battery_info_status_charging">"Chargement"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Baisse du niveau de charge"</string>
+    <string name="battery_info_status_not_charging">"Débranchée"</string>
+    <string name="battery_info_status_full">"Chargée"</string>
+    <string name="battery_info_health_unknown">"Inconnu"</string>
+    <string name="battery_info_health_good">"Bon"</string>
+    <string name="battery_info_health_overheat">"Surchauffe"</string>
+    <string name="battery_info_health_dead">"Vide"</string>
+    <string name="battery_info_health_over_voltage">"Voltage dépassé"</string>
+    <string name="battery_info_health_unspecified_failure">"Erreur inconnue"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Identifiable"</string>
+    <string name="bluetooth_is_discoverable">"Identifiable pendant <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> secondes..."</string>
+    <string name="bluetooth_not_discoverable">"Permettre l\'identification de l\'appareil"</string>
+    <string name="bluetooth_devices">"Périphériques Bluetooth"</string>
+    <string name="bluetooth_device_name">"Nom du périphérique"</string>
+    <string name="bluetooth_name_not_set">"Aucun nom n\'a été défini. Utilisation du nom du compte..."</string>
+    <string name="bluetooth_scan_for_devices">"Rechercher des périphériques"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> va être déconnecté."</string>
+    <string name="bluetooth_connected">"Connecté"</string>
+    <string name="bluetooth_disconnected">"Déconnecté"</string>
+    <string name="bluetooth_disconnecting">"Déconnexion…"</string>
+    <string name="bluetooth_connecting">"Connexion…"</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Associer à ce périphérique"</string>
+    <string name="bluetooth_pairing">"Association…"</string>
+    <string name="bluetooth_paired">"Associé mais non connecté"</string>
+    <string name="bluetooth_device">"mains libres/casque"</string>
+    <string name="progress_scanning">"Recherche"</string>
+    <string name="bluetooth_notif_ticker">"Demande d\'association Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Demande d\'association"</string>
+    <string name="bluetooth_notif_message">"Sélectionner pour associer à "</string>
+    <string name="date_and_time">"Paramètres d\'heure et de date"</string>
+    <string name="date_time_12_hour_sample">"13:00 h"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Choisir fuseau horaire"</string>
+    <string name="display_preview_label">"Aperçu :"</string>
+    <string name="display_font_size_label">"Taille de police :"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Envoyer <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g> :"</string>
+    <string name="intent_sender_startactivity_text">"Lancer <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g> :"</string>
+    <string name="intent_sender_account_label">"Compte :"</string>
+    <string name="proxy_clear_text">"Effacer"</string>
+    <string name="proxy_port_label">"Port"</string>
+    <string name="proxy_defaultView_text">"Rétablir les paramètres par défaut"</string>
+    <string name="proxy_action_text">"Enregistrer"</string>
+    <string name="proxy_hostname_label">"Nom de l\'hôte"</string>
+    <string name="proxy_error">"Attention"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"Le nom d\'hôte saisi n\'est pas valide."</string>
+    <string name="proxy_error_empty_port">"Vous devez renseigner le champ Port."</string>
+    <string name="proxy_error_empty_host_set_port">"Le champ Port doit rester vide si le champ Hôte n\'est pas renseigné."</string>
+    <string name="proxy_error_invalid_port">"Le port indiqué n\'est pas valide."</string>
+    <string name="radio_info_signal_location_label">"Emplacement :"</string>
+    <string name="radio_info_neighboring_location_label">"CID voisin :"</string>
+    <string name="radio_info_data_attempts_label">"Tentatives :"</string>
+    <string name="radio_info_gprs_service_label">"Service GPRS :"</string>
+    <string name="radio_info_roaming_label">"Itinérance :"</string>
+    <string name="radio_info_imei_label">"IIEM :"</string>
+    <string name="radio_info_call_redirect_label">"Redirection des appels :"</string>
+    <string name="radio_info_ppp_resets_label">"Nombre de réinitialisations PPP depuis le démarrage :"</string>
+    <string name="radio_info_gsm_disconnects_label">"Déconnexions GSM :"</string>
+    <string name="radio_info_current_network_label">"Réseau actuel :"</string>
+    <string name="radio_info_data_successes_label">"Réussites des données :"</string>
+    <string name="radio_info_ppp_received_label">"PPP reçus :"</string>
+    <string name="radio_info_gsm_service_label">"Service GSM :"</string>
+    <string name="radio_info_signal_strength_label">"Intensité du signal :"</string>
+    <string name="radio_info_call_status_label">"État de l\'appel :"</string>
+    <string name="radio_info_ppp_sent_label">"PPP envoyés :"</string>
+    <string name="radio_info_radio_resets_label">"Réinitialisations de la radio :"</string>
+    <string name="radio_info_message_waiting_label">"Message en attente :"</string>
+    <string name="radio_info_phone_number_label">"Numéro de téléphone :"</string>
+    <string name="radio_info_band_mode_label">"Choisir une bande radio"</string>
+    <string name="radio_info_network_type_label">"Type de réseau :"</string>
+    <string name="radio_info_set_perferred_label">"Définir le type de réseau préféré :"</string>
+    <string name="radio_info_ping_ipaddr">"Adr. IP ping :"</string>
+    <string name="radio_info_ping_hostname">"Nom de l\'hôte du ping (www.google.com) :"</string>
+    <string name="radio_info_http_client_test">"Test du client HTTP :"</string>
+    <string name="radio_info_toggle_ciph_label">"Activer/désactiver le cryptage"</string>
+    <string name="ping_test_label">"Effectuer un test de ping"</string>
+    <string name="radio_info_smsc_label">"SMSC :"</string>
+    <string name="radio_info_smsc_update_label">"Mettre à jour"</string>
+    <string name="radio_info_smsc_refresh_label">"Actualiser"</string>
+    <string name="radio_info_toggle_dns_check_label">"Activer le contrôle DNS"</string>
+    <string name="band_mode_title">"Définir la bande GSM/UMTS"</string>
+    <string name="band_mode_loading">"Chargement de la liste de bandes..."</string>
+    <string name="band_mode_set">"Définir"</string>
+    <string name="band_mode_failed">"Échec"</string>
+    <string name="band_mode_succeeded">"OK"</string>
+    <string name="sdcard_changes_instructions">"Les modifications prendront effet lors de la prochaine connexion du câble USB."</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Activer le stockage de masse USB"</string>
+    <string name="sdcard_settings_total_bytes_label">"Octets au total :"</string>
+    <string name="sdcard_settings_not_present_status">"Aucune carte SD n\'a été trouvée."</string>
+    <string name="sdcard_settings_available_bytes_label">"Octets disponibles :"</string>
+    <string name="sdcard_settings_mass_storage_status">"La carte SD est utilisée comme périphérique de stockage."</string>
+    <string name="sdcard_settings_unmounted_status">"Vous pouvez maintenant retirer la carte SD en toute sécurité."</string>
+    <string name="sdcard_settings_bad_removal_status">"La carte SD a été retirée pendant son utilisation !"</string>
+    <string name="sdcard_settings_used_bytes_label">"Octets utilisés :"</string>
+    <string name="sdcard_settings_scanning_status">"Recherche de fichiers multimédia sur la carte SD…"</string>
+    <string name="sdcard_settings_read_only_status">"Carte SD montée en lecture seule"</string>
+    <string name="next_label">"Suivant"</string>
+    <string name="language_picker_title">"Paramètres régionaux"</string>
+    <string name="select_your_language">"Choisir la langue"</string>
+    <string name="activity_picker_label">"Sélectionner une activité"</string>
+    <string name="device_info_label">"Informations sur le périphérique"</string>
+    <string name="battery_info_label">"Informations sur la batterie"</string>
+    <string name="battery_history_label">"Historique de la batterie"</string>
+    <string name="display_label">"Afficher"</string>
+    <string name="phone_info_label">"Informations sur le téléphone"</string>
+    <string name="sd_card_settings_label">"Carte SD"</string>
+    <string name="proxy_settings_label">"Paramètres proxy"</string>
+    <string name="cancel">"Annuler"</string>
+    <string name="settings_label">"Paramètres"</string>
+    <string name="airplane_mode">"Mode avion"</string>
+    <string name="airplane_mode_summary">"Désactiver toutes les connexions sans fil"</string>
+    <string name="airplane_mode_turning_on">"Désactivation des connexions sans fil…"</string>
+    <string name="airplane_mode_turning_off">"Activation des connexions sans fil…"</string>
+    <string name="radio_controls_title">"Connexions sans fil"</string>
+    <string name="radio_controls_summary">"Gérer le Wi-Fi, le mode Bluetooth, le mode avion et les réseaux mobiles"</string>
+    <string name="date_and_time_settings_title">"Date et heure"</string>
+    <string name="date_and_time_settings_summary">"Configurer la date, l\'heure, le fuseau horaire et les formats"</string>
+    <string name="date_time_auto">"Automatique"</string>
+    <string name="date_time_auto_summaryOn">"Utiliser les valeurs du réseau"</string>
+    <string name="date_time_auto_summaryOff">"Utiliser les valeurs fournies par le réseau"</string>
+    <string name="date_time_24hour">"Utiliser format sur 24 h"</string>
+    <string name="date_time_set_time">"Définir l\'heure"</string>
+    <string name="date_time_set_timezone">"Choisir un fuseau horaire"</string>
+    <string name="date_time_set_date">"Définir la date"</string>
+    <string name="date_time_date_format">"Sélectionner format de date"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Trier par ordre alphabétique"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Trier par fuseau horaire"</string>
+    <string name="security_settings_title">"Sécurité et localisation"</string>
+    <string name="security_settings_summary">"Définir Ma position, le déverrouillage de l\'écran et le blocage de la carte SIM"</string>
+    <string name="security_passwords_title">"Mots de passe"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Activer Bluetooth"</string>
+    <string name="bluetooth_settings">"Paramètres Bluetooth"</string>
+    <string name="bluetooth_settings_title">"Paramètres Bluetooth"</string>
+    <string name="bluetooth_settings_summary">"Gérer les connexions, configurer le nom et l\'identification de l\'appareil"</string>
+    <string name="bluetooth_pin_entry">"Demande d\'association Bluetooth"</string>
+    <string name="bluetooth_device_info">"Informations sur le périphérique Bluetooth"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Saisissez le code PIN pour associer l\'appareil."\n"(Essayez avec 0000 ou 1234.)"</string>
+    <string name="bluetooth_error_title">"Attention"</string>
+    <string name="bluetooth_pairing_error_message">"Un problème est survenu lors de l\'association à <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Un problème est survenu lors de l\'association à <xliff:g id="DEVICE_NAME">%1$s</xliff:g> car le PIN saisi est incorrect."</string>
+    <string name="bluetooth_connecting_error_message">"Un problème est survenu lors de la connexion à <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_preference_scan_title">"Rechercher des périphériques"</string>
+    <string name="bluetooth_device_context_connect">"Se connecter"</string>
+    <string name="bluetooth_device_context_disconnect">"Déconnecter"</string>
+    <string name="bluetooth_device_context_pair_connect">"Associer et connecter"</string>
+    <string name="bluetooth_device_context_unpair">"Dissocier"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Déconnecter et dissocier"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Options…"</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Se connecter à…"</string>
+    <string name="bluetooth_profile_a2dp">"Multimédia"</string>
+    <string name="bluetooth_profile_headset">"Téléphone"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Connecté aux paramètres audio du média"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Connecté aux paramètres audio du téléphone"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Connecté aux paramètres audio du téléphone et du média"</string>
+    <string name="bluetooth_device_advanced_title">"Options de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Se connecter"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Connecter à un appareil Bluetooth"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profils"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Connecté aux paramètres audio du média"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Connecté aux paramètres audio du téléphone"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Utiliser pour les paramètres audio du média"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Utiliser pour les paramètres audio du téléphone"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Activer le Wi-Fi"</string>
+    <string name="wifi_settings">"Paramètres Wi-Fi"</string>
+    <string name="wifi_settings_category">"Paramètres Wi-Fi"</string>
+    <string name="wifi_settings_summary">"Configurer et gérer les points d\'accès sans fil"</string>
+    <string name="forget_network">"Retirer"</string>
+    <string name="wifi_status">"État"</string>
+    <string name="wifi_link_speed">"Vitesse"</string>
+    <string name="wifi_signal_3">"Excellente"</string>
+    <string name="wifi_signal_2">"Bonne"</string>
+    <string name="wifi_signal_1">"Satisfaisante"</string>
+    <string name="wifi_signal_0">"Faible"</string>
+    <string name="security">"Sécurité"</string>
+    <string name="wifi_security_open">"Ouvrir"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Inconnu"</string>
+    <string name="wifi_security_verbose_open">"Ouvrir le réseau"</string>
+    <string name="wifi_security_verbose_wep">"Sécurisé avec une clé WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Sécurisé par WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Sécurisé par WPA2"</string>
+    <string name="ip_address">"Adresse IP"</string>
+    <string name="signal">"Intensité du signal"</string>
+    <string name="wifi_starting">"Activation…"</string>
+    <string name="wifi_stopping">"Désactivation…"</string>
+    <string name="wifi_error">"Erreur"</string>
+    <string name="error_starting">"Impossible de lancer le Wi-Fi"</string>
+    <string name="error_stopping">"Impossible d\'interrompre la connexion Wi-Fi."</string>
+    <string name="error_scanning">"Impossible de rechercher des réseaux"</string>
+    <string name="error_connecting">"Impossible de se connecter au réseau."</string>
+    <string name="error_saving">"Impossible d\'enregistrer le réseau"</string>
+    <string name="connect">"Se connecter"</string>
+    <string name="connect_to_blank">"Connexion à <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Mot de passe sans fil"</string>
+    <string name="please_type_hex_key">"Touche hex WEP (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Afficher le mot de passe"</string>
+    <string name="scan_wifi">"Rechercher"</string>
+    <string name="summary_not_in_range">"Hors de portée"</string>
+    <string name="summary_remembered">"Réseaux enregistrés"</string>
+    <string name="summary_connection_failed">"Échec de la connexion. Sélectionnez cette option pour réessayer."</string>
+    <string name="wifi_access_points">"Réseaux Wi-Fi"</string>
+    <string name="wifi_type_ssid">"SSID du réseau"</string>
+    <string name="wifi_security">"Sécurité"</string>
+    <string name="wifi_save_config">"Enregistrer"</string>
+    <string name="wifi_password_unchanged">"(aucune modification)"</string>
+    <string name="wifi_add_other_network">"Ajouter un réseau Wi-Fi"</string>
+    <string name="wifi_notify_open_networks">"Notification de réseau"</string>
+    <string name="wifi_notify_open_networks_summary">"Me notifier lorsqu\'un réseau ouvert est disponible"</string>
+    <string name="wifi_password_incorrect_error">"Le mot de passe réseau saisi est incorrect. Veuillez réessayer."</string>
+    <string name="wifi_generic_connection_error">"Un problème est survenu lors de la connexion au réseau. Veuillez réessayer."</string>
+    <string name="wifi_menu_advanced">"Avancés"</string>
+    <string name="wifi_ip_settings_titlebar">"Paramètres IP"</string>
+    <string name="wifi_ip_settings_menu_save">"Enregistrer"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Annuler"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Saisissez une adresse IP valide."</string>
+    <string name="wifi_use_static_ip">"Utiliser une IP fixe"</string>
+    <string name="wifi_ip_address">"Adresse IP"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Passerelle"</string>
+    <string name="wifi_netmask">"Masque de réseau"</string>
+    <string name="wifi_context_menu_connect">"Se connecter au réseau"</string>
+    <string name="wifi_context_menu_forget">"Retirer le réseau"</string>
+    <string name="wifi_context_menu_change_password">"Modifier le mot de passe"</string>
+    <string name="wifi_advanced_titlebar">"Avancés"</string>
+    <string name="wifi_setting_num_channels_title">"Domaine régulateur"</string>
+    <string name="wifi_setting_num_channels_summary">"Définir le nombre de canaux à utiliser"</string>
+    <string name="wifi_setting_num_channels_error">"Un problème est survenu lors du paramétrage du domaine régulateur."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> canaux"</string>
+    <string name="wifi_setting_sleep_policy_title">"Politique de veille Wi-Fi"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Indiquer quand basculer du Wi-Fi sur le réseau de données mobile"</string>
+    <string name="wifi_setting_sleep_policy_error">"Un problème est survenu lors du paramétrage de la politique de veille."</string>
+    <string name="wifi_advanced_mac_address_title">"Adresses MAC"</string>
+    <string name="fragment_status_scanning">"Recherche…"</string>
+    <string name="fragment_status_connecting">"Connexion à <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_authenticating">"Authentification auprès de <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_obtaining_ip">"Récupération de l\'adresse IP à partir de <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_connected">"Connecté à <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Déconnexion de <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_disconnected">"Déconnecté"</string>
+    <string name="fragment_status_failed">"Échec"</string>
+    <string name="status_scanning">"Recherche…"</string>
+    <string name="status_connecting">"Connexion…"</string>
+    <string name="status_authenticating">"Authentification…"</string>
+    <string name="status_obtaining_ip">"Récupération de l\'adresse…"</string>
+    <string name="status_connected">"Connecté"</string>
+    <string name="status_disconnecting">"Déconnexion…"</string>
+    <string name="status_disconnected">"Déconnecté"</string>
+    <string name="status_failed">"Échec"</string>
+    <string name="sound_and_display_settings">"Sons et affichage"</string>
+    <string name="sound_settings">"Paramètres sonores"</string>
+    <string name="sound_and_display_settings_summary">"Configurer les sonneries, les notifications et la luminosité de l\'écran"</string>
+    <string name="silent_mode_title">"Mode silencieux"</string>
+    <string name="silent_mode_summary">"Aucun son sauf pour le multimédia et le réveil"</string>
+    <string name="ringtone_title">"Sonnerie du téléphone"</string>
+    <string name="ringtone_summary">"Configurer la sonnerie par défaut pour les appels entrants"</string>
+    <string name="ring_volume_title">"Volume de la sonnerie"</string>
+    <string name="ring_volume_summary">"Régler le volume pour les appels entrants"</string>
+    <string name="vibrate_title">"Vibreur"</string>
+    <string name="vibrate_summary">"Activer le vibreur pour les appels entrants"</string>
+    <string name="notification_sound_title">"Sonnerie de notification"</string>
+    <string name="notification_sound_summary">"Définir votre sonnerie de notification par défaut"</string>
+    <string name="incoming_call_volume_title">"Volume de l\'appel entrant"</string>
+    <string name="notification_volume_title">"Volume des notifications"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Utiliser le volume des appels entrants pour les notifications"</string>
+    <string name="notification_sound_dialog_title">"Sélectionner une sonnerie de notification"</string>
+    <string name="media_volume_title">"Volume"</string>
+    <string name="media_volume_summary">"Régler le volume pour la musique et les vidéos"</string>
+    <string name="dtmf_tone_enable_title">"Tonalité touches audible"</string>
+    <string name="dtmf_tone_enable_summary_on">"Activer la tonalité des touches du clavier"</string>
+    <string name="dtmf_tone_enable_summary_off">"Activer la tonalité des touches du clavier"</string>
+    <string name="sound_effects_enable_title">"Sélections audibles"</string>
+    <string name="sound_effects_enable_summary_on">"Lire les sons lors des sélections à l\'écran"</string>
+    <string name="sound_effects_enable_summary_off">"Jouer un son lors des sélections à l\'écran"</string>
+    <string name="play_media_notification_sounds_enable_title">"Notifications de la carte SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Désactiver les notifications sonores de la carte SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Activer les notifications sonores de la carte SD"</string>
+    <string name="sync_settings">"Synchronisation des données"</string>
+    <string name="sync_settings_summary">"Sélectionner les applications à synchroniser"</string>
+    <string name="display_settings">"Afficher les paramètres"</string>
+    <string name="animations_title">"Animation"</string>
+    <string name="animations_summary_on">"Animation lors de l\'ouverture et la fermeture de fenêtres"</string>
+    <string name="animations_summary_off">"Animation lors de l\'ouverture et la fermeture de fenêtres"</string>
+    <string name="brightness">"Luminosité"</string>
+    <string name="brightness_summary">"Régler la luminosité de l\'écran"</string>
+    <string name="screen_timeout">"Mise en veille de l\'écran"</string>
+    <string name="screen_timeout_summary">"Définir le délai avant la mise hors tension automatique de l\'écran"</string>
+    <string name="sim_lock_settings">"Paramètres de blocage carte SIM"</string>
+    <string name="sim_lock_settings_category">"Configurer blocage SIM"</string>
+    <string name="sim_lock_settings_title">"Blocage de la carte SIM"</string>
+    <string name="sim_pin_toggle">"Bloquer la carte SIM"</string>
+    <string name="sim_lock_on">"Demander le code PIN pour utiliser le téléphone"</string>
+    <string name="sim_lock_off">"Demander le code PIN pour utiliser le téléphone"</string>
+    <string name="sim_pin_change">"Modifier PIN de la carte SIM"</string>
+    <string name="sim_enter_pin">"Code PIN de la carte SIM"</string>
+    <string name="sim_enable_sim_lock">"Bloquer la carte SIM"</string>
+    <string name="sim_disable_sim_lock">"Débloquer la carte SIM"</string>
+    <string name="sim_enter_old">"Ancien code PIN de la carte SIM"</string>
+    <string name="sim_enter_new">"Nouveau code PIN de la carte SIM"</string>
+    <string name="sim_reenter_new">"Confirmez le nouveau code PIN"</string>
+    <string name="sim_change_pin">"Code PIN de la carte SIM"</string>
+    <string name="sim_bad_pin">"Le code PIN est incorrect !"</string>
+    <string name="sim_pins_dont_match">"Les codes PIN ne correspondent pas !"</string>
+    <string name="sim_change_failed">"Impossible de modifier le code PIN."\n"Il se peut que ce code PIN soit incorrect."</string>
+    <string name="sim_change_succeeded">"Le code PIN de la carte SIM a été modifié."</string>
+    <string name="sim_lock_failed">"Impossible de changer l\'état de blocage de la carte SIM."\n"Il se peut que le code PIN soit incorrect."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Annuler"</string>
+    <string name="device_info_settings">"État du téléphone"</string>
+    <string name="system_update_settings_list_item_title">"Mises à jour du système"</string>
+    <string name="system_update_settings_list_item_summary">"Rechercher des mises à jour du système"</string>
+    <string name="firmware_version">"Version du micrologiciel"</string>
+    <string name="model_number">"Numéro du modèle"</string>
+    <string name="baseband_version">"Version de bande de base"</string>
+    <string name="kernel_version">"Version du noyau"</string>
+    <string name="build_number">"Numéro de version"</string>
+    <string name="device_info_not_available">"Non disponible"</string>
+    <string name="device_status_activity_title">"État"</string>
+    <string name="device_status">"État"</string>
+    <string name="device_status_summary">"IIEM, numéro de téléphone, signal, etc."</string>
+    <string name="storage_settings_title">"Carte SD et mémoire"</string>
+    <string name="storage_settings_summary">"Retirer la carte SD, afficher la mémoire disponible"</string>
+    <string name="status_number">"Numéro de téléphone"</string>
+    <string name="status_network_type">"Type de réseau mobile"</string>
+    <string name="status_data_state">"État du réseau mobile"</string>
+    <string name="status_service_state">"État du service"</string>
+    <string name="status_signal_strength">"Intensité du signal"</string>
+    <string name="status_roaming">"Itinérance"</string>
+    <string name="status_operator">"Réseau"</string>
+    <string name="status_wifi_mac_address">"Adresse MAC Wi-Fi"</string>
+    <string name="status_bt_address">"Adresse Bluetooth"</string>
+    <string name="status_unavailable">"Non disponible"</string>
+    <string name="status_network_traffic_stats">"Utilisation du réseau"</string>
+    <string name="status_network_traffic_summary">"Envoyés : <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g> Reçus : <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Durée d\'activité"</string>
+    <string name="status_awake_time">"Temps en activité"</string>
+    <string name="internal_memory">"Mémoire interne du téléphone"</string>
+    <string name="sd_memory">"Carte SD"</string>
+    <string name="memory_available">"Espace disponible"</string>
+    <string name="memory_size">"Espace total"</string>
+    <string name="sd_eject">"Désactiver la carte SD"</string>
+    <string name="sd_eject_summary">"Désactiver la carte SD pour la retirer en toute sécurité"</string>
+    <string name="sd_format">"Formater la carte SD"</string>
+    <string name="sd_format_summary">"Formater (effacer) la carte SD"</string>
+    <string name="sd_unavailable">"Non disponible"</string>
+    <string name="read_only">" (Lecture seule)"</string>
+    <string name="battery_status_title">"État de la batterie"</string>
+    <string name="battery_level_title">"Niveau de la batterie"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"Modifier le point d\'accès"</string>
+    <string name="apn_not_set">"&lt;Non défini&gt;"</string>
+    <string name="apn_name">"Nom"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Port"</string>
+    <string name="apn_user">"Nom d\'utilisateur"</string>
+    <string name="apn_password">"Mot de passe"</string>
+    <string name="apn_server">"Serveur"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"Proxy MMS"</string>
+    <string name="apn_mms_port">"Port MMS"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"Type d\'APN (nom du point d\'accès)"</string>
+    <string name="menu_delete">"Supprimer l\'APN"</string>
+    <string name="menu_new">"Nouvel APN"</string>
+    <string name="menu_save">"Enregistrer"</string>
+    <string name="menu_cancel">"Supprimer"</string>
+    <string name="error_title">"Attention"</string>
+    <string name="error_name_empty">"Le champ Nom doit être renseigné."</string>
+    <string name="error_apn_empty">"Le champ Nom de point d\'accès (APN) doit être renseigné."</string>
+    <string name="error_mcc_not3">"Le champ MCC doit contenir 3 chiffres."</string>
+    <string name="error_mnc_not23">"Le champ MNC doit contenir 2 ou 3 chiffres."</string>
+    <string name="master_clear_title">"Réinit. valeurs d\'usine"</string>
+    <string name="master_clear_summary">"Effacer toutes les données du téléphone"</string>
+    <string name="master_clear_desc">"Cette action réinitialisera le téléphone à ses valeurs d\'usine et effacera toutes les données et applications téléchargées !"</string>
+    <string name="master_clear_button_text">"Réinitialiser le téléphone"</string>
+    <string name="master_clear_final_desc">"Réinitialiser le téléphone et effacer toutes les données et applications ? Cette action ne peut être inversée."</string>
+    <string name="master_clear_final_button_text">"Tout effacer"</string>
+    <string name="master_clear_gesture_prompt">"Saisissez votre motif de déverrouillage"</string>
+    <string name="master_clear_gesture_explanation">"Vous devez dessiner votre motif de déverrouillage pour confirmer la réinitialisation du téléphone."</string>
+    <string name="master_clear_failed">"Les données n\'ont pas été réinitialisées car le service de nettoyage du système n\'est pas disponible."</string>
+    <string name="media_format_title">"Formater la carte SD."</string>
+    <string name="media_format_summary">"Permet d\'effacer toutes les données de la carte SD"</string>
+    <string name="media_format_desc">"Cette action effacera la carte SD du téléphone. TOUTES les données de la carte seront perdues !"</string>
+    <string name="media_format_button_text">"Formater la carte SD"</string>
+    <string name="media_format_final_desc">"Formater la carte SD en effaçant tout le contenu de la carte ? Impossible d\'annuler cette action !"</string>
+    <string name="media_format_final_button_text">"Tout effacer"</string>
+    <string name="media_format_gesture_prompt">"Créez votre schéma de déverrouillage"</string>
+    <string name="media_format_gesture_explanation">"Vous devez créer votre schéma de déverrouillage pour confirmer le format de la carte SD."</string>
+    <string name="call_settings_title">"Paramètres d\'appel"</string>
+    <string name="call_settings_summary">"Configurer mess. vocale, transferts d\'appel, mises en attente, ID d\'appelant"</string>
+    <string name="network_settings_title">"Réseaux mobiles"</string>
+    <string name="network_settings_summary">"Définir les options d\'itinérance, réseaux, noms de points d\'accès"</string>
+    <string name="location_title">"Sources pour Ma position"</string>
+    <string name="location_network_based">"Utiliser réseaux sans fil"</string>
+    <string name="location_networks_disabled">"Afficher la position géographique dans les applications (comme Google Maps) lors de l\'utilisation de réseaux sans fil"</string>
+    <string name="location_neighborhood_level">"Position géographique déterminée par réseaux Wi-Fi et/ou mobile"</string>
+    <string name="location_gps">"Activer les satellites GPS"</string>
+    <string name="location_street_level">"Localisation précise au niveau de la rue lors du positionnement géographique (désélectionner pour économiser la batterie)"</string>
+    <string name="location_gps_disabled">"Localiser au niveau rue (requiert + de batterie et une vue dégagée)"</string>
+    <string name="about_settings">"À propos du téléphone"</string>
+    <string name="about_settings_summary">"Informations légales, état du téléphone et version du logiciel"</string>
+    <string name="legal_information">"Informations légales"</string>
+    <string name="contributors_title">"Collaborateurs"</string>
+    <string name="copyright_title">"Copyright"</string>
+    <string name="license_title">"Licence"</string>
+    <string name="terms_title">"Conditions d\'utilisation"</string>
+    <string name="settings_license_activity_title">"Ouvrir licences source"</string>
+    <string name="settings_license_activity_unavailable">"Un problème est survenu lors du chargement des licences."</string>
+    <string name="settings_license_activity_loading">"Chargement..."</string>
+    <string name="lock_settings_title">"Motif de déverrouillage de l\'écran"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Modifier le motif de déverrouillage"</string>
+    <string name="lockpattern_need_to_unlock">"Confirmer le motif enregistré"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Désolé. Merci de réessayer :"</string>
+    <string name="lockpattern_recording_intro_header">"Dessiner un motif de déverrouillage :"</string>
+    <string name="lockpattern_recording_intro_footer">"Appuyer sur Menu pour obtenir de l\'aide."</string>
+    <string name="lockpattern_recording_inprogress">"Ôtez le doigt lorsque vous avez terminé."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Reliez au moins <xliff:g id="NUMBER">%d</xliff:g> points. Veuillez réessayer :"</string>
+    <string name="lockpattern_pattern_entered_header">"Motif enregistré !"</string>
+    <string name="lockpattern_need_to_confirm">"Redessinez le motif pour confirmer :"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Votre nouveau motif de déverrouillage :"</string>
+    <string name="lockpattern_confirm_button_text">"Confirmer"</string>
+    <string name="lockpattern_restart_button_text">"Redessiner"</string>
+    <string name="lockpattern_retry_button_text">"Réessayer"</string>
+    <string name="lockpattern_continue_button_text">"Continuer"</string>
+    <string name="lockpattern_settings_title">"Motif de déverrouillage"</string>
+    <string name="lockpattern_settings_enable_title">"Demander un motif"</string>
+    <string name="lockpattern_settings_enable_summary">"Vous devez dessiner le motif pour déverrouiller l\'écran."</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Utiliser un motif visible"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Commentaires tactiles"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Créer un motif de déverrouillage"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Modifier le motif de déverrouillage"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Comment dessiner un motif de déverrouillage :"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Trop de tentatives échouées !"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Réessayer dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
+    <string name="skip_button_label">"Annuler"</string>
+    <string name="next_button_label">"Suivant"</string>
+    <string name="lock_title">"Sécurisation de votre téléphone"</string>
+    <string name="lock_intro_message"><font size="17">"Protégez votre téléphone contre toute utilisation non autorisée en créant un motif personnel de déverrouillage de l\'écran."\n<font height="17">\n</font><b>"1"</b>" L\'écran suivant vous présente un exemple de motif. "\n<font height="17">\n</font><b>"2"</b>" Lorsque vous êtes prêt, dessinez votre propre motif de déverrouillage. Essayez différents motifs, mais reliez au moins quatre points."\n<font height="17">\n</font><b></b>"Reproduisez votre motif pour confirmer."\n<font height="17">\n</font><b>"Pour commencer, sélectionnez \"Suivant\"."</b>\n<font height="3">\n</font>"Si vous ne souhaitez pas activer cette protection, sélectionnez \"Annuler\"."</font></string>
+    <string name="lock_example_title">"Exemple de motif"</string>
+    <string name="lock_example_message">"Reliez au moins quatre points."\n" "\n"Sélectionnez \"Suivant\" lorsque vous voulez créer votre propre motif."</string>
+    <string name="manageapplications_settings_title">"Gérer les applications"</string>
+    <string name="manageapplications_settings_summary">"Gérer et supprimer les applications installées"</string>
+    <string name="applications_settings">"Applications"</string>
+    <string name="applications_settings_summary">"Gérer les applications, configurer des raccourcis de lancement rapide"</string>
+    <string name="applications_settings_header">"Paramètres de l\'application"</string>
+    <string name="install_applications">"Sources inconnues"</string>
+    <string name="install_unknown_applications">"Autoriser l\'installation d\'applications ne provenant pas d\'Android Market"</string>
+    <string name="install_all_warning">"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">"Informations sur l\'application"</string>
+    <string name="storage_label">"Mémoire"</string>
+    <string name="auto_launch_label">"Lancer par défaut"</string>
+    <string name="permissions_label">"Autorisations"</string>
+    <string name="cache_header_label">"Cache"</string>
+    <string name="clear_cache_btn_text">"Effacer le cache"</string>
+    <string name="cache_size_label">"Cache"</string>
+    <string name="controls_label">"Commandes"</string>
+    <string name="force_stop">"Forcer l\'arrêt"</string>
+    <string name="total_size_label">"Total"</string>
+    <string name="application_size_label">"Application"</string>
+    <string name="data_size_label">"Données"</string>
+    <string name="uninstall_text">"Désinstaller"</string>
+    <string name="clear_user_data_text">"Effacer les données"</string>
+    <string name="auto_launch_enable_text">"Vous avez choisi de lancer cette application par défaut pour certaines actions."</string>
+    <string name="auto_launch_disable_text">"Aucun paramètre par défaut défini."</string>
+    <string name="clear_activities">"Effacer les actions par défaut"</string>
+    <string name="unknown">"Inconnu"</string>
+    <string name="sort_order_alpha">"Trier"</string>
+    <string name="sort_order_size">"Trier par taille"</string>
+    <string name="manage_space_text">"Gérer l\'espace"</string>
+    <string name="filter">"Filtrer"</string>
+    <string name="filter_dlg_title">"Options du filtre"</string>
+    <string name="filter_apps_all">"Tous"</string>
+    <string name="filter_apps_third_party">"Tiers"</string>
+    <string name="filter_apps_running">"En cours d\'exécution"</string>
+    <string name="loading">"Chargement..."</string>
+    <string name="recompute_size">"Calcul de la taille..."</string>
+    <string name="clear_data_dlg_title">"Supprimer"</string>
+    <string name="clear_data_dlg_text">"Toutes les informations enregistrées dans cette application seront définitivement supprimées."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Annuler"</string>
+    <string name="app_not_found_dlg_title">"L\'application n\'a pas été trouvée."</string>
+    <string name="app_not_found_dlg_text">"L\'application n\'a pas été trouvée dans la liste des applications installées."</string>
+    <string name="clear_data_failed">"Impossible d\'effacer les données de l\'application."</string>
+    <string name="security_settings_desc">"Cette application peut accéder aux applications suivantes de votre téléphone :"</string>
+    <string name="computing_size">"Traitement..."</string>
+    <string name="invalid_size_value">"Impossible de calculer la taille du paquet."</string>
+    <string name="empty_list_msg">"Aucune application tierce n\'est installée sur votre téléphone."</string>
+    <string name="language_settings">"Par. régionaux et texte"</string>
+    <string name="language_settings_summary">"Définir la langue et la région, la saisie de texte et la correction automatique"</string>
+    <string name="language_category">"Paramètres régionaux"</string>
+    <string name="text_category">"Paramètres du texte"</string>
+    <string name="phone_language">"Langue et région"</string>
+    <string name="phone_language_summary">"Sélectionner une langue et un pays"</string>
+    <string name="auto_replace">"Remplacement auto"</string>
+    <string name="auto_replace_summary">"Corriger les mots mal saisis"</string>
+    <string name="auto_caps">"Majuscule auto"</string>
+    <string name="auto_caps_summary">"Mettre une majuscule en début de phrase"</string>
+    <string name="auto_punctuate">"Ponctuation auto"</string>
+    <string name="hardkeyboard_category">"Paramètres du clavier physique"</string>
+    <string name="auto_punctuate_summary">"Appuyez deux fois sur la touche Espace pour insérer \".\""</string>
+    <string name="show_password">"Mots de passe visibles"</string>
+    <string name="show_password_summary">"Afficher le mot de passe lors de la saisie"</string>
+    <string name="user_dict_settings_titlebar">"Dictionnaire personnel"</string>
+    <string name="user_dict_settings_title">"Dictionnaire personnel"</string>
+    <string name="user_dict_settings_summary">"Ajouter et retirer des mots du dictionnaire personnel"</string>
+    <string name="user_dict_settings_add_menu_title">"Ajouter"</string>
+    <string name="user_dict_settings_add_dialog_title">"Ajouter au dictionnaire"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Modifier"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Supprimer"</string>
+    <string name="user_dict_settings_empty_text">"Votre dictionnaire personnel ne contient aucun mot. Vous pouvez ajouter un mot via le menu."</string>
+    <string name="testing">"Test"</string>
+    <string name="testing_phone_info">"Informations sur le téléphone"</string>
+    <string name="testing_battery_info">"Informations sur la batterie"</string>
+    <string name="testing_battery_history">"Historique de la batterie"</string>
+    <string name="quick_launch_title">"Lancement rapide"</string>
+    <string name="quick_launch_summary">"Configurer des raccourcis clavier pour lancer des applications"</string>
+    <string name="quick_launch_assign_application">"Affecter une application"</string>
+    <string name="quick_launch_no_shortcut">"Aucun raccourci"</string>
+    <string name="quick_launch_shortcut">"Rechercher + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Effacer"</string>
+    <string name="quick_launch_clear_dialog_message">"Vos raccourcis pour <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) vont être effacés."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Annuler"</string>
+    <string name="quick_launch_display_mode_applications">"Applications"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Raccourcis"</string>
+    <string name="input_methods_settings_title">"Saisie de texte"</string>
+    <string name="input_methods_settings_summary">"Gérer les options de saisie de texte"</string>
+    <string name="input_methods_settings_label_format">"Paramètres %s"</string>
+    <string name="development_settings_title">"Développement"</string>
+    <string name="development_settings_summary">"Définir les options pour le développement de l\'application"</string>
+    <string name="enable_adb">"Débogage USB"</string>
+    <string name="enable_adb_summary">"Mode débogage lorsqu\'un câble USB est connecté"</string>
+    <string name="keep_screen_on">"Rester activé"</string>
+    <string name="keep_screen_on_summary">"L\'écran ne se met jamais en veille lors du chargement"</string>
+    <string name="allow_mock_location">"Autoriser les positions géographiques fictives"</string>
+    <string name="allow_mock_location_summary">"Positions fictives"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Détails de l\'UID %d"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Données d\'utilisation du réseau pour <xliff:g id="APP_NAME">%1$s</xliff:g> :"</string>
+    <string name="battery_history_bytes_received">"Octets reçus : <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Octets envoyés :<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Octets au total :<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"Données d\'utilisation de l\'UC pour <xliff:g id="APP_NAME">%1$s</xliff:g> :"</string>
+    <string name="battery_history_user_time">"Heure utilisateur :"</string>
+    <string name="battery_history_system_time">"Heure système :"</string>
+    <string name="battery_history_total_time">"Temps total :"</string>
+    <string name="battery_history_starts">"Démarrages : <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> jours, <xliff:g id="HOURS">%2$d</xliff:g> heures, <xliff:g id="MINUTES">%3$d</xliff:g> minutes, <xliff:g id="SECONDS">%4$d</xliff:g> secondes"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> heures, <xliff:g id="MINUTES">%2$d</xliff:g> minutes, <xliff:g id="SECONDS">%3$d</xliff:g> secondes"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> minutes, <xliff:g id="SECONDS">%2$d</xliff:g> secondes"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> secondes"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Paquets partageant cet UID :"</string>
+    <string name="battery_history_no_data">"Aucune donnée sur l\'utilisation de la batterie disponible"</string>
+    <string name="battery_history_sensor">"Capteur :"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Capteur utilisé par les kits :"</string>
+    <string name="battery_history_sensor_usage">"Utilisé <xliff:g id="COUNT">%1$d</xliff:g> fois par <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"Utilisé <xliff:g id="COUNT">%1$d</xliff:g> fois par l\'une des applications suivantes :"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Temps utilisé avec l\'écran activé :"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"Sur la batterie :"</string>
+    <string name="battery_history_screen_on_plugged">"Branchée :"</string>
+    <string name="usage_stats_label">"Données statistiques"</string>
+    <string name="testing_usage_stats">"Données statistiques"</string>
+    <string name="display_order_text">"Trier par :"</string>
+    <string name="app_name_label">"Application"</string>
+    <string name="launch_count_label">"Nombre"</string>
+    <string name="usage_time_label">"Temps d\'utilisation"</string>
+</resources>
diff --git a/res/values-it-nokeys/strings.xml b/res/values-it-nokeys/strings.xml
new file mode 100644
index 0000000..c056f02
--- /dev/null
+++ b/res/values-it-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Gestisci applicazioni"</string>
+</resources>
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
new file mode 100644
index 0000000..b27d0c6
--- /dev/null
+++ b/res/values-it/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"America"</item>
+    <item>"Europa"</item>
+    <item>"Africa"</item>
+    <item>"Asia"</item>
+    <item>"Australia"</item>
+    <item>"Pacifico"</item>
+    <item>"Tutte"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 secondi"</item>
+    <item>"30 secondi"</item>
+    <item>"1 minuto"</item>
+    <item>"2 minuti"</item>
+    <item>"10 minuti"</item>
+    <item>"Mai timeout"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automatico"</item>
+    <item>"Nessuna"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Nessuna"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automatico"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP esadecimale"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Quando lo schermo si disattiva"</item>
+    <item>"Mai quando collegato"</item>
+    <item>"Mai"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Tempo di utilizzo"</item>
+    <item>"Conteggio avvii"</item>
+    <item>"Nome applicazione"</item>
+  </string-array>
+</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
new file mode 100644
index 0000000..24efd38
--- /dev/null
+++ b/res/values-it/strings.xml
@@ -0,0 +1,671 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Sconosciuto"</string>
+    <string name="turn_on_radio">"Attiva segnale cellulare"</string>
+    <string name="turn_off_radio">"Disattiva segnale cellulare"</string>
+    <string name="turn_on_qxdm">"Attiva log SD QXDM"</string>
+    <string name="turn_off_qxdm">"Disattiva log SD QXDM"</string>
+    <string name="radioInfo_menu_viewADN">"Visualizza rubrica SIM"</string>
+    <string name="radioInfo_menu_viewFDN">"Visualizza numeri selezione fissa"</string>
+    <string name="radioInfo_menu_viewSDN">"Visualizza numeri dell\'elenco dei numeri di servizio"</string>
+    <string name="radioInfo_menu_getPDP">"Ottieni elenco PDP"</string>
+    <string name="radioInfo_menu_enableData">"Attiva connessione dati"</string>
+    <string name="radioInfo_menu_disableData">"Disattiva connessione dati"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Attiva dati all\'avvio"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Disattiva dati all\'avvio"</string>
+    <string name="radioInfo_service_in">"In servizio"</string>
+    <string name="radioInfo_service_out">"Fuori servizio"</string>
+    <string name="radioInfo_service_emergency">"Solo chiamate di emergenza"</string>
+    <string name="radioInfo_service_off">"Segnale cellulare disattivato"</string>
+    <string name="radioInfo_roaming_in">"Roaming"</string>
+    <string name="radioInfo_roaming_not">"Non roaming"</string>
+    <string name="radioInfo_phone_idle">"Inattivo"</string>
+    <string name="radioInfo_phone_ringing">"Chiamata in corso"</string>
+    <string name="radioInfo_phone_offhook">"Chiamata in corso"</string>
+    <string name="radioInfo_data_disconnected">"Disconnesso"</string>
+    <string name="radioInfo_data_connecting">"Connessione"</string>
+    <string name="radioInfo_data_connected">"Connesso"</string>
+    <string name="radioInfo_data_suspended">"Sospeso"</string>
+    <string name="radioInfo_unknown">"sconosciuto"</string>
+    <string name="radioInfo_display_packets">"pkt"</string>
+    <string name="radioInfo_display_bytes">"byte"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Smonta scheda SD"</string>
+    <string name="sdcard_format">"Formatta scheda SD"</string>
+    <string name="small_font">"Piccole"</string>
+    <string name="medium_font">"Medie"</string>
+    <string name="large_font">"Grandi"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"Scheda SD"</string>
+    <string name="battery_info_status_label">"Stato batteria:"</string>
+    <string name="battery_info_scale_label">"Scala batteria:"</string>
+    <string name="battery_info_level_label">"Livello batteria:"</string>
+    <string name="battery_info_health_label">"Condizioni batteria:"</string>
+    <string name="battery_info_technology_label">"Tecnologia batteria:"</string>
+    <string name="battery_info_voltage_label">"Voltaggio batteria:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Temperatura batteria:"</string>
+    <string name="battery_info_temperature_units">"°C"</string>
+    <string name="battery_info_uptime">"Tempo dall\'avvio:"</string>
+    <string name="battery_info_awake_battery">"Tempo di attività con batteria:"</string>
+    <string name="battery_info_awake_plugged">"Tempo di attività sotto carica:"</string>
+    <string name="battery_info_screen_on">"Tempo accensione schermo:"</string>
+    <string name="battery_info_status_unknown">"Sconosciuta"</string>
+    <string name="battery_info_status_charging">"In carica"</string>
+    <string name="battery_info_status_charging_ac">"(CA)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Quasi scarica"</string>
+    <string name="battery_info_status_not_charging">"Non in carica"</string>
+    <string name="battery_info_status_full">"Carica"</string>
+    <string name="battery_info_health_unknown">"Sconosciuto"</string>
+    <string name="battery_info_health_good">"Buono"</string>
+    <string name="battery_info_health_overheat">"Surriscaldamento"</string>
+    <string name="battery_info_health_dead">"Scarica"</string>
+    <string name="battery_info_health_over_voltage">"Sovratensione"</string>
+    <string name="battery_info_health_unspecified_failure">"Errore sconosciuto"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Rilevabile"</string>
+    <string name="bluetooth_is_discoverable">"Rilevabile per <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> secondi..."</string>
+    <string name="bluetooth_not_discoverable">"Rendi rilevabile il dispositivo"</string>
+    <string name="bluetooth_devices">"Dispositivi Bluetooth"</string>
+    <string name="bluetooth_device_name">"Nome dispositivo"</string>
+    <string name="bluetooth_name_not_set">"Nessun nome impostato, utilizzando il nome dell\'account"</string>
+    <string name="bluetooth_scan_for_devices">"Cerca dispositivi"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> verrà disconnesso."</string>
+    <string name="bluetooth_connected">"Connesso"</string>
+    <string name="bluetooth_disconnected">"Disconnesso"</string>
+    <string name="bluetooth_disconnecting">"Disconnessione..."</string>
+    <string name="bluetooth_connecting">"Connessione..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Accoppia con il dispositivo"</string>
+    <string name="bluetooth_pairing">"Accoppiamento..."</string>
+    <string name="bluetooth_paired">"Accoppiati ma non connessi"</string>
+    <string name="bluetooth_device">"vivavoce/auricolare"</string>
+    <string name="progress_scanning">"Ricerca"</string>
+    <string name="bluetooth_notif_ticker">"Richiesta accoppiamento Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Richiesta accoppiamento"</string>
+    <string name="bluetooth_notif_message">"Seleziona per accoppiare "</string>
+    <string name="date_and_time">"Impostazioni data e ora"</string>
+    <string name="date_time_12_hour_sample">"1:00 pm"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Seleziona fuso orario"</string>
+    <string name="display_preview_label">"Anteprima:"</string>
+    <string name="display_font_size_label">"Dimensioni carattere:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Invia <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"Inizia <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Account:"</string>
+    <string name="proxy_clear_text">"Cancella"</string>
+    <string name="proxy_port_label">"Porta"</string>
+    <string name="proxy_defaultView_text">"Ripristina predefinite"</string>
+    <string name="proxy_action_text">"Salva"</string>
+    <string name="proxy_hostname_label">"Nome host"</string>
+    <string name="proxy_error">"Attenzione"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"Il nome host specificato non è valido."</string>
+    <string name="proxy_error_empty_port">"Inserisci un valore nel campo Porta."</string>
+    <string name="proxy_error_empty_host_set_port">"Il campo Porta deve essere vuoto se il campo Host è vuoto."</string>
+    <string name="proxy_error_invalid_port">"La porta specificata non è valida."</string>
+    <string name="radio_info_signal_location_label">"Posizione:"</string>
+    <string name="radio_info_neighboring_location_label">"CID adiacente:"</string>
+    <string name="radio_info_data_attempts_label">"Tentativi dati:"</string>
+    <string name="radio_info_gprs_service_label">"Servizio GPRS:"</string>
+    <string name="radio_info_roaming_label">"Roaming:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Reindirizzamento chiamate:"</string>
+    <string name="radio_info_ppp_resets_label">"Numero di PPP reimpostati dall\'avvio:"</string>
+    <string name="radio_info_gsm_disconnects_label">"Disconnessioni GSM:"</string>
+    <string name="radio_info_current_network_label">"Rete corrente:"</string>
+    <string name="radio_info_data_successes_label">"Dati riusciti:"</string>
+    <string name="radio_info_ppp_received_label">"PPP ricevuto:"</string>
+    <string name="radio_info_gsm_service_label">"Servizio GSM:"</string>
+    <string name="radio_info_signal_strength_label">"Intensità segnale:"</string>
+    <string name="radio_info_call_status_label">"Stato chiamata:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP inviato:"</string>
+    <string name="radio_info_radio_resets_label">"Reimpostaz. segnale cellulare:"</string>
+    <string name="radio_info_message_waiting_label">"Messaggio in attesa:"</string>
+    <string name="radio_info_phone_number_label">"Numero di telefono:"</string>
+    <string name="radio_info_band_mode_label">"Seleziona banda radio"</string>
+    <string name="radio_info_network_type_label">"Tipo di rete:"</string>
+    <string name="radio_info_set_perferred_label">"Imposta tipo di rete preferito:"</string>
+    <string name="radio_info_ping_ipaddr">"Indir. IP ping:"</string>
+    <string name="radio_info_ping_hostname">"Nome host ping (www.google.com):"</string>
+    <string name="radio_info_http_client_test">"Test client HTTP:"</string>
+    <string name="radio_info_toggle_ciph_label">"Attiva/disattiva cifratura"</string>
+    <string name="ping_test_label">"Esegui test ping"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Aggiorna"</string>
+    <string name="radio_info_smsc_refresh_label">"Aggiorna"</string>
+    <string name="radio_info_toggle_dns_check_label">"Attiva o disattiva verifica DNS"</string>
+    <string name="band_mode_title">"Imposta banda GSM/UMTS"</string>
+    <string name="band_mode_loading">"Caricamento lista bande..."</string>
+    <string name="band_mode_set">"Imposta"</string>
+    <string name="band_mode_failed">"Non riuscita"</string>
+    <string name="band_mode_succeeded">"Riuscita"</string>
+    <string name="sdcard_changes_instructions">"Le modifiche saranno effettive alla riconnessione del cavo USB"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Attiva archiviazione di massa USB"</string>
+    <string name="sdcard_settings_total_bytes_label">"Byte totali:"</string>
+    <string name="sdcard_settings_not_present_status">"Nessuna scheda SD"</string>
+    <string name="sdcard_settings_available_bytes_label">"Byte disponibili:"</string>
+    <string name="sdcard_settings_mass_storage_status">"Scheda SD in uso come dispositivo di archiviazione di massa"</string>
+    <string name="sdcard_settings_unmounted_status">"È ora possibile rimuovere la scheda SD"</string>
+    <string name="sdcard_settings_bad_removal_status">"La scheda SD è stata rimossa quando ancora in uso."</string>
+    <string name="sdcard_settings_used_bytes_label">"Byte utilizzati:"</string>
+    <string name="sdcard_settings_scanning_status">"Ricerca di media nella scheda SD..."</string>
+    <string name="sdcard_settings_read_only_status">"La scheda SD montata è di sola lettura"</string>
+    <string name="next_label">"Avanti"</string>
+    <string name="language_picker_title">"Impostazioni internazionali"</string>
+    <string name="select_your_language">"Seleziona la lingua"</string>
+    <string name="activity_picker_label">"Seleziona attività"</string>
+    <string name="device_info_label">"Info dispositivo"</string>
+    <string name="battery_info_label">"Info batteria"</string>
+    <string name="battery_history_label">"Cronologia batteria"</string>
+    <string name="display_label">"Display"</string>
+    <string name="phone_info_label">"Info telefono"</string>
+    <string name="sd_card_settings_label">"Scheda SD"</string>
+    <string name="proxy_settings_label">"Impostazioni proxy"</string>
+    <string name="cancel">"Annulla"</string>
+    <string name="settings_label">"Impostazioni"</string>
+    <string name="airplane_mode">"Modalità aereo"</string>
+    <string name="airplane_mode_summary">"Disattiva tutte le connessioni wireless"</string>
+    <string name="airplane_mode_turning_on">"Disattivazione connessioni wireless..."</string>
+    <string name="airplane_mode_turning_off">"Attivazione connessioni wireless..."</string>
+    <string name="radio_controls_title">"Controlli wireless"</string>
+    <string name="radio_controls_summary">"Gestisci Wi-Fi, Bluetooth, modalità aereo e reti mobili"</string>
+    <string name="date_and_time_settings_title">"Data e ora"</string>
+    <string name="date_and_time_settings_summary">"Imposta data, ora, fuso orario e formati"</string>
+    <string name="date_time_auto">"Automatiche"</string>
+    <string name="date_time_auto_summaryOn">"Usa valori della rete"</string>
+    <string name="date_time_auto_summaryOff">"Usa valori della rete"</string>
+    <string name="date_time_24hour">"Usa formato 24 ore"</string>
+    <string name="date_time_set_time">"Imposta ora"</string>
+    <string name="date_time_set_timezone">"Seleziona fuso orario"</string>
+    <string name="date_time_set_date">"Imposta data"</string>
+    <string name="date_time_date_format">"Seleziona formato data"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Ordine alfabetico"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Ordina per fuso orario"</string>
+    <string name="security_settings_title">"Protezione e posizione"</string>
+    <string name="security_settings_summary">"Imposta posizione, sblocco schermo, blocco della SIM"</string>
+    <string name="security_passwords_title">"Password"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Attiva Bluetooth"</string>
+    <string name="bluetooth_settings">"Impostazioni Bluetooth"</string>
+    <string name="bluetooth_settings_title">"Impostazioni Bluetooth"</string>
+    <string name="bluetooth_settings_summary">"Gestisci le connessioni, imposta il nome e la rilevabilità del dispositivo"</string>
+    <string name="bluetooth_pin_entry">"Richiesta accoppiamento Bluetooth"</string>
+    <string name="bluetooth_device_info">"Info dispositivo Bluetooth"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Digita il PIN per l\'accoppiamento."\n"Prova a usare 0000 o 1234."</string>
+    <string name="bluetooth_error_title">"Attenzione"</string>
+    <string name="bluetooth_pairing_error_message">"Errore durante l\'accoppiamento con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Errore durante l\'accoppiamento con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Il PIN digitato è errato."</string>
+    <string name="bluetooth_connecting_error_message">"Errore durante la connessione a <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_preference_scan_title">"Cerca dispositivi"</string>
+    <string name="bluetooth_device_context_connect">"Connetti"</string>
+    <string name="bluetooth_device_context_disconnect">"Disconnetti"</string>
+    <string name="bluetooth_device_context_pair_connect">"Accoppia e connetti"</string>
+    <string name="bluetooth_device_context_unpair">"Disaccoppia"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Disconnetti e disaccoppia"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Opzioni..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Connessione a…"</string>
+    <string name="bluetooth_profile_a2dp">"Media"</string>
+    <string name="bluetooth_profile_headset">"Telefono"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Collegato ad audio media"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Collegato ad audio telefono"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Collegato ad audio telefono e media"</string>
+    <string name="bluetooth_device_advanced_title">"Opzioni <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Connetti"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Connessione a dispositivo Bluetooth"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profili"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Collegato ad audio media"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Collegato ad audio telefono"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Usa per audio media"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Usa per audio telefono"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Attiva Wi-Fi"</string>
+    <string name="wifi_settings">"Impostazioni Wi-Fi"</string>
+    <string name="wifi_settings_category">"Impostazioni Wi-Fi"</string>
+    <string name="wifi_settings_summary">"Configura e gestisci punti di accesso wireless"</string>
+    <string name="forget_network">"Elimina"</string>
+    <string name="wifi_status">"Stato"</string>
+    <string name="wifi_link_speed">"Velocità"</string>
+    <string name="wifi_signal_3">"Eccellente"</string>
+    <string name="wifi_signal_2">"Buona"</string>
+    <string name="wifi_signal_1">"Discreta"</string>
+    <string name="wifi_signal_0">"Scarsa"</string>
+    <string name="security">"Protezione"</string>
+    <string name="wifi_security_open">"Apri"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Sconosciuta"</string>
+    <string name="wifi_security_verbose_open">"Rete aperta"</string>
+    <string name="wifi_security_verbose_wep">"Protetta con WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Protetta con WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Protetta con WPA2"</string>
+    <string name="ip_address">"Indirizzo IP"</string>
+    <string name="signal">"Intensità segnale"</string>
+    <string name="wifi_starting">"Attivazione..."</string>
+    <string name="wifi_stopping">"Spegnimento..."</string>
+    <string name="wifi_error">"Errore"</string>
+    <string name="error_starting">"Impossibile avviare Wi-Fi"</string>
+    <string name="error_stopping">"Impossibile interrompere Wi-Fi"</string>
+    <string name="error_scanning">"Impossibile cercare le reti"</string>
+    <string name="error_connecting">"Impossibile connettersi alla rete"</string>
+    <string name="error_saving">"Impossibile salvare la rete"</string>
+    <string name="connect">"Connetti"</string>
+    <string name="connect_to_blank">"Connessione a <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Password wireless"</string>
+    <string name="please_type_hex_key">"Chiave esadecimale WEP (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Mostra password."</string>
+    <string name="scan_wifi">"Scansione"</string>
+    <string name="summary_not_in_range">"Fuori portata"</string>
+    <string name="summary_remembered">"Memorizzata"</string>
+    <string name="summary_connection_failed">"Connessione non riuscita. Seleziona per riprovare"</string>
+    <string name="wifi_access_points">"Reti Wi-Fi"</string>
+    <string name="wifi_type_ssid">"SSID rete"</string>
+    <string name="wifi_security">"Protezione"</string>
+    <string name="wifi_save_config">"Salva"</string>
+    <string name="wifi_password_unchanged">"(invariato)"</string>
+    <string name="wifi_add_other_network">"Aggiungi rete Wi-Fi"</string>
+    <string name="wifi_notify_open_networks">"Notifica rete"</string>
+    <string name="wifi_notify_open_networks_summary">"Avvisa quando è disponibile una rete aperta"</string>
+    <string name="wifi_password_incorrect_error">"La password di rete digitata è errata. Riprova."</string>
+    <string name="wifi_generic_connection_error">"Errore durante la connessione alla rete. Riprova."</string>
+    <string name="wifi_menu_advanced">"Avanzate"</string>
+    <string name="wifi_ip_settings_titlebar">"Impostazioni IP"</string>
+    <string name="wifi_ip_settings_menu_save">"Salva"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Annulla"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Digita un indirizzo IP valido."</string>
+    <string name="wifi_use_static_ip">"Usa IP statico"</string>
+    <string name="wifi_ip_address">"Indirizzo IP"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Gateway"</string>
+    <string name="wifi_netmask">"Maschera di rete"</string>
+    <string name="wifi_context_menu_connect">"Connetti a rete"</string>
+    <string name="wifi_context_menu_forget">"Elimina rete"</string>
+    <string name="wifi_context_menu_change_password">"Cambia password"</string>
+    <string name="wifi_advanced_titlebar">"Avanzate"</string>
+    <string name="wifi_setting_num_channels_title">"Dominio regolatore"</string>
+    <string name="wifi_setting_num_channels_summary">"Imposta il numero di canali da usare"</string>
+    <string name="wifi_setting_num_channels_error">"Errore durante l\'impostazione del dominio regolatore."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> canali"</string>
+    <string name="wifi_setting_sleep_policy_title">"Criteri di sospensione Wi-Fi"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Specifica quando passare da Wi-Fi a dati cellulare"</string>
+    <string name="wifi_setting_sleep_policy_error">"Errore durante l\'impostazione dei criteri di sospensione."</string>
+    <string name="wifi_advanced_mac_address_title">"Indirizzo MAC"</string>
+    <string name="fragment_status_scanning">"Ricerca..."</string>
+    <string name="fragment_status_connecting">"Connessione a <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"Autenticazione con <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_obtaining_ip">"Acquisizione indirizzo IP da <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_connected">"Connesso a <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Disconnessione da <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_disconnected">"Disconnesso"</string>
+    <string name="fragment_status_failed">"Non riuscita"</string>
+    <string name="status_scanning">"Ricerca..."</string>
+    <string name="status_connecting">"Connessione..."</string>
+    <string name="status_authenticating">"Autenticazione..."</string>
+    <string name="status_obtaining_ip">"Acquisizione indirizzo..."</string>
+    <string name="status_connected">"Connesso"</string>
+    <string name="status_disconnecting">"Disconnessione..."</string>
+    <string name="status_disconnected">"Disconnesso"</string>
+    <string name="status_failed">"Non riuscita"</string>
+    <string name="sound_and_display_settings">"Audio e display"</string>
+    <string name="sound_settings">"Impostazioni audio"</string>
+    <string name="sound_and_display_settings_summary">"Imposta suonerie, notifiche e luminosità dello schermo"</string>
+    <string name="silent_mode_title">"Modalità silenziosa"</string>
+    <string name="silent_mode_summary">"Tutti i suoni eccetto quelli multimediali verranno disattivati"</string>
+    <string name="ringtone_title">"Suoneria telefono"</string>
+    <string name="ringtone_summary">"Imposta la suoneria predefinita delle chiamate in entrata"</string>
+    <string name="ring_volume_title">"Volume suoneria"</string>
+    <string name="ring_volume_summary">"Imposta il volume delle chiamate in entrata e delle notifiche"</string>
+    <string name="vibrate_title">"Vibrazione telefono"</string>
+    <string name="vibrate_summary">"Vibrazione per chiamate in entrata"</string>
+    <string name="notification_sound_title">"Suoneria notifiche"</string>
+    <string name="notification_sound_summary">"Imposta la suoneria di notifica predefinita"</string>
+    <string name="incoming_call_volume_title">"Volume chiamate in entrata"</string>
+    <string name="notification_volume_title">"Volume notifiche"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Usa volume chiamate in entrata per le notifiche"</string>
+    <string name="notification_sound_dialog_title">"Seleziona suoneria notifica"</string>
+    <string name="media_volume_title">"Volume app. multimediali"</string>
+    <string name="media_volume_summary">"Imposta il volume di musica e video"</string>
+    <string name="dtmf_tone_enable_title">"Toni udibili al tocco"</string>
+    <string name="dtmf_tone_enable_summary_on">"Riproduci toni durante la composizione"</string>
+    <string name="dtmf_tone_enable_summary_off">"Riproduci toni durante la composizione"</string>
+    <string name="sound_effects_enable_title">"Selezione sonora"</string>
+    <string name="sound_effects_enable_summary_on">"Riproduci toni durante una selezione sullo schermo"</string>
+    <string name="sound_effects_enable_summary_off">"Riproduci toni durante una selezione sullo schermo"</string>
+    <string name="play_media_notification_sounds_enable_title">"Notifiche scheda SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Disattiva i suoni di notifica della scheda SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Attiva suoni di notifica della scheda SD"</string>
+    <string name="sync_settings">"Sincronizzazione dati"</string>
+    <string name="sync_settings_summary">"Seleziona le applicazioni da sincronizzare"</string>
+    <string name="display_settings">"Impostazioni display"</string>
+    <string name="animations_title">"Animazione"</string>
+    <string name="animations_summary_on">"Mostra animazioni durante apertura/chiusura di finestre"</string>
+    <string name="animations_summary_off">"Mostra animazioni durante apertura/chiusura di finestre"</string>
+    <string name="brightness">"Luminosità"</string>
+    <string name="brightness_summary">"Regola la luminosità dello schermo"</string>
+    <string name="screen_timeout">"Timeout schermo"</string>
+    <string name="screen_timeout_summary">"Regola il tempo che deve trascorrere prima che lo schermo si spenga automaticamente"</string>
+    <string name="sim_lock_settings">"Impostazioni blocco SIM"</string>
+    <string name="sim_lock_settings_category">"Impostazioni blocco SIM"</string>
+    <string name="sim_lock_settings_title">"Blocco della SIM"</string>
+    <string name="sim_pin_toggle">"Blocca SIM"</string>
+    <string name="sim_lock_on">"Richiedi il PIN per l\'uso del telefono"</string>
+    <string name="sim_lock_off">"Richiedi il PIN per l\'uso del telefono"</string>
+    <string name="sim_pin_change">"Cambia PIN SIM"</string>
+    <string name="sim_enter_pin">"PIN della SIM"</string>
+    <string name="sim_enable_sim_lock">"Blocca la SIM"</string>
+    <string name="sim_disable_sim_lock">"Sblocca la SIM"</string>
+    <string name="sim_enter_old">"PIN della SIM attuale"</string>
+    <string name="sim_enter_new">"Nuovo PIN della SIM"</string>
+    <string name="sim_reenter_new">"Ridigita nuovo PIN"</string>
+    <string name="sim_change_pin">"PIN della SIM"</string>
+    <string name="sim_bad_pin">"PIN errato."</string>
+    <string name="sim_pins_dont_match">"I PIN non corrispondono."</string>
+    <string name="sim_change_failed">"Impossibile cambiare il PIN."\n"Il PIN potrebbe essere errato."</string>
+    <string name="sim_change_succeeded">"PIN della SIM modificato"</string>
+    <string name="sim_lock_failed">"Impossibile modificare lo stato di blocco della SIM."\n"Il PIN potrebbe essere errato."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Annulla"</string>
+    <string name="device_info_settings">"Stato telefono"</string>
+    <string name="system_update_settings_list_item_title">"Aggiornamenti sistema"</string>
+    <string name="system_update_settings_list_item_summary">"Verifica aggiornamenti di sistema"</string>
+    <string name="firmware_version">"Versione firmware"</string>
+    <string name="model_number">"Numero modello"</string>
+    <string name="baseband_version">"Versione banda di base"</string>
+    <string name="kernel_version">"Versione kernel"</string>
+    <string name="build_number">"Numero build"</string>
+    <string name="device_info_not_available">"Non disponibile"</string>
+    <string name="device_status_activity_title">"Stato"</string>
+    <string name="device_status">"Stato"</string>
+    <string name="device_status_summary">"IMEI, numero di telefono, segnale ecc."</string>
+    <string name="storage_settings_title">"Scheda SD e memoria"</string>
+    <string name="storage_settings_summary">"Smonta la scheda SD, visualizza spazio di archiviazione disponibile"</string>
+    <string name="status_number">"Numero di telefono"</string>
+    <string name="status_network_type">"Tipo di rete cellulare"</string>
+    <string name="status_data_state">"Stato rete cellulare"</string>
+    <string name="status_service_state">"Stato servizio"</string>
+    <string name="status_signal_strength">"Intensità segnale"</string>
+    <string name="status_roaming">"Roaming"</string>
+    <string name="status_operator">"Rete"</string>
+    <string name="status_wifi_mac_address">"Indirizzo MAC Wi-Fi"</string>
+    <string name="status_bt_address">"Indirizzo Bluetooth"</string>
+    <string name="status_unavailable">"Non disponibile"</string>
+    <string name="status_network_traffic_stats">"Utilizzo della rete"</string>
+    <string name="status_network_traffic_summary">"Inviati: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Ricevuti: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Tempo di attività"</string>
+    <string name="status_awake_time">"Tempo di attività"</string>
+    <string name="internal_memory">"Archiviazione interna telefono"</string>
+    <string name="sd_memory">"Scheda SD"</string>
+    <string name="memory_available">"Spazio disponibile"</string>
+    <string name="memory_size">"Spazio totale"</string>
+    <string name="sd_eject">"Smonta scheda SD"</string>
+    <string name="sd_eject_summary">"Smonta la scheda SD per una rimozione sicura"</string>
+    <string name="sd_format">"Formatta scheda SD"</string>
+    <string name="sd_format_summary">"Formatta (cancella) la scheda SD"</string>
+    <string name="sd_unavailable">"Non disponibile"</string>
+    <string name="read_only">" (Sola lettura)"</string>
+    <string name="battery_status_title">"Stato batteria"</string>
+    <string name="battery_level_title">"Livello batteria"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"Modifica punto di accesso"</string>
+    <string name="apn_not_set">"&lt;Non impostato&gt;"</string>
+    <string name="apn_name">"Nome"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Porta"</string>
+    <string name="apn_user">"Nome utente"</string>
+    <string name="apn_password">"Password"</string>
+    <string name="apn_server">"Server"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"Proxy MMS"</string>
+    <string name="apn_mms_port">"Porta MMS"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"Tipo APN"</string>
+    <string name="menu_delete">"Elimina APN"</string>
+    <string name="menu_new">"Nuovo APN"</string>
+    <string name="menu_save">"Salva"</string>
+    <string name="menu_cancel">"Ignora"</string>
+    <string name="error_title">"Attenzione"</string>
+    <string name="error_name_empty">"Il campo Nome non può essere vuoto."</string>
+    <string name="error_apn_empty">"Il campo APN non può essere vuoto."</string>
+    <string name="error_mcc_not3">"Il campo MCC deve contenere 3 cifre."</string>
+    <string name="error_mnc_not23">"Il campo MNC deve contenere 2 o 3 cifre."</string>
+    <string name="master_clear_title">"Ripristino dati di fabbrica"</string>
+    <string name="master_clear_summary">"Cancella tutti i dati sul telefono"</string>
+    <string name="master_clear_desc">"Questa azione consente di ripristinare i valori di fabbrica del telefono, cancellando tutti i dati e le applicazioni scaricate."</string>
+    <string name="master_clear_button_text">"Ripristina telefono"</string>
+    <string name="master_clear_final_desc">"Ripristinare il telefono, cancellando tutti i dati e le applicazioni? Questa azione è irreversibile."</string>
+    <string name="master_clear_final_button_text">"Cancella tutto"</string>
+    <string name="master_clear_gesture_prompt">"Inserisci la sequenza di sblocco"</string>
+    <string name="master_clear_gesture_explanation">"Per confermare un ripristino del telefono occorre inserire la sequenza di sblocco."</string>
+    <string name="master_clear_failed">"Nessun ripristino eseguito perché il servizio System Clear non è disponibile."</string>
+    <string name="media_format_title">"Formatta scheda SD."</string>
+    <string name="media_format_summary">"Cancella tutti i dati sulla scheda SD"</string>
+    <string name="media_format_desc">"Questa azione cancellerà TUTTI i dati della scheda SD del telefono, che andranno persi."</string>
+    <string name="media_format_button_text">"Formatta scheda SD"</string>
+    <string name="media_format_final_desc">"Formattare la scheda SD, cancellando tutti i media? Questa azione è irreversibile."</string>
+    <string name="media_format_final_button_text">"Cancella tutto"</string>
+    <string name="media_format_gesture_prompt">"Inserisci la sequenza di sblocco"</string>
+    <string name="media_format_gesture_explanation">"Per confermare la formattazione della scheda SD devi inserire la sequenza di sblocco."</string>
+    <string name="call_settings_title">"Impostazioni chiamate"</string>
+    <string name="call_settings_summary">"Imposta segreteria, deviazione chiamate, avviso di chiamata, ID chiamante"</string>
+    <string name="network_settings_title">"Reti mobili"</string>
+    <string name="network_settings_summary">"Imposta le opzioni per roaming, reti e APN"</string>
+    <string name="location_title">"Fonti localizzazione personali"</string>
+    <string name="location_network_based">"Usa reti wireless"</string>
+    <string name="location_networks_disabled">"Visualizza la posizione nelle applicazioni (ad esempio Maps) utilizzando le reti wireless"</string>
+    <string name="location_neighborhood_level">"Posizione determinata dalle reti mobili e/o Wi-Fi"</string>
+    <string name="location_gps">"Attiva satelliti GPS"</string>
+    <string name="location_street_level">"Durante localizzazione, accuratezza a livello stradale (deselezionare per risparmiare batteria)"</string>
+    <string name="location_gps_disabled">"Localizza a livello stradale (richiede più batteria e la vista del cielo)"</string>
+    <string name="about_settings">"Info sul telefono"</string>
+    <string name="about_settings_summary">"Visualizza informazioni legali, stato del telefono, versione del software"</string>
+    <string name="legal_information">"Informazioni legali"</string>
+    <string name="contributors_title">"Collaboratori"</string>
+    <string name="copyright_title">"Copyright"</string>
+    <string name="license_title">"Licenza"</string>
+    <string name="terms_title">"Termini e condizioni"</string>
+    <string name="settings_license_activity_title">"Licenze open source"</string>
+    <string name="settings_license_activity_unavailable">"Errore durante il caricamento delle licenze."</string>
+    <string name="settings_license_activity_loading">"Caricamento..."</string>
+    <string name="lock_settings_title">"Sequenza di sblocco schermo"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Cambia sequenza di sblocco"</string>
+    <string name="lockpattern_need_to_unlock">"Conferma sequenza salvata"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Riprova:"</string>
+    <string name="lockpattern_recording_intro_header">"Inserisci una sequenza di sblocco"</string>
+    <string name="lockpattern_recording_intro_footer">"Premi Menu per visualizzare la guida."</string>
+    <string name="lockpattern_recording_inprogress">"Allontana il dito al termine."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Collega almeno <xliff:g id="NUMBER">%d</xliff:g> punti. Riprova:"</string>
+    <string name="lockpattern_pattern_entered_header">"Sequenza registrata."</string>
+    <string name="lockpattern_need_to_confirm">"Inserisci di nuovo la sequenza per confermare:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Nuova sequenza di sblocco:"</string>
+    <string name="lockpattern_confirm_button_text">"Conferma"</string>
+    <string name="lockpattern_restart_button_text">"Ricrea"</string>
+    <string name="lockpattern_retry_button_text">"Riprova"</string>
+    <string name="lockpattern_continue_button_text">"Continua"</string>
+    <string name="lockpattern_settings_title">"Sequenza di sblocco"</string>
+    <string name="lockpattern_settings_enable_title">"Richiedi sequenza"</string>
+    <string name="lockpattern_settings_enable_summary">"Devi inserire la sequenza per sbloccare lo schermo"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Usa sequenza visibile"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Usa reazione tattile"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Imposta sequenza"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Cambia sequenza di sblocco"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Procedura per l\'impostazione di una sequenza di sblocco"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Troppi tentativi errati."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Riprova fra <xliff:g id="NUMBER">%d</xliff:g> secondi."</string>
+    <string name="skip_button_label">"Annulla"</string>
+    <string name="next_button_label">"Avanti"</string>
+    <string name="lock_title">"Protezione del telefono"</string>
+    <string name="lock_intro_message"><font size="17">"Proteggi il telefono dall\'uso non autorizzato creando una sequenza di sblocco dello schermo personale. "\n<font height="17">\n</font><b>"1"</b>"  Nella prossima schermata, osserva la creazione di una sequenza di esempio. "\n<font height="17">\n</font><b>"2"</b>"  Quando sei pronto, crea la tua sequenza di sblocco personale. Prova diverse sequenze collegando sempre almeno quattro punti. "\n<font height="17">\n</font><b>"3"</b>"  Inserisci di nuovo la sequenza per confermare. "\n<font height="17">\n</font><b>"Pronto per iniziare? Seleziona “Avanti”"</b>". "\n<font height="3">\n</font>"Se non desideri proteggere il telefono, seleziona “Annulla”."</font></string>
+    <string name="lock_example_title">"Sequenza di esempio"</string>
+    <string name="lock_example_message">"Collega almeno quattro punti."\n" "\n"Seleziona \"Avanti\" quando sei pronto a creare la tua sequenza."</string>
+    <string name="manageapplications_settings_title">"Gestisci applicazioni"</string>
+    <string name="manageapplications_settings_summary">"Gestisci e rimuovi applicazioni installate"</string>
+    <string name="applications_settings">"Applicazioni"</string>
+    <string name="applications_settings_summary">"Gestisci le applicazioni, imposta le scorciatoie di avvio rapido"</string>
+    <string name="applications_settings_header">"Impostazioni applicazione"</string>
+    <string name="install_applications">"Origini sconosciute"</string>
+    <string name="install_unknown_applications">"Consenti l\'installazione di applicazioni non commerciali"</string>
+    <string name="install_all_warning">"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">"Info applicazione"</string>
+    <string name="storage_label">"Archiviazione"</string>
+    <string name="auto_launch_label">"Avvia per impostazione predefinita"</string>
+    <string name="permissions_label">"Autorizzazioni"</string>
+    <string name="cache_header_label">"Cache"</string>
+    <string name="clear_cache_btn_text">"Cancella cache"</string>
+    <string name="cache_size_label">"Cache"</string>
+    <string name="controls_label">"Controlli"</string>
+    <string name="force_stop">"Termina"</string>
+    <string name="total_size_label">"Totale"</string>
+    <string name="application_size_label">"Applicazione"</string>
+    <string name="data_size_label">"Dati"</string>
+    <string name="uninstall_text">"Disinstalla"</string>
+    <string name="clear_user_data_text">"Cancella dati"</string>
+    <string name="auto_launch_enable_text">"Hai scelto di avviare per impostazione predefinita questa applicazione per alcune azioni."</string>
+    <string name="auto_launch_disable_text">"Nessuna applicazione predefinita impostata."</string>
+    <string name="clear_activities">"Cancella predefinite"</string>
+    <string name="unknown">"Sconosciuta"</string>
+    <string name="sort_order_alpha">"Ordina"</string>
+    <string name="sort_order_size">"Ordina per dimensioni"</string>
+    <string name="manage_space_text">"Gestisci spazio"</string>
+    <string name="filter">"Filtra"</string>
+    <string name="filter_dlg_title">"Seleziona opzioni di filtro"</string>
+    <string name="filter_apps_all">"Tutte"</string>
+    <string name="filter_apps_third_party">"Terze parti"</string>
+    <string name="filter_apps_running">"In esecuzione"</string>
+    <string name="loading">"Caricamento..."</string>
+    <string name="recompute_size">"Ricalcolo dimensioni..."</string>
+    <string name="clear_data_dlg_title">"Elimina"</string>
+    <string name="clear_data_dlg_text">"Tutte le informazioni salvate nell\'applicazione verranno eliminate definitivamente."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Annulla"</string>
+    <string name="app_not_found_dlg_title">"Applicazione non trovata"</string>
+    <string name="app_not_found_dlg_text">"Impossibile trovare l\'applicazione \nnell\'elenco di applicazioni installate."</string>
+    <string name="clear_data_failed">"Impossibile cancellare i dati dell\'applicazione."</string>
+    <string name="security_settings_desc">"Contenuti a cui può accedere l\'applicazione sul telefono:"</string>
+    <string name="computing_size">"Elaborazione..."</string>
+    <string name="invalid_size_value">"Impossibile stabilire le dimensioni del pacchetto"</string>
+    <string name="empty_list_msg">"Nessuna applicazione di terze parti installata."</string>
+    <string name="language_settings">"Lingua e testo"</string>
+    <string name="language_settings_summary">"Impostazioni internazionali (lingua e regione), di inserimento e correzione automatica del testo"</string>
+    <string name="language_category">"Impostazioni lingua"</string>
+    <string name="text_category">"Impostazioni testo"</string>
+    <string name="phone_language">"Seleziona lingua"</string>
+    <string name="phone_language_summary">"Seleziona lingua e regione"</string>
+    <string name="auto_replace">"Sostituzione automatica"</string>
+    <string name="auto_replace_summary">"Corregge le parole con errori di ortografia"</string>
+    <string name="auto_caps">"Maiuscola automatica"</string>
+    <string name="auto_caps_summary">"Usa la maiuscola a inizio frase"</string>
+    <string name="auto_punctuate">"Punteggiatura automatica"</string>
+    <string name="hardkeyboard_category">"Impostazioni tastiera fisica"</string>
+    <string name="auto_punctuate_summary">"Premi due volte la barra spaziatrice per inserire \".\""</string>
+    <string name="show_password">"Password visibili"</string>
+    <string name="show_password_summary">"Mostra la password durante la digitazione"</string>
+    <string name="user_dict_settings_titlebar">"Dizionario utente"</string>
+    <string name="user_dict_settings_title">"Dizionario utente"</string>
+    <string name="user_dict_settings_summary">"Aggiungi e rimuovi parole dal dizionario utente"</string>
+    <string name="user_dict_settings_add_menu_title">"Aggiungi"</string>
+    <string name="user_dict_settings_add_dialog_title">"Aggiungi al dizionario"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Modifica"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Elimina"</string>
+    <string name="user_dict_settings_empty_text">"Non sono presenti parole nel dizionario utente. Puoi aggiungere una parola mediante il menu."</string>
+    <string name="testing">"Verifica in corso"</string>
+    <string name="testing_phone_info">"Informazioni telefono"</string>
+    <string name="testing_battery_info">"Informazioni batteria"</string>
+    <string name="testing_battery_history">"Cronologia batteria"</string>
+    <string name="quick_launch_title">"Avvio rapido"</string>
+    <string name="quick_launch_summary">"Imposta scorciatoie da tastiera per avviare le applicazioni"</string>
+    <string name="quick_launch_assign_application">"Assegna applicazione"</string>
+    <string name="quick_launch_no_shortcut">"Nessuna scorciatoia"</string>
+    <string name="quick_launch_shortcut">"Cerca + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Cancella"</string>
+    <string name="quick_launch_clear_dialog_message">"La scorciatoia per <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) verrà cancellata."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Annulla"</string>
+    <string name="quick_launch_display_mode_applications">"Applicazioni"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Scorciatoie"</string>
+    <string name="input_methods_settings_title">"Inserimento testo"</string>
+    <string name="input_methods_settings_summary">"Gestisci opzioni inserimento testo"</string>
+    <string name="input_methods_settings_label_format">"Impostazioni %s"</string>
+    <string name="development_settings_title">"Sviluppo"</string>
+    <string name="development_settings_summary">"Imposta opzioni per lo sviluppo di applicazioni"</string>
+    <string name="enable_adb">"Debug USB"</string>
+    <string name="enable_adb_summary">"Modalità debug quando è connesso USB"</string>
+    <string name="keep_screen_on">"Rimani attivo"</string>
+    <string name="keep_screen_on_summary">"Lo schermo non va mai in stand-by se sotto carica"</string>
+    <string name="allow_mock_location">"Posizioni fittizie"</string>
+    <string name="allow_mock_location_summary">"Consenti posizioni fittizie"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Dettagli per UID %d"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Dettagli di utilizzo della rete per <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Byte ricevuti: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Byte inviati: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Byte totali: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"Dettagli di utilizzo della CPU per <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Tempo utente:"</string>
+    <string name="battery_history_system_time">"Tempo sistema:"</string>
+    <string name="battery_history_total_time">"Tempo totale:"</string>
+    <string name="battery_history_starts">"Avvii: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> giorni, <xliff:g id="HOURS">%2$d</xliff:g> ore, <xliff:g id="MINUTES">%3$d</xliff:g> minuti, <xliff:g id="SECONDS">%4$d</xliff:g> secondi"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> ore, <xliff:g id="MINUTES">%2$d</xliff:g> minuti, <xliff:g id="SECONDS">%3$d</xliff:g> secondi"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> minuti, <xliff:g id="SECONDS">%2$d</xliff:g> secondi"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> secondi"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Pacchetti che condividono questo UID:"</string>
+    <string name="battery_history_no_data">"Dati sull\'utilizzo della batteria non disponibili"</string>
+    <string name="battery_history_sensor">"Sensore:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Sensore usato dai pacchetti:"</string>
+    <string name="battery_history_sensor_usage">"Usato <xliff:g id="COUNT">%1$d</xliff:g> volte da <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"Usato <xliff:g id="COUNT">%1$d</xliff:g> volte da uno di:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Tempo trascorso con schermo acceso:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"A batteria:"</string>
+    <string name="battery_history_screen_on_plugged">"Collegato:"</string>
+    <string name="usage_stats_label">"Statistiche di utilizzo"</string>
+    <string name="testing_usage_stats">"Statistiche di utilizzo"</string>
+    <string name="display_order_text">"Ordina per:"</string>
+    <string name="app_name_label">"Applicazione"</string>
+    <string name="launch_count_label">"Conteggio"</string>
+    <string name="usage_time_label">"Tempo di utilizzo"</string>
+</resources>
diff --git a/res/values-ja-nokeys/strings.xml b/res/values-ja-nokeys/strings.xml
new file mode 100644
index 0000000..7428f92
--- /dev/null
+++ b/res/values-ja-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"アプリケーションを管理"</string>
+</resources>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
new file mode 100644
index 0000000..d73a3d7
--- /dev/null
+++ b/res/values-ja/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"アメリカ"</item>
+    <item>"ヨーロッパ"</item>
+    <item>"アフリカ"</item>
+    <item>"アジア"</item>
+    <item>"オーストラリア"</item>
+    <item>"太平洋"</item>
+    <item>"すべて"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15秒"</item>
+    <item>"30秒"</item>
+    <item>"1分"</item>
+    <item>"2分"</item>
+    <item>"10分"</item>
+    <item>"タイムアウトなし"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"自動"</item>
+    <item>"なし"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"なし"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"自動"</item>
+    <item>"WEP ASCII"</item>
+    <item>"16進のWEP"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"画面がOFFになったとき"</item>
+    <item>"電源接続時はスリープしない"</item>
+    <item>"スリープしない"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"使用時間"</item>
+    <item>"起動回数"</item>
+    <item>"アプリケーション名"</item>
+  </string-array>
+</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
new file mode 100644
index 0000000..f1c2414
--- /dev/null
+++ b/res/values-ja/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"不明"</string>
+    <string name="turn_on_radio">"無線通信をオン"</string>
+    <string name="turn_off_radio">"無線通信をオフ"</string>
+    <string name="turn_on_qxdm">"QXDM SDログを有効にする"</string>
+    <string name="turn_off_qxdm">"QXDM SDログを無効にする"</string>
+    <string name="radioInfo_menu_viewADN">"SIMのアドレス帳を表示"</string>
+    <string name="radioInfo_menu_viewFDN">"発信番号制限を表示"</string>
+    <string name="radioInfo_menu_viewSDN">"サービス電話番号を表示"</string>
+    <string name="radioInfo_menu_getPDP">"PDPリストを取得"</string>
+    <string name="radioInfo_menu_enableData">"データ接続を有効にする"</string>
+    <string name="radioInfo_menu_disableData">"データ接続を無効にする"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"起動時にデータを有効にする"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"起動時にデータを無効にする"</string>
+    <string name="radioInfo_service_in">"使用中"</string>
+    <string name="radioInfo_service_out">"休止中または使用不可"</string>
+    <string name="radioInfo_service_emergency">"緊急呼のみ"</string>
+    <string name="radioInfo_service_off">"無線通信をオフ"</string>
+    <string name="radioInfo_roaming_in">"ローミング"</string>
+    <string name="radioInfo_roaming_not">"ローミングなし"</string>
+    <string name="radioInfo_phone_idle">"アイドル"</string>
+    <string name="radioInfo_phone_ringing">"着信中"</string>
+    <string name="radioInfo_phone_offhook">"通話中"</string>
+    <string name="radioInfo_data_disconnected">"切断"</string>
+    <string name="radioInfo_data_connecting">"接続中"</string>
+    <string name="radioInfo_data_connected">"接続"</string>
+    <string name="radioInfo_data_suspended">"強制停止"</string>
+    <string name="radioInfo_unknown">"不明"</string>
+    <string name="radioInfo_display_packets">"pkts"</string>
+    <string name="radioInfo_display_bytes">"バイト"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"SDカードのマウント解除"</string>
+    <string name="sdcard_format">"SDカードをフォーマット"</string>
+    <string name="small_font">"小"</string>
+    <string name="medium_font">"中"</string>
+    <string name="large_font">"大"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"SDカード"</string>
+    <string name="battery_info_status_label">"充電状況"</string>
+    <string name="battery_info_scale_label">"電池の残量表示:"</string>
+    <string name="battery_info_level_label">"電池残量:"</string>
+    <string name="battery_info_health_label">"電池の状態:"</string>
+    <string name="battery_info_technology_label">"電池技術:"</string>
+    <string name="battery_info_voltage_label">"蓄電池電圧:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"電池温度:"</string>
+    <string name="battery_info_temperature_units">"°C"</string>
+    <string name="battery_info_uptime">"起動してからの時間:"</string>
+    <string name="battery_info_awake_battery">"非節電時間"</string>
+    <string name="battery_info_awake_plugged">"充電時の非節電時間:"</string>
+    <string name="battery_info_screen_on">"画面ONの時間:"</string>
+    <string name="battery_info_status_unknown">"不明"</string>
+    <string name="battery_info_status_charging">"充電中"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"放電中"</string>
+    <string name="battery_info_status_not_charging">"充電していません"</string>
+    <string name="battery_info_status_full">"満充電"</string>
+    <string name="battery_info_health_unknown">"不明"</string>
+    <string name="battery_info_health_good">"半分以上残っています"</string>
+    <string name="battery_info_health_overheat">"加熱状態"</string>
+    <string name="battery_info_health_dead">"残量なし"</string>
+    <string name="battery_info_health_over_voltage">"過電圧"</string>
+    <string name="battery_info_health_unspecified_failure">"不明なエラー"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"検出可能"</string>
+    <string name="bluetooth_is_discoverable">"<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g>秒間検出可能..."</string>
+    <string name="bluetooth_not_discoverable">"この端末が検出されることを許可する"</string>
+    <string name="bluetooth_devices">"Bluetooth端末"</string>
+    <string name="bluetooth_device_name">"端末名"</string>
+    <string name="bluetooth_name_not_set">"名前が設定されていない場合、アカウント名を使用する"</string>
+    <string name="bluetooth_scan_for_devices">"端末をスキャン"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>の接続を解除します"</string>
+    <string name="bluetooth_connected">"接続"</string>
+    <string name="bluetooth_disconnected">"切断"</string>
+    <string name="bluetooth_disconnecting">"切断中..."</string>
+    <string name="bluetooth_connecting">"接続中..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"この端末をペアに設定する"</string>
+    <string name="bluetooth_pairing">"ペアとして設定中..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"ハンズフリー/ヘッドセット"</string>
+    <string name="progress_scanning">"スキャン中"</string>
+    <string name="bluetooth_notif_ticker">"Bluetoothペア設定リクエスト"</string>
+    <string name="bluetooth_notif_title">"ペア設定リクエスト"</string>
+    <string name="bluetooth_notif_message">"ペアとして設定 "</string>
+    <string name="date_and_time">"日付形式"</string>
+    <string name="date_time_12_hour_sample">"1:00 PM"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"タイムゾーンの選択"</string>
+    <string name="display_preview_label">"プレビュー:"</string>
+    <string name="display_font_size_label">"フォントサイズ:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"<xliff:g id="BROADCAST">broadcast</xliff:g>を送信"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"<xliff:g id="ACTIVITY">activity</xliff:g>を開始"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"アカウント:"</string>
+    <string name="proxy_clear_text">"消去"</string>
+    <string name="proxy_port_label">"ポート"</string>
+    <string name="proxy_defaultView_text">"初期設定に戻す"</string>
+    <string name="proxy_action_text">"保存"</string>
+    <string name="proxy_hostname_label">"ホスト名"</string>
+    <string name="proxy_error">"注意"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"入力したホスト名は無効です。"</string>
+    <string name="proxy_error_empty_port">"[ポート]フィールドに入力してください。"</string>
+    <string name="proxy_error_empty_host_set_port">"[ホスト]フィールドが空の場合は、[ポート]フィールドも空にしてください。"</string>
+    <string name="proxy_error_invalid_port">"入力したポートは無効です。"</string>
+    <string name="radio_info_signal_location_label">"ロケーション:"</string>
+    <string name="radio_info_neighboring_location_label">"近くのCID:"</string>
+    <string name="radio_info_data_attempts_label">"データの試行:"</string>
+    <string name="radio_info_gprs_service_label">"GPRSサービス:"</string>
+    <string name="radio_info_roaming_label">"ローミング:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"通話のリダイレクト:"</string>
+    <string name="radio_info_ppp_resets_label">"ブート後のPPPリセット回数:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM切断:"</string>
+    <string name="radio_info_current_network_label">"現在のネットワーク:"</string>
+    <string name="radio_info_data_successes_label">"データ成功:"</string>
+    <string name="radio_info_ppp_received_label">"PPP受信:"</string>
+    <string name="radio_info_gsm_service_label">"GSMサービス:"</string>
+    <string name="radio_info_signal_strength_label">"電波強度:"</string>
+    <string name="radio_info_call_status_label">"通話状況:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP送信:"</string>
+    <string name="radio_info_radio_resets_label">"無線通信のリセット:"</string>
+    <string name="radio_info_message_waiting_label">"メッセージ待機中:"</string>
+    <string name="radio_info_phone_number_label">"電話番号:"</string>
+    <string name="radio_info_band_mode_label">"無線バンドを選択"</string>
+    <string name="radio_info_network_type_label">"ネットワークの種類"</string>
+    <string name="radio_info_set_perferred_label">"優先ネットワークを設定"</string>
+    <string name="radio_info_ping_ipaddr">"IPアドレスのPing:"</string>
+    <string name="radio_info_ping_hostname">"ホスト名 (www.google.co.jp) のPing:"</string>
+    <string name="radio_info_http_client_test">"HTTPクライアントテスト:"</string>
+    <string name="radio_info_toggle_ciph_label">"暗号化の切り替え"</string>
+    <string name="ping_test_label">"pingテストの実行"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"更新"</string>
+    <string name="radio_info_smsc_refresh_label">"更新"</string>
+    <string name="radio_info_toggle_dns_check_label">"DNSチェックを切り替え"</string>
+    <string name="band_mode_title">"GSM/UMTSバンドの設定"</string>
+    <string name="band_mode_loading">"バンドリストを読み込み中..."</string>
+    <string name="band_mode_set">"設定"</string>
+    <string name="band_mode_failed">"失敗"</string>
+    <string name="band_mode_succeeded">"成功"</string>
+    <string name="sdcard_changes_instructions">"USBケーブルの再接続時に変更が有効になります"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"USBマスストレージを有効にする"</string>
+    <string name="sdcard_settings_total_bytes_label">"合計バイト数:"</string>
+    <string name="sdcard_settings_not_present_status">"SDカードがありません"</string>
+    <string name="sdcard_settings_available_bytes_label">"利用可能バイト数:"</string>
+    <string name="sdcard_settings_mass_storage_status">"SDカードをマスストレージデバイスとして使用中"</string>
+    <string name="sdcard_settings_unmounted_status">"SDカードを安全に取り外せます"</string>
+    <string name="sdcard_settings_bad_removal_status">"SDカードが使用中に取り外されました。"</string>
+    <string name="sdcard_settings_used_bytes_label">"使用済みバイト数:"</string>
+    <string name="sdcard_settings_scanning_status">"メディア用のSDカードをスキャン中..."</string>
+    <string name="sdcard_settings_read_only_status">"読み取り専用としてSDカードをマウントしました"</string>
+    <string name="next_label">"次へ"</string>
+    <string name="language_picker_title">"地域/言語"</string>
+    <string name="select_your_language">"言語を選択"</string>
+    <string name="activity_picker_label">"操作の選択"</string>
+    <string name="device_info_label">"端末情報"</string>
+    <string name="battery_info_label">"電池情報"</string>
+    <string name="battery_history_label">"バッテリの履歴"</string>
+    <string name="display_label">"ディスプレイ"</string>
+    <string name="phone_info_label">"携帯電話情報"</string>
+    <string name="sd_card_settings_label">"SDカード"</string>
+    <string name="proxy_settings_label">"プロキシ設定"</string>
+    <string name="cancel">"キャンセル"</string>
+    <string name="settings_label">"設定"</string>
+    <string name="airplane_mode">"機内モード"</string>
+    <string name="airplane_mode_summary">"ワイヤレス接続をすべて無効にする"</string>
+    <string name="airplane_mode_turning_on">"ワイヤレス接続を無効にしています..."</string>
+    <string name="airplane_mode_turning_off">"ワイヤレス接続を有効にしています..."</string>
+    <string name="radio_controls_title">"ワイヤレス設定"</string>
+    <string name="radio_controls_summary">"Wi-Fi、Bluetooth、機内モード、モバイルネットワークの管理"</string>
+    <string name="date_and_time_settings_title">"日付と時刻"</string>
+    <string name="date_and_time_settings_summary">"日付、時刻、タイムゾーンの設定"</string>
+    <string name="date_time_auto">"自動"</string>
+    <string name="date_time_auto_summaryOn">"ネットワーク自動設定"</string>
+    <string name="date_time_auto_summaryOff">"ネットワーク自動設定"</string>
+    <string name="date_time_24hour">"24時間表示"</string>
+    <string name="date_time_set_time">"時刻設定"</string>
+    <string name="date_time_set_timezone">"タイムゾーンの選択"</string>
+    <string name="date_time_set_date">"日付設定"</string>
+    <string name="date_time_date_format">"日付形式"</string>
+    <string name="zone_list_menu_sort_alphabetically">"アルファベット順に並べ替え"</string>
+    <string name="zone_list_menu_sort_by_timezone">"タイムゾーン順に並べ替え"</string>
+    <string name="security_settings_title">"セキュリティ &amp; 位置情報"</string>
+    <string name="security_settings_summary">"現在地情報、画面ロック、SIMカードロック"</string>
+    <string name="security_passwords_title">"パスワード"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Bluetoothをオン"</string>
+    <string name="bluetooth_settings">"Bluetooth設定"</string>
+    <string name="bluetooth_settings_title">"Bluetooth設定"</string>
+    <string name="bluetooth_settings_summary">"端末の名前、接続や検出設定"</string>
+    <string name="bluetooth_pin_entry">"Bluetoothペア設定リクエスト"</string>
+    <string name="bluetooth_device_info">"Bluetooth端末情報"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"ペアにするPINを入力してください。"\n"(0000か1234を試してください)"</string>
+    <string name="bluetooth_error_title">"注意"</string>
+    <string name="bluetooth_pairing_error_message">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>とのペアリングで問題が発生しました。"</string>
+    <string name="bluetooth_pairing_pin_error_message">"入力されたPINが正しくないため、<xliff:g id="DEVICE_NAME">%1$s</xliff:g>とのペアリングで問題が発生しました。"</string>
+    <string name="bluetooth_connecting_error_message">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>への接続で問題が発生しました。"</string>
+    <string name="bluetooth_preference_scan_title">"デバイスのスキャン"</string>
+    <string name="bluetooth_device_context_connect">"接続"</string>
+    <string name="bluetooth_device_context_disconnect">"接続を解除"</string>
+    <string name="bluetooth_device_context_pair_connect">"ペアに設定して接続"</string>
+    <string name="bluetooth_device_context_unpair">"ペアを解除"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"切断してペアを解除"</string>
+    <string name="bluetooth_device_context_connect_advanced">"オプション..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"接続先..."</string>
+    <string name="bluetooth_profile_a2dp">"メディア"</string>
+    <string name="bluetooth_profile_headset">"電話"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"メディアの音声に接続"</string>
+    <string name="bluetooth_summary_connected_to_headset">"携帯電話の音声に接続"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"携帯電話とメディアの音声に接続"</string>
+    <string name="bluetooth_device_advanced_title">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>オプション"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"接続"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Bluetoothデバイスに接続"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"プロフィール"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"メディアの音声に接続"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"携帯電話の音声に接続"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"メディアの音声に使用"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"携帯電話の音声に使用"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Wi-Fiをオン"</string>
+    <string name="wifi_settings">"Wi-Fi設定"</string>
+    <string name="wifi_settings_category">"Wi-Fi設定"</string>
+    <string name="wifi_settings_summary">"ワイヤレスアクセスポイントの設定"</string>
+    <string name="forget_network">"切断"</string>
+    <string name="wifi_status">"接続状況"</string>
+    <string name="wifi_link_speed">"速度"</string>
+    <string name="wifi_signal_3">"非常に強い"</string>
+    <string name="wifi_signal_2">"強"</string>
+    <string name="wifi_signal_1">"中"</string>
+    <string name="wifi_signal_0">"弱"</string>
+    <string name="security">"セキュリティ"</string>
+    <string name="wifi_security_open">"オープン"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"不明"</string>
+    <string name="wifi_security_verbose_open">"オープンネットワーク"</string>
+    <string name="wifi_security_verbose_wep">"WEPにより保護"</string>
+    <string name="wifi_security_verbose_wpa">"WPAにより保護"</string>
+    <string name="wifi_security_verbose_wpa2">"WPA2により保護"</string>
+    <string name="ip_address">"IPアドレス"</string>
+    <string name="signal">"電波強度"</string>
+    <string name="wifi_starting">"オンにしています..."</string>
+    <string name="wifi_stopping">"オフにしています..."</string>
+    <string name="wifi_error">"エラー"</string>
+    <string name="error_starting">"Wi-Fiを開始できません"</string>
+    <string name="error_stopping">"Wi-Fiを停止できません"</string>
+    <string name="error_scanning">"ネットワークをスキャンできません"</string>
+    <string name="error_connecting">"ネットワークに接続できません"</string>
+    <string name="error_saving">"ネットワークを保存できません"</string>
+    <string name="connect">"接続"</string>
+    <string name="connect_to_blank">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>に接続"</string>
+    <string name="please_type_passphrase">"ワイヤレス接続パスワード"</string>
+    <string name="please_type_hex_key">"WEPの16進キー (0～9、A～F)"</string>
+    <string name="wifi_show_password">"パスワードを表示"</string>
+    <string name="scan_wifi">"スキャン"</string>
+    <string name="summary_not_in_range">"圏外"</string>
+    <string name="summary_remembered">"これまでの設定"</string>
+    <string name="summary_connection_failed">"接続できませんでした。選択すると再試行します。"</string>
+    <string name="wifi_access_points">"Wi-Fiネットワーク"</string>
+    <string name="wifi_type_ssid">"ネットワークSSID"</string>
+    <string name="wifi_security">"セキュリティ"</string>
+    <string name="wifi_save_config">"保存"</string>
+    <string name="wifi_password_unchanged">"（変更なし）"</string>
+    <string name="wifi_add_other_network">"Wi-Fiネットワークを追加"</string>
+    <string name="wifi_notify_open_networks">"ネットワークの通知"</string>
+    <string name="wifi_notify_open_networks_summary">"オープンネットワークが利用可能なときに通知する"</string>
+    <string name="wifi_password_incorrect_error">"入力したネットワークパスワードは正しくありません。再入力してください。"</string>
+    <string name="wifi_generic_connection_error">"ネットワーク接続に問題があります。やり直してください。"</string>
+    <string name="wifi_menu_advanced">"詳細設定"</string>
+    <string name="wifi_ip_settings_titlebar">"IP設定"</string>
+    <string name="wifi_ip_settings_menu_save">"保存"</string>
+    <string name="wifi_ip_settings_menu_cancel">"キャンセル"</string>
+    <string name="wifi_ip_settings_invalid_ip">"正しいIPアドレスを入力してください。"</string>
+    <string name="wifi_use_static_ip">"静的IPを使用"</string>
+    <string name="wifi_ip_address">"IPアドレス"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"ゲートウェイ"</string>
+    <string name="wifi_netmask">"ネットマスク"</string>
+    <string name="wifi_context_menu_connect">"ネットワークに接続"</string>
+    <string name="wifi_context_menu_forget">"ネットワークへの接続を解除"</string>
+    <string name="wifi_context_menu_change_password">"パスワードを変更"</string>
+    <string name="wifi_advanced_titlebar">"詳細設定"</string>
+    <string name="wifi_setting_num_channels_title">"規制領域"</string>
+    <string name="wifi_setting_num_channels_summary">"使用するチャンネルの番号を設定する"</string>
+    <string name="wifi_setting_num_channels_error">"規制領域の設定で問題が発生しました。"</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"チャンネル数<xliff:g id="NUM_CHANNELS">%1$d</xliff:g>件"</string>
+    <string name="wifi_setting_sleep_policy_title">"Wi-Fiスリープポリシー"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Wi-Fiからモバイルデータに切り替えるタイミングを指定する"</string>
+    <string name="wifi_setting_sleep_policy_error">"スリープポリシーの設定で問題が発生しました。"</string>
+    <string name="wifi_advanced_mac_address_title">"MACアドレス"</string>
+    <string name="fragment_status_scanning">"スキャン中..."</string>
+    <string name="fragment_status_connecting">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>に接続中..."</string>
+    <string name="fragment_status_authenticating">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>による認証中..."</string>
+    <string name="fragment_status_obtaining_ip">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>からIPアドレスを取得中..."</string>
+    <string name="fragment_status_connected">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>に接続しました"</string>
+    <string name="fragment_status_disconnecting">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>から切断中..."</string>
+    <string name="fragment_status_disconnected">"切断"</string>
+    <string name="fragment_status_failed">"失敗"</string>
+    <string name="status_scanning">"スキャン中..."</string>
+    <string name="status_connecting">"接続中..."</string>
+    <string name="status_authenticating">"認証中..."</string>
+    <string name="status_obtaining_ip">"アドレスを取得中..."</string>
+    <string name="status_connected">"接続"</string>
+    <string name="status_disconnecting">"切断中..."</string>
+    <string name="status_disconnected">"切断"</string>
+    <string name="status_failed">"失敗"</string>
+    <string name="sound_and_display_settings">"サウンド &amp; 画面設定"</string>
+    <string name="sound_settings">"音の設定"</string>
+    <string name="sound_and_display_settings_summary">"着信音、操作音、画面の明るさなど"</string>
+    <string name="silent_mode_title">"マナーモード"</string>
+    <string name="silent_mode_summary">"メディア（音楽や動画）、アラーム以外は無音にします"</string>
+    <string name="ringtone_title">"着信音"</string>
+    <string name="ringtone_summary">"端末既定の着信音設定"</string>
+    <string name="ring_volume_title">"着信音の音量"</string>
+    <string name="ring_volume_summary">"着信音と通知音の音量を設定する"</string>
+    <string name="vibrate_title">"バイブレーション"</string>
+    <string name="vibrate_summary">"着信時のバイブレーションON"</string>
+    <string name="notification_sound_title">"通知音"</string>
+    <string name="notification_sound_summary">"端末既定の通知音設定"</string>
+    <string name="incoming_call_volume_title">"着信音量"</string>
+    <string name="notification_volume_title">"通知音量"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"通知音にも着信音量を適用"</string>
+    <string name="notification_sound_dialog_title">"通知音を選択"</string>
+    <string name="media_volume_title">"メディア再生音量"</string>
+    <string name="media_volume_summary">"音楽や動画の再生音量"</string>
+    <string name="dtmf_tone_enable_title">"タッチ操作音"</string>
+    <string name="dtmf_tone_enable_summary_on">"ダイヤルパッドの操作音をONにする"</string>
+    <string name="dtmf_tone_enable_summary_off">"ダイヤルパッドの操作音をONにする"</string>
+    <string name="sound_effects_enable_title">"選択時の操作音"</string>
+    <string name="sound_effects_enable_summary_on">"メニュー選択時に音を鳴らす"</string>
+    <string name="sound_effects_enable_summary_off">"メニュー選択時に音を鳴らす"</string>
+    <string name="play_media_notification_sounds_enable_title">"SDカードの通知"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"SDカードの通知音を無効にする"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"SDカードの通知音を有効にします"</string>
+    <string name="sync_settings">"データの同期"</string>
+    <string name="sync_settings_summary">"同期するアプリケーションを選択する"</string>
+    <string name="display_settings">"画面設定"</string>
+    <string name="animations_title">"アニメーション表示"</string>
+    <string name="animations_summary_on">"ウィンドウの開閉をアニメーションで表示する"</string>
+    <string name="animations_summary_off">"ウィンドウの開閉をアニメーションで表示する"</string>
+    <string name="brightness">"画面の明るさ"</string>
+    <string name="brightness_summary">"画面の明るさを調整します"</string>
+    <string name="screen_timeout">"画面のタイムアウト"</string>
+    <string name="screen_timeout_summary">"画面が自動的にOFFになるまでの時間を調整します"</string>
+    <string name="sim_lock_settings">"SIMカードロック設定"</string>
+    <string name="sim_lock_settings_category">"SIMカードロック設定"</string>
+    <string name="sim_lock_settings_title">"SIMカードロック"</string>
+    <string name="sim_pin_toggle">"SIMカードをロック"</string>
+    <string name="sim_lock_on">"端末使用時にPIN入力が必要になります"</string>
+    <string name="sim_lock_off">"端末使用時にPIN入力が必要になります"</string>
+    <string name="sim_pin_change">"SIM PINの変更"</string>
+    <string name="sim_enter_pin">"SIM PIN"</string>
+    <string name="sim_enable_sim_lock">"SIMカードをロック"</string>
+    <string name="sim_disable_sim_lock">"SIMカードのロックを解除"</string>
+    <string name="sim_enter_old">"古いSIM PIN"</string>
+    <string name="sim_enter_new">"新しいSIM PIN"</string>
+    <string name="sim_reenter_new">"新しいPINを再入力"</string>
+    <string name="sim_change_pin">"SIM PIN"</string>
+    <string name="sim_bad_pin">"PINが正しくありません。"</string>
+    <string name="sim_pins_dont_match">"PINが一致しません。"</string>
+    <string name="sim_change_failed">"PINを変更できません。"\n"PINが正しくない可能性があります。"</string>
+    <string name="sim_change_succeeded">"SIM PINが変更されました"</string>
+    <string name="sim_lock_failed">"SIMカードのロック状態を変更できません。"\n"PINが正しくない可能性があります。"</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"キャンセル"</string>
+    <string name="device_info_settings">"端末の状態"</string>
+    <string name="system_update_settings_list_item_title">"システムアップデート"</string>
+    <string name="system_update_settings_list_item_summary">"システムの更新を確認する"</string>
+    <string name="firmware_version">"ファームウェアバージョン"</string>
+    <string name="model_number">"モデル番号"</string>
+    <string name="baseband_version">"ベースバンドバージョン"</string>
+    <string name="kernel_version">"カーネルバージョン"</string>
+    <string name="build_number">"ビルド番号"</string>
+    <string name="device_info_not_available">"該当なし"</string>
+    <string name="device_status_activity_title">"端末の状態"</string>
+    <string name="device_status">"端末の状態"</string>
+    <string name="device_status_summary">"電話番号、端末識別番号、電波状態など"</string>
+    <string name="storage_settings_title">"SDカード &amp; 端末容量"</string>
+    <string name="storage_settings_summary">"SDカードの取り外し、空き容量の表示など"</string>
+    <string name="status_number">"電話番号"</string>
+    <string name="status_network_type">"モバイルネットワークのタイプ"</string>
+    <string name="status_data_state">"モバイルネットワークの状態"</string>
+    <string name="status_service_state">"サービスの状態"</string>
+    <string name="status_signal_strength">"電波強度"</string>
+    <string name="status_roaming">"ローミング"</string>
+    <string name="status_operator">"ネットワーク"</string>
+    <string name="status_wifi_mac_address">"Wi-Fi MACアドレス"</string>
+    <string name="status_bt_address">"Bluetoothアドレス"</string>
+    <string name="status_unavailable">"不明"</string>
+    <string name="status_network_traffic_stats">"ネットワーク使用状況"</string>
+    <string name="status_network_traffic_summary">"送信: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>受信: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"稼働時間"</string>
+    <string name="status_awake_time">"端末使用時間"</string>
+    <string name="internal_memory">"端末内部メモリ"</string>
+    <string name="sd_memory">"SDカード"</string>
+    <string name="memory_available">"空き容量"</string>
+    <string name="memory_size">"合計容量"</string>
+    <string name="sd_eject">"SDカードのマウント解除"</string>
+    <string name="sd_eject_summary">"SDカードの安全な取り外しのためマウント解除します"</string>
+    <string name="sd_format">"SDカードをフォーマット"</string>
+    <string name="sd_format_summary">"SDカードをフォーマット（消去）"</string>
+    <string name="sd_unavailable">"使用不可"</string>
+    <string name="read_only">" （読み取り専用）"</string>
+    <string name="battery_status_title">"電池の状態:"</string>
+    <string name="battery_level_title">"電池残量"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"アクセスポイントの編集"</string>
+    <string name="apn_not_set">"&lt;未設定&gt;"</string>
+    <string name="apn_name">"名前"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"プロキシ"</string>
+    <string name="apn_http_port">"ポート"</string>
+    <string name="apn_user">"ユーザー名"</string>
+    <string name="apn_password">"パスワード"</string>
+    <string name="apn_server">"サーバー"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"MMSプロキシ"</string>
+    <string name="apn_mms_port">"MMSポート"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APNタイプ"</string>
+    <string name="menu_delete">"APNを削除"</string>
+    <string name="menu_new">"新しいAPN"</string>
+    <string name="menu_save">"保存"</string>
+    <string name="menu_cancel">"破棄"</string>
+    <string name="error_title">"注意"</string>
+    <string name="error_name_empty">"[名前]フィールドは空白にできません。"</string>
+    <string name="error_apn_empty">"APNを空にできません。"</string>
+    <string name="error_mcc_not3">"MCCのフィールドには3桁で指定してください。"</string>
+    <string name="error_mnc_not23">"MNCのフィールドには2桁か3桁で指定してください。"</string>
+    <string name="master_clear_title">"データの初期化"</string>
+    <string name="master_clear_summary">"携帯電話内のすべてのデータを消去"</string>
+    <string name="master_clear_desc">"この操作は携帯電話を出荷時の初期状態にリセットし、データとダウンロードしたアプリケーションをすべて消去します。"</string>
+    <string name="master_clear_button_text">"携帯電話をリセット"</string>
+    <string name="master_clear_final_desc">"データやアプリケーションをすべて消去して携帯電話をリセットしますか？この操作は元に戻せません。"</string>
+    <string name="master_clear_final_button_text">"すべて消去"</string>
+    <string name="master_clear_gesture_prompt">"ロック解除パターンを入力してください"</string>
+    <string name="master_clear_gesture_explanation">"携帯電話をリセットするには、ロック解除パターンを入力する必要があります。"</string>
+    <string name="master_clear_failed">"System Clearサービスが利用できないため、リセットされませんでした。"</string>
+    <string name="media_format_title">"SDカードをフォーマットします。"</string>
+    <string name="media_format_summary">"SDカードのすべてのデータを消去します"</string>
+    <string name="media_format_desc">"この操作を実行すると端末のSDカードが消去されます。カード内のすべてのデータが失われます。"</string>
+    <string name="media_format_button_text">"SDカードをフォーマット"</string>
+    <string name="media_format_final_desc">"メディアをすべて消去してSDカードをフォーマットしますか？この操作は元に戻せません。"</string>
+    <string name="media_format_final_button_text">"すべて消去"</string>
+    <string name="media_format_gesture_prompt">"ロック解除パターンを入力してください"</string>
+    <string name="media_format_gesture_explanation">"ロック解除パターンを入力してSDカードのフォーマット実行を確認する必要があります。"</string>
+    <string name="call_settings_title">"通話設定"</string>
+    <string name="call_settings_summary">"ボイスメール、電話転送、発信者番号などの設定"</string>
+    <string name="network_settings_title">"モバイルネットワーク"</string>
+    <string name="network_settings_summary">"ローミング、ネットワーク、APNの設定"</string>
+    <string name="location_title">"現在地情報"</string>
+    <string name="location_network_based">"ワイヤレスネットワークを使用"</string>
+    <string name="location_networks_disabled">"ワイヤレスネットワークを使用するアプリケーション（地図など）で位置を表示する"</string>
+    <string name="location_neighborhood_level">"Wi-Fi/モバイルネットワークで位置を検出する"</string>
+    <string name="location_gps">"GPS機能を有効にする"</string>
+    <string name="location_street_level">"高精度測位（電池を節約する場合はOFFを選択）"</string>
+    <string name="location_gps_disabled">"高精度測位（電池消費大、電波が良好な野外使用）"</string>
+    <string name="about_settings">"端末情報"</string>
+    <string name="about_settings_summary">"端末情報、法的情報、バージョン情報など"</string>
+    <string name="legal_information">"法的情報"</string>
+    <string name="contributors_title">"貢献者/連携パートナー"</string>
+    <string name="copyright_title">"著作権"</string>
+    <string name="license_title">"ライセンス"</string>
+    <string name="terms_title">"利用規約"</string>
+    <string name="settings_license_activity_title">"オープンソースライセンス"</string>
+    <string name="settings_license_activity_unavailable">"ライセンスの読み込み中に問題が発生しました。"</string>
+    <string name="settings_license_activity_loading">"読み込み中..."</string>
+    <string name="lock_settings_title">"画面ロックの解除パターン"</string>
+    <string name="lockpattern_change_lock_pattern_label">"パターンを変更する"</string>
+    <string name="lockpattern_need_to_unlock">"現在のパターンを入力"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"やり直してください"</string>
+    <string name="lockpattern_recording_intro_header">"ロック解除パターンを入力"</string>
+    <string name="lockpattern_recording_intro_footer">"MENUキーでヘルプ表示"</string>
+    <string name="lockpattern_recording_inprogress">"描き終わりの点で指を離します。"</string>
+    <string name="lockpattern_recording_incorrect_too_short">"少なくとも<xliff:g id="NUMBER">%d</xliff:g>つの点を結んでください。"</string>
+    <string name="lockpattern_pattern_entered_header">"パターンが記録されました。"</string>
+    <string name="lockpattern_need_to_confirm">"確認のため、もう一度パターンを入力してください"</string>
+    <string name="lockpattern_pattern_confirmed_header">"新しいロック解除パターン:"</string>
+    <string name="lockpattern_confirm_button_text">"確認"</string>
+    <string name="lockpattern_restart_button_text">"再入力"</string>
+    <string name="lockpattern_retry_button_text">"やり直す"</string>
+    <string name="lockpattern_continue_button_text">"次へ"</string>
+    <string name="lockpattern_settings_title">"ロック解除パターン"</string>
+    <string name="lockpattern_settings_enable_title">"パターン入力必須"</string>
+    <string name="lockpattern_settings_enable_summary">"パターンを入力しないと画面ロックを解除しない"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"指の軌跡を線で表示する"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"パターンをなぞる操作音"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"ロック解除パターン設定"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"パターンを変更する"</string>
+    <string name="lockpattern_settings_help_how_to_record">"ロック解除パターンの描き方"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"誤った回数が多すぎます。"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"<xliff:g id="NUMBER">%d</xliff:g>秒後にやり直してください。"</string>
+    <string name="skip_button_label">"キャンセル"</string>
+    <string name="next_button_label">"次へ"</string>
+    <string name="lock_title">"携帯電話の保護"</string>
+    <string name="lock_intro_message"><font size="17">"画面ロックの解除パターンを作成して携帯電話の不正使用を防ぐことができます。"\n<font height="17">\n</font><b>"1"</b>"  次の画面でパターン作成の例を参考にしてください。"\n<font height="17">\n</font><b>"2"</b>"  ロック解除パターンを決めたら、そのパターンを指でなぞって描きます。さまざまなパターンを作成できますが、最低4つの点を結んでください。"\n<font height="17">\n</font><b>"3"</b>"  確認のためもう一度そのパターンを入力します。"\n<font height="17">\n</font><b>"[次へ]を押すと次に進みます"</b>"。"\n<font height="3">\n</font>"パターンロックを設定しない場合は[キャンセル]を選択してください。"</font></string>
+    <string name="lock_example_title">"パターン例"</string>
+    <string name="lock_example_message">"少なくとも4つの点を結んで下さい。"\n" "\n"独自のパターンを決めたら[次へ]を選択します。"</string>
+    <string name="manageapplications_settings_title">"アプリケーションの管理"</string>
+    <string name="manageapplications_settings_summary">"インストール済みアプリケーションを管理/削除します"</string>
+    <string name="applications_settings">"アプリケーション"</string>
+    <string name="applications_settings_summary">"アプリケーションの管理やクイック起動ショートカットの設定"</string>
+    <string name="applications_settings_header">"アプリケーション設定"</string>
+    <string name="install_applications">"提供元不明のアプリ"</string>
+    <string name="install_unknown_applications">"サードパーティアプリケーションのインストールを許可する"</string>
+    <string name="install_all_warning">"提供元不明のアプリケーションから携帯電話や個人情報データが攻撃を受ける可能性が高くなります。このようなアプリケーションの使用により生じうる携帯電話への損害やデータの損失について、お客様がすべての責任を負うことに同意するものとします。"</string>
+    <string name="application_info_label">"アプリケーション情報"</string>
+    <string name="storage_label">"メモリ"</string>
+    <string name="auto_launch_label">"いつも起動"</string>
+    <string name="permissions_label">"許可"</string>
+    <string name="cache_header_label">"キャッシュ"</string>
+    <string name="clear_cache_btn_text">"キャッシュをクリア"</string>
+    <string name="cache_size_label">"キャッシュ"</string>
+    <string name="controls_label">"コントロール"</string>
+    <string name="force_stop">"強制停止"</string>
+    <string name="total_size_label">"合計"</string>
+    <string name="application_size_label">"アプリケーション"</string>
+    <string name="data_size_label">"データ"</string>
+    <string name="uninstall_text">"アンインストール"</string>
+    <string name="clear_user_data_text">"データを消去"</string>
+    <string name="auto_launch_enable_text">"このアプリケーションはある操作で常に起動するように設定されています。"</string>
+    <string name="auto_launch_disable_text">"端末既定の設定なし"</string>
+    <string name="clear_activities">"既定操作を消去"</string>
+    <string name="unknown">"不明"</string>
+    <string name="sort_order_alpha">"並べ替え"</string>
+    <string name="sort_order_size">"サイズ順に並べ替え"</string>
+    <string name="manage_space_text">"容量を管理"</string>
+    <string name="filter">"フィルタ"</string>
+    <string name="filter_dlg_title">"フィルタオプションを選択"</string>
+    <string name="filter_apps_all">"すべて"</string>
+    <string name="filter_apps_third_party">"サードパーティ"</string>
+    <string name="filter_apps_running">"実行中"</string>
+    <string name="loading">"読み込み中..."</string>
+    <string name="recompute_size">"サイズを再計算中..."</string>
+    <string name="clear_data_dlg_title">"削除"</string>
+    <string name="clear_data_dlg_text">"このアプリケーションで保存したすべての情報が完全に削除されます。"</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"キャンセル"</string>
+    <string name="app_not_found_dlg_title">"アプリケーションが見つかりません"</string>
+    <string name="app_not_found_dlg_text">"インストール済みアプリケーションのリストに、このアプリケーションはありません。"</string>
+    <string name="clear_data_failed">"アプリケーションデータを消去できませんでした。"</string>
+    <string name="security_settings_desc">"このアプリケーションは下記にアクセスできます:"</string>
+    <string name="computing_size">"計算中..."</string>
+    <string name="invalid_size_value">"パッケージのサイズを計算できません"</string>
+    <string name="empty_list_msg">"サードパーティ製のアプリケーションはインストールされていません。"</string>
+    <string name="language_settings">"地域/言語 &amp; 文字入力"</string>
+    <string name="language_settings_summary">"地域と言語、文字入力、自動修正の設定"</string>
+    <string name="language_category">"地域/言語設定"</string>
+    <string name="text_category">"文字入力設定"</string>
+    <string name="phone_language">"地域/言語を選択"</string>
+    <string name="phone_language_summary">"言語と地域の選択"</string>
+    <string name="auto_replace">"自動修正"</string>
+    <string name="auto_replace_summary">"英語: タイプミスを自動修正する"</string>
+    <string name="auto_caps">"自動大文字変換"</string>
+    <string name="auto_caps_summary">"英語: 先頭文字を大文字に変換する"</string>
+    <string name="auto_punctuate">"ピリオド自動挿入"</string>
+    <string name="hardkeyboard_category">"物理キーボードの設定"</string>
+    <string name="auto_punctuate_summary">"英語: Spaceキー2回でピリオド(.)を挿入"</string>
+    <string name="show_password">"パスワードを表示"</string>
+    <string name="show_password_summary">"入力中のパスワードを表示する"</string>
+    <string name="user_dict_settings_titlebar">"ユーザー辞書"</string>
+    <string name="user_dict_settings_title">"ユーザー辞書"</string>
+    <string name="user_dict_settings_summary">"ユーザー辞書への語句の追加と削除"</string>
+    <string name="user_dict_settings_add_menu_title">"追加"</string>
+    <string name="user_dict_settings_add_dialog_title">"辞書に追加"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"編集"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"削除"</string>
+    <string name="user_dict_settings_empty_text">"ユーザー辞書に何も登録されていません。語句はメニューから登録できます。"</string>
+    <string name="testing">"テスト中"</string>
+    <string name="testing_phone_info">"携帯電話情報"</string>
+    <string name="testing_battery_info">"電池情報"</string>
+    <string name="testing_battery_history">"バッテリの履歴"</string>
+    <string name="quick_launch_title">"クイック起動"</string>
+    <string name="quick_launch_summary">"アプリケーションの起動にショートカットキーを割り当てる"</string>
+    <string name="quick_launch_assign_application">"アプリを選択"</string>
+    <string name="quick_launch_no_shortcut">"ショートカットなし"</string>
+    <string name="quick_launch_shortcut">"Search+<xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"消去"</string>
+    <string name="quick_launch_clear_dialog_message">"<xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) のショートカットをクリアします。"</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"キャンセル"</string>
+    <string name="quick_launch_display_mode_applications">"アプリケーション"</string>
+    <string name="quick_launch_display_mode_shortcuts">"ショートカット"</string>
+    <string name="input_methods_settings_title">"文字入力"</string>
+    <string name="input_methods_settings_summary">"テキスト入力オプションを管理"</string>
+    <string name="input_methods_settings_label_format">"%s設定"</string>
+    <string name="development_settings_title">"開発"</string>
+    <string name="development_settings_summary">"アプリケーション開発オプション"</string>
+    <string name="enable_adb">"USBデバッグ"</string>
+    <string name="enable_adb_summary">"USB接続時はデバッグモードにする"</string>
+    <string name="keep_screen_on">"スリープモードにしない"</string>
+    <string name="keep_screen_on_summary">"充電中に画面をスリープにしない"</string>
+    <string name="allow_mock_location">"擬似ロケーションを許可"</string>
+    <string name="allow_mock_location_summary">"擬似ロケーションを許可"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"UID %dの詳細"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"<xliff:g id="APP_NAME">%1$s</xliff:g>のネットワーク使用状況の詳細:"</string>
+    <string name="battery_history_bytes_received">"受信バイト数:<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"送信済みバイト数:<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"合計バイト数:<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"<xliff:g id="APP_NAME">%1$s</xliff:g>のCPU使用状況の詳細:"</string>
+    <string name="battery_history_user_time">"ユーザー時間:"</string>
+    <string name="battery_history_system_time">"システム時間:"</string>
+    <string name="battery_history_total_time">"合計時間:"</string>
+    <string name="battery_history_starts">"開始:<xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g>日<xliff:g id="HOURS">%2$d</xliff:g>時間<xliff:g id="MINUTES">%3$d</xliff:g>分<xliff:g id="SECONDS">%4$d</xliff:g>秒"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g>時間<xliff:g id="MINUTES">%2$d</xliff:g>分<xliff:g id="SECONDS">%3$d</xliff:g>秒"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g>分<xliff:g id="SECONDS">%2$d</xliff:g>秒"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g>秒"</string>
+    <string name="battery_history_packages_sharing_this_uid">"このUIDを共有するパッケージ:"</string>
+    <string name="battery_history_no_data">"バッテリ使用状況のデータは利用できません"</string>
+    <string name="battery_history_sensor">"センサー:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"パッケージで使用されるセンサー:"</string>
+    <string name="battery_history_sensor_usage">"<xliff:g id="PACKAGE">%2$s</xliff:g>により<xliff:g id="COUNT">%1$d</xliff:g>回使用"</string>
+    <string name="battery_history_sensor_usage_multi">"次のいずれかにより<xliff:g id="COUNT">%1$d</xliff:g>回使用:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"画面をONで使用した時間:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"バッテリ使用開始:"</string>
+    <string name="battery_history_screen_on_plugged">"電源に接続:"</string>
+    <string name="usage_stats_label">"使用統計情報"</string>
+    <string name="testing_usage_stats">"使用統計情報"</string>
+    <string name="display_order_text">"並べ替え:"</string>
+    <string name="app_name_label">"アプリケーション"</string>
+    <string name="launch_count_label">"回数"</string>
+    <string name="usage_time_label">"使用時間"</string>
+</resources>
diff --git a/res/values-ko-nokeys/strings.xml b/res/values-ko-nokeys/strings.xml
new file mode 100644
index 0000000..5017065
--- /dev/null
+++ b/res/values-ko-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"응용프로그램 관리"</string>
+</resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
new file mode 100644
index 0000000..ac1c6e1
--- /dev/null
+++ b/res/values-ko/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"미국"</item>
+    <item>"유럽"</item>
+    <item>"아프리카"</item>
+    <item>"아시아"</item>
+    <item>"오스트레일리아"</item>
+    <item>"태평양"</item>
+    <item>"모두"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15초"</item>
+    <item>"30초"</item>
+    <item>"1분"</item>
+    <item>"2분"</item>
+    <item>"10분"</item>
+    <item>"시간제한 없음"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"자동"</item>
+    <item>"없음"</item>
+    <item>"WEP"</item>
+    <item>"WPA 개인"</item>
+    <item>"WPA2 개인"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"없음"</item>
+    <item>"WEP"</item>
+    <item>"WPA 개인"</item>
+    <item>"WPA2 개인"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"자동"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP 16진수"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"화면이 꺼질 때"</item>
+    <item>"전원에 연결되었을 때는 절전 모드로 전환되지 않음"</item>
+    <item>"전환 안 됨"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"사용 시간"</item>
+    <item>"계수 시작"</item>
+    <item>"응용프로그램 이름"</item>
+  </string-array>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644
index 0000000..7d7590f
--- /dev/null
+++ b/res/values-ko/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"알 수 없음"</string>
+    <string name="turn_on_radio">"무선 켜기"</string>
+    <string name="turn_off_radio">"무선 끄기"</string>
+    <string name="turn_on_qxdm">"QXDM SD 로그 사용"</string>
+    <string name="turn_off_qxdm">"QXDM SD 로그 사용 안 함"</string>
+    <string name="radioInfo_menu_viewADN">"SIM 주소록 보기"</string>
+    <string name="radioInfo_menu_viewFDN">"FDN(전화걸 수 있는 번호) 보기"</string>
+    <string name="radioInfo_menu_viewSDN">"SDN(Service Dialing Numbers) 보기"</string>
+    <string name="radioInfo_menu_getPDP">"PDP 목록 가져오기"</string>
+    <string name="radioInfo_menu_enableData">"데이터 연결 사용"</string>
+    <string name="radioInfo_menu_disableData">"데이터 연결 사용 안 함"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"부팅할 때 데이터 사용"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"부팅할 때 데이터 사용 안 함"</string>
+    <string name="radioInfo_service_in">"서비스 상태"</string>
+    <string name="radioInfo_service_out">"서비스 지역 벗어남"</string>
+    <string name="radioInfo_service_emergency">"비상 전화만"</string>
+    <string name="radioInfo_service_off">"무선 연결 끊김"</string>
+    <string name="radioInfo_roaming_in">"로밍"</string>
+    <string name="radioInfo_roaming_not">"로밍 안 함"</string>
+    <string name="radioInfo_phone_idle">"유휴"</string>
+    <string name="radioInfo_phone_ringing">"벨이 울림"</string>
+    <string name="radioInfo_phone_offhook">"진행 중인 통화"</string>
+    <string name="radioInfo_data_disconnected">"연결끊김"</string>
+    <string name="radioInfo_data_connecting">"연결 중"</string>
+    <string name="radioInfo_data_connected">"연결됨"</string>
+    <string name="radioInfo_data_suspended">"일시정지됨"</string>
+    <string name="radioInfo_unknown">"알 수 없음"</string>
+    <string name="radioInfo_display_packets">"pkts"</string>
+    <string name="radioInfo_display_bytes">"바이트"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"SD 카드 마운트 해제"</string>
+    <string name="sdcard_format">"SD 카드가 포맷됩니다."</string>
+    <string name="small_font">"작게"</string>
+    <string name="medium_font">"보통"</string>
+    <string name="large_font">"크게"</string>
+    <string name="font_size_save">"확인"</string>
+    <string name="sdcard_setting">"SD 카드"</string>
+    <string name="battery_info_status_label">"배터리 상태:"</string>
+    <string name="battery_info_scale_label">"배터리 충전 상태:"</string>
+    <string name="battery_info_level_label">"배터리 수준:"</string>
+    <string name="battery_info_health_label">"배터리 상태:"</string>
+    <string name="battery_info_technology_label">"배터리 기술:"</string>
+    <string name="battery_info_voltage_label">"배터리 전압:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"배터리 온도:"</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"부팅 후 시간:"</string>
+    <string name="battery_info_awake_battery">"배터리 무중단 가동 시간:"</string>
+    <string name="battery_info_awake_plugged">"충전할 때 무중단 가동 시간:"</string>
+    <string name="battery_info_screen_on">"화면 켜짐:"</string>
+    <string name="battery_info_status_unknown">"알 수 없음"</string>
+    <string name="battery_info_status_charging">"충전 중"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"방전 중"</string>
+    <string name="battery_info_status_not_charging">"충전 안 함"</string>
+    <string name="battery_info_status_full">"충전 완료"</string>
+    <string name="battery_info_health_unknown">"알 수 없음"</string>
+    <string name="battery_info_health_good">"좋음"</string>
+    <string name="battery_info_health_overheat">"과열"</string>
+    <string name="battery_info_health_dead">"방전됨"</string>
+    <string name="battery_info_health_over_voltage">"과전압"</string>
+    <string name="battery_info_health_unspecified_failure">"알 수 없는 오류"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"검색가능"</string>
+    <string name="bluetooth_is_discoverable">"<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g>초 동안 검색가능..."</string>
+    <string name="bluetooth_not_discoverable">"장치를 검색가능하게 설정"</string>
+    <string name="bluetooth_devices">"Bluetooth 장치"</string>
+    <string name="bluetooth_device_name">"장치이름"</string>
+    <string name="bluetooth_name_not_set">"이름을 설정하지 않아 계정 이름 사용"</string>
+    <string name="bluetooth_scan_for_devices">"장치 검색"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> 연결이 끊어집니다."</string>
+    <string name="bluetooth_connected">"연결됨"</string>
+    <string name="bluetooth_disconnected">"연결끊김"</string>
+    <string name="bluetooth_disconnecting">"연결을 끊는 중..."</string>
+    <string name="bluetooth_connecting">"연결 중..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"이 장치와 페어링"</string>
+    <string name="bluetooth_pairing">"페어링 중..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"핸즈프리/헤드셋"</string>
+    <string name="progress_scanning">"검색 중"</string>
+    <string name="bluetooth_notif_ticker">"Bluetooth 페어링 요청"</string>
+    <string name="bluetooth_notif_title">"페어링 요청"</string>
+    <string name="bluetooth_notif_message">"페어링하려면 선택합니다. "</string>
+    <string name="date_and_time">"날짜 및 시간 설정"</string>
+    <string name="date_time_12_hour_sample">"1:00 pm"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"표준시간대 선택"</string>
+    <string name="display_preview_label">"미리보기:"</string>
+    <string name="display_font_size_label">"글꼴 크기:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"<xliff:g id="BROADCAST">broadcast</xliff:g> 보내기"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"<xliff:g id="ACTIVITY">activity</xliff:g> 시작"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"계정:"</string>
+    <string name="proxy_clear_text">"지우기"</string>
+    <string name="proxy_port_label">"포트"</string>
+    <string name="proxy_defaultView_text">"기본값 복원"</string>
+    <string name="proxy_action_text">"저장"</string>
+    <string name="proxy_hostname_label">"호스트 이름"</string>
+    <string name="proxy_error">"주의"</string>
+    <string name="proxy_error_dismiss">"확인"</string>
+    <string name="proxy_error_invalid_host">"입력한 호스트 이름이 잘못되었습니다."</string>
+    <string name="proxy_error_empty_port">"포트 필드를 입력해야 합니다."</string>
+    <string name="proxy_error_empty_host_set_port">"호스트 필드가 비어 있는 경우 포트 필드에 입력하면 안 됩니다."</string>
+    <string name="proxy_error_invalid_port">"입력한 포트가 올바르지 않습니다."</string>
+    <string name="radio_info_signal_location_label">"위치:"</string>
+    <string name="radio_info_neighboring_location_label">"인접한 CID:"</string>
+    <string name="radio_info_data_attempts_label">"데이터 시도:"</string>
+    <string name="radio_info_gprs_service_label">"GPRS 서비스:"</string>
+    <string name="radio_info_roaming_label">"로밍:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"통화 경로 재지정:"</string>
+    <string name="radio_info_ppp_resets_label">"부팅 후 PPP 재설정 횟수:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM 연결끊기:"</string>
+    <string name="radio_info_current_network_label">"현재 네트워크:"</string>
+    <string name="radio_info_data_successes_label">"데이터 성공:"</string>
+    <string name="radio_info_ppp_received_label">"PPP 받음:"</string>
+    <string name="radio_info_gsm_service_label">"GSM 서비스:"</string>
+    <string name="radio_info_signal_strength_label">"신호 강도:"</string>
+    <string name="radio_info_call_status_label">"통화 상태:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP 보냄:"</string>
+    <string name="radio_info_radio_resets_label">"무선 재설정:"</string>
+    <string name="radio_info_message_waiting_label">"메시지 대기 중:"</string>
+    <string name="radio_info_phone_number_label">"전화번호:"</string>
+    <string name="radio_info_band_mode_label">"무선 주파수 대역 선택"</string>
+    <string name="radio_info_network_type_label">"네트워크 유형:"</string>
+    <string name="radio_info_set_perferred_label">"기본 네트워크 유형 설정:"</string>
+    <string name="radio_info_ping_ipaddr">"IP 주소 Ping:"</string>
+    <string name="radio_info_ping_hostname">"호스트이름(www.google.com) Ping:"</string>
+    <string name="radio_info_http_client_test">"HTTP 클라이언트 테스트:"</string>
+    <string name="radio_info_toggle_ciph_label">"암호화 토글"</string>
+    <string name="ping_test_label">"Ping 테스트 실행"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"업데이트"</string>
+    <string name="radio_info_smsc_refresh_label">"새로고침"</string>
+    <string name="radio_info_toggle_dns_check_label">"DNS 확인 토글"</string>
+    <string name="band_mode_title">"GSM/UMTS 대역 설정"</string>
+    <string name="band_mode_loading">"대역 목록 로드 중..."</string>
+    <string name="band_mode_set">"설정"</string>
+    <string name="band_mode_failed">"실패"</string>
+    <string name="band_mode_succeeded">"성공"</string>
+    <string name="sdcard_changes_instructions">"변경사항을 적용하려면 USB 케이블을 다시 연결해야 합니다."</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"USB 대용량 저장소 사용"</string>
+    <string name="sdcard_settings_total_bytes_label">"총 바이트 수:"</string>
+    <string name="sdcard_settings_not_present_status">"SD 카드 없음"</string>
+    <string name="sdcard_settings_available_bytes_label">"사용가능한 바이트:"</string>
+    <string name="sdcard_settings_mass_storage_status">"SD 카드를 대용량 저장장치로 사용 중"</string>
+    <string name="sdcard_settings_unmounted_status">"이제 SD 카드를 안전하게 제거할 수 있습니다."</string>
+    <string name="sdcard_settings_bad_removal_status">"SD 카드를 사용하는 중에 분리되었습니다."</string>
+    <string name="sdcard_settings_used_bytes_label">"사용 바이트 수:"</string>
+    <string name="sdcard_settings_scanning_status">"SD 카드에서 미디어 검색 중..."</string>
+    <string name="sdcard_settings_read_only_status">"SD 카드가 읽기전용으로 마운트됨"</string>
+    <string name="next_label">"다음"</string>
+    <string name="language_picker_title">"로케일"</string>
+    <string name="select_your_language">"언어 선택"</string>
+    <string name="activity_picker_label">"활동 선택"</string>
+    <string name="device_info_label">"장치정보"</string>
+    <string name="battery_info_label">"배터리 정보"</string>
+    <string name="battery_history_label">"배터리 기록"</string>
+    <string name="display_label">"디스플레이"</string>
+    <string name="phone_info_label">"전화기 정보"</string>
+    <string name="sd_card_settings_label">"SD 카드"</string>
+    <string name="proxy_settings_label">"프록시 설정"</string>
+    <string name="cancel">"취소"</string>
+    <string name="settings_label">"설정"</string>
+    <string name="airplane_mode">"에어플레인 모드"</string>
+    <string name="airplane_mode_summary">"모든 무선 연결 사용 안 함"</string>
+    <string name="airplane_mode_turning_on">"무선 연결을 끊는 중..."</string>
+    <string name="airplane_mode_turning_off">"무선 연결 사용 중..."</string>
+    <string name="radio_controls_title">"무선 제어"</string>
+    <string name="radio_controls_summary">"Wi-Fi, Bluetooth, 에어플레인 모드 및 모바일 네트워크 관리"</string>
+    <string name="date_and_time_settings_title">"날짜 및 시간"</string>
+    <string name="date_and_time_settings_summary">"날짜, 시간, 표준시간대 및 형식 설정"</string>
+    <string name="date_time_auto">"자동"</string>
+    <string name="date_time_auto_summaryOn">"네트워크 제공 값 사용"</string>
+    <string name="date_time_auto_summaryOff">"네트워크 제공 값 사용"</string>
+    <string name="date_time_24hour">"24시간 형식 사용"</string>
+    <string name="date_time_set_time">"시간 설정"</string>
+    <string name="date_time_set_timezone">"표준시간대 선택"</string>
+    <string name="date_time_set_date">"날짜 설정"</string>
+    <string name="date_time_date_format">"날짜형식 선택"</string>
+    <string name="zone_list_menu_sort_alphabetically">"사전순으로 정렬"</string>
+    <string name="zone_list_menu_sort_by_timezone">"시간대별 정렬"</string>
+    <string name="security_settings_title">"보안 및 위치"</string>
+    <string name="security_settings_summary">"내 위치, 화면 잠금해제, SIM 카드 잠금 설정"</string>
+    <string name="security_passwords_title">"비밀번호"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Bluetooth 켜기"</string>
+    <string name="bluetooth_settings">"Bluetooth 설정"</string>
+    <string name="bluetooth_settings_title">"Bluetooth 설정"</string>
+    <string name="bluetooth_settings_summary">"연결 관리, 장치이름 및 검색가능 여부 설정"</string>
+    <string name="bluetooth_pin_entry">"Bluetooth 페어링 요청"</string>
+    <string name="bluetooth_device_info">"Bluetooth 장치 정보"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"페어링을 위해 PIN 입력"\n"(0000 또는 1234를 입력하세요.)"</string>
+    <string name="bluetooth_error_title">"주의"</string>
+    <string name="bluetooth_pairing_error_message">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>과(와) 페어링하는 동안 문제가 발생했습니다."</string>
+    <string name="bluetooth_pairing_pin_error_message">"입력한 PIN이 올바르지 않기 때문에 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>과(와) 페어링하는 동안 문제가 발생했습니다."</string>
+    <string name="bluetooth_connecting_error_message">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>에 연결하는 동안 문제가 발생했습니다."</string>
+    <string name="bluetooth_preference_scan_title">"장치 검색"</string>
+    <string name="bluetooth_device_context_connect">"연결"</string>
+    <string name="bluetooth_device_context_disconnect">"연결끊기"</string>
+    <string name="bluetooth_device_context_pair_connect">"페어링 및 연결"</string>
+    <string name="bluetooth_device_context_unpair">"페어링 해제"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"연결끊기 및 페어링 끊기"</string>
+    <string name="bluetooth_device_context_connect_advanced">"옵션..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"연결..."</string>
+    <string name="bluetooth_profile_a2dp">"미디어"</string>
+    <string name="bluetooth_profile_headset">"전화"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"미디어 오디오에 연결됨"</string>
+    <string name="bluetooth_summary_connected_to_headset">"전화기 오디오에 연결됨"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"전화기 및 미디어 오디오에 연결됨"</string>
+    <string name="bluetooth_device_advanced_title">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> 옵션"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"연결"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Bluetooth 장치에 연결"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"프로필"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"미디어 오디오에 연결됨"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"전화기 오디오에 연결됨"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"미디어 오디오에 사용"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"전화기 오디오에 사용"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Wi-Fi 켜기"</string>
+    <string name="wifi_settings">"Wi-Fi 설정"</string>
+    <string name="wifi_settings_category">"Wi-Fi 설정"</string>
+    <string name="wifi_settings_summary">"무선 액세스포인트 설정 및 관리"</string>
+    <string name="forget_network">"저장 안 함"</string>
+    <string name="wifi_status">"상태"</string>
+    <string name="wifi_link_speed">"속도"</string>
+    <string name="wifi_signal_3">"우수"</string>
+    <string name="wifi_signal_2">"좋음"</string>
+    <string name="wifi_signal_1">"양호"</string>
+    <string name="wifi_signal_0">"나쁨"</string>
+    <string name="security">"보안"</string>
+    <string name="wifi_security_open">"개방"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"알 수 없음"</string>
+    <string name="wifi_security_verbose_open">"개방형 네트워크"</string>
+    <string name="wifi_security_verbose_wep">"WEP로 보안"</string>
+    <string name="wifi_security_verbose_wpa">"WPA로 보안"</string>
+    <string name="wifi_security_verbose_wpa2">"WPA2로 보안"</string>
+    <string name="ip_address">"IP 주소"</string>
+    <string name="signal">"신호 강도"</string>
+    <string name="wifi_starting">"켜는 중..."</string>
+    <string name="wifi_stopping">"끄는 중..."</string>
+    <string name="wifi_error">"오류"</string>
+    <string name="error_starting">"Wi-Fi를 시작할 수 없음"</string>
+    <string name="error_stopping">"Wi-Fi를 중지할 수 없음"</string>
+    <string name="error_scanning">"네트워크를 검색할 수 없음"</string>
+    <string name="error_connecting">"네트워크에 연결할 수 없음"</string>
+    <string name="error_saving">"네트워크를 저장할 수 없음"</string>
+    <string name="connect">"연결"</string>
+    <string name="connect_to_blank">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>에 연결"</string>
+    <string name="please_type_passphrase">"무선 비밀번호"</string>
+    <string name="please_type_hex_key">"WEP 16진수 키(0-9, A-F)"</string>
+    <string name="wifi_show_password">"비밀번호를 표시합니다."</string>
+    <string name="scan_wifi">"검색"</string>
+    <string name="summary_not_in_range">"범위 내에 없음"</string>
+    <string name="summary_remembered">"저장됨"</string>
+    <string name="summary_connection_failed">"연결하지 못했습니다. 다시 시도하세요."</string>
+    <string name="wifi_access_points">"Wi-Fi 네트워크"</string>
+    <string name="wifi_type_ssid">"네트워크 SSID"</string>
+    <string name="wifi_security">"보안"</string>
+    <string name="wifi_save_config">"저장"</string>
+    <string name="wifi_password_unchanged">"(변경 안 함)"</string>
+    <string name="wifi_add_other_network">"Wi-Fi 네트워크 추가"</string>
+    <string name="wifi_notify_open_networks">"네트워크 알림"</string>
+    <string name="wifi_notify_open_networks_summary">"개방형 네트워크를 사용할 수 있을 때 알림"</string>
+    <string name="wifi_password_incorrect_error">"입력한 네트워크 비밀번호가 올바르지 않습니다. 다시 입력하세요."</string>
+    <string name="wifi_generic_connection_error">"네트워크에 연결하는 동안 문제가 발생했습니다. 다시 시도하세요."</string>
+    <string name="wifi_menu_advanced">"고급"</string>
+    <string name="wifi_ip_settings_titlebar">"IP 설정"</string>
+    <string name="wifi_ip_settings_menu_save">"저장"</string>
+    <string name="wifi_ip_settings_menu_cancel">"취소"</string>
+    <string name="wifi_ip_settings_invalid_ip">"올바른 IP 주소를 입력하세요."</string>
+    <string name="wifi_use_static_ip">"고정 IP 사용"</string>
+    <string name="wifi_ip_address">"IP 주소"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"게이트웨이"</string>
+    <string name="wifi_netmask">"넷마스크"</string>
+    <string name="wifi_context_menu_connect">"네트워크 연결"</string>
+    <string name="wifi_context_menu_forget">"네트워크 저장 안 함"</string>
+    <string name="wifi_context_menu_change_password">"비밀번호 변경"</string>
+    <string name="wifi_advanced_titlebar">"고급"</string>
+    <string name="wifi_setting_num_channels_title">"규정 도메인"</string>
+    <string name="wifi_setting_num_channels_summary">"사용할 채널 수 설정"</string>
+    <string name="wifi_setting_num_channels_error">"규제 도메인을 설정하는 동안 문제가 발생했습니다."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g>개 채널"</string>
+    <string name="wifi_setting_sleep_policy_title">"Wi-Fi 절전 정책"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Wi-Fi에서 모바일 데이터로 전환될 때 표시"</string>
+    <string name="wifi_setting_sleep_policy_error">"절전 정책을 설정하는 동안 문제가 발행했습니다."</string>
+    <string name="wifi_advanced_mac_address_title">"MAC 주소"</string>
+    <string name="fragment_status_scanning">"검색 중..."</string>
+    <string name="fragment_status_connecting">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>에 연결 중..."</string>
+    <string name="fragment_status_authenticating">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>에서 인증하는 중..."</string>
+    <string name="fragment_status_obtaining_ip">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>에서 IP 주소를 가져오는 중..."</string>
+    <string name="fragment_status_connected">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>에 연결됨"</string>
+    <string name="fragment_status_disconnecting">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>에서 연결을 끊는 중..."</string>
+    <string name="fragment_status_disconnected">"연결끊김"</string>
+    <string name="fragment_status_failed">"실패"</string>
+    <string name="status_scanning">"검색 중..."</string>
+    <string name="status_connecting">"연결 중..."</string>
+    <string name="status_authenticating">"인증하는 중..."</string>
+    <string name="status_obtaining_ip">"주소를 가져오는 중..."</string>
+    <string name="status_connected">"연결됨"</string>
+    <string name="status_disconnecting">"연결을 끊는 중..."</string>
+    <string name="status_disconnected">"연결끊김"</string>
+    <string name="status_failed">"실패"</string>
+    <string name="sound_and_display_settings">"소리 및 디스플레이"</string>
+    <string name="sound_settings">"소리 설정"</string>
+    <string name="sound_and_display_settings_summary">"벨소리, 알림, 화면 밝기 설정"</string>
+    <string name="silent_mode_title">"무음 모드"</string>
+    <string name="silent_mode_summary">"미디어 및 알람 외의 모든 소리가 나지 않습니다."</string>
+    <string name="ringtone_title">"전화 벨소리"</string>
+    <string name="ringtone_summary">"수신전화 기본 벨소리 설정"</string>
+    <string name="ring_volume_title">"벨소리 볼륨"</string>
+    <string name="ring_volume_summary">"수신전화 및 알림에 대한 볼륨 설정"</string>
+    <string name="vibrate_title">"전화올 때 진동"</string>
+    <string name="vibrate_summary">"전화 올 때 진동"</string>
+    <string name="notification_sound_title">"알림 벨소리"</string>
+    <string name="notification_sound_summary">"기본 알림 벨소리 설정"</string>
+    <string name="incoming_call_volume_title">"수신전화 볼륨"</string>
+    <string name="notification_volume_title">"알림 볼륨"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"알림을 위해 수신전화 볼륨 사용"</string>
+    <string name="notification_sound_dialog_title">"알림 벨소리 선택"</string>
+    <string name="media_volume_title">"미디어 볼륨"</string>
+    <string name="media_volume_summary">"음악 및 동영상에 대한 볼륨 설정"</string>
+    <string name="dtmf_tone_enable_title">"터치음 듣기"</string>
+    <string name="dtmf_tone_enable_summary_on">"다이얼패드를 사용할 때 신호음 재생"</string>
+    <string name="dtmf_tone_enable_summary_off">"다이얼패드를 사용할 때 신호음 재생"</string>
+    <string name="sound_effects_enable_title">"선택항목 듣기"</string>
+    <string name="sound_effects_enable_summary_on">"화면 선택 시 소리 재생"</string>
+    <string name="sound_effects_enable_summary_off">"화면 선택 시 소리 재생"</string>
+    <string name="play_media_notification_sounds_enable_title">"SD 카드 알림"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"SD 카드 알림 소리 사용 중지"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"SD 카드 알림 소리 사용"</string>
+    <string name="sync_settings">"데이터 동기화"</string>
+    <string name="sync_settings_summary">"동기화할 응용프로그램 선택"</string>
+    <string name="display_settings">"디스플레이 설정"</string>
+    <string name="animations_title">"애니메이션"</string>
+    <string name="animations_summary_on">"창을 열거나 닫을 때 애니메이션 표시"</string>
+    <string name="animations_summary_off">"창을 열거나 닫을 때 애니메이션 표시"</string>
+    <string name="brightness">"밝기"</string>
+    <string name="brightness_summary">"화면 밝기 조정"</string>
+    <string name="screen_timeout">"화면 시간제한"</string>
+    <string name="screen_timeout_summary">"화면 자동 꺼짐 시간 간격 조정"</string>
+    <string name="sim_lock_settings">"SIM 카드 잠금 설정"</string>
+    <string name="sim_lock_settings_category">"SIM 카드 잠금 설정"</string>
+    <string name="sim_lock_settings_title">"SIM 카드 잠금"</string>
+    <string name="sim_pin_toggle">"SIM 카드 잠금"</string>
+    <string name="sim_lock_on">"전화기를 사용하려면 PIN 필요"</string>
+    <string name="sim_lock_off">"전화기를 사용하려면 PIN 필요"</string>
+    <string name="sim_pin_change">"SIM PIN 변경"</string>
+    <string name="sim_enter_pin">"SIM PIN"</string>
+    <string name="sim_enable_sim_lock">"SIM 카드 잠금"</string>
+    <string name="sim_disable_sim_lock">"SIM 카드 잠금해제"</string>
+    <string name="sim_enter_old">"이전 SIM PIN"</string>
+    <string name="sim_enter_new">"새 SIM PIN"</string>
+    <string name="sim_reenter_new">"새 PIN 다시 입력"</string>
+    <string name="sim_change_pin">"SIM PIN"</string>
+    <string name="sim_bad_pin">"PIN이 잘못되었습니다."</string>
+    <string name="sim_pins_dont_match">"PIN이 일치하지 않습니다."</string>
+    <string name="sim_change_failed">"PIN을 변경할 수 없습니다."\n"PIN이 잘못된 것 같습니다."</string>
+    <string name="sim_change_succeeded">"SIM PIN 변경됨"</string>
+    <string name="sim_lock_failed">"SIM 카드 잠금 상태를 변경할 수 없습니다."\n"PIN이 잘못된 것 같습니다."</string>
+    <string name="sim_enter_ok">"확인"</string>
+    <string name="sim_enter_cancel">"취소"</string>
+    <string name="device_info_settings">"전화기 상태"</string>
+    <string name="system_update_settings_list_item_title">"시스템 업데이트"</string>
+    <string name="system_update_settings_list_item_summary">"시스템 업데이트 확인"</string>
+    <string name="firmware_version">"펌웨어 버전"</string>
+    <string name="model_number">"모델 번호"</string>
+    <string name="baseband_version">"기저대역 버전"</string>
+    <string name="kernel_version">"커널 버전"</string>
+    <string name="build_number">"빌드 번호"</string>
+    <string name="device_info_not_available">"표시할 수 없음"</string>
+    <string name="device_status_activity_title">"상태"</string>
+    <string name="device_status">"상태"</string>
+    <string name="device_status_summary">"IMEI, 전화번호, 신호 등"</string>
+    <string name="storage_settings_title">"SD 카드 및 전화기 저장공간"</string>
+    <string name="storage_settings_summary">"SD 카드 마운트 해제, 사용가능한 저장공간 보기"</string>
+    <string name="status_number">"전화번호"</string>
+    <string name="status_network_type">"모바일 네트워크 유형"</string>
+    <string name="status_data_state">"모바일 네트워크 상태"</string>
+    <string name="status_service_state">"서비스 상태"</string>
+    <string name="status_signal_strength">"신호 강도"</string>
+    <string name="status_roaming">"로밍"</string>
+    <string name="status_operator">"네트워크"</string>
+    <string name="status_wifi_mac_address">"Wi-Fi MAC 주소"</string>
+    <string name="status_bt_address">"Bluetooth 주소"</string>
+    <string name="status_unavailable">"사용할 수 없음"</string>
+    <string name="status_network_traffic_stats">"네트워크 사용량"</string>
+    <string name="status_network_traffic_summary">"전송: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g> 수신:<xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"가동 시간"</string>
+    <string name="status_awake_time">"무중단 가동 시간"</string>
+    <string name="internal_memory">"전화기 내부 저장공간"</string>
+    <string name="sd_memory">"SD 카드"</string>
+    <string name="memory_available">"사용가능한 저장공간"</string>
+    <string name="memory_size">"총 공간"</string>
+    <string name="sd_eject">"SD 카드 마운트 해제"</string>
+    <string name="sd_eject_summary">"안전 제거를 위해 SD 카드 마운트 해제"</string>
+    <string name="sd_format">"SD 카드 포맷"</string>
+    <string name="sd_format_summary">"SD 카드 포맷(지우기)"</string>
+    <string name="sd_unavailable">"사용할 수 없음"</string>
+    <string name="read_only">" (읽기전용)"</string>
+    <string name="battery_status_title">"배터리 상태"</string>
+    <string name="battery_level_title">"배터리 수준"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"액세스포인트 편집"</string>
+    <string name="apn_not_set">"&lt;설정 안 함&gt;"</string>
+    <string name="apn_name">"이름"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"프록시"</string>
+    <string name="apn_http_port">"포트"</string>
+    <string name="apn_user">"사용자 이름"</string>
+    <string name="apn_password">"비밀번호"</string>
+    <string name="apn_server">"서버"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"MMS 프록시"</string>
+    <string name="apn_mms_port">"MMS 포트"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APN 유형"</string>
+    <string name="menu_delete">"APN 삭제"</string>
+    <string name="menu_new">"새 APN"</string>
+    <string name="menu_save">"저장"</string>
+    <string name="menu_cancel">"삭제"</string>
+    <string name="error_title">"주의"</string>
+    <string name="error_name_empty">"이름 필드는 비워둘 수 없습니다."</string>
+    <string name="error_apn_empty">"APN을 비워둘 수 없습니다."</string>
+    <string name="error_mcc_not3">"MCC 필드는 3자리 숫자여야 합니다."</string>
+    <string name="error_mnc_not23">"MNC 필드는 2~3자리 숫자여야 합니다."</string>
+    <string name="master_clear_title">"공장 기본값 데이터 재설정"</string>
+    <string name="master_clear_summary">"전화기의 모든 데이터 지우기"</string>
+    <string name="master_clear_desc">"이 작업을 수행하면 전화기의 모든 데이터 및 다운로드한 응용프로그램이 지워지고 출고시 초기 상태로 재설정됩니다"</string>
+    <string name="master_clear_button_text">"전화기 재설정"</string>
+    <string name="master_clear_final_desc">"모든 데이터 및 응용프로그램을 지우고 전화기를 재설정하시겠습니까? 수행한 후에는 작업을 취소할 수 없습니다."</string>
+    <string name="master_clear_final_button_text">"모두 지우기"</string>
+    <string name="master_clear_gesture_prompt">"잠금해제 패턴 그리기"</string>
+    <string name="master_clear_gesture_explanation">"전화기 재설정을 확인하려면 잠금해제 패턴을 그려야 합니다."</string>
+    <string name="master_clear_failed">"시스템 지우기 서비스를 사용할 수 없어 재설정을 수행하지 못했습니다."</string>
+    <string name="media_format_title">"SD 카드를 포맷합니다."</string>
+    <string name="media_format_summary">"SD 카드의 모든 데이터 지우기"</string>
+    <string name="media_format_desc">"이 작업을 수행하면 전화기의 SD 카드에 저장된 모든 데이터를 잃게 됩니다."</string>
+    <string name="media_format_button_text">"SD 카드 포맷"</string>
+    <string name="media_format_final_desc">"SD 카드를 포맷하여 모든 미디어를 지우시겠습니까? 수행한 작업은 취소할 수 없습니다."</string>
+    <string name="media_format_final_button_text">"모두 지우기"</string>
+    <string name="media_format_gesture_prompt">"잠금해제 패턴을 그리세요."</string>
+    <string name="media_format_gesture_explanation">"SD 카드 포맷을 확인하려면 잠금해제 패턴을 그려야 합니다."</string>
+    <string name="call_settings_title">"통화 설정"</string>
+    <string name="call_settings_summary">"음성메일, 착신전환, 통화중 대기, 발신자 번호 설정"</string>
+    <string name="network_settings_title">"모바일 네트워크"</string>
+    <string name="network_settings_summary">"로밍, 네트워크, APN에 대한 옵션 설정"</string>
+    <string name="location_title">"내 위치 소스"</string>
+    <string name="location_network_based">"무선 네트워크 사용"</string>
+    <string name="location_networks_disabled">"무선 네트워크를 사용하는 응용프로그램(예: 지도)에서 위치 보기"</string>
+    <string name="location_neighborhood_level">"Wi-Fi 및/또는 모바일 네트워크에서 측정된 위치"</string>
+    <string name="location_gps">"GPS 위성 사용"</string>
+    <string name="location_street_level">"도로 수준으로 정확하게 탐색(배터리를 절약하려면 선택 취소)"</string>
+    <string name="location_gps_disabled">"도로 수준으로 탐색(항공사진이 더해져 배터리 추가로 필요)"</string>
+    <string name="about_settings">"전화기 정보"</string>
+    <string name="about_settings_summary">"법률 정보, 전화기 상태, 소프트웨어 버전 보기"</string>
+    <string name="legal_information">"법률정보"</string>
+    <string name="contributors_title">"조력자"</string>
+    <string name="copyright_title">"저작권"</string>
+    <string name="license_title">"라이센스"</string>
+    <string name="terms_title">"약관"</string>
+    <string name="settings_license_activity_title">"오픈소스 라이센스"</string>
+    <string name="settings_license_activity_unavailable">"라이센스를 로드하는 동안 문제가 발생했습니다."</string>
+    <string name="settings_license_activity_loading">"로드 중..."</string>
+    <string name="lock_settings_title">"화면 잠금해제 패턴"</string>
+    <string name="lockpattern_change_lock_pattern_label">"잠금해제 패턴 변경"</string>
+    <string name="lockpattern_need_to_unlock">"저장된 패턴 확인"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"죄송합니다. 다시 시도하세요."</string>
+    <string name="lockpattern_recording_intro_header">"잠금해제 패턴 그리기"</string>
+    <string name="lockpattern_recording_intro_footer">"도움말을 보려면 메뉴를 누르세요."</string>
+    <string name="lockpattern_recording_inprogress">"완료되면 손가락을 뗍니다."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"<xliff:g id="NUMBER">%d</xliff:g>개 이상의 점을 연결합니다. 다시 시도하세요."</string>
+    <string name="lockpattern_pattern_entered_header">"패턴이 기록되었습니다."</string>
+    <string name="lockpattern_need_to_confirm">"확인을 위해 패턴 다시 그리기:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"새 잠금해제 패턴:"</string>
+    <string name="lockpattern_confirm_button_text">"확인"</string>
+    <string name="lockpattern_restart_button_text">"다시 그리기"</string>
+    <string name="lockpattern_retry_button_text">"다시 시도"</string>
+    <string name="lockpattern_continue_button_text">"계속"</string>
+    <string name="lockpattern_settings_title">"잠금해제 패턴"</string>
+    <string name="lockpattern_settings_enable_title">"패턴 필요"</string>
+    <string name="lockpattern_settings_enable_summary">"화면 잠금을 해제하려면 패턴을 그려야 함"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"패턴 표시"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"촉각 피드백 사용"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"잠금해제 패턴 설정"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"잠금해제 패턴 변경"</string>
+    <string name="lockpattern_settings_help_how_to_record">"잠금해제 패턴을 그리는 방법"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"잘못된 시도 횟수가 너무 많습니다."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"<xliff:g id="NUMBER">%d</xliff:g>초 후에 다시 시도하세요."</string>
+    <string name="skip_button_label">"취소"</string>
+    <string name="next_button_label">"다음"</string>
+    <string name="lock_title">"전화기 보안 설정"</string>
+    <string name="lock_intro_message"><font size="17">"개인 화면 잠금해제 패턴을 만들어 전화기 무단 사용을 방지합니다. "\n<font height="17">\n</font><b>"1"</b>"  다음 화면에서 패턴을 예를 들어 그리는 동안 지켜봅니다. "\n<font height="17">\n</font><b>"2"</b>"  준비가 되면 사용자만의 개인 잠금해제 패턴을 그립니다. 여러 개의 패턴을 시험해 볼 수 있지만 4개 이상의 점을 연결해야 합니다. "\n<font height="17">\n</font><b>"3"</b>"  패턴을 다시 그려 확인합니다. "\n<font height="17">\n</font><b>"패턴 그리기를 시작하려면 \'다음\'을 선택하세요"</b>". "\n<font height="3">\n</font>"전화기 보호 화면을 설정하지 않으려면 \'취소\'를 선택하세요."</font></string>
+    <string name="lock_example_title">"패턴 예"</string>
+    <string name="lock_example_message">"4개 이상의 점을 연결합니다."\n\n"고유한 패턴을 그릴 준비가 되면 \'다음\'을 선택합니다."</string>
+    <string name="manageapplications_settings_title">"응용프로그램 관리"</string>
+    <string name="manageapplications_settings_summary">"설치된 응용프로그램 관리 및 제거"</string>
+    <string name="applications_settings">"응용프로그램"</string>
+    <string name="applications_settings_summary">"응용프로그램 관리, 빠른실행 바로가기 설정"</string>
+    <string name="applications_settings_header">"응용프로그램 설정"</string>
+    <string name="install_applications">"알 수 없는 소스"</string>
+    <string name="install_unknown_applications">"시판되지 않은 응용프로그램 설치 허용"</string>
+    <string name="install_all_warning">"전화기 및 개인 정보는 출처를 알 수 없는 응용프로그램의 공격에 더욱 취약합니다. 사용자는 이러한 응용프로그램을 사용하여 발생할 수 있는 전화기 손상이나 데이터 손실에 대해 사용자가 단독으로 책임이 있음을 동의합니다."</string>
+    <string name="application_info_label">"응용프로그램 정보"</string>
+    <string name="storage_label">"저장공간"</string>
+    <string name="auto_launch_label">"기본적으로 시작"</string>
+    <string name="permissions_label">"권한"</string>
+    <string name="cache_header_label">"캐시"</string>
+    <string name="clear_cache_btn_text">"캐시 지우기"</string>
+    <string name="cache_size_label">"캐시"</string>
+    <string name="controls_label">"제어"</string>
+    <string name="force_stop">"강제 종료"</string>
+    <string name="total_size_label">"총 용량"</string>
+    <string name="application_size_label">"응용프로그램"</string>
+    <string name="data_size_label">"데이터"</string>
+    <string name="uninstall_text">"제거"</string>
+    <string name="clear_user_data_text">"데이터 지우기"</string>
+    <string name="auto_launch_enable_text">"이 응용프로그램을 해당 작업에 대한 기본 프로그램으로 실행하도록 선택했습니다."</string>
+    <string name="auto_launch_disable_text">"기본값이 설정되지 않았습니다."</string>
+    <string name="clear_activities">"기본 작업 지우기"</string>
+    <string name="unknown">"알 수 없음"</string>
+    <string name="sort_order_alpha">"정렬"</string>
+    <string name="sort_order_size">"크기별 정렬"</string>
+    <string name="manage_space_text">"공간 관리"</string>
+    <string name="filter">"필터"</string>
+    <string name="filter_dlg_title">"필터 옵션 선택"</string>
+    <string name="filter_apps_all">"모두"</string>
+    <string name="filter_apps_third_party">"제3자"</string>
+    <string name="filter_apps_running">"실행 중인 패키지"</string>
+    <string name="loading">"로드 중..."</string>
+    <string name="recompute_size">"크기 다시 계산 중..."</string>
+    <string name="clear_data_dlg_title">"삭제"</string>
+    <string name="clear_data_dlg_text">"응용프로그램에 저장한 모든 정보가 영구적으로 삭제됩니다."</string>
+    <string name="dlg_ok">"확인"</string>
+    <string name="dlg_cancel">"취소"</string>
+    <string name="app_not_found_dlg_title">"응용프로그램 없음"</string>
+    <string name="app_not_found_dlg_text">"설치된 응용프로그램 목록에서 응용프로그램을 찾을 수 없습니다."</string>
+    <string name="clear_data_failed">"응용프로그램 데이터를 지울 수 없습니다."</string>
+    <string name="security_settings_desc">"이 응용프로그램은 전화기의 다음 항목에 액세스할 수 있습니다."</string>
+    <string name="computing_size">"계산 중..."</string>
+    <string name="invalid_size_value">"패키지 크기를 계산할 수 없습니다."</string>
+    <string name="empty_list_msg">"타사 응용프로그램이 설치되어 있지 않습니다."</string>
+    <string name="language_settings">"로케일 및 텍스트"</string>
+    <string name="language_settings_summary">"로케일(언어 및 지역), 텍스트 입력 및 자동 수정 옵션 설정"</string>
+    <string name="language_category">"로케일 설정"</string>
+    <string name="text_category">"텍스트 설정"</string>
+    <string name="phone_language">"로케일 선택"</string>
+    <string name="phone_language_summary">"언어 및 지역 선택"</string>
+    <string name="auto_replace">"자동 바꾸기"</string>
+    <string name="auto_replace_summary">"오타 교정"</string>
+    <string name="auto_caps">"자동 대문자 입력"</string>
+    <string name="auto_caps_summary">"문장의 첫 글자를 대문자로"</string>
+    <string name="auto_punctuate">"자동 구두점 입력"</string>
+    <string name="hardkeyboard_category">"물리적 키보드 설정"</string>
+    <string name="auto_punctuate_summary">"스페이스바를 두 번 눌러 \'.\' 삽입"</string>
+    <string name="show_password">"비밀번호 표시"</string>
+    <string name="show_password_summary">"입력 시 비밀번호 표시"</string>
+    <string name="user_dict_settings_titlebar">"사용자 사전"</string>
+    <string name="user_dict_settings_title">"사용자 사전"</string>
+    <string name="user_dict_settings_summary">"사용자 사전에서 단어 추가 및 삭제"</string>
+    <string name="user_dict_settings_add_menu_title">"추가"</string>
+    <string name="user_dict_settings_add_dialog_title">"사전에 추가"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"편집"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"삭제"</string>
+    <string name="user_dict_settings_empty_text">"사용자 사전에 단어가 없습니다. 메뉴를 통해 단어를 추가할 수 있습니다."</string>
+    <string name="testing">"테스트 중"</string>
+    <string name="testing_phone_info">"전화기 정보"</string>
+    <string name="testing_battery_info">"배터리 정보"</string>
+    <string name="testing_battery_history">"배터리 기록"</string>
+    <string name="quick_launch_title">"빠른실행"</string>
+    <string name="quick_launch_summary">"응용프로그램을 실행하는 바로가기키 설정"</string>
+    <string name="quick_launch_assign_application">"응용프로그램 할당"</string>
+    <string name="quick_launch_no_shortcut">"바로가기 없음"</string>
+    <string name="quick_launch_shortcut">"검색 + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"지우기"</string>
+    <string name="quick_launch_clear_dialog_message">"<xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> 바로가기(<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>)가 지워집니다."</string>
+    <string name="quick_launch_clear_ok_button">"확인"</string>
+    <string name="quick_launch_clear_cancel_button">"취소"</string>
+    <string name="quick_launch_display_mode_applications">"응용프로그램"</string>
+    <string name="quick_launch_display_mode_shortcuts">"바로가기"</string>
+    <string name="input_methods_settings_title">"텍스트 입력"</string>
+    <string name="input_methods_settings_summary">"텍스트 입력 옵션 관리"</string>
+    <string name="input_methods_settings_label_format">"%s 설정"</string>
+    <string name="development_settings_title">"개발"</string>
+    <string name="development_settings_summary">"응용프로그램 개발 옵션 설정"</string>
+    <string name="enable_adb">"USB 디버깅"</string>
+    <string name="enable_adb_summary">"USB가 연결된 경우 디버그 모드"</string>
+    <string name="keep_screen_on">"켜진 상태로 유지"</string>
+    <string name="keep_screen_on_summary">"충전하는 동안 화면이 꺼지지 않음"</string>
+    <string name="allow_mock_location">"모의 위치 허용"</string>
+    <string name="allow_mock_location_summary">"모의 위치 허용"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"UID %d의 세부정보"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 네트워크 사용 세부정보"</string>
+    <string name="battery_history_bytes_received">"받은 바이트 수: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"보낸 바이트 수: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"총 바이트 수: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 CPU 사용 세부정보"</string>
+    <string name="battery_history_user_time">"사용자 시간:"</string>
+    <string name="battery_history_system_time">"시스템 시간:"</string>
+    <string name="battery_history_total_time">"시간 합계:"</string>
+    <string name="battery_history_starts">"시작: <xliff:g id="STARTS">%1$d</xliff:g>번"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g>일, <xliff:g id="HOURS">%2$d</xliff:g>시간, <xliff:g id="MINUTES">%3$d</xliff:g>분, <xliff:g id="SECONDS">%4$d</xliff:g>초"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g>시간, <xliff:g id="MINUTES">%2$d</xliff:g>분, <xliff:g id="SECONDS">%3$d</xliff:g>초"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g>분, <xliff:g id="SECONDS">%2$d</xliff:g>초"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g>초"</string>
+    <string name="battery_history_packages_sharing_this_uid">"이 UID를 공유하는 패키지"</string>
+    <string name="battery_history_no_data">"배터리 사용 데이터가 없습니다."</string>
+    <string name="battery_history_sensor">"센서:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"패키지가 사용한 센서:"</string>
+    <string name="battery_history_sensor_usage">"<xliff:g id="PACKAGE">%2$s</xliff:g>에서 <xliff:g id="COUNT">%1$d</xliff:g>번 사용"</string>
+    <string name="battery_history_sensor_usage_multi">"다음 중 하나가 <xliff:g id="COUNT">%1$d</xliff:g>번 사용:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"화면을 켠 상태에서 소비한 시간:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"배터리 켜짐 시간:"</string>
+    <string name="battery_history_screen_on_plugged">"연결됨:"</string>
+    <string name="usage_stats_label">"사용 통계"</string>
+    <string name="testing_usage_stats">"사용 통계"</string>
+    <string name="display_order_text">"정렬 기준:"</string>
+    <string name="app_name_label">"응용프로그램"</string>
+    <string name="launch_count_label">"계수"</string>
+    <string name="usage_time_label">"사용 시간"</string>
+</resources>
diff --git a/res/values-nb-nokeys/strings.xml b/res/values-nb-nokeys/strings.xml
new file mode 100644
index 0000000..0e080b4
--- /dev/null
+++ b/res/values-nb-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Installerte applikasjoner, hurtigtaster"</string>
+</resources>
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
new file mode 100644
index 0000000..e219452
--- /dev/null
+++ b/res/values-nb/arrays.xml
@@ -0,0 +1,68 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Amerika"</item>
+    <item>"Europa"</item>
+    <item>"Afrika"</item>
+    <item>"Asia"</item>
+    <item>"Australia"</item>
+    <item>"Stillehavet"</item>
+    <item>"Alle"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 sekunder"</item>
+    <item>"30 sekunder"</item>
+    <item>"1 minutt"</item>
+    <item>"2 minutter"</item>
+    <item>"10 minutter"</item>
+    <item>"Aldri slå av"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automatisk"</item>
+    <item>"Ingen"</item>
+    <item>"WEP"</item>
+    <item>"WPA personlig"</item>
+    <item>"WPA2 personlig"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Ingen"</item>
+    <item>"WEP"</item>
+    <item>"WPA personlig"</item>
+    <item>"WPA2 personlig"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automatisk"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP heksadesimal"</item>
+  </string-array>
+    <!-- no translation found for wifi_sleep_policy_entries:0 (3804733751095821976) -->
+    <!-- no translation found for wifi_sleep_policy_entries:1 (1549288661423279207) -->
+    <!-- no translation found for wifi_sleep_policy_entries:2 (1986753720941888596) -->
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+    <!-- no translation found for usage_stats_display_order_types:0 (9077371706468756228) -->
+    <!-- no translation found for usage_stats_display_order_types:1 (1908750532762193304) -->
+    <!-- no translation found for usage_stats_display_order_types:2 (1213951670006606353) -->
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 0000000..f111758
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,670 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Ukjent"</string>
+    <string name="turn_on_radio">"Turn on radio"</string>
+    <string name="turn_off_radio">"Turn off radio"</string>
+    <string name="turn_on_qxdm">"Enable QXDM SD log"</string>
+    <string name="turn_off_qxdm">"Disable QXDM SD log"</string>
+    <string name="radioInfo_menu_viewADN">"View SIM address book"</string>
+    <string name="radioInfo_menu_viewFDN">"View Fixed Dialing Numbers"</string>
+    <string name="radioInfo_menu_viewSDN">"View Service Dialing Numbers"</string>
+    <string name="radioInfo_menu_getPDP">"Get PDP list"</string>
+    <string name="radioInfo_menu_enableData">"Enable data connection"</string>
+    <string name="radioInfo_menu_disableData">"Disable data connection"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Enable data on boot"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Disable data on boot"</string>
+    <string name="radioInfo_service_in">"In service"</string>
+    <string name="radioInfo_service_out">"Out of service"</string>
+    <string name="radioInfo_service_emergency">"Emergency calls only"</string>
+    <string name="radioInfo_service_off">"Radio off"</string>
+    <string name="radioInfo_roaming_in">"Roaming"</string>
+    <string name="radioInfo_roaming_not">"Not roaming"</string>
+    <string name="radioInfo_phone_idle">"Idle"</string>
+    <string name="radioInfo_phone_ringing">"Ringing"</string>
+    <string name="radioInfo_phone_offhook">"Call in progress"</string>
+    <string name="radioInfo_data_disconnected">"Disconnected"</string>
+    <string name="radioInfo_data_connecting">"Connecting"</string>
+    <string name="radioInfo_data_connected">"Connected"</string>
+    <string name="radioInfo_data_suspended">"Suspended"</string>
+    <string name="radioInfo_unknown">"unknown"</string>
+    <string name="radioInfo_display_packets">"pkts"</string>
+    <string name="radioInfo_display_bytes">"bytes"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Unmount SD card"</string>
+    <string name="sdcard_format">"Format SD card"</string>
+    <string name="small_font">"Liten"</string>
+    <string name="medium_font">"Middels"</string>
+    <string name="large_font">"Stor"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"Minnekort"</string>
+    <string name="battery_info_status_label">"Battery status:"</string>
+    <string name="battery_info_scale_label">"Battery scale:"</string>
+    <string name="battery_info_level_label">"Battery level:"</string>
+    <string name="battery_info_health_label">"Battery health:"</string>
+    <string name="battery_info_technology_label">"Battery technology:"</string>
+    <string name="battery_info_voltage_label">"Battery voltage:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Battery temperature:"</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"Time since boot:"</string>
+    <string name="battery_info_awake_battery">"Awake time on battery:"</string>
+    <string name="battery_info_awake_plugged">"Awake time when charging:"</string>
+    <string name="battery_info_screen_on">"Screen ON time:"</string>
+    <string name="battery_info_status_unknown">"Unknown"</string>
+    <string name="battery_info_status_charging">"Charging"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Discharging"</string>
+    <string name="battery_info_status_not_charging">"Not charging"</string>
+    <string name="battery_info_status_full">"Full"</string>
+    <string name="battery_info_health_unknown">"Unknown"</string>
+    <string name="battery_info_health_good">"Good"</string>
+    <string name="battery_info_health_overheat">"Overheat"</string>
+    <string name="battery_info_health_dead">"Dead"</string>
+    <string name="battery_info_health_over_voltage">"Over voltage"</string>
+    <string name="battery_info_health_unspecified_failure">"Unknown error"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Synlig"</string>
+    <string name="bluetooth_is_discoverable">"Synlig i <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> sekunder…"</string>
+    <string name="bluetooth_not_discoverable">"Gjør enheten synlig"</string>
+    <string name="bluetooth_devices">"Bluetooth-enheter"</string>
+    <string name="bluetooth_device_name">"Enhetsnavn"</string>
+    <string name="bluetooth_name_not_set">"Ikke noe navn er valgt, bruker kontonavn"</string>
+    <string name="bluetooth_scan_for_devices">"Søk etter enheter"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> vil bli koblet fra."</string>
+    <string name="bluetooth_connected">"Tilkoblet"</string>
+    <string name="bluetooth_disconnected">"Frakoblet"</string>
+    <string name="bluetooth_disconnecting">"Kobler fra…"</string>
+    <string name="bluetooth_connecting">"Kobler til…"</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Par med denne enheten"</string>
+    <string name="bluetooth_pairing">"Parer…"</string>
+    <string name="bluetooth_paired">"Paret"</string>
+    <string name="bluetooth_device">"handsfree/håndsett"</string>
+    <string name="progress_scanning">"Søker"</string>
+    <string name="bluetooth_notif_ticker">"Paringsforespørsel for Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Paringsforespørsel"</string>
+    <string name="bluetooth_notif_message">"Velg å pare med "</string>
+    <string name="date_and_time">"Innstillinger for dato og tid"</string>
+    <string name="date_time_12_hour_sample">"1:00 pm"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Velg tidssone"</string>
+    <string name="display_preview_label">"Forhåndsvisning:"</string>
+    <string name="display_font_size_label">"Skriftstørrelse:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Send <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"Start <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Account:"</string>
+    <string name="proxy_clear_text">"Tøm"</string>
+    <string name="proxy_port_label">"Port"</string>
+    <string name="proxy_defaultView_text">"Gjenopprett standardinnstillinger"</string>
+    <string name="proxy_action_text">"Lagre"</string>
+    <string name="proxy_hostname_label">"Vertsnavn"</string>
+    <string name="proxy_error">"NB"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"Vertsnavnet er ikke gyldig."</string>
+    <string name="proxy_error_empty_port">"Du må skrive inn et portnummer."</string>
+    <string name="proxy_error_empty_host_set_port">"Feltet for portnummer må være tomt om feltet for vertsnavn er tomt."</string>
+    <string name="proxy_error_invalid_port">"Portnummeret er ikke gyldig."</string>
+    <string name="radio_info_signal_location_label">"Location:"</string>
+    <string name="radio_info_neighboring_location_label">"Neighboring CID:"</string>
+    <string name="radio_info_data_attempts_label">"Data attempts:"</string>
+    <string name="radio_info_gprs_service_label">"GPRS service:"</string>
+    <string name="radio_info_roaming_label">"Roaming:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Call redirect:"</string>
+    <string name="radio_info_ppp_resets_label">"Number of PPP reset since boot:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM disconnects:"</string>
+    <string name="radio_info_current_network_label">"Current network:"</string>
+    <string name="radio_info_data_successes_label">"Data successes:"</string>
+    <string name="radio_info_ppp_received_label">"PPP received:"</string>
+    <string name="radio_info_gsm_service_label">"GSM service:"</string>
+    <string name="radio_info_signal_strength_label">"Signal strength:"</string>
+    <string name="radio_info_call_status_label">"Call status:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP sent:"</string>
+    <string name="radio_info_radio_resets_label">"Radio resets:"</string>
+    <string name="radio_info_message_waiting_label">"Message waiting:"</string>
+    <string name="radio_info_phone_number_label">"Phone number:"</string>
+    <string name="radio_info_band_mode_label">"Select radio band"</string>
+    <string name="radio_info_network_type_label">"Network type:"</string>
+    <string name="radio_info_set_perferred_label">"Set preferred network type:"</string>
+    <string name="radio_info_ping_ipaddr">"Ping IpAddr:"</string>
+    <string name="radio_info_ping_hostname">"Ping Hostname(www.google.com):"</string>
+    <string name="radio_info_http_client_test">"HTTP Client test:"</string>
+    <string name="radio_info_toggle_ciph_label">"Toggle ciphering"</string>
+    <string name="ping_test_label">"Run ping test"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Update"</string>
+    <string name="radio_info_smsc_refresh_label">"Refresh"</string>
+    <string name="radio_info_toggle_dns_check_label">"Toggle DNS check"</string>
+    <string name="band_mode_title">"Velg GSM/UMTS-bånd"</string>
+    <string name="band_mode_loading">"Henter båndliste…"</string>
+    <string name="band_mode_set">"Velg"</string>
+    <string name="band_mode_failed">"Mislykket"</string>
+    <string name="band_mode_succeeded">"Vellykket"</string>
+    <string name="sdcard_changes_instructions">"Endringene vil tre i kraft når USB-kabelen kobles til på nytt"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Skru på USB-masselagring"</string>
+    <string name="sdcard_settings_total_bytes_label">"Totalt antall byte:"</string>
+    <string name="sdcard_settings_not_present_status">"Minnekort mangler"</string>
+    <string name="sdcard_settings_available_bytes_label">"Tilgjengelig antall byte:"</string>
+    <string name="sdcard_settings_mass_storage_status">"Minnekortet blir brukt som en masselagringsenhet"</string>
+    <string name="sdcard_settings_unmounted_status">"Det er trygt å fjerne minnekortet"</string>
+    <string name="sdcard_settings_bad_removal_status">"Minnekortet ble fjernet mens det fortsatt var i bruk!"</string>
+    <string name="sdcard_settings_used_bytes_label">"Brukt antall byte:"</string>
+    <string name="sdcard_settings_scanning_status">"Leter etter media på minnekortet…"</string>
+    <string name="sdcard_settings_read_only_status">"Minnekortet ble montert skrivebeskyttet"</string>
+    <string name="next_label">"Neste"</string>
+    <string name="language_picker_title">"Regionsinnstillinger"</string>
+    <string name="select_your_language">"Språk"</string>
+    <string name="activity_picker_label">"Velg aktivitet"</string>
+    <string name="device_info_label">"Enhetsinformasjon"</string>
+    <string name="battery_info_label">"Batteriinformasjon"</string>
+    <string name="battery_history_label">"Batterihistorikk"</string>
+    <string name="display_label">"Skjerm"</string>
+    <string name="phone_info_label">"Telefoninformasjon"</string>
+    <string name="sd_card_settings_label">"Minnekort"</string>
+    <string name="proxy_settings_label">"Mellomtjener-innstillinger"</string>
+    <string name="cancel">"Avbryt"</string>
+    <string name="settings_label">"Innstillinger"</string>
+    <string name="airplane_mode">"Flymodus"</string>
+    <string name="airplane_mode_summary">"Slå av alle trådløse tilkoblinger"</string>
+    <string name="airplane_mode_turning_on">"Slår av trådløse tilkoblinger…"</string>
+    <string name="airplane_mode_turning_off">"Slår på trådløse tilkoblinger…"</string>
+    <string name="radio_controls_title">"Trådløse nett"</string>
+    <string name="radio_controls_summary">"Trådløse nett, Bluetooth, flymodus mobile nettverk"</string>
+    <string name="date_and_time_settings_title">"Dato og tid"</string>
+    <string name="date_and_time_settings_summary">"Sett dato, tid, tidssone og formater"</string>
+    <string name="date_time_auto">"Automatisk"</string>
+    <string name="date_time_auto_summaryOn">"Bruk verdier fra nettverket"</string>
+    <string name="date_time_auto_summaryOff">"Bruk verdier fra nettverket"</string>
+    <string name="date_time_24hour">"Bruk 24-timers format"</string>
+    <string name="date_time_set_time">"Still klokken"</string>
+    <string name="date_time_set_timezone">"Tidssone"</string>
+    <string name="date_time_set_date">"Sett dato"</string>
+    <string name="date_time_date_format">"Datoformat"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Sorter alfabetisk"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Sorter etter tidssone"</string>
+    <string name="security_settings_title">"Sikkerhet og plassering"</string>
+    <string name="security_settings_summary">"Plassering, skjermlås, SIM-kort-lås"</string>
+    <string name="security_passwords_title">"Passord"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Slå på Bluetooth"</string>
+    <string name="bluetooth_settings">"Bluetooth-innstillinger"</string>
+    <string name="bluetooth_settings_title">"Bluetooth-innstillinger"</string>
+    <string name="bluetooth_settings_summary">"Tilkoblinger, enhetsnavn og synlighet"</string>
+    <string name="bluetooth_pin_entry">"Forespørsel om Bluetooth-paring"</string>
+    <string name="bluetooth_device_info">"Bluetooth-enhetsinformasjon"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Skriv inn PIN-kode for å pare."\n"(Prøv 0000 eller 1234.)"</string>
+    <string name="bluetooth_error_title">"NB"</string>
+    <string name="bluetooth_pairing_error_message">"Det oppsto et problem under paring med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Det oppsto et problem under paring med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> fordi PIN-koden du oppga var feil."</string>
+    <string name="bluetooth_connecting_error_message">"Kunne ikke koble til <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_preference_scan_title">"Let etter enheter"</string>
+    <string name="bluetooth_device_context_connect">"Koble til"</string>
+    <string name="bluetooth_device_context_disconnect">"Koble fra"</string>
+    <string name="bluetooth_device_context_pair_connect">"Par med og koble til"</string>
+    <string name="bluetooth_device_context_unpair">"Fjern paring"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Koble fra og fjern paring"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Innstillinger…"</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Koble til…"</string>
+    <string name="bluetooth_profile_a2dp">"Media"</string>
+    <string name="bluetooth_profile_headset">"Telefon"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Koblet til medielyd"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Koblet til telefonlyd"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Koblet til medie- og telefonlyd"</string>
+    <string name="bluetooth_device_advanced_title">"Innstillinger for <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Koble til"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Koble til Bluetooth-enhet"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profiler"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Koblet til medielyd"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Koblet til telefonlyd"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Bruk for medielyd"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Bruk for telefonlyd"</string>
+    <string name="wifi">"Trådløst nett"</string>
+    <string name="wifi_quick_toggle_title">"Trådløst nett"</string>
+    <string name="wifi_quick_toggle_summary">"Slå på trådløst nett"</string>
+    <string name="wifi_settings">"Trådløsinnstillinger"</string>
+    <string name="wifi_settings_category">"Innstillinger for trådløst nett"</string>
+    <string name="wifi_settings_summary">"Sett opp og styr trådløse aksesspunkt"</string>
+    <string name="forget_network">"Glem"</string>
+    <string name="wifi_status">"Status"</string>
+    <string name="wifi_link_speed">"Hastighet"</string>
+    <string name="wifi_signal_3">"Utmerket"</string>
+    <string name="wifi_signal_2">"God"</string>
+    <string name="wifi_signal_1">"OK"</string>
+    <string name="wifi_signal_0">"Dårlig"</string>
+    <string name="security">"Sikkerhet"</string>
+    <string name="wifi_security_open">"Åpen"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Ukjent"</string>
+    <string name="wifi_security_verbose_open">"Åpent nettverk"</string>
+    <string name="wifi_security_verbose_wep">"Sikret med WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Sikret med WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Sikret med WPA2"</string>
+    <string name="ip_address">"IP-adresse"</string>
+    <string name="signal">"Signalstyrke"</string>
+    <string name="wifi_starting">"Slår på…"</string>
+    <string name="wifi_stopping">"Slår av…"</string>
+    <string name="wifi_error">"Feil"</string>
+    <string name="error_starting">"Kunne ikke starte trådløsnett"</string>
+    <string name="error_stopping">"Kunne ikke slå av trådløsnett"</string>
+    <string name="error_scanning">"Kunne ikke søke etter trådløse nettverk"</string>
+    <string name="error_connecting">"Kunne ikke koble til nettverket"</string>
+    <string name="error_saving">"Kunne ikke lagre nettverket"</string>
+    <string name="connect">"Koble til"</string>
+    <string name="connect_to_blank">"Koble til <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Passord for trådløst nettverk"</string>
+    <string name="please_type_hex_key">"WEP-nøkkel i hex (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Vis passord."</string>
+    <string name="scan_wifi">"Søk"</string>
+    <string name="summary_not_in_range">"Utenfor rekkevidde"</string>
+    <string name="summary_remembered">"Husket"</string>
+    <string name="summary_connection_failed">"Tilkoblingen mislyktes, velg for å prøve på nytt"</string>
+    <string name="wifi_access_points">"Trådløse nettverk"</string>
+    <string name="wifi_type_ssid">"Nettverks-SSID"</string>
+    <string name="wifi_security">"Sikkerhet"</string>
+    <string name="wifi_save_config">"Lagre"</string>
+    <string name="wifi_password_unchanged">"(uendret)"</string>
+    <string name="wifi_add_other_network">"Legg til trådløst nettverk"</string>
+    <string name="wifi_notify_open_networks">"Varsling om nettverk"</string>
+    <string name="wifi_notify_open_networks_summary">"Varsle når et åpent nettverk er tilgjengelig"</string>
+    <string name="wifi_password_incorrect_error">"Nettverkspassordet er ikke riktig. Prøv igjen."</string>
+    <string name="wifi_generic_connection_error">"Kunne ikke koble til nettverket. Prøv igjen."</string>
+    <string name="wifi_menu_advanced">"Avansert"</string>
+    <string name="wifi_ip_settings_titlebar">"IP-innstillinger"</string>
+    <string name="wifi_ip_settings_menu_save">"Lagre"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Avbryt"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Skriv inn en gyldig IP-adresse."</string>
+    <string name="wifi_use_static_ip">"Bruk statisk IP-adresse"</string>
+    <string name="wifi_ip_address">"IP-adresse"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Standardruter"</string>
+    <string name="wifi_netmask">"Nettmaske"</string>
+    <string name="wifi_context_menu_connect">"Koble til nettverk"</string>
+    <string name="wifi_context_menu_forget">"Glem nettverk"</string>
+    <string name="wifi_context_menu_change_password">"Endre passord"</string>
+    <string name="wifi_advanced_titlebar">"Avansert"</string>
+    <string name="wifi_setting_num_channels_title">"Juridisk område"</string>
+    <string name="wifi_setting_num_channels_summary">"Velg antall kanaler som skal brukes"</string>
+    <string name="wifi_setting_num_channels_error">"Kunne ikke velge juridisk område."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> kanaler"</string>
+    <string name="wifi_setting_sleep_policy_title">"Soveinnstillinger for trådløst nett"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Spesifiser når telefonen skal bytte fra trådløsnett til mobiltelefonidata"</string>
+    <string name="wifi_setting_sleep_policy_error">"Det oppsto et problem under setting av soveinnstilling."</string>
+    <string name="wifi_advanced_mac_address_title">"MAC-adresse"</string>
+    <string name="fragment_status_scanning">"Søker…"</string>
+    <string name="fragment_status_connecting">"Kobler til <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_authenticating">"Autentiserer mot <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_obtaining_ip">"Henter IP-adresse fra <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_connected">"Koblet til <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Kobler fra <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_disconnected">"Frakoblet"</string>
+    <string name="fragment_status_failed">"Mislykket"</string>
+    <string name="status_scanning">"Søker…"</string>
+    <string name="status_connecting">"Kobler til…"</string>
+    <string name="status_authenticating">"Autentiserer…"</string>
+    <string name="status_obtaining_ip">"Henter adresse…"</string>
+    <string name="status_connected">"Tilkoblet"</string>
+    <string name="status_disconnecting">"Kobler fra…"</string>
+    <string name="status_disconnected">"Frakoblet"</string>
+    <string name="status_failed">"Mislykket"</string>
+    <string name="sound_and_display_settings">"Lyd og skjerm"</string>
+    <string name="sound_settings">"Lydinnstillinger"</string>
+    <string name="sound_and_display_settings_summary">"Ringetoner, varsling, lysstyrke"</string>
+    <string name="silent_mode_title">"Stillemodus"</string>
+    <string name="silent_mode_summary">"Slå av alle lyder unntatt media og alarmer"</string>
+    <string name="ringtone_title">"Ringetone"</string>
+    <string name="ringtone_summary">"Standard ringetone for innkommende anrop"</string>
+    <string name="ring_volume_title">"Ringevolum"</string>
+    <string name="ring_volume_summary">"Volum for innkommende anrop og varslinger"</string>
+    <string name="vibrate_title">"Vibrering"</string>
+    <string name="vibrate_summary">"Vibrer ved innkommende anrop"</string>
+    <string name="notification_sound_title">"Ringetone for varsling"</string>
+    <string name="notification_sound_summary">"Standard ringetone for varsling"</string>
+    <string name="incoming_call_volume_title">"Volum for innkommende anrop"</string>
+    <string name="notification_volume_title">"Varslingsvolum"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Bruk volum for innkommende anrop også for varslinger"</string>
+    <string name="notification_sound_dialog_title">"Velg ringetone for varsling"</string>
+    <string name="media_volume_title">"Medievolum"</string>
+    <string name="media_volume_summary">"Volum for musikk og video"</string>
+    <string name="dtmf_tone_enable_title">"Hørbare tastetoner"</string>
+    <string name="dtmf_tone_enable_summary_on">"Spill toner når talltastaturet benyttes"</string>
+    <string name="dtmf_tone_enable_summary_off">"Spill toner når talltastaturet benytes"</string>
+    <string name="sound_effects_enable_title">"Hørbart valg"</string>
+    <string name="sound_effects_enable_summary_on">"Lag lyd under skjermvalg"</string>
+    <string name="sound_effects_enable_summary_off">"Lag lyd under skjermvalg"</string>
+    <string name="play_media_notification_sounds_enable_title">"Varsling for minnekort"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Deaktiver varslingslyder for minnekort"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Aktiver varslingslyder for minnekort"</string>
+    <string name="sync_settings">"Datasynkronisering"</string>
+    <string name="sync_settings_summary">"Applikasjoner som skal synkroniseres"</string>
+    <string name="display_settings">"Skjerminnstillinger"</string>
+    <string name="animations_title">"Animasjon"</string>
+    <string name="animations_summary_on">"Vis animasjon når vinduer åpnes/lukkes"</string>
+    <string name="animations_summary_off">"Vis animasjon når vinduer åpnes/lukkes"</string>
+    <string name="brightness">"Lysstyrke"</string>
+    <string name="brightness_summary">"Juster skjermens lysstyrke"</string>
+    <string name="screen_timeout">"Skjermsparer"</string>
+    <string name="screen_timeout_summary">"Juster hvor lang tid som skal gå før skjermen slås av automatisk"</string>
+    <string name="sim_lock_settings">"Innstillinger for SIM-kort-lås"</string>
+    <string name="sim_lock_settings_category">"Sett opp SIM-kort-lås"</string>
+    <string name="sim_lock_settings_title">"SIM-kort-lås"</string>
+    <string name="sim_pin_toggle">"Lås SIM-kortet"</string>
+    <string name="sim_lock_on">"Krev PIN-kode for å bruke telefonen"</string>
+    <string name="sim_lock_off">"Krev PIN-kode for å bruke telefonen"</string>
+    <string name="sim_pin_change">"Endre SIM-PIN-kode"</string>
+    <string name="sim_enter_pin">"PIN-kode for SIM-kort"</string>
+    <string name="sim_enable_sim_lock">"Lås SIM-kortet"</string>
+    <string name="sim_disable_sim_lock">"Lås opp SIM-kortet"</string>
+    <string name="sim_enter_old">"Gammel PIN-kode for SIM-kort"</string>
+    <string name="sim_enter_new">"Ny PIN-kode for SIM-kort"</string>
+    <string name="sim_reenter_new">"Skriv inn ny PIN-kode en gang til"</string>
+    <string name="sim_change_pin">"SIM-kode for PIN-kort"</string>
+    <string name="sim_bad_pin">"Feil PIN-kode!"</string>
+    <string name="sim_pins_dont_match">"De to PIN-kodene stemmer ikke overens!"</string>
+    <string name="sim_change_failed">"Kunne ikke endre PIN-kode."\n"Det er mulig PIN-koden var gal."</string>
+    <string name="sim_change_succeeded">"PIN-koden for SIM-kortet ble endret."</string>
+    <string name="sim_lock_failed">"Kunne ikke endre låsestatus for SIM-kortet."\n"Det er mulig PIN-koden var gal."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Avbryt"</string>
+    <string name="device_info_settings">"Telefonstatus"</string>
+    <string name="system_update_settings_list_item_title">"Systemoppdateringer"</string>
+    <string name="system_update_settings_list_item_summary">"Se etter systemoppdateringer"</string>
+    <string name="firmware_version">"Firmware-versjon"</string>
+    <string name="model_number">"Modellnummer"</string>
+    <string name="baseband_version">"Versjon av radioprogramvare"</string>
+    <string name="kernel_version">"Kjerneversjon"</string>
+    <string name="build_number">"Byggenummer"</string>
+    <string name="device_info_not_available">"Ikke tilgjengelig"</string>
+    <string name="device_status_activity_title">"Status"</string>
+    <string name="device_status">"Status"</string>
+    <string name="device_status_summary">"IMEI, telefonnummer, signal, osv."</string>
+    <string name="storage_settings_title">"Minnekort og lagring"</string>
+    <string name="storage_settings_summary">"Avmonter minnekort, vis ledig plass"</string>
+    <string name="status_number">"Telefonnummer"</string>
+    <string name="status_network_type">"Nettverkstype"</string>
+    <string name="status_data_state">"Datatilgang"</string>
+    <string name="status_service_state">"Servicestatus"</string>
+    <string name="status_signal_strength">"Signalstyrke"</string>
+    <string name="status_roaming">"Roaming"</string>
+    <string name="status_operator">"Nettverk"</string>
+    <string name="status_wifi_mac_address">"MAC-adresse for WLAN"</string>
+    <string name="status_bt_address">"Bluetooth-adresse"</string>
+    <string name="status_unavailable">"Ikke tilgjengelig"</string>
+    <string name="status_network_traffic_stats">"Nettverksbruk"</string>
+    <string name="status_network_traffic_summary">"Sendt: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Mottatt: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Oppetid"</string>
+    <string name="status_awake_time">"Våken tid"</string>
+    <string name="internal_memory">"Intern lagringsplass"</string>
+    <string name="sd_memory">"Minnekort"</string>
+    <string name="memory_available">"Tilgjengelig plass"</string>
+    <string name="memory_size">"Total plass"</string>
+    <string name="sd_eject">"Avmonter/løs ut minnekort"</string>
+    <string name="sd_eject_summary">"Løs ut minnekortet for trygg fjerning"</string>
+    <string name="sd_format">"Formater minnekort"</string>
+    <string name="sd_format_summary">"Formater (fjern alt fra) minnekortet"</string>
+    <string name="sd_unavailable">"Ikke tilgjengelig"</string>
+    <string name="read_only">" (skrivebeskyttet)"</string>
+    <string name="battery_status_title">"Batteristatus"</string>
+    <string name="battery_level_title">"Batterinivå"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"Rediger APN"</string>
+    <string name="apn_not_set">"&lt;Ikke satt&gt;"</string>
+    <string name="apn_name">"Navn"</string>
+    <string name="apn_apn">"APN-navn"</string>
+    <string name="apn_http_proxy">"Mellomtjener"</string>
+    <string name="apn_http_port">"Port"</string>
+    <string name="apn_user">"Brukernavn"</string>
+    <string name="apn_password">"Passord"</string>
+    <string name="apn_server">"Tjener"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"MMS-mellomtjener"</string>
+    <string name="apn_mms_port">"MMS-port"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APN-type"</string>
+    <string name="menu_delete">"Slett APN"</string>
+    <string name="menu_new">"Nytt APN"</string>
+    <string name="menu_save">"Lagre"</string>
+    <string name="menu_cancel">"Forkast"</string>
+    <string name="error_title">"NB"</string>
+    <string name="error_name_empty">"Feltet «navn» kan ikke være tomt."</string>
+    <string name="error_apn_empty">"APNet kan ikke være tomt."</string>
+    <string name="error_mcc_not3">"MCC-feltet må være på tre siffer."</string>
+    <string name="error_mnc_not23">"MNC-feltet må være på to eller tre siffer."</string>
+    <string name="master_clear_title">"Fabrikkinnstillinger"</string>
+    <string name="master_clear_summary">"Fjern alle data fra telefonen"</string>
+    <string name="master_clear_desc">"Dette vil nullstille telefonen til fabrikktilstanden, noe som fjerner alle data og nedlastede applikasjoner!"</string>
+    <string name="master_clear_button_text">"Nullstill telefonen"</string>
+    <string name="master_clear_final_desc">"Nullstill telefonen, noe som vil fjerne alle data og applikasjoner? Dette kan ikke gjøres om!"</string>
+    <string name="master_clear_final_button_text">"Fjern alt"</string>
+    <string name="master_clear_gesture_prompt">"Tegn opplåsingsmønsteret"</string>
+    <string name="master_clear_gesture_explanation">"Du må tegne opplåsingsmønsteret for å bekrefte nullstilling av telefonen."</string>
+    <string name="master_clear_failed">"Telefonen ble ikke nullstilt fordi nullstillingstjenesten ikke er tilgjengelig."</string>
+    <string name="media_format_title">"Formater minnekort"</string>
+    <string name="media_format_summary">"Sletter alle data fra minnekortet"</string>
+    <string name="media_format_desc">"Dette valget vil slette alle data fra minnekortet i telefonen. Du vil miste ALLE data på kortet!"</string>
+    <string name="media_format_button_text">"Formater minnekort"</string>
+    <string name="media_format_final_desc">"Formater minnekortet? Dette vil fjerne alle data, og kan ikke gjøres om!"</string>
+    <string name="media_format_final_button_text">"Slett alt"</string>
+    <string name="media_format_gesture_prompt">"Tegn opplåsingsmønsteret"</string>
+    <string name="media_format_gesture_explanation">"Du må tegne opplåsingsmønsteret for å bekrefte formatering av minnekortet."</string>
+    <string name="call_settings_title">"Samtaleinnstillinger"</string>
+    <string name="call_settings_summary">"Telefonsvarer, viderekobling, samtale venter, nummervisning"</string>
+    <string name="network_settings_title">"Mobile nettverk"</string>
+    <string name="network_settings_summary">"Innstillinger for roaming, nettverk, APN"</string>
+    <string name="location_title">"Kilder for min plassering"</string>
+    <string name="location_network_based">"Bruk trådløse nettverk"</string>
+    <string name="location_networks_disabled">"Se plassering i applikasjoner (som kart) ved hjelp av trådløse nettverk"</string>
+    <string name="location_neighborhood_level">"Plassering bestemmes ved hjelp av trådløse og/eller mobile nettverk"</string>
+    <string name="location_gps">"Bruk GPS-satellitter"</string>
+    <string name="location_street_level">"Nøyaktig til gatenivå (slå av for å spare batteri)"</string>
+    <string name="location_gps_disabled">"Finn plassering på gatenivå (bruker mer batteri, og trenger fri sikt til himmelen)"</string>
+    <string name="about_settings">"Om telefonen"</string>
+    <string name="about_settings_summary">"Vis juridisk informasjon, telefonstatus, programvareversjon"</string>
+    <string name="legal_information">"Juridisk informasjon"</string>
+    <string name="contributors_title">"Medvirkende"</string>
+    <string name="copyright_title">"Opphavsrett"</string>
+    <string name="license_title">"Lisens"</string>
+    <string name="terms_title">"Betingelser"</string>
+    <string name="settings_license_activity_title">"Åpen kildekode-lisenser"</string>
+    <string name="settings_license_activity_unavailable">"Kunne ikke hente lisensene."</string>
+    <string name="settings_license_activity_loading">"henter…"</string>
+    <string name="lock_settings_title">"Opplåsingsmønster for skjerm"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Opplåsingsmønster"</string>
+    <string name="lockpattern_need_to_unlock">"Bekreft lagret mønster"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Beklager, prøv igjen:"</string>
+    <string name="lockpattern_recording_intro_header">"Tegn et opplåsingsmønster"</string>
+    <string name="lockpattern_recording_intro_footer">"Trykk menyknappen for hjelp."</string>
+    <string name="lockpattern_recording_inprogress">"Slipp fingeren når du er ferdig."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Tegn et mønster over minst <xliff:g id="NUMBER">%d</xliff:g> prikker. Prøv igjen:"</string>
+    <string name="lockpattern_pattern_entered_header">"Mønster lagret!"</string>
+    <string name="lockpattern_need_to_confirm">"Tegn mønsteret igjen for å bekrefte:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Ditt nye opplåsingsmønster:"</string>
+    <string name="lockpattern_confirm_button_text">"Bekreft"</string>
+    <string name="lockpattern_restart_button_text">"Tegn på nytt"</string>
+    <string name="lockpattern_retry_button_text">"Prøv igjen"</string>
+    <string name="lockpattern_continue_button_text">"Continue"</string>
+    <string name="lockpattern_settings_title">"Opplåsingsmønster"</string>
+    <string name="lockpattern_settings_enable_title">"Krev mønster"</string>
+    <string name="lockpattern_settings_enable_summary">"Krev mønster for å låse opp skjermen"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Synlig mønster"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Taktil tilbakemelding"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Opplåsingsmønster"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Opplåsingsmønster"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Hvordan tegne et opplåsingsmønster"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"For mange gale forsøk!"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Prøv igjen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
+    <string name="skip_button_label">"Avbryt"</string>
+    <string name="next_button_label">"Neste"</string>
+    <string name="lock_title">"Sikring av telefonen"</string>
+    <string name="lock_intro_message"><font size="17">"Beskytt telefonen fra uautorisert bruk ved å lage et personlig opplåsingsmønster for skjermen. "\n<font height="17">\n</font><b>"1"</b>"  På den neste skjermen, se på mens et eksempelmønster blir tegnet. "\n<font height="17">\n</font><b>"2"</b>"  Når du er klar, tegn ditt eget personlige opplåsingsmønster. Prøv med forskjellige mønster, men tegn over minst fire prikker. "\n<font height="17">\n</font><b>"3"</b>"  Tegn mønsteret på nytt for å bekrefte. "\n<font height="17">\n</font><b>"Klar? Velg «neste»."</b>" "\n<font height="3">\n</font>"For å la telefonen forbli ubeskyttet, velg «Avbryt»."</font></string>
+    <string name="lock_example_title">"Eksempelmønster"</string>
+    <string name="lock_example_message">"Tegn over minst fire prikker."\n" "\n"Velg «Neste» når du er klar til å tegne ditt eget mønster."</string>
+    <string name="manageapplications_settings_title">"Installerte applikasjoner"</string>
+    <string name="manageapplications_settings_summary">"Hold orden på og fjern installerte applikasjoner"</string>
+    <string name="applications_settings">"Applikasjoner"</string>
+    <string name="applications_settings_summary">"Installerte applikasjoner, hurtigtaster"</string>
+    <string name="applications_settings_header">"Innstillinger for applikasjoner"</string>
+    <string name="install_applications">"Ukjente kilder"</string>
+    <string name="install_unknown_applications">"Tillat installasjon av applikasjoner som ikke kommer fra markedet"</string>
+    <string name="install_all_warning">"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">"Applikasjonsinformasjon"</string>
+    <string name="storage_label">"Lagring"</string>
+    <string name="auto_launch_label">"Start som standard"</string>
+    <string name="permissions_label">"Rettigheter"</string>
+    <string name="cache_header_label">"Hurtiglager"</string>
+    <string name="clear_cache_btn_text">"Fjern hurtiglager"</string>
+    <string name="cache_size_label">"Hurtiglager"</string>
+    <string name="controls_label">"Kontroller"</string>
+    <string name="force_stop">"Tving avslutning"</string>
+    <string name="total_size_label">"Totalt"</string>
+    <string name="application_size_label">"Applikasjon"</string>
+    <string name="data_size_label">"Data"</string>
+    <string name="uninstall_text">"Avinstaller"</string>
+    <string name="clear_user_data_text">"Fjern data"</string>
+    <string name="auto_launch_enable_text">"Du har valgt å starte denne applikasjonen som standard for noen handlinger."</string>
+    <string name="auto_launch_disable_text">"Ingen standardvalg satt."</string>
+    <string name="clear_activities">"Fjern standardvalg"</string>
+    <string name="unknown">"Ukjent"</string>
+    <string name="sort_order_alpha">"Sorter"</string>
+    <string name="sort_order_size">"Sorter etter størrelse"</string>
+    <string name="manage_space_text">"Styr plass"</string>
+    <string name="filter">"Filter"</string>
+    <string name="filter_dlg_title">"Velg filtreringsinnstillinger"</string>
+    <string name="filter_apps_all">"Alle"</string>
+    <string name="filter_apps_third_party">"Tredjeparts"</string>
+    <string name="filter_apps_running">"Kjører"</string>
+    <string name="loading">"Laster…"</string>
+    <string name="recompute_size">"Beregner størrelse på nytt…"</string>
+    <string name="clear_data_dlg_title">"Slett"</string>
+    <string name="clear_data_dlg_text">"All informasjon du har lagret i denne applikasjonen vil bli fjernet permanent."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Avbryt"</string>
+    <string name="app_not_found_dlg_title">"Fant ikke applikasjonen"</string>
+    <string name="app_not_found_dlg_text">"Applikasjonen ble ikke funnet i listen av installerte applikasjoner."</string>
+    <string name="clear_data_failed">"Kunne ikke fjerne applikasjonadata."</string>
+    <string name="security_settings_desc">"Applikasjonen har disse rettighetene på telefonen:"</string>
+    <string name="computing_size">"Beregner fortsatt…"</string>
+    <string name="invalid_size_value">"Kunne ikke beregne pakkestørrelse"</string>
+    <string name="empty_list_msg">"Ingen tredjepartsapplikasjoner er installert."</string>
+    <string name="language_settings">"Språk og tekst"</string>
+    <string name="language_settings_summary">"Innstillinger for språk, region, skriving av tekst og feilretting"</string>
+    <string name="language_category">"Innstillinger for språk"</string>
+    <string name="text_category">"Tekstinnstillinger"</string>
+    <string name="phone_language">"Språk"</string>
+    <string name="phone_language_summary">"Velg språk og region"</string>
+    <string name="auto_replace">"Automatisk erstatting"</string>
+    <string name="auto_replace_summary">"Rett opp stavefeil"</string>
+    <string name="auto_caps">"Stor forbokstav"</string>
+    <string name="auto_caps_summary">"Start automatisk setninger med stor bokstav"</string>
+    <string name="auto_punctuate">"Autopunktum"</string>
+    <string name="hardkeyboard_category">"Innstillinger for fysisk tastatur"</string>
+    <string name="auto_punctuate_summary">"Trykk mellomromstasten to ganger for å skrive punktum"</string>
+    <string name="show_password">"Synlige passord"</string>
+    <string name="show_password_summary">"Vis passord mens de skrives inn"</string>
+    <string name="user_dict_settings_titlebar">"Ordliste"</string>
+    <string name="user_dict_settings_title">"Ordliste"</string>
+    <string name="user_dict_settings_summary">"Legg til og fjern ord fra ordlisten"</string>
+    <string name="user_dict_settings_add_menu_title">"Legg til"</string>
+    <string name="user_dict_settings_add_dialog_title">"Legg til ordliste"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Rediger"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Slett"</string>
+    <string name="user_dict_settings_empty_text">"Ordlisten er tom. Du kan legge til ord i menyen."</string>
+    <string name="testing">"Testing"</string>
+    <string name="testing_phone_info">"Telefoninformasjon"</string>
+    <string name="testing_battery_info">"Batteriinformasjon"</string>
+    <string name="testing_battery_history">"Batterihistorikk"</string>
+    <string name="quick_launch_title">"Hurtigtaster"</string>
+    <string name="quick_launch_summary">"Tastatursnarveier for å starte applikasjoner"</string>
+    <string name="quick_launch_assign_application">"Tilordne applikasjon"</string>
+    <string name="quick_launch_no_shortcut">"Ingen snarvei"</string>
+    <string name="quick_launch_shortcut">"Søk + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Fjern"</string>
+    <string name="quick_launch_clear_dialog_message">"Snarveien for <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) will be fjernet."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Avbryt"</string>
+    <string name="quick_launch_display_mode_applications">"Applikasjoner"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Snarveier"</string>
+    <string name="input_methods_settings_title">"Skriving av tekst"</string>
+    <string name="input_methods_settings_summary">"Innstillinger for skriving av tekst"</string>
+    <string name="input_methods_settings_label_format">"Innstillinger for %s"</string>
+    <string name="development_settings_title">"Utvikling"</string>
+    <string name="development_settings_summary">"Innstillinger for applikasjonsutvikling"</string>
+    <string name="enable_adb">"USB-debugging"</string>
+    <string name="enable_adb_summary">"Debug-modus når USB er koblet til"</string>
+    <string name="keep_screen_on">"Forbli våken"</string>
+    <string name="keep_screen_on_summary">"Skjermen vil aldri blankes under lading"</string>
+    <string name="allow_mock_location">"Tillat manuell plassering"</string>
+    <string name="allow_mock_location_summary">"Tillat manuell plassering"</string>
+    <string name="gadget_picker_title">"Velg gadget"</string>
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Detaljer for UID %d"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Nettbruk av <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Byte mottatt: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Byte sendt: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Totalt antall byte: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"CPU-bruk av <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Brukertid:"</string>
+    <string name="battery_history_system_time">"Systemtid:"</string>
+    <string name="battery_history_total_time">"Total tid:"</string>
+    <string name="battery_history_starts">"Oppstarter: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> dager, <xliff:g id="HOURS">%2$d</xliff:g> timer, <xliff:g id="MINUTES">%3$d</xliff:g> minutter, <xliff:g id="SECONDS">%4$d</xliff:g> sekunder"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> timer, <xliff:g id="MINUTES">%2$d</xliff:g> minutter, <xliff:g id="SECONDS">%3$d</xliff:g> sekunder"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> minutter, <xliff:g id="SECONDS">%2$d</xliff:g> sekunder"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> sekunder"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Pakker som deler denne UID-en:"</string>
+    <string name="battery_history_no_data">"Ingen batterihistorikk tilgjengelig"</string>
+    <string name="battery_history_sensor">"Sensor:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Sensor brukt av pakker:"</string>
+    <string name="battery_history_sensor_usage">"Brukt <xliff:g id="COUNT">%1$d</xliff:g> ganger av <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"Brukt <xliff:g id="COUNT">%1$d</xliff:g> ganger av en av:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Tid brukt med skjermen på:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"På batteri:"</string>
+    <string name="battery_history_screen_on_plugged">"På nettstrøm:"</string>
+    <string name="usage_stats_label">"Bruksstatistikk"</string>
+    <string name="testing_usage_stats">"Bruksstatistikk"</string>
+    <string name="display_order_text">"Sorter etter:"</string>
+    <string name="app_name_label">"Applikasjon"</string>
+    <string name="launch_count_label">"Antall"</string>
+    <string name="usage_time_label">"Brukstid"</string>
+</resources>
diff --git a/res/values-nl-nokeys/strings.xml b/res/values-nl-nokeys/strings.xml
new file mode 100644
index 0000000..eca67ca
--- /dev/null
+++ b/res/values-nl-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Toepassingen beheren"</string>
+</resources>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
new file mode 100644
index 0000000..51a48b0
--- /dev/null
+++ b/res/values-nl/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Amerika"</item>
+    <item>"Europa"</item>
+    <item>"Afrika"</item>
+    <item>"Azië"</item>
+    <item>"Australië"</item>
+    <item>"Stille Oceaan"</item>
+    <item>"Alles"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 seconden"</item>
+    <item>"30 seconden"</item>
+    <item>"1 minuut"</item>
+    <item>"2 minuten"</item>
+    <item>"10 minuten"</item>
+    <item>"Nooit time-out"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automatisch"</item>
+    <item>"Geen"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Geen"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automatisch"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP hexadecimaal"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Wanneer scherm wordt uitgeschakeld"</item>
+    <item>"Nooit indien aangesloten"</item>
+    <item>"Nooit"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Gebruikstijd"</item>
+    <item>"Aantal keer gestart"</item>
+    <item>"Naam van toepassing"</item>
+  </string-array>
+</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
new file mode 100644
index 0000000..6f30611
--- /dev/null
+++ b/res/values-nl/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Onbekend"</string>
+    <string name="turn_on_radio">"Radio inschakelen"</string>
+    <string name="turn_off_radio">"Radio uitschakelen"</string>
+    <string name="turn_on_qxdm">"QXDM SD-logboek inschakelen"</string>
+    <string name="turn_off_qxdm">"QXDM SD-logboek uitschakelen"</string>
+    <string name="radioInfo_menu_viewADN">"SIM-adresboek weergeven"</string>
+    <string name="radioInfo_menu_viewFDN">"Vaste nummers weergeven"</string>
+    <string name="radioInfo_menu_viewSDN">"Servicenummers weergeven"</string>
+    <string name="radioInfo_menu_getPDP">"PDP-lijst ophalen"</string>
+    <string name="radioInfo_menu_enableData">"Gegevensverbinding inschakelen"</string>
+    <string name="radioInfo_menu_disableData">"Gegevensverbinding uitschakelen"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Gegevens inschakelen bij opstarten"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Gegevens uitschakelen bij opstarten"</string>
+    <string name="radioInfo_service_in">"In gebruik"</string>
+    <string name="radioInfo_service_out">"Niet in gebruik"</string>
+    <string name="radioInfo_service_emergency">"Alleen noodoproepen"</string>
+    <string name="radioInfo_service_off">"Radio uit"</string>
+    <string name="radioInfo_roaming_in">"Roaming"</string>
+    <string name="radioInfo_roaming_not">"Geen roaming"</string>
+    <string name="radioInfo_phone_idle">"Inactief"</string>
+    <string name="radioInfo_phone_ringing">"Telefoon gaat over"</string>
+    <string name="radioInfo_phone_offhook">"Actieve oproep"</string>
+    <string name="radioInfo_data_disconnected">"Verbinding verbroken"</string>
+    <string name="radioInfo_data_connecting">"Verbinding maken"</string>
+    <string name="radioInfo_data_connected">"Verbonden"</string>
+    <string name="radioInfo_data_suspended">"Opgeschort"</string>
+    <string name="radioInfo_unknown">"onbekend"</string>
+    <string name="radioInfo_display_packets">"pakketten"</string>
+    <string name="radioInfo_display_bytes">"bytes"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"SD-kaart ontkoppelen"</string>
+    <string name="sdcard_format">"SD-kaart formatteren"</string>
+    <string name="small_font">"Klein"</string>
+    <string name="medium_font">"Gemiddeld"</string>
+    <string name="large_font">"Groot"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"SD-kaart"</string>
+    <string name="battery_info_status_label">"Accustatus:"</string>
+    <string name="battery_info_scale_label">"Accuschaal:"</string>
+    <string name="battery_info_level_label">"Accuniveau:"</string>
+    <string name="battery_info_health_label">"Accustaat:"</string>
+    <string name="battery_info_technology_label">"Accutechnologie:"</string>
+    <string name="battery_info_voltage_label">"Accuvoltage:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Accutemperatuur:"</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"Tijd sinds opstarten:"</string>
+    <string name="battery_info_awake_battery">"Stand-bytijd op accu:"</string>
+    <string name="battery_info_awake_plugged">"Stand-bytijd tijdens opladen:"</string>
+    <string name="battery_info_screen_on">"Tijd scherm AAN:"</string>
+    <string name="battery_info_status_unknown">"Onbekend"</string>
+    <string name="battery_info_status_charging">"Opladen"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Ontladen"</string>
+    <string name="battery_info_status_not_charging">"Wordt niet opgeladen"</string>
+    <string name="battery_info_status_full">"Volledig"</string>
+    <string name="battery_info_health_unknown">"Onbekend"</string>
+    <string name="battery_info_health_good">"Goed"</string>
+    <string name="battery_info_health_overheat">"Oververhitting"</string>
+    <string name="battery_info_health_dead">"Versleten"</string>
+    <string name="battery_info_health_over_voltage">"Overspanning"</string>
+    <string name="battery_info_health_unspecified_failure">"Onbekende fout"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Kan worden gevonden"</string>
+    <string name="bluetooth_is_discoverable">"Kan gedurende <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> seconden worden gevonden…"</string>
+    <string name="bluetooth_not_discoverable">"Zorgen dat het apparaat kan worden gevonden"</string>
+    <string name="bluetooth_devices">"Bluetooth-apparaten"</string>
+    <string name="bluetooth_device_name">"Apparaatnaam"</string>
+    <string name="bluetooth_name_not_set">"Geen naam ingesteld, accountnaam wordt gebruikt"</string>
+    <string name="bluetooth_scan_for_devices">"Scannen naar apparaten"</string>
+    <string name="bluetooth_disconnect_blank">"Verbinding met <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wordt verbroken."</string>
+    <string name="bluetooth_connected">"Verbonden"</string>
+    <string name="bluetooth_disconnected">"Verbinding verbroken"</string>
+    <string name="bluetooth_disconnecting">"Verbinding verbreken..."</string>
+    <string name="bluetooth_connecting">"Verbinding maken..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Koppelen met dit apparaat"</string>
+    <string name="bluetooth_pairing">"Koppelen..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"handsfree/headset"</string>
+    <string name="progress_scanning">"Scannen"</string>
+    <string name="bluetooth_notif_ticker">"Bluetooth-koppelingsverzoek"</string>
+    <string name="bluetooth_notif_title">"Koppelingsverzoek"</string>
+    <string name="bluetooth_notif_message">"Selecteer dit om te koppelen met "</string>
+    <string name="date_and_time">"Datum- en tijdinstellingen"</string>
+    <string name="date_time_12_hour_sample">"13:00 uur"</string>
+    <string name="date_time_24_hour_sample">"01:00:00 PM"</string>
+    <string name="choose_timezone">"Tijdzone selecteren"</string>
+    <string name="display_preview_label">"Voorbeeld:"</string>
+    <string name="display_font_size_label">"Lettergrootte:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"<xliff:g id="BROADCAST">broadcast</xliff:g> verzenden"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"<xliff:g id="ACTIVITY">activity</xliff:g> starten"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Account:"</string>
+    <string name="proxy_clear_text">"Wissen"</string>
+    <string name="proxy_port_label">"Poort"</string>
+    <string name="proxy_defaultView_text">"Standaardwaarden herstellen"</string>
+    <string name="proxy_action_text">"Opslaan"</string>
+    <string name="proxy_hostname_label">"Hostnaam"</string>
+    <string name="proxy_error">"Let op"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"De hostnaam die u heeft ingevoerd, is ongeldig."</string>
+    <string name="proxy_error_empty_port">"U moet het poortveld invullen."</string>
+    <string name="proxy_error_empty_host_set_port">"Het poortveld moet leeg zijn als het hostveld leeg is."</string>
+    <string name="proxy_error_invalid_port">"De poort die u heeft ingevoerd, is ongeldig."</string>
+    <string name="radio_info_signal_location_label">"Locatie:"</string>
+    <string name="radio_info_neighboring_location_label">"Naburige CID:"</string>
+    <string name="radio_info_data_attempts_label">"Gegevenspogingen:"</string>
+    <string name="radio_info_gprs_service_label">"GPRS-service:"</string>
+    <string name="radio_info_roaming_label">"Roaming:"</string>
+    <string name="radio_info_imei_label">"IMEI-nummer:"</string>
+    <string name="radio_info_call_redirect_label">"Oproep omleiden:"</string>
+    <string name="radio_info_ppp_resets_label">"Aantal PPP-resets sinds opstarten:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM wordt ontkoppeld:"</string>
+    <string name="radio_info_current_network_label">"Huidig netwerk:"</string>
+    <string name="radio_info_data_successes_label">"Gegevenssuccessen:"</string>
+    <string name="radio_info_ppp_received_label">"PPP ontvangen:"</string>
+    <string name="radio_info_gsm_service_label">"GSM-service:"</string>
+    <string name="radio_info_signal_strength_label">"Signaalsterkte:"</string>
+    <string name="radio_info_call_status_label">"Oproepstatus:"</string>
+    <string name="radio_info_ppp_sent_label">"PPP verzonden:"</string>
+    <string name="radio_info_radio_resets_label">"Radioresets:"</string>
+    <string name="radio_info_message_waiting_label">"Wachtend bericht:"</string>
+    <string name="radio_info_phone_number_label">"Telefoonnummer:"</string>
+    <string name="radio_info_band_mode_label">"Radioband selecteren"</string>
+    <string name="radio_info_network_type_label">"Netwerktype:"</string>
+    <string name="radio_info_set_perferred_label">"Voorkeursnetwerktype instellen:"</string>
+    <string name="radio_info_ping_ipaddr">"IP-adres pingen:"</string>
+    <string name="radio_info_ping_hostname">"Hostnaam pingen (www.google.com):"</string>
+    <string name="radio_info_http_client_test">"HTTP-client testen:"</string>
+    <string name="radio_info_toggle_ciph_label">"Codering in-/uitschakelen"</string>
+    <string name="ping_test_label">"Pingtest uitvoeren"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Bijwerken"</string>
+    <string name="radio_info_smsc_refresh_label">"Vernieuwen"</string>
+    <string name="radio_info_toggle_dns_check_label">"DNS-controle in-/uitschakelen"</string>
+    <string name="band_mode_title">"GSM/UMTS-band instellen"</string>
+    <string name="band_mode_loading">"Bandlijst laden..."</string>
+    <string name="band_mode_set">"Instellen"</string>
+    <string name="band_mode_failed">"Mislukt"</string>
+    <string name="band_mode_succeeded">"Geslaagd"</string>
+    <string name="sdcard_changes_instructions">"Wijzigingen worden van kracht als de USB-kabel opnieuw wordt aangesloten"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"USB-massaopslag inschakelen"</string>
+    <string name="sdcard_settings_total_bytes_label">"Totaal aantal bytes:"</string>
+    <string name="sdcard_settings_not_present_status">"Geen SD-kaart"</string>
+    <string name="sdcard_settings_available_bytes_label">"Beschikbare bytes:"</string>
+    <string name="sdcard_settings_mass_storage_status">"SD-kaart wordt gebruikt als apparaat voor massaopslag"</string>
+    <string name="sdcard_settings_unmounted_status">"U kunt de SD-kaart nu veilig verwijderen"</string>
+    <string name="sdcard_settings_bad_removal_status">"De SD-kaart is verwijderd terwijl deze nog werd gebruikt!"</string>
+    <string name="sdcard_settings_used_bytes_label">"Gebruikte bytes:"</string>
+    <string name="sdcard_settings_scanning_status">"SD-kaart scannen op media..."</string>
+    <string name="sdcard_settings_read_only_status">"Gekoppelde SD-kaart alleen-lezen"</string>
+    <string name="next_label">"Volgende"</string>
+    <string name="language_picker_title">"Landinstelling"</string>
+    <string name="select_your_language">"Uw taal selecteren"</string>
+    <string name="activity_picker_label">"Activiteit selecteren"</string>
+    <string name="device_info_label">"Apparaatinfo"</string>
+    <string name="battery_info_label">"Accu-info"</string>
+    <string name="battery_history_label">"Accugeschiedenis"</string>
+    <string name="display_label">"Weergave"</string>
+    <string name="phone_info_label">"Telefooninfo"</string>
+    <string name="sd_card_settings_label">"SD-kaart"</string>
+    <string name="proxy_settings_label">"Proxy-instellingen"</string>
+    <string name="cancel">"Annuleren"</string>
+    <string name="settings_label">"Instellingen"</string>
+    <string name="airplane_mode">"Vliegmodus"</string>
+    <string name="airplane_mode_summary">"Alle draadloze verbindingen uitschakelen"</string>
+    <string name="airplane_mode_turning_on">"Draadloze verbindingen uitschakelen..."</string>
+    <string name="airplane_mode_turning_off">"Draadloze verbindingen inschakelen..."</string>
+    <string name="radio_controls_title">"Draadloze bedieningselementen"</string>
+    <string name="radio_controls_summary">"Wi-Fi, Bluetooth, vliegmodus en mobiele netwerken beheren"</string>
+    <string name="date_and_time_settings_title">"Datum en tijd"</string>
+    <string name="date_and_time_settings_summary">"Datum, tijd, tijdzone en notaties instellen"</string>
+    <string name="date_time_auto">"Automatisch"</string>
+    <string name="date_time_auto_summaryOn">"Gebruik door netwerk aangegeven waarden"</string>
+    <string name="date_time_auto_summaryOff">"Gebruik door netwerk aangegeven waarden"</string>
+    <string name="date_time_24hour">"24-uurs notatie gebruiken"</string>
+    <string name="date_time_set_time">"Tijd instellen"</string>
+    <string name="date_time_set_timezone">"Tijdzone selecteren"</string>
+    <string name="date_time_set_date">"Datum instellen"</string>
+    <string name="date_time_date_format">"Datumnotatie selecteren"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Alfabetisch sorteren"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Sorteren op tijdzone"</string>
+    <string name="security_settings_title">"Beveiliging en locatie"</string>
+    <string name="security_settings_summary">"Mijn locatie\' instellen, scherm ontgrendelen en SIM-kaart blokkeren"</string>
+    <string name="security_passwords_title">"Wachtwoorden"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Bluetooth inschakelen"</string>
+    <string name="bluetooth_settings">"Bluetooth-instellingen"</string>
+    <string name="bluetooth_settings_title">"Bluetooth-instellingen"</string>
+    <string name="bluetooth_settings_summary">"Verbindingen beheren, apparaatnaam en vindbaarheid instellen"</string>
+    <string name="bluetooth_pin_entry">"Bluetooth-koppelingsverzoek"</string>
+    <string name="bluetooth_device_info">"Bluetooth-apparaatinfo"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Typ de PIN-code om te koppelen."\n"(Probeer 0000 of 1234.)"</string>
+    <string name="bluetooth_error_title">"Let op"</string>
+    <string name="bluetooth_pairing_error_message">"Er is een probleem opgetreden bij het koppelen met <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Er is een probleem opgetreden bij het koppelen met <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, omdat de opgegeven PIN-code onjuist is."</string>
+    <string name="bluetooth_connecting_error_message">"Er is een probleem opgetreden bij het verbinden met <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_preference_scan_title">"Scannen naar apparaten"</string>
+    <string name="bluetooth_device_context_connect">"Verbinden"</string>
+    <string name="bluetooth_device_context_disconnect">"Verbinding verbreken"</string>
+    <string name="bluetooth_device_context_pair_connect">"Koppelen en verbinden"</string>
+    <string name="bluetooth_device_context_unpair">"Koppeling ongedaan maken"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Verbinding verbreken en koppeling opheffen"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Opties..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Verbinding maken met…"</string>
+    <string name="bluetooth_profile_a2dp">"Media"</string>
+    <string name="bluetooth_profile_headset">"Telefoon"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Verbonden met audio van medium"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Verbonden met audio van telefoon"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Verbonden met audio van telefoon en medium"</string>
+    <string name="bluetooth_device_advanced_title">"Opties voor <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Verbinden"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Verbinden met Bluetooth-apparaat"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profielen"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Verbonden met audio van medium"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Verbonden met audio van telefoon"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Gebruiken voor audio van medium"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Gebruiken voor audio van telefoon"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Wi-Fi inschakelen"</string>
+    <string name="wifi_settings">"Wi-Fi-instellingen"</string>
+    <string name="wifi_settings_category">"Wi-Fi-instellingen"</string>
+    <string name="wifi_settings_summary">"Draadloze toegangspunten instellen en beheren"</string>
+    <string name="forget_network">"Vergeten"</string>
+    <string name="wifi_status">"Status"</string>
+    <string name="wifi_link_speed">"Snelheid"</string>
+    <string name="wifi_signal_3">"Uitstekend"</string>
+    <string name="wifi_signal_2">"Goed"</string>
+    <string name="wifi_signal_1">"Redelijk"</string>
+    <string name="wifi_signal_0">"Slecht"</string>
+    <string name="security">"Beveiliging"</string>
+    <string name="wifi_security_open">"Open"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Onbekend"</string>
+    <string name="wifi_security_verbose_open">"Open netwerk"</string>
+    <string name="wifi_security_verbose_wep">"Beveiligd met WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Beveiligd met WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Beveiligd met WPA2"</string>
+    <string name="ip_address">"IP-adres"</string>
+    <string name="signal">"Signaalsterkte"</string>
+    <string name="wifi_starting">"Inschakelen..."</string>
+    <string name="wifi_stopping">"Uitschakelen..."</string>
+    <string name="wifi_error">"Fout"</string>
+    <string name="error_starting">"Kan Wi-Fi niet starten"</string>
+    <string name="error_stopping">"Kan Wi-Fi niet stoppen"</string>
+    <string name="error_scanning">"Kan niet scannen naar netwerken"</string>
+    <string name="error_connecting">"Kan geen verbinding met het netwerk maken"</string>
+    <string name="error_saving">"Kan het netwerk niet opslaan"</string>
+    <string name="connect">"Verbinden"</string>
+    <string name="connect_to_blank">"Verbinding maken met <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Draadloos wachtwoord"</string>
+    <string name="please_type_hex_key">"Hexadecimale WEP-sleutel (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Wachtwoord weergeven."</string>
+    <string name="scan_wifi">"Scannen"</string>
+    <string name="summary_not_in_range">"Niet binnen bereik"</string>
+    <string name="summary_remembered">"Onthouden"</string>
+    <string name="summary_connection_failed">"Verbinding mislukt. Selecteer dit om opnieuw te proberen."</string>
+    <string name="wifi_access_points">"Wi-Fi-netwerken"</string>
+    <string name="wifi_type_ssid">"SSID van netwerk"</string>
+    <string name="wifi_security">"Beveiliging"</string>
+    <string name="wifi_save_config">"Opslaan"</string>
+    <string name="wifi_password_unchanged">"(ongewijzigd)"</string>
+    <string name="wifi_add_other_network">"Wi-Fi-netwerk toevoegen"</string>
+    <string name="wifi_notify_open_networks">"Netwerkmelding"</string>
+    <string name="wifi_notify_open_networks_summary">"Melden wanneer een open netwerk beschikbaar is"</string>
+    <string name="wifi_password_incorrect_error">"Het netwerkwachtwoord dat u heeft ingevoerd, is onjuist. Probeer het opnieuw."</string>
+    <string name="wifi_generic_connection_error">"Er kan geen verbinding worden gemaakt met het netwerk. Probeer het opnieuw."</string>
+    <string name="wifi_menu_advanced">"Geavanceerd"</string>
+    <string name="wifi_ip_settings_titlebar">"IP-instellingen"</string>
+    <string name="wifi_ip_settings_menu_save">"Opslaan"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Annuleren"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Voer een geldig IP-adres in."</string>
+    <string name="wifi_use_static_ip">"Statisch IP-adres gebruiken"</string>
+    <string name="wifi_ip_address">"IP-adres"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Gateway"</string>
+    <string name="wifi_netmask">"Netmasker"</string>
+    <string name="wifi_context_menu_connect">"Verbinding maken met netwerk"</string>
+    <string name="wifi_context_menu_forget">"Netwerk niet gebruiken"</string>
+    <string name="wifi_context_menu_change_password">"Wachtwoord wijzigen"</string>
+    <string name="wifi_advanced_titlebar">"Geavanceerd"</string>
+    <string name="wifi_setting_num_channels_title">"Regulerend domein"</string>
+    <string name="wifi_setting_num_channels_summary">"Het aantal te gebruiken kanalen instellen"</string>
+    <string name="wifi_setting_num_channels_error">"Er is een probleem opgetreden bij het instellen van het regulerende domein."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> kanalen"</string>
+    <string name="wifi_setting_sleep_policy_title">"Wi-Fi-slaapbeleid"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Opgeven wanneer wordt overgeschakeld van Wi-Fi naar mobiele gegevens"</string>
+    <string name="wifi_setting_sleep_policy_error">"Er is een probleem opgetreden bij het instellen van het slaapbeleid."</string>
+    <string name="wifi_advanced_mac_address_title">"MAC-adres"</string>
+    <string name="fragment_status_scanning">"Scannen..."</string>
+    <string name="fragment_status_connecting">"Verbinding maken met <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"Verifiëren met <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_obtaining_ip">"IP-adres ophalen van <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_connected">"Verbonden met <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Verbinding verbreken met <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_disconnected">"Verbinding verbroken"</string>
+    <string name="fragment_status_failed">"Mislukt"</string>
+    <string name="status_scanning">"Scannen..."</string>
+    <string name="status_connecting">"Verbinding maken..."</string>
+    <string name="status_authenticating">"Verifiëren..."</string>
+    <string name="status_obtaining_ip">"Adres ophalen..."</string>
+    <string name="status_connected">"Verbonden"</string>
+    <string name="status_disconnecting">"Verbinding verbreken..."</string>
+    <string name="status_disconnected">"Verbinding verbroken"</string>
+    <string name="status_failed">"Mislukt"</string>
+    <string name="sound_and_display_settings">"Geluid en weergave"</string>
+    <string name="sound_settings">"Geluidsinstellingen"</string>
+    <string name="sound_and_display_settings_summary">"Beltonen, meldingen, schermhelderheid instellen"</string>
+    <string name="silent_mode_title">"Stille modus"</string>
+    <string name="silent_mode_summary">"Alle geluiden worden uitgeschakeld, behalve media- en alarmtonen"</string>
+    <string name="ringtone_title">"Beltoon telefoon"</string>
+    <string name="ringtone_summary">"Standaardbeltoon voor inkomende oproepen instellen"</string>
+    <string name="ring_volume_title">"Belvolume"</string>
+    <string name="ring_volume_summary">"Volume voor inkomende oproepen en meldingen instellen"</string>
+    <string name="vibrate_title">"Trilstand telefoon"</string>
+    <string name="vibrate_summary">"Laat telefoon trillen bij inkomende oproepen"</string>
+    <string name="notification_sound_title">"Beltoon voor meldingen"</string>
+    <string name="notification_sound_summary">"Standaardbeltoon voor meldingen instellen"</string>
+    <string name="incoming_call_volume_title">"Volume van inkomende oproepen"</string>
+    <string name="notification_volume_title">"Meldingsvolume"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Volume van inkomende oproepen gebruiken voor meldingen"</string>
+    <string name="notification_sound_dialog_title">"Beltoon voor meldingen selecteren"</string>
+    <string name="media_volume_title">"Mediavolume"</string>
+    <string name="media_volume_summary">"Volume voor muziek en video\'s instellen"</string>
+    <string name="dtmf_tone_enable_title">"Hoorbare aanraaktonen"</string>
+    <string name="dtmf_tone_enable_summary_on">"Tonen afspelen bij gebruik van toetsenblok"</string>
+    <string name="dtmf_tone_enable_summary_off">"Tonen afspelen bij gebruik van toetsenblok"</string>
+    <string name="sound_effects_enable_title">"Hoorbare selectie"</string>
+    <string name="sound_effects_enable_summary_on">"Geluid afspelen bij schermselectie"</string>
+    <string name="sound_effects_enable_summary_off">"Geluid afspelen bij schermselectie"</string>
+    <string name="play_media_notification_sounds_enable_title">"SD-kaartmeldingen"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Geluiden voor SD-kaartmeldingen uitschakelen"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Geluiden voor SD-kaartmeldingen inschakelen"</string>
+    <string name="sync_settings">"Gegevenssynchronisatie"</string>
+    <string name="sync_settings_summary">"Selecteren welke toepassingen worden gesynchroniseerd"</string>
+    <string name="display_settings">"Instellingen weergeven"</string>
+    <string name="animations_title">"Animatie"</string>
+    <string name="animations_summary_on">"Animatie weergeven bij het openen/sluiten van vensters"</string>
+    <string name="animations_summary_off">"Animatie weergeven bij het openen/sluiten van vensters"</string>
+    <string name="brightness">"Helderheid"</string>
+    <string name="brightness_summary">"Helderheid van het scherm aanpassen"</string>
+    <string name="screen_timeout">"Time-out scherm"</string>
+    <string name="screen_timeout_summary">"De vertraging voor het automatisch uitschakelen van het scherm aanpassen"</string>
+    <string name="sim_lock_settings">"Instellingen SIM-kaartblokkering"</string>
+    <string name="sim_lock_settings_category">"SIM-kaartblokkering instellen"</string>
+    <string name="sim_lock_settings_title">"SIM-kaartblokkering"</string>
+    <string name="sim_pin_toggle">"SIM-kaart blokkeren"</string>
+    <string name="sim_lock_on">"PIN-code vereist voor gebruik van telefoon"</string>
+    <string name="sim_lock_off">"PIN-code vereist voor gebruik van telefoon"</string>
+    <string name="sim_pin_change">"SIM PIN-code wijzigen"</string>
+    <string name="sim_enter_pin">"SIM PIN-code"</string>
+    <string name="sim_enable_sim_lock">"SIM-kaart blokkeren"</string>
+    <string name="sim_disable_sim_lock">"SIM-kaart ontgrendelen"</string>
+    <string name="sim_enter_old">"Oude SIM PIN-code"</string>
+    <string name="sim_enter_new">"Nieuwe SIM PIN-code"</string>
+    <string name="sim_reenter_new">"Nieuwe PIN-code nogmaals invoeren"</string>
+    <string name="sim_change_pin">"SIM PIN-code"</string>
+    <string name="sim_bad_pin">"Onjuiste PIN-code!"</string>
+    <string name="sim_pins_dont_match">"PIN-codes komen niet overeen!"</string>
+    <string name="sim_change_failed">"Kan PIN-code niet wijzigen."\n"PIN-code mogelijk onjuist."</string>
+    <string name="sim_change_succeeded">"SIM PIN-code gewijzigd"</string>
+    <string name="sim_lock_failed">"Kan status van SIM-kaartblokkering niet wijzigen."\n"PIN-code mogelijk onjuist."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Annuleren"</string>
+    <string name="device_info_settings">"Telefoonstatus"</string>
+    <string name="system_update_settings_list_item_title">"Systeemupdates"</string>
+    <string name="system_update_settings_list_item_summary">"Controleren op systeemupdates"</string>
+    <string name="firmware_version">"Firmwareversie"</string>
+    <string name="model_number">"Modelnummer"</string>
+    <string name="baseband_version">"Smalbandversie"</string>
+    <string name="kernel_version">"Kernel-versie"</string>
+    <string name="build_number">"Build-nummer"</string>
+    <string name="device_info_not_available">"Niet beschikbaar"</string>
+    <string name="device_status_activity_title">"Status"</string>
+    <string name="device_status">"Status"</string>
+    <string name="device_status_summary">"IMEI-nummer, telefoonnummer, signaal, enzovoort"</string>
+    <string name="storage_settings_title">"SD-kaart en telefoongeheugen"</string>
+    <string name="storage_settings_summary">"SD-kaart ontkoppelen, beschikbare opslagruimte weergeven"</string>
+    <string name="status_number">"Telefoonnummer"</string>
+    <string name="status_network_type">"Type mobiel netwerk"</string>
+    <string name="status_data_state">"Status mobiel netwerk"</string>
+    <string name="status_service_state">"Servicestatus"</string>
+    <string name="status_signal_strength">"Signaalsterkte"</string>
+    <string name="status_roaming">"Roaming"</string>
+    <string name="status_operator">"Netwerk"</string>
+    <string name="status_wifi_mac_address">"Wi-Fi MAC-adres"</string>
+    <string name="status_bt_address">"Bluetooth-adres"</string>
+    <string name="status_unavailable">"Niet beschikbaar"</string>
+    <string name="status_network_traffic_stats">"Netwerkgebruik"</string>
+    <string name="status_network_traffic_summary">"Verzonden: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Ontvangen: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Bedrijfstijd"</string>
+    <string name="status_awake_time">"Stand-bytijd"</string>
+    <string name="internal_memory">"Intern telefoongeheugen"</string>
+    <string name="sd_memory">"SD-kaart"</string>
+    <string name="memory_available">"Beschikbare ruimte"</string>
+    <string name="memory_size">"Totale ruimte"</string>
+    <string name="sd_eject">"SD-kaart ontkoppelen"</string>
+    <string name="sd_eject_summary">"De SD-kaart ontkoppelen zodat u deze veilig kunt verwijderen"</string>
+    <string name="sd_format">"SD-kaart formatteren"</string>
+    <string name="sd_format_summary">"De SD-kaart formatteren (wissen)"</string>
+    <string name="sd_unavailable">"Niet beschikbaar"</string>
+    <string name="read_only">" (Alleen-lezen)"</string>
+    <string name="battery_status_title">"Accustatus"</string>
+    <string name="battery_level_title">"Accuniveau"</string>
+    <string name="apn_settings">"APN\'s"</string>
+    <string name="apn_edit">"Toegangspunt bewerken"</string>
+    <string name="apn_not_set">"&lt;Niet ingesteld&gt;"</string>
+    <string name="apn_name">"Naam"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Poort"</string>
+    <string name="apn_user">"Gebruikersnaam"</string>
+    <string name="apn_password">"Wachtwoord"</string>
+    <string name="apn_server">"Server"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"MMS-proxy"</string>
+    <string name="apn_mms_port">"MMS-poort"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APN-type"</string>
+    <string name="menu_delete">"APN verwijderen"</string>
+    <string name="menu_new">"Nieuwe APN"</string>
+    <string name="menu_save">"Opslaan"</string>
+    <string name="menu_cancel">"Weggooien"</string>
+    <string name="error_title">"Let op"</string>
+    <string name="error_name_empty">"Het veld \'Naam\' mag niet leeg zijn."</string>
+    <string name="error_apn_empty">"De APN mag niet leeg zijn."</string>
+    <string name="error_mcc_not3">"MCC-veld moet 3 cijfers bevatten."</string>
+    <string name="error_mnc_not23">"MNC-veld moet 2 of 3 cijfers bevatten."</string>
+    <string name="master_clear_title">"Terugzetten op fabrieksinstellingen"</string>
+    <string name="master_clear_summary">"Hiermee worden alle gegevens op de telefoon gewist"</string>
+    <string name="master_clear_desc">"Met deze actie wordt de telefoon teruggezet op de fabrieksinstellingen. Alle gegevens en gedownloade toepassingen worden gewist!"</string>
+    <string name="master_clear_button_text">"Telefoon opnieuw instellen"</string>
+    <string name="master_clear_final_desc">"Telefoon opnieuw instellen en alle gegevens en toepassingen wissen? Actie kan niet ongedaan worden gemaakt!"</string>
+    <string name="master_clear_final_button_text">"Alles wissen"</string>
+    <string name="master_clear_gesture_prompt">"Teken uw ontgrendelingspatroon"</string>
+    <string name="master_clear_gesture_explanation">"U moet uw ontgrendelingspatroon tekenen om het opnieuw instellen van de telefoon te bevestigen."</string>
+    <string name="master_clear_failed">"Niet opnieuw ingesteld, omdat de service \'Systeem wissen\' niet beschikbaar is."</string>
+    <string name="media_format_title">"SD-kaart formatteren."</string>
+    <string name="media_format_summary">"Hiermee worden alle gegevens op de SD-kaart gewist"</string>
+    <string name="media_format_desc">"Deze actie wist de gegevens van de SD-kaart die in de telefoon is geplaatst. ALLE gegevens op de kaart gaan dan verloren."</string>
+    <string name="media_format_button_text">"SD-kaart formatteren"</string>
+    <string name="media_format_final_desc">"Wilt u de SD-kaart formatteren en al uw mediabestanden wissen? Deze actie kan niet ongedaan worden gemaakt."</string>
+    <string name="media_format_final_button_text">"Alles wissen"</string>
+    <string name="media_format_gesture_prompt">"Teken uw deblokkeringspatroon"</string>
+    <string name="media_format_gesture_explanation">"U moet uw deblokkeringspatroon tekenen om het formatteren van een SD-kaart te bevestigen."</string>
+    <string name="call_settings_title">"Oproepinstellingen"</string>
+    <string name="call_settings_summary">"Voicemail, oproepen doorschakelen, wisselgesprek, beller-id instellen."</string>
+    <string name="network_settings_title">"Mobiele netwerken"</string>
+    <string name="network_settings_summary">"Opties voor roaming, netwerken, APN\'s instellen"</string>
+    <string name="location_title">"Mijn locatiebronnen"</string>
+    <string name="location_network_based">"Draadloze netwerken gebruiken"</string>
+    <string name="location_networks_disabled">"Locatie in toepassingen (zoals Maps) bekijken via draadloze netwerken"</string>
+    <string name="location_neighborhood_level">"Locatie bepaald door Wi-Fi en/of mobiele netwerken"</string>
+    <string name="location_gps">"GPS-satellieten inschakelen"</string>
+    <string name="location_street_level">"Bij locatie bepalen nauwkeurig tot op straatniveau (deselecteren om acculading te sparen)"</string>
+    <string name="location_gps_disabled">"Locatie bepalen tot op straatniveau (meer stroom nodig en weergave van lucht)"</string>
+    <string name="about_settings">"Over de telefoon"</string>
+    <string name="about_settings_summary">"Juridische info, telefoonstatus, softwareversie weergeven"</string>
+    <string name="legal_information">"Juridische informatie"</string>
+    <string name="contributors_title">"Bijdragers"</string>
+    <string name="copyright_title">"Auteursrecht"</string>
+    <string name="license_title">"Licentie"</string>
+    <string name="terms_title">"Algemene voorwaarden"</string>
+    <string name="settings_license_activity_title">"Open-sourcelicenties"</string>
+    <string name="settings_license_activity_unavailable">"Er is een probleem bij het laden van de licenties."</string>
+    <string name="settings_license_activity_loading">"Laden..."</string>
+    <string name="lock_settings_title">"Ontgrendelingspatroon scherm"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Ontgrendelingspatroon wijzigen"</string>
+    <string name="lockpattern_need_to_unlock">"Opgeslagen patroon bevestigen"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Probeer het opnieuw:"</string>
+    <string name="lockpattern_recording_intro_header">"Teken een ontgrendelingspatroon"</string>
+    <string name="lockpattern_recording_intro_footer">"Druk op \'Menu\' voor hulp."</string>
+    <string name="lockpattern_recording_inprogress">"Haal uw vinger van het scherm als u klaar bent."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Verbind minimaal <xliff:g id="NUMBER">%d</xliff:g> punten. Probeer het opnieuw:"</string>
+    <string name="lockpattern_pattern_entered_header">"Patroon opgenomen!"</string>
+    <string name="lockpattern_need_to_confirm">"Teken patroon nogmaals ter bevestiging:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Uw nieuwe ontgrendelingspatroon:"</string>
+    <string name="lockpattern_confirm_button_text">"Bevestigen"</string>
+    <string name="lockpattern_restart_button_text">"Opnieuw tekenen"</string>
+    <string name="lockpattern_retry_button_text">"Opnieuw proberen"</string>
+    <string name="lockpattern_continue_button_text">"Doorgaan"</string>
+    <string name="lockpattern_settings_title">"Deblokkeringspatroon"</string>
+    <string name="lockpattern_settings_enable_title">"Patroon vereist"</string>
+    <string name="lockpattern_settings_enable_summary">"U moet een patroon tekenen om het scherm te ontgrendelen"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Zichtbaar patroon gebruiken"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Tastbare feedback gebruiken"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Ontgrendelingspatroon instellen"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Ontgrendelingspatroon wijzigen"</string>
+    <string name="lockpattern_settings_help_how_to_record">"U tekent als volgt een ontgrendelingspatroon"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Te veel onjuiste pogingen!"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Probeer het over <xliff:g id="NUMBER">%d</xliff:g> seconden opnieuw."</string>
+    <string name="skip_button_label">"Annuleren"</string>
+    <string name="next_button_label">"Volgende"</string>
+    <string name="lock_title">"Uw telefoon beveiligen"</string>
+    <string name="lock_intro_message"><font size="17">"Beveilig uw telefoon tegen ongeoorloofd gebruik door het instellen van een persoonlijk schermontgrendelingspatroon. "\n<font height="17">\n</font><b>"1"</b>"  Op het volgende scherm ziet u hoe een voorbeeldpatroon wordt getekend. "\n<font height="17">\n</font><b>"2"</b>"  Teken uw eigen persoonlijke deblokkeringspatroon als het voorbeeld is voltooid. U kunt verschillende patronen uitproberen, maar u moet minimaal vier punten met elkaar verbinden. "\n<font height="17">\n</font><b>"3"</b>"  Teken uw patroon nogmaals ter bevestiging. "\n<font height="17">\n</font><b>"Bent u er klaar voor? Selecteer \'Volgende\'"</b>". "\n<font height="3">\n</font>"Als u uw telefoon niet wilt beveiligen, selecteert u \'Annuleren\'."</font></string>
+    <string name="lock_example_title">"Voorbeeldpatroon"</string>
+    <string name="lock_example_message">"Verbind minimaal vier punten. "\n" "\n"Selecteer \'Volgende\' als u klaar bent om uw eigen patroon te tekenen."</string>
+    <string name="manageapplications_settings_title">"Toepassingen beheren"</string>
+    <string name="manageapplications_settings_summary">"Geïnstalleerde toepassingen beheren en verwijderen"</string>
+    <string name="applications_settings">"Toepassingen"</string>
+    <string name="applications_settings_summary">"Toepassingen beheren, sneltoetsen voor snelstarten instellen"</string>
+    <string name="applications_settings_header">"Toepassingsinstellingen"</string>
+    <string name="install_applications">"Onbekende bronnen"</string>
+    <string name="install_unknown_applications">"Installatie van andere toepassingen dan Market-toepassingen toestaan"</string>
+    <string name="install_all_warning">"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">"Toepassingsinfo"</string>
+    <string name="storage_label">"Opslagruimte"</string>
+    <string name="auto_launch_label">"Standaard starten"</string>
+    <string name="permissions_label">"Machtigingen"</string>
+    <string name="cache_header_label">"Cachegeheugen"</string>
+    <string name="clear_cache_btn_text">"Cache wissen"</string>
+    <string name="cache_size_label">"Cachegeheugen"</string>
+    <string name="controls_label">"Bedieningselementen"</string>
+    <string name="force_stop">"Nu stoppen"</string>
+    <string name="total_size_label">"Totaal"</string>
+    <string name="application_size_label">"Toepassing"</string>
+    <string name="data_size_label">"Gegevens"</string>
+    <string name="uninstall_text">"Verwijderen"</string>
+    <string name="clear_user_data_text">"Gegevens wissen"</string>
+    <string name="auto_launch_enable_text">"U heeft ervoor gekozen om deze toepassing standaard te starten voor bepaalde acties."</string>
+    <string name="auto_launch_disable_text">"Geen standaardwaarden ingesteld."</string>
+    <string name="clear_activities">"Standaardwaarden wissen"</string>
+    <string name="unknown">"Onbekend"</string>
+    <string name="sort_order_alpha">"Sorteren"</string>
+    <string name="sort_order_size">"Sorteren op grootte"</string>
+    <string name="manage_space_text">"Ruimte beheren"</string>
+    <string name="filter">"Filter"</string>
+    <string name="filter_dlg_title">"Filteropties selecteren"</string>
+    <string name="filter_apps_all">"Alles"</string>
+    <string name="filter_apps_third_party">"Derden"</string>
+    <string name="filter_apps_running">"Wordt uitgevoerd"</string>
+    <string name="loading">"Laden..."</string>
+    <string name="recompute_size">"Grootte opnieuw berekenen..."</string>
+    <string name="clear_data_dlg_title">"Verwijderen"</string>
+    <string name="clear_data_dlg_text">"Alle informatie die u in deze toepassing heeft opgeslagen, wordt definitief verwijderd."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Annuleren"</string>
+    <string name="app_not_found_dlg_title">"Toepassing niet gevonden"</string>
+    <string name="app_not_found_dlg_text">"De toepassing is niet gevonden in de lijst met geïnstalleerde toepassingen."</string>
+    <string name="clear_data_failed">"Kan toepassingsgegevens niet wissen."</string>
+    <string name="security_settings_desc">"Deze toepassing heeft toegang tot de volgende opties van uw telefoon:"</string>
+    <string name="computing_size">"Berekenen…"</string>
+    <string name="invalid_size_value">"Kan grootte van pakket niet berekenen"</string>
+    <string name="empty_list_msg">"U heeft geen toepassingen van derden geïnstalleerd."</string>
+    <string name="language_settings">"Landinstelling en tekst"</string>
+    <string name="language_settings_summary">"Instellingen voor taal en regio, tekstinvoer en autocorrectieopties opgeven"</string>
+    <string name="language_category">"Landinstelling"</string>
+    <string name="text_category">"Tekstinstellingen"</string>
+    <string name="phone_language">"Landinstelling selecteren"</string>
+    <string name="phone_language_summary">"Taal en regio selecteren"</string>
+    <string name="auto_replace">"Automatisch vervangen"</string>
+    <string name="auto_replace_summary">"Corrigeer verkeerd getypte woorden"</string>
+    <string name="auto_caps">"Automatische hoofdletters"</string>
+    <string name="auto_caps_summary">"Eerste letters in zinnen met hoofdletter"</string>
+    <string name="auto_punctuate">"Automatische interpunctie"</string>
+    <string name="hardkeyboard_category">"Instellingen voor vast toetsenbord"</string>
+    <string name="auto_punctuate_summary">"Druk twee keer op de spatiebalk om \'.\' in te voegen"</string>
+    <string name="show_password">"Zichtbare wachtwoorden"</string>
+    <string name="show_password_summary">"Wachtwoord weergeven tijdens het typen"</string>
+    <string name="user_dict_settings_titlebar">"Gebruikerswoordenboek"</string>
+    <string name="user_dict_settings_title">"Gebruikerswoordenboek"</string>
+    <string name="user_dict_settings_summary">"Woorden toevoegen aan en verwijderen uit gebruikerswoordenboek"</string>
+    <string name="user_dict_settings_add_menu_title">"Toevoegen"</string>
+    <string name="user_dict_settings_add_dialog_title">"Toevoegen aan woordenboek"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Bewerken"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Verwijderen"</string>
+    <string name="user_dict_settings_empty_text">"U heeft geen woorden in het gebruikerswoordenboek. U kunt een woord toevoegen via het menu."</string>
+    <string name="testing">"Testen"</string>
+    <string name="testing_phone_info">"Telefooninformatie"</string>
+    <string name="testing_battery_info">"Accu-informatie"</string>
+    <string name="testing_battery_history">"Accugeschiedenis"</string>
+    <string name="quick_launch_title">"Snelstarten"</string>
+    <string name="quick_launch_summary">"Sneltoetsen instellen voor starten toepassingen"</string>
+    <string name="quick_launch_assign_application">"Toepassing toewijzen"</string>
+    <string name="quick_launch_no_shortcut">"Geen sneltoets"</string>
+    <string name="quick_launch_shortcut">"Zoeken + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Wissen"</string>
+    <string name="quick_launch_clear_dialog_message">"Uw sneltoets voor <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) wordt gewist."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Annuleren"</string>
+    <string name="quick_launch_display_mode_applications">"Toepassingen"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Sneltoetsen"</string>
+    <string name="input_methods_settings_title">"Tekstinvoer"</string>
+    <string name="input_methods_settings_summary">"Opties voor tekstinvoer beheren"</string>
+    <string name="input_methods_settings_label_format">"Instellingen voor %s"</string>
+    <string name="development_settings_title">"Ontwikkeling"</string>
+    <string name="development_settings_summary">"Opties instellen voor toepassingsontwikkeling"</string>
+    <string name="enable_adb">"USB-foutopsporing"</string>
+    <string name="enable_adb_summary">"Foutopsporingsmodus bij USB-verbinding"</string>
+    <string name="keep_screen_on">"Stand-by"</string>
+    <string name="keep_screen_on_summary">"Scherm gaat nooit uit tijdens het opladen"</string>
+    <string name="allow_mock_location">"Neplocaties toestaan"</string>
+    <string name="allow_mock_location_summary">"Neplocaties toestaan"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Details voor UID %d"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Netwerkgebruiksdetails voor <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Bytes ontvangen: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Bytes verzonden: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Totaal aantal bytes: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"CPU-gebruiksdetails voor <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Gebruikerstijd:"</string>
+    <string name="battery_history_system_time">"Systeemtijd:"</string>
+    <string name="battery_history_total_time">"Totale tijdsduur:"</string>
+    <string name="battery_history_starts">"Aantal keren gestart: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> dagen, <xliff:g id="HOURS">%2$d</xliff:g> uur, <xliff:g id="MINUTES">%3$d</xliff:g> minuten, <xliff:g id="SECONDS">%4$d</xliff:g> seconden"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> uur, <xliff:g id="MINUTES">%2$d</xliff:g> minuten, <xliff:g id="SECONDS">%3$d</xliff:g> seconden"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> minuten, <xliff:g id="SECONDS">%2$d</xliff:g> seconden"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> seconden"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Pakketten die deze UID delen:"</string>
+    <string name="battery_history_no_data">"Er zijn geen beschikbare gebruiksgegevens van de accu"</string>
+    <string name="battery_history_sensor">"Sensor:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"De sensor wordt gebruikt door de volgende pakketten:"</string>
+    <string name="battery_history_sensor_usage">"<xliff:g id="COUNT">%1$d</xliff:g> keer gebruikt door <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"<xliff:g id="COUNT">%1$d</xliff:g> keer gebruikt door een van de volgende:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Tijd verstreken met scherm aan:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"Op accu:"</string>
+    <string name="battery_history_screen_on_plugged">"Opladen:"</string>
+    <string name="usage_stats_label">"Gebruiksstatistieken"</string>
+    <string name="testing_usage_stats">"Gebruiksstatistieken"</string>
+    <string name="display_order_text">"Sorteren op:"</string>
+    <string name="app_name_label">"Toepassing"</string>
+    <string name="launch_count_label">"Aantal"</string>
+    <string name="usage_time_label">"Gebruikstijd"</string>
+</resources>
diff --git a/res/values-no-nokeys/strings.xml b/res/values-no-nokeys/strings.xml
new file mode 100644
index 0000000..0e080b4
--- /dev/null
+++ b/res/values-no-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Installerte applikasjoner, hurtigtaster"</string>
+</resources>
diff --git a/res/values-nokeys/strings.xml b/res/values-nokeys/strings.xml
new file mode 100644
index 0000000..67a69e7
--- /dev/null
+++ b/res/values-nokeys/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- Applications settings summary, on main settings screen. The summary for the "Applications" item on the main settings screen. Describes what settings are accessible from the "Applications" screen. This is the string to use for devices without a keyboard (so for example, there is no "Quick launch" settings here since that feature requires a keyboard) -->
+    <string name="applications_settings_summary">Manage applications</string>
+    
+</resources>
diff --git a/res/values-pl-nokeys/strings.xml b/res/values-pl-nokeys/strings.xml
new file mode 100644
index 0000000..3971571
--- /dev/null
+++ b/res/values-pl-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Zarządzaj aplikacjami"</string>
+</resources>
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
new file mode 100644
index 0000000..5855618
--- /dev/null
+++ b/res/values-pl/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Ameryka"</item>
+    <item>"Europa"</item>
+    <item>"Afryka"</item>
+    <item>"Azja"</item>
+    <item>"Australia"</item>
+    <item>"Pacyfik"</item>
+    <item>"Wszystkie"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 sekund"</item>
+    <item>"30 sekund"</item>
+    <item>"1 minuta"</item>
+    <item>"2 minuty"</item>
+    <item>"10 minut"</item>
+    <item>"Nigdy nie wygaszaj"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Automatycznie"</item>
+    <item>"Brak"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Brak"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Automatycznie"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP szesnastkowy"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"Po wyłączeniu ekranu"</item>
+    <item>"Nigdy, gdy podłączony"</item>
+    <item>"Nigdy"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Czas użycia"</item>
+    <item>"Licznik uruchomień"</item>
+    <item>"Nazwa aplikacji"</item>
+  </string-array>
+</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
new file mode 100644
index 0000000..51ce9cb
--- /dev/null
+++ b/res/values-pl/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Nieznany"</string>
+    <string name="turn_on_radio">"Włącz radio"</string>
+    <string name="turn_off_radio">"Wyłącz radio"</string>
+    <string name="turn_on_qxdm">"Włącz dziennik QXDM dla karty SD"</string>
+    <string name="turn_off_qxdm">"Wyłącz dziennik QXDM dla karty SD"</string>
+    <string name="radioInfo_menu_viewADN">"Wyświetl książkę adresową na karcie SIM"</string>
+    <string name="radioInfo_menu_viewFDN">"Wyświetl ustalone numery (FDN)"</string>
+    <string name="radioInfo_menu_viewSDN">"Wyświetl numery usług"</string>
+    <string name="radioInfo_menu_getPDP">"Pobierz listę PDP"</string>
+    <string name="radioInfo_menu_enableData">"Włącz połączenie danych"</string>
+    <string name="radioInfo_menu_disableData">"Wyłącz połączenie danych"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Włącz dane podczas uruchamianiu"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Wyłącz dane przy uruchamianiu"</string>
+    <string name="radioInfo_service_in">"Działa"</string>
+    <string name="radioInfo_service_out">"Nie działa"</string>
+    <string name="radioInfo_service_emergency">"Tylko połączenia alarmowe"</string>
+    <string name="radioInfo_service_off">"Radio wyłączone"</string>
+    <string name="radioInfo_roaming_in">"Roaming"</string>
+    <string name="radioInfo_roaming_not">"Brak roamingu"</string>
+    <string name="radioInfo_phone_idle">"Bezczynny"</string>
+    <string name="radioInfo_phone_ringing">"Dzwonienie"</string>
+    <string name="radioInfo_phone_offhook">"Połączenie w toku"</string>
+    <string name="radioInfo_data_disconnected">"Rozłączona"</string>
+    <string name="radioInfo_data_connecting">"Łączenie"</string>
+    <string name="radioInfo_data_connected">"Połączony"</string>
+    <string name="radioInfo_data_suspended">"Zawieszony"</string>
+    <string name="radioInfo_unknown">"nieznane"</string>
+    <string name="radioInfo_display_packets">"pakietów"</string>
+    <string name="radioInfo_display_bytes">"bajtów"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Odłącz kartę SD"</string>
+    <string name="sdcard_format">"Formatuj kartę SD"</string>
+    <string name="small_font">"Mały"</string>
+    <string name="medium_font">"Średni"</string>
+    <string name="large_font">"Duży"</string>
+    <string name="font_size_save">"OK"</string>
+    <string name="sdcard_setting">"Karta SD"</string>
+    <string name="battery_info_status_label">"Stan baterii:"</string>
+    <string name="battery_info_scale_label">"Poziom baterii:"</string>
+    <string name="battery_info_level_label">"Poziom naładowania baterii:"</string>
+    <string name="battery_info_health_label">"Poziom baterii:"</string>
+    <string name="battery_info_technology_label">"Technologia wykonania baterii:"</string>
+    <string name="battery_info_voltage_label">"Napięcie baterii:"</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"Temperatura baterii:"</string>
+    <string name="battery_info_temperature_units">"°C"</string>
+    <string name="battery_info_uptime">"Czas od uruchomienia:"</string>
+    <string name="battery_info_awake_battery">"Czas działania na baterii:"</string>
+    <string name="battery_info_awake_plugged">"Czas pozostawania w stanie wybudzenia podczas ładowania:"</string>
+    <string name="battery_info_screen_on">"Czas włączenia ekranu:"</string>
+    <string name="battery_info_status_unknown">"Nieznany"</string>
+    <string name="battery_info_status_charging">"Ładowanie"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Rozładowywanie"</string>
+    <string name="battery_info_status_not_charging">"Nie ładuje"</string>
+    <string name="battery_info_status_full">"Pełna"</string>
+    <string name="battery_info_health_unknown">"Nieznane"</string>
+    <string name="battery_info_health_good">"Dobry"</string>
+    <string name="battery_info_health_overheat">"Przegrzanie"</string>
+    <string name="battery_info_health_dead">"Rozładowana"</string>
+    <string name="battery_info_health_over_voltage">"Przepięcie"</string>
+    <string name="battery_info_health_unspecified_failure">"Nieznany błąd"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Wykrywalny"</string>
+    <string name="bluetooth_is_discoverable">"Wykrywalny przez <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> s …"</string>
+    <string name="bluetooth_not_discoverable">"Zezwalaj na wykrywanie urządzenia"</string>
+    <string name="bluetooth_devices">"Lista urządzeń"</string>
+    <string name="bluetooth_device_name">"Nazwa urządzenia"</string>
+    <string name="bluetooth_name_not_set">"Nie ustawiono nazwy, wykorzystywana jest nazwa konta"</string>
+    <string name="bluetooth_scan_for_devices">"Wyszukaj urządzenia"</string>
+    <string name="bluetooth_disconnect_blank">"Urządzenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> zostanie odłączone."</string>
+    <string name="bluetooth_connected">"Połączony"</string>
+    <string name="bluetooth_disconnected">"Rozłączona"</string>
+    <string name="bluetooth_disconnecting">"Rozłączanie..."</string>
+    <string name="bluetooth_connecting">"Łączenie..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Paruj z tym urządzeniem"</string>
+    <string name="bluetooth_pairing">"Parowanie..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"zestaw głośnomówiący/słuchawkowy"</string>
+    <string name="progress_scanning">"Przeszukiwanie"</string>
+    <string name="bluetooth_notif_ticker">"Żądanie parowania Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Żądanie parowania"</string>
+    <string name="bluetooth_notif_message">"Zaznacz, aby sparować "</string>
+    <string name="date_and_time">"Ustawienia daty i czasu"</string>
+    <string name="date_time_12_hour_sample">"1:00 (po południu)"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Wybierz strefę czasową"</string>
+    <string name="display_preview_label">"Podgląd:"</string>
+    <string name="display_font_size_label">"Rozmiar czcionki:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Wyślij <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"Rozpocznij <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Konto:"</string>
+    <string name="proxy_clear_text">"Wyczyść"</string>
+    <string name="proxy_port_label">"Port"</string>
+    <string name="proxy_defaultView_text">"Przywróć ustawienia domyślne"</string>
+    <string name="proxy_action_text">"Zapisz"</string>
+    <string name="proxy_hostname_label">"Nazwa hosta"</string>
+    <string name="proxy_error">"Uwaga"</string>
+    <string name="proxy_error_dismiss">"OK"</string>
+    <string name="proxy_error_invalid_host">"Wprowadzona nazwa hosta jest nieprawidłowa."</string>
+    <string name="proxy_error_empty_port">"Należy uzupełnić pole port."</string>
+    <string name="proxy_error_empty_host_set_port">"Pole port musi być puste, jeśli pole host jest puste."</string>
+    <string name="proxy_error_invalid_port">"Wprowadzony port jest nieprawidłowy."</string>
+    <string name="radio_info_signal_location_label">"Lokalizacja:"</string>
+    <string name="radio_info_neighboring_location_label">"Sąsiadujący CID:"</string>
+    <string name="radio_info_data_attempts_label">"Próby danych:"</string>
+    <string name="radio_info_gprs_service_label">"Usługa GPRS:"</string>
+    <string name="radio_info_roaming_label">"Roaming:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Przekierowania połączeń:"</string>
+    <string name="radio_info_ppp_resets_label">"Liczba operacji resetowania PPP od momentu uruchomienia:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM rozłącza się:"</string>
+    <string name="radio_info_current_network_label">"Obecna sieć:"</string>
+    <string name="radio_info_data_successes_label">"Postępy danych:"</string>
+    <string name="radio_info_ppp_received_label">"Otrzymano PPP:"</string>
+    <string name="radio_info_gsm_service_label">"Usługa GSM:"</string>
+    <string name="radio_info_signal_strength_label">"Siła sygnału:"</string>
+    <string name="radio_info_call_status_label">"Stan połączenia:"</string>
+    <string name="radio_info_ppp_sent_label">"Wysłano PPP:"</string>
+    <string name="radio_info_radio_resets_label">"Resetowanie radia:"</string>
+    <string name="radio_info_message_waiting_label">"Wiadomość oczekująca:"</string>
+    <string name="radio_info_phone_number_label">"Numer telefonu:"</string>
+    <string name="radio_info_band_mode_label">"Wybierz pasmo radiowe"</string>
+    <string name="radio_info_network_type_label">"Typ sieci:"</string>
+    <string name="radio_info_set_perferred_label">"Ustaw preferowany typ sieci:"</string>
+    <string name="radio_info_ping_ipaddr">"Wyślij polecenie ping adresu IP:"</string>
+    <string name="radio_info_ping_hostname">"Nazwa hosta dla operacji ping (www.google.pl):"</string>
+    <string name="radio_info_http_client_test">"Test klienta HTTP:"</string>
+    <string name="radio_info_toggle_ciph_label">"Przełącz szyfrowanie"</string>
+    <string name="ping_test_label">"Przeprowadź test ping"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Aktualizuj"</string>
+    <string name="radio_info_smsc_refresh_label">"Odśwież"</string>
+    <string name="radio_info_toggle_dns_check_label">"Przełącz sprawdzanie DNS"</string>
+    <string name="band_mode_title">"Ustaw pasmo GSM/UMTS"</string>
+    <string name="band_mode_loading">"Ładowanie listy pasm..."</string>
+    <string name="band_mode_set">"Ustaw"</string>
+    <string name="band_mode_failed">"Niepowodzenie"</string>
+    <string name="band_mode_succeeded">"Powodzenie"</string>
+    <string name="sdcard_changes_instructions">"Zmiany zostaną wprowadzone po ponownym podłączeniu przewodu USB"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Włącz pamięć masową USB"</string>
+    <string name="sdcard_settings_total_bytes_label">"Łącznie bajtów:"</string>
+    <string name="sdcard_settings_not_present_status">"Brak karty SD"</string>
+    <string name="sdcard_settings_available_bytes_label">"Dostępnych bajtów:"</string>
+    <string name="sdcard_settings_mass_storage_status">"Karta SD wykorzystywana jest jako pamięć masowa"</string>
+    <string name="sdcard_settings_unmounted_status">"Można teraz bezpiecznie usunąć kartę SD"</string>
+    <string name="sdcard_settings_bad_removal_status">"Karta SD została usunięta, gdy była używana!"</string>
+    <string name="sdcard_settings_used_bytes_label">"Wykorzystanych bajtów:"</string>
+    <string name="sdcard_settings_scanning_status">"Przeszukiwanie karty SD w poszukiwaniu multimediów..."</string>
+    <string name="sdcard_settings_read_only_status">"Karta SD jest podłączona tylko do odczytu"</string>
+    <string name="next_label">"Dalej"</string>
+    <string name="language_picker_title">"Ustawienia regionalne"</string>
+    <string name="select_your_language">"Wybierz język"</string>
+    <string name="activity_picker_label">"Wybierz czynność"</string>
+    <string name="device_info_label">"Informacje o urządzeniu"</string>
+    <string name="battery_info_label">"Informacje o baterii"</string>
+    <string name="battery_history_label">"Historia baterii"</string>
+    <string name="display_label">"Wyświetlacz"</string>
+    <string name="phone_info_label">"Informacje o telefonie"</string>
+    <string name="sd_card_settings_label">"Karta SD"</string>
+    <string name="proxy_settings_label">"Ustawienia proxy"</string>
+    <string name="cancel">"Anuluj"</string>
+    <string name="settings_label">"Ustawienia"</string>
+    <string name="airplane_mode">"Tryb samolotowy"</string>
+    <string name="airplane_mode_summary">"Wyłącz wszystkie połączenia bezprzewodowe"</string>
+    <string name="airplane_mode_turning_on">"Wyłączanie połączeń bezprzewodowych..."</string>
+    <string name="airplane_mode_turning_off">"Włączanie połączeń bezprzewodowych..."</string>
+    <string name="radio_controls_title">"Opcje bezprzewodowe"</string>
+    <string name="radio_controls_summary">"Zarządzaj Wi-Fi, Bluetooth, trybem samolotowym i sieciami komórkowymi"</string>
+    <string name="date_and_time_settings_title">"Data i czas"</string>
+    <string name="date_and_time_settings_summary">"Ustaw format daty, czasu i strefę czasową"</string>
+    <string name="date_time_auto">"Automatycznie"</string>
+    <string name="date_time_auto_summaryOn">"Skorzystaj z wartości dostarczonych przez sieć"</string>
+    <string name="date_time_auto_summaryOff">"Skorzystaj z informacji dostarczonych przez operatora"</string>
+    <string name="date_time_24hour">"Format 24-godzinny"</string>
+    <string name="date_time_set_time">"Ustaw czas"</string>
+    <string name="date_time_set_timezone">"Wybierz strefę czasową"</string>
+    <string name="date_time_set_date">"Ustaw datę"</string>
+    <string name="date_time_date_format">"Wybierz format daty"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Sortuj alfabetycznie"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Sortuj według strefy czasowej"</string>
+    <string name="security_settings_title">"Położenie i zabezpieczenia"</string>
+    <string name="security_settings_summary">"Ustaw Moją lokalizację, blokadę ekranu, blokadę karty SIM"</string>
+    <string name="security_passwords_title">"Hasła"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Włącz Bluetooth"</string>
+    <string name="bluetooth_settings">"Ustawienia Bluetooth"</string>
+    <string name="bluetooth_settings_title">"Ustawienia Bluetooth"</string>
+    <string name="bluetooth_settings_summary">"Zarządzaj połączeniami, ustaw nazwę urządzenia i możliwość wykrycia"</string>
+    <string name="bluetooth_pin_entry">"Żądanie parowania Bluetooth"</string>
+    <string name="bluetooth_device_info">"Informacje o urządzeniu Bluetooth"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Wpisz kod PIN, aby sparować."\n"(Spróbuj użyć kodu 0000 lub 1234.)"</string>
+    <string name="bluetooth_error_title">"Uwaga"</string>
+    <string name="bluetooth_pairing_error_message">"Wystąpił problem podczas parowania z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_pairing_pin_error_message">"Wystąpił problem podczas parowania z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Wpisany kod PIN jest nieprawidłowy."</string>
+    <string name="bluetooth_connecting_error_message">"Wystąpił problem podczas łączenia z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_preference_scan_title">"Wyszukaj urządzenia"</string>
+    <string name="bluetooth_device_context_connect">"Połącz"</string>
+    <string name="bluetooth_device_context_disconnect">"Rozłącz"</string>
+    <string name="bluetooth_device_context_pair_connect">"Sparuj i połącz"</string>
+    <string name="bluetooth_device_context_unpair">"Rozłącz parę"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Rozłącz i anuluj parowanie"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Opcje…"</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Połącz z siecią…"</string>
+    <string name="bluetooth_profile_a2dp">"Multimedia"</string>
+    <string name="bluetooth_profile_headset">"Telefon"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Połączono z funkcją audio multimediów"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Połączono z funkcją audio telefonu"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Połączono z funkcją audio telefonu i multimediów"</string>
+    <string name="bluetooth_device_advanced_title">"Opcje urządzenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Połącz"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Połącz z urządzeniem Bluetooth"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Profile"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Połączono z funkcją audio multimediów"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Połączono z funkcją audio telefonu"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Użyj dla funkcji audio multimediów"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Użyj dla funkcji audio telefonu"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Włącz Wi-Fi"</string>
+    <string name="wifi_settings">"Ustawienia Wi-Fi"</string>
+    <string name="wifi_settings_category">"Ustawienia Wi-Fi"</string>
+    <string name="wifi_settings_summary">"Konfiguracja i zarządzanie punktami dostępowymi sieci bezprzewodowej"</string>
+    <string name="forget_network">"Zapomnij"</string>
+    <string name="wifi_status">"Stan"</string>
+    <string name="wifi_link_speed">"Prędkość"</string>
+    <string name="wifi_signal_3">"Doskonała"</string>
+    <string name="wifi_signal_2">"Dobra"</string>
+    <string name="wifi_signal_1">"Dostateczna"</string>
+    <string name="wifi_signal_0">"Słaba"</string>
+    <string name="security">"Zabezpieczenia"</string>
+    <string name="wifi_security_open">"Otwarta"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Nieznane"</string>
+    <string name="wifi_security_verbose_open">"Sieć otwarta"</string>
+    <string name="wifi_security_verbose_wep">"Zabezpieczona za pomocą WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Zabezpieczona za pomocą WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Zabezpieczona za pomocą WPA2"</string>
+    <string name="ip_address">"Adres IP"</string>
+    <string name="signal">"Siła sygnału"</string>
+    <string name="wifi_starting">"Włączanie..."</string>
+    <string name="wifi_stopping">"Wyłączanie..."</string>
+    <string name="wifi_error">"Błąd"</string>
+    <string name="error_starting">"Nie można uruchomić Wi-Fi"</string>
+    <string name="error_stopping">"Nie można zatrzymać działania Wi-Fi"</string>
+    <string name="error_scanning">"Nie można wyszukać sieci"</string>
+    <string name="error_connecting">"Nie można połączyć z siecią"</string>
+    <string name="error_saving">"Nie można zapisać sieci"</string>
+    <string name="connect">"Połącz"</string>
+    <string name="connect_to_blank">"Połącz z siecią <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Hasło sieci bezprzewodowej"</string>
+    <string name="please_type_hex_key">"Klucz szesnastkowy WEP (0–9, A–F)"</string>
+    <string name="wifi_show_password">"Pokaż hasło."</string>
+    <string name="scan_wifi">"Przeszukaj"</string>
+    <string name="summary_not_in_range">"Poza zasięgiem"</string>
+    <string name="summary_remembered">"Zapamiętane"</string>
+    <string name="summary_connection_failed">"Połączenie nieudane. Wybierz, aby spróbować ponownie"</string>
+    <string name="wifi_access_points">"Sieci Wi-Fi"</string>
+    <string name="wifi_type_ssid">"Identyfikator SSID sieci"</string>
+    <string name="wifi_security">"Zabezpieczenia"</string>
+    <string name="wifi_save_config">"Zapisz"</string>
+    <string name="wifi_password_unchanged">"(niezmienione)"</string>
+    <string name="wifi_add_other_network">"Dodaj sieć Wi-Fi"</string>
+    <string name="wifi_notify_open_networks">"Powiadomienie sieciowe"</string>
+    <string name="wifi_notify_open_networks_summary">"Powiadom mnie, gdy będę w zasięgu otwartej sieci"</string>
+    <string name="wifi_password_incorrect_error">"Wprowadzone hasło sieci jest nieprawidłowe. Spróbuj ponownie."</string>
+    <string name="wifi_generic_connection_error">"Wystąpił problem podczas łączenia z siecią. Spróbuj ponownie."</string>
+    <string name="wifi_menu_advanced">"Zaawansowane"</string>
+    <string name="wifi_ip_settings_titlebar">"Ustawienia IP"</string>
+    <string name="wifi_ip_settings_menu_save">"Zapisz"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Anuluj"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Wprowadź poprawny adres IP."</string>
+    <string name="wifi_use_static_ip">"Statyczny adres IP"</string>
+    <string name="wifi_ip_address">"Adres IP"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Brama"</string>
+    <string name="wifi_netmask">"Maska sieci"</string>
+    <string name="wifi_context_menu_connect">"Połącz z siecią"</string>
+    <string name="wifi_context_menu_forget">"Zapomnij sieć"</string>
+    <string name="wifi_context_menu_change_password">"Zmień hasło"</string>
+    <string name="wifi_advanced_titlebar">"Zaawansowane"</string>
+    <string name="wifi_setting_num_channels_title">"Domena standaryzacyjna"</string>
+    <string name="wifi_setting_num_channels_summary">"Wybierz liczbę wykorzystywanych kanałów"</string>
+    <string name="wifi_setting_num_channels_error">"Wystąpił problem podczas ustawiania domeny standaryzacyjnej."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> kanałów"</string>
+    <string name="wifi_setting_sleep_policy_title">"Zasady usypiania Wi-Fi"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Określ, kiedy przełączyć Wi-Fi na komórkowe połączenie danych"</string>
+    <string name="wifi_setting_sleep_policy_error">"Wystąpił problem podczas ustawiania zasad usypiania."</string>
+    <string name="wifi_advanced_mac_address_title">"Adres MAC"</string>
+    <string name="fragment_status_scanning">"Przeszukiwanie..."</string>
+    <string name="fragment_status_connecting">"Łączenie z <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"Uwierzytelnianie w sieci <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_obtaining_ip">"Pozyskiwanie adresu IP od <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_connected">"Połączony z <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Rozłączanie z <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_disconnected">"Rozłączona"</string>
+    <string name="fragment_status_failed">"Niepowodzenie"</string>
+    <string name="status_scanning">"Przeszukiwanie..."</string>
+    <string name="status_connecting">"Łączenie..."</string>
+    <string name="status_authenticating">"Uwierzytelnianie..."</string>
+    <string name="status_obtaining_ip">"Pozyskiwanie adresu..."</string>
+    <string name="status_connected">"Połączony"</string>
+    <string name="status_disconnecting">"Rozłączanie..."</string>
+    <string name="status_disconnected">"Rozłączona"</string>
+    <string name="status_failed">"Niepowodzenie"</string>
+    <string name="sound_and_display_settings">"Dźwięk i wyświetlacz"</string>
+    <string name="sound_settings">"Ustawienia dźwięku"</string>
+    <string name="sound_and_display_settings_summary">"Ustaw dzwonki, powiadomienia, jasność ekranu"</string>
+    <string name="silent_mode_title">"Tryb cichy"</string>
+    <string name="silent_mode_summary">"Wszystkie dźwięki oprócz multimediów i alarmów są wyciszone"</string>
+    <string name="ringtone_title">"Dzwonek telefonu"</string>
+    <string name="ringtone_summary">"Ustaw domyślny dzwonek dla połączeń przychodzących"</string>
+    <string name="ring_volume_title">"Głośność dzwonka"</string>
+    <string name="ring_volume_summary">"Ustaw głośność połączeń przychodzących i powiadomień"</string>
+    <string name="vibrate_title">"Wibracje telefonu"</string>
+    <string name="vibrate_summary">"Wibracje telefonu przy połączeniach przychodzących"</string>
+    <string name="notification_sound_title">"Powiadomienia"</string>
+    <string name="notification_sound_summary">"Ustaw domyślny dzwonek dla powiadomień"</string>
+    <string name="incoming_call_volume_title">"Głośność połączeń przychodzących"</string>
+    <string name="notification_volume_title">"Głośność powiadomienia"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Użyj głośności połączeń przychodzących dla powiadomień"</string>
+    <string name="notification_sound_dialog_title">"Wybierz dzwonek powiadomienia"</string>
+    <string name="media_volume_title">"Głośność multimediów"</string>
+    <string name="media_volume_summary">"Ustaw głośność muzyki oraz filmów wideo"</string>
+    <string name="dtmf_tone_enable_title">"Wybieranie numeru"</string>
+    <string name="dtmf_tone_enable_summary_on">"Odtwarzaj dźwięki podczas używania panelu wybierania numeru"</string>
+    <string name="dtmf_tone_enable_summary_off">"Odtwarzaj dźwięki podczas wybierania numeru"</string>
+    <string name="sound_effects_enable_title">"Dotyk ekranu"</string>
+    <string name="sound_effects_enable_summary_on">"Odtwarzaj dźwięk podczas wybierania opcji na ekranie"</string>
+    <string name="sound_effects_enable_summary_off">"Odtwarzaj dźwięk podczas wybierania opcji na ekranie"</string>
+    <string name="play_media_notification_sounds_enable_title">"Powiadomienia karty SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Wyłącz dźwięki powiadomień dla karty SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Włącz dźwięki powiadomień dla karty SD"</string>
+    <string name="sync_settings">"Synchronizacja danych"</string>
+    <string name="sync_settings_summary">"Wybierz, które aplikacje są synchronizowane"</string>
+    <string name="display_settings">"Ustawienia wyświetlacza"</string>
+    <string name="animations_title">"Animacja"</string>
+    <string name="animations_summary_on">"Pokazuj animację podczas otwierania i zamykania okien"</string>
+    <string name="animations_summary_off">"Pokazuj animację podczas otwierania i zamykania okien"</string>
+    <string name="brightness">"Jasność ekranu"</string>
+    <string name="brightness_summary">"Dostosuj jasność ekranu"</string>
+    <string name="screen_timeout">"Wygaszanie ekranu"</string>
+    <string name="screen_timeout_summary">"Dostosuj opóźnienie automatycznego wyłączenia ekranu"</string>
+    <string name="sim_lock_settings">"Ustawienia blokady karty SIM"</string>
+    <string name="sim_lock_settings_category">"Ustaw blokadę SIM"</string>
+    <string name="sim_lock_settings_title">"Blokada karty SIM"</string>
+    <string name="sim_pin_toggle">"Zablokuj kartę SIM"</string>
+    <string name="sim_lock_on">"Aby korzystać z telefonu, należy wprowadzić kod PIN"</string>
+    <string name="sim_lock_off">"Aby korzystać z telefonu, należy wprowadzić kod PIN"</string>
+    <string name="sim_pin_change">"Zmień kod PIN do karty SIM"</string>
+    <string name="sim_enter_pin">"Kod PIN do karty SIM"</string>
+    <string name="sim_enable_sim_lock">"Zablokuj kartę SIM"</string>
+    <string name="sim_disable_sim_lock">"Odblokuj kartę SIM"</string>
+    <string name="sim_enter_old">"Stary kod PIN do karty SIM"</string>
+    <string name="sim_enter_new">"Nowy kod PIN do karty SIM"</string>
+    <string name="sim_reenter_new">"Wpisz ponownie nowy kod PIN"</string>
+    <string name="sim_change_pin">"Kod PIN do karty SIM"</string>
+    <string name="sim_bad_pin">"Nieprawidłowy kod PIN!"</string>
+    <string name="sim_pins_dont_match">"Kody PIN nie pasują do siebie!"</string>
+    <string name="sim_change_failed">"Nie można zmienić kodu PIN."\n"Prawdopodobnie błędny kod PIN."</string>
+    <string name="sim_change_succeeded">"Kod PIN do karty SIM został pomyślnie zmieniony"</string>
+    <string name="sim_lock_failed">"Nie można zmienić stanu blokady karty SIM."\n"Prawdopodobnie zły kod PIN."</string>
+    <string name="sim_enter_ok">"OK"</string>
+    <string name="sim_enter_cancel">"Anuluj"</string>
+    <string name="device_info_settings">"Stan telefonu"</string>
+    <string name="system_update_settings_list_item_title">"Aktualizacje systemowe"</string>
+    <string name="system_update_settings_list_item_summary">"Sprawdź aktualizacje systemu"</string>
+    <string name="firmware_version">"Wersja oprogramowania"</string>
+    <string name="model_number">"Numer modelu"</string>
+    <string name="baseband_version">"Pasmo podstawowe"</string>
+    <string name="kernel_version">"Wersja jądra"</string>
+    <string name="build_number">"Numer wersji"</string>
+    <string name="device_info_not_available">"Niedostępna"</string>
+    <string name="device_status_activity_title">"Informacje o telefonie"</string>
+    <string name="device_status">"Informacje o telefonie"</string>
+    <string name="device_status_summary">"IMEI, numer telefonu, sygnał itp."</string>
+    <string name="storage_settings_title">"Karta SD i pamięć telefonu"</string>
+    <string name="storage_settings_summary">"Odłącz kartę SD, pokaż ilość dostępnej pamięci"</string>
+    <string name="status_number">"Numer telefonu"</string>
+    <string name="status_network_type">"Typ sieci komórkowej"</string>
+    <string name="status_data_state">"Stan sieci komórkowej"</string>
+    <string name="status_service_state">"Stan usługi"</string>
+    <string name="status_signal_strength">"Siła sygnału"</string>
+    <string name="status_roaming">"Roaming"</string>
+    <string name="status_operator">"Sieć"</string>
+    <string name="status_wifi_mac_address">"Adres MAC karty Wi-Fi"</string>
+    <string name="status_bt_address">"Adres Bluetooth"</string>
+    <string name="status_unavailable">"Niedostępny"</string>
+    <string name="status_network_traffic_stats">"Wykorzystanie sieci"</string>
+    <string name="status_network_traffic_summary">"Wysłane: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Odebrane: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Czas działania"</string>
+    <string name="status_awake_time">"Czas działania (włączony)"</string>
+    <string name="internal_memory">"Pamięć wewnętrzna telefonu"</string>
+    <string name="sd_memory">"Karta SD"</string>
+    <string name="memory_available">"Dostępne miejsce"</string>
+    <string name="memory_size">"Łączna pojemność"</string>
+    <string name="sd_eject">"Odmontuj kartę SD"</string>
+    <string name="sd_eject_summary">"Odmontuj kartę SD, aby bezpiecznie ją usunąć"</string>
+    <string name="sd_format">"Formatuj kartę SD"</string>
+    <string name="sd_format_summary">"Formatuj (wymaż) kartę SD"</string>
+    <string name="sd_unavailable">"Niedostępna"</string>
+    <string name="read_only">" (Tylko do odczytu)"</string>
+    <string name="battery_status_title">"Stan baterii"</string>
+    <string name="battery_level_title">"Poziom naładowania baterii"</string>
+    <string name="apn_settings">"Nazwy APN"</string>
+    <string name="apn_edit">"Edytuj punkt dostępowy"</string>
+    <string name="apn_not_set">"&lt;Nie ustawione&gt;"</string>
+    <string name="apn_name">"Nazwa"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"Port"</string>
+    <string name="apn_user">"Nazwa użytkownika"</string>
+    <string name="apn_password">"Hasło"</string>
+    <string name="apn_server">"Serwer"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"Proxy dla wiadomości MMS"</string>
+    <string name="apn_mms_port">"Port MMS"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"Typ APN"</string>
+    <string name="menu_delete">"Usuń APN"</string>
+    <string name="menu_new">"Nowa nazwa APN"</string>
+    <string name="menu_save">"Zapisz"</string>
+    <string name="menu_cancel">"Odrzuć"</string>
+    <string name="error_title">"Uwaga"</string>
+    <string name="error_name_empty">"Pole Nazwa nie może być puste"</string>
+    <string name="error_apn_empty">"Pole APN nie może być puste."</string>
+    <string name="error_mcc_not3">"Pole MMC musi zawierać 3 cyfry."</string>
+    <string name="error_mnc_not23">"Pole MNC musi zawierać 2 lub 3 cyfry."</string>
+    <string name="master_clear_title">"Ustawienia fabryczne"</string>
+    <string name="master_clear_summary">"Wymazuje wszystkie dane w telefonie"</string>
+    <string name="master_clear_desc">"Ta czynność spowoduje przywrócenie w telefonie ustawień fabrycznych i wymazanie wszystkich danych oraz pobranych aplikacji!"</string>
+    <string name="master_clear_button_text">"Resetuj telefon"</string>
+    <string name="master_clear_final_desc">"Zresetować telefon, wymazując wszystkie dane i aplikacje? Działania nie można cofnąć!"</string>
+    <string name="master_clear_final_button_text">"Wymaż wszystko"</string>
+    <string name="master_clear_gesture_prompt">"Narysuj wzór odblokowania"</string>
+    <string name="master_clear_gesture_explanation">"Aby potwierdzić resetowanie telefonu, musisz narysować swój wzór odblokowania."</string>
+    <string name="master_clear_failed">"Nie wykonano resetowania, ponieważ usługa czyszczenia systemu nie jest dostępna."</string>
+    <string name="media_format_title">"Formatuj kartę SD."</string>
+    <string name="media_format_summary">"Wymazuje wszystkie dane z karty SD"</string>
+    <string name="media_format_desc">"Ta akcja spowoduje wymazanie danych z karty SD w telefonie. WSZYSTKIE dane na karcie zostaną utracone."</string>
+    <string name="media_format_button_text">"Formatuj kartę SD"</string>
+    <string name="media_format_final_desc">"Czy sformatować kartę SD i wymazać wszystkie multimedia? Nie można cofnąć tej akcji!"</string>
+    <string name="media_format_final_button_text">"Wymaż wszystko"</string>
+    <string name="media_format_gesture_prompt">"Narysuj wzorzec odblokowania"</string>
+    <string name="media_format_gesture_explanation">"Aby potwierdzić formatowanie karty SD, należy narysować swój wzorzec do odblokowania."</string>
+    <string name="call_settings_title">"Ustawienia połączeń"</string>
+    <string name="call_settings_summary">"Poczta głosowa, przekierowania połączeń, poł. oczekujące, ID dzwoniącego"</string>
+    <string name="network_settings_title">"Sieci komórkowe"</string>
+    <string name="network_settings_summary">"Ustaw opcje roamingu, sieci, nazw APN"</string>
+    <string name="location_title">"Źródło Mojej lokalizacji"</string>
+    <string name="location_network_based">"Użyj sieci Wi-Fi"</string>
+    <string name="location_networks_disabled">"Zobacz położenie w aplikacjach (takich jak Mapy), korzystając z sieci bezprzewodowych"</string>
+    <string name="location_neighborhood_level">"Położenie określane jest za pomocą Wi-Fi i/lub sieci komórkowych."</string>
+    <string name="location_gps">"Użyj satelit GPS"</string>
+    <string name="location_street_level">"Ustalanie położenia z dokładnością do ulicy (wyłącz, aby oszczędzać baterię)"</string>
+    <string name="location_gps_disabled">"Podaje dokładne położenie (zużywa więcej baterii, działa na zewnątrz)"</string>
+    <string name="about_settings">"Informacje o telefonie"</string>
+    <string name="about_settings_summary">"Wyświetl informacje prawne, stan telefonu, wersję oprogramowania"</string>
+    <string name="legal_information">"Informacje prawne"</string>
+    <string name="contributors_title">"Współautorzy"</string>
+    <string name="copyright_title">"Prawa autorskie"</string>
+    <string name="license_title">"Licencja"</string>
+    <string name="terms_title">"Warunki i zasady korzystania"</string>
+    <string name="settings_license_activity_title">"Licencje open source"</string>
+    <string name="settings_license_activity_unavailable">"Wystąpił problem podczas ładowania licencji."</string>
+    <string name="settings_license_activity_loading">"Ładowanie..."</string>
+    <string name="lock_settings_title">"Wzór odblokowania ekranu"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Zmień wzór odblokowania"</string>
+    <string name="lockpattern_need_to_unlock">"Potwierdź zapisany wzór"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Niestety, spróbuj ponownie:"</string>
+    <string name="lockpattern_recording_intro_header">"Narysuj wzór odblokowania"</string>
+    <string name="lockpattern_recording_intro_footer">"Naciśnij Menu, aby uzyskać pomoc."</string>
+    <string name="lockpattern_recording_inprogress">"Puść palec, gdy gotowe."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Połącz co najmniej <xliff:g id="NUMBER">%d</xliff:g> punktów. Spróbuj jeszcze raz:"</string>
+    <string name="lockpattern_pattern_entered_header">"Wzór został nagrany!"</string>
+    <string name="lockpattern_need_to_confirm">"Narysuj wzór ponownie, aby potwierdzić:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Nowy wzór odblokowania:"</string>
+    <string name="lockpattern_confirm_button_text">"Potwierdź"</string>
+    <string name="lockpattern_restart_button_text">"Narysuj ponownie"</string>
+    <string name="lockpattern_retry_button_text">"Ponów próbę"</string>
+    <string name="lockpattern_continue_button_text">"Dalej"</string>
+    <string name="lockpattern_settings_title">"Wzór odblokowania"</string>
+    <string name="lockpattern_settings_enable_title">"Wymagaj wzoru"</string>
+    <string name="lockpattern_settings_enable_summary">"Trzeba narysować wzór, aby odblokować ekran"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Wzór jest widoczny"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Wibracje przy rysowaniu"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Ustaw wzór odblokowania"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Zmień wzór odblokowania"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Jak narysować wzór odblokowania"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Zbyt wiele nieudanych prób!"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Spróbuj ponownie za <xliff:g id="NUMBER">%d</xliff:g> sekund."</string>
+    <string name="skip_button_label">"Anuluj"</string>
+    <string name="next_button_label">"Dalej"</string>
+    <string name="lock_title">"Zabezpieczanie telefonu"</string>
+    <string name="lock_intro_message"><font size="17">"Chroń swój telefon przed nieuprawnionym użyciem przez stworzenie osobistego wzoru odblokowania ekranu. "\n<font height="17">\n</font><b>"1"</b>" Obejrzyj rysowanie przykładowego wzoru na następnym ekranie. "\n<font height="17">\n</font><b>"2"</b>" Następnie narysuj swój własny wzór odblokowania. Eksperymentuj z różnymi wzorami, ale połącz co najmniej 4 punkty. "\n<font height="17">\n</font><b>"3"</b>" Narysuj swój wzór ponownie dla potwierdzenia. "\n<font height="17">\n</font><b>"Możemy zaczynać? Wybierz „Dalej”"</b>". "\n<font height="3">\n</font>"Aby zrezygnować z ustawiania blokady, wybierz „Anuluj”."</font></string>
+    <string name="lock_example_title">"Przykładowy wzór"</string>
+    <string name="lock_example_message">"Połącz co najmniej cztery kropki."\n" "\n"Wybierz polecenie „Dalej”, aby narysować własny wzór."</string>
+    <string name="manageapplications_settings_title">"Zarządzaj aplikacjami"</string>
+    <string name="manageapplications_settings_summary">"Zarządzaj zainstalowanymi aplikacjami oraz usuwaj je"</string>
+    <string name="applications_settings">"Aplikacje"</string>
+    <string name="applications_settings_summary">"Zarządzaj aplikacjami, skonfiguruj skróty szybkiego uruchamiania"</string>
+    <string name="applications_settings_header">"Ustawienia aplikacji"</string>
+    <string name="install_applications">"Nieznane źródła"</string>
+    <string name="install_unknown_applications">"Pozwól na instalowanie aplikacji spoza Android Market"</string>
+    <string name="install_all_warning">"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">"Informacje o aplikacji"</string>
+    <string name="storage_label">"Pamięć"</string>
+    <string name="auto_launch_label">"Uruchom domyślnie"</string>
+    <string name="permissions_label">"Uprawnienia"</string>
+    <string name="cache_header_label">"Pamięć podręczna"</string>
+    <string name="clear_cache_btn_text">"Wyczyść pamięć podręczną"</string>
+    <string name="cache_size_label">"Pamięć podręczna"</string>
+    <string name="controls_label">"Elementy sterujące"</string>
+    <string name="force_stop">"Wymuś zatrzymanie"</string>
+    <string name="total_size_label">"Razem"</string>
+    <string name="application_size_label">"Aplikacja"</string>
+    <string name="data_size_label">"Dane"</string>
+    <string name="uninstall_text">"Odinstaluj"</string>
+    <string name="clear_user_data_text">"Wyczyść dane"</string>
+    <string name="auto_launch_enable_text">"Wybrano domyślne uruchamianie tej aplikacji dla niektórych czynności."</string>
+    <string name="auto_launch_disable_text">"Brak ustawień domyślnych."</string>
+    <string name="clear_activities">"Wyczyść domyślne"</string>
+    <string name="unknown">"Nieznana"</string>
+    <string name="sort_order_alpha">"Sortuj"</string>
+    <string name="sort_order_size">"Sortuj według rozmiaru"</string>
+    <string name="manage_space_text">"Zarządzaj rozmiarem"</string>
+    <string name="filter">"Filtr"</string>
+    <string name="filter_dlg_title">"Wybierz opcje filtru"</string>
+    <string name="filter_apps_all">"Wszystkie"</string>
+    <string name="filter_apps_third_party">"Inne firmy"</string>
+    <string name="filter_apps_running">"Uruchomione"</string>
+    <string name="loading">"Ładowanie..."</string>
+    <string name="recompute_size">"Przeliczanie rozmiaru..."</string>
+    <string name="clear_data_dlg_title">"Usuń"</string>
+    <string name="clear_data_dlg_text">"Wszystkie informacje zapisane w tej aplikacji zostaną na stałe usunięte."</string>
+    <string name="dlg_ok">"OK"</string>
+    <string name="dlg_cancel">"Anuluj"</string>
+    <string name="app_not_found_dlg_title">"Nie znaleziono aplikacji"</string>
+    <string name="app_not_found_dlg_text">"Program nie został znaleziony na liście zainstalowanych aplikacji."</string>
+    <string name="clear_data_failed">"Nie można wyczyścić danych aplikacji."</string>
+    <string name="security_settings_desc">"Ta aplikacja ma dostęp do następujących funkcji telefonu:"</string>
+    <string name="computing_size">"Przetwarzanie..."</string>
+    <string name="invalid_size_value">"Nie można obliczyć rozmiaru pakietu"</string>
+    <string name="empty_list_msg">"Nie zainstalowano żadnych aplikacji innych firm."</string>
+    <string name="language_settings">"Regionalne i język"</string>
+    <string name="language_settings_summary">"Określ ustawienia regionalne (język i region) oraz opcje wprowadzania tekstu i autokorekty"</string>
+    <string name="language_category">"Ustawienia regionalne"</string>
+    <string name="text_category">"Ustawienia tekstu"</string>
+    <string name="phone_language">"Wybierz język"</string>
+    <string name="phone_language_summary">"Wybierz język i region"</string>
+    <string name="auto_replace">"Autokorekta"</string>
+    <string name="auto_replace_summary">"Poprawiaj błędnie wpisane słowa"</string>
+    <string name="auto_caps">"Wielka litera po kropce"</string>
+    <string name="auto_caps_summary">"Zdanie zaczynaj wielką literą"</string>
+    <string name="auto_punctuate">"Łatwa interpunkcja"</string>
+    <string name="hardkeyboard_category">"Ustawienia klawiatury fizycznej"</string>
+    <string name="auto_punctuate_summary">"Naciśnij klawisz spacji dwukrotnie, aby wstawić kropkę."</string>
+    <string name="show_password">"Widoczne hasła"</string>
+    <string name="show_password_summary">"Pokazuj hasło podczas wpisywania"</string>
+    <string name="user_dict_settings_titlebar">"Słownik użytkownika"</string>
+    <string name="user_dict_settings_title">"Słownik użytkownika"</string>
+    <string name="user_dict_settings_summary">"Dodaj i usuń słowa w słowniku użytkownika"</string>
+    <string name="user_dict_settings_add_menu_title">"Dodaj"</string>
+    <string name="user_dict_settings_add_dialog_title">"Dodaj do słownika"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Edytuj"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Usuń"</string>
+    <string name="user_dict_settings_empty_text">"Nie masz żadnych słów w słowniku użytkownika. Możesz dodać słowo poprzez menu."</string>
+    <string name="testing">"Testowanie"</string>
+    <string name="testing_phone_info">"Informacje o telefonie"</string>
+    <string name="testing_battery_info">"Informacje o baterii"</string>
+    <string name="testing_battery_history">"Historia baterii"</string>
+    <string name="quick_launch_title">"Szybkie uruchamianie"</string>
+    <string name="quick_launch_summary">"Ustaw skróty klawiaturowe, aby uruchamiać aplikacje"</string>
+    <string name="quick_launch_assign_application">"Przypisz aplikację"</string>
+    <string name="quick_launch_no_shortcut">"Brak skrótu"</string>
+    <string name="quick_launch_shortcut">"Szukaj + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Wyczyść"</string>
+    <string name="quick_launch_clear_dialog_message">"Skrót do <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) zostanie usunięty."</string>
+    <string name="quick_launch_clear_ok_button">"OK"</string>
+    <string name="quick_launch_clear_cancel_button">"Anuluj"</string>
+    <string name="quick_launch_display_mode_applications">"Aplikacje"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Skróty"</string>
+    <string name="input_methods_settings_title">"Wprowadzanie tekstu"</string>
+    <string name="input_methods_settings_summary">"Zarządzaj opcjami wprowadzania tekstu"</string>
+    <string name="input_methods_settings_label_format">"%s – ustawienia"</string>
+    <string name="development_settings_title">"Programowanie"</string>
+    <string name="development_settings_summary">"Ustaw opcje związane z programowaniem aplikacji"</string>
+    <string name="enable_adb">"Debugowanie USB"</string>
+    <string name="enable_adb_summary">"Tryb debugowania, gdy podłączone jest USB"</string>
+    <string name="keep_screen_on">"Zostaw włączony"</string>
+    <string name="keep_screen_on_summary">"Ekran nigdy nie będzie gaszony podczas ładowania"</string>
+    <string name="allow_mock_location">"Pozorowanie położenia"</string>
+    <string name="allow_mock_location_summary">"Zezwalaj na pozorowane położenia"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Szczegóły dla identyfikatora UID %d"</string>
+    <string name="battery_history_uid">"Identyfikator UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Szczegóły wykorzystania sieci dla <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Odebranych bajtów: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Wysłanych bajtów: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Łącznie bajtów: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"Szczegóły wykorzystania procesora dla <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Czas użytkownika:"</string>
+    <string name="battery_history_system_time">"Czas systemu:"</string>
+    <string name="battery_history_total_time">"Łączny czas:"</string>
+    <string name="battery_history_starts">"Uruchomień: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> dni, <xliff:g id="HOURS">%2$d</xliff:g> godz., <xliff:g id="MINUTES">%3$d</xliff:g> min, <xliff:g id="SECONDS">%4$d</xliff:g> sek."</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> godz., <xliff:g id="MINUTES">%2$d</xliff:g> min, <xliff:g id="SECONDS">%3$d</xliff:g> sek."</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> min, <xliff:g id="SECONDS">%2$d</xliff:g> sek."</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
+    <string name="battery_history_packages_sharing_this_uid">"Pakiety współdzielące ten identyfikator UID:"</string>
+    <string name="battery_history_no_data">"Brak danych o użyciu baterii"</string>
+    <string name="battery_history_sensor">"Czujnik:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Czujnik używany przez pakiety:"</string>
+    <string name="battery_history_sensor_usage">"Używane <xliff:g id="COUNT">%1$d</xliff:g> raz(y) przez <xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"Używane <xliff:g id="COUNT">%1$d</xliff:g> raz(y) przez:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Czas pracy z włączonym ekranem:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"Praca na baterii:"</string>
+    <string name="battery_history_screen_on_plugged">"Podłączone:"</string>
+    <string name="usage_stats_label">"Statystyki użycia"</string>
+    <string name="testing_usage_stats">"Statystyki użycia"</string>
+    <string name="display_order_text">"Sortuj wg:"</string>
+    <string name="app_name_label">"Aplikacja"</string>
+    <string name="launch_count_label">"Licznik"</string>
+    <string name="usage_time_label">"Czas użycia"</string>
+</resources>
diff --git a/res/values-ru-nokeys/strings.xml b/res/values-ru-nokeys/strings.xml
new file mode 100644
index 0000000..3ec9126
--- /dev/null
+++ b/res/values-ru-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"Управлять приложениями"</string>
+</resources>
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
new file mode 100644
index 0000000..f9afd8e
--- /dev/null
+++ b/res/values-ru/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"Америка"</item>
+    <item>"Европа"</item>
+    <item>"Африка"</item>
+    <item>"Азия"</item>
+    <item>"Австралия"</item>
+    <item>"Тихий океан"</item>
+    <item>"Все"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 секунд"</item>
+    <item>"30 секунд"</item>
+    <item>"1 минута"</item>
+    <item>"2 минуты"</item>
+    <item>"10 минут"</item>
+    <item>"Не выключать"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"Автоматически"</item>
+    <item>"Нет"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"Нет"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"Автоматически"</item>
+    <item>"WEP ASCII"</item>
+    <item>"Шестнадцатеричный WEP"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"При выключении экрана"</item>
+    <item>"Никогда, если устройство подключено к сети питания"</item>
+    <item>"Никогда"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"Время использования"</item>
+    <item>"Начать подсчет"</item>
+    <item>"Название приложения"</item>
+  </string-array>
+</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
new file mode 100644
index 0000000..0a80622
--- /dev/null
+++ b/res/values-ru/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"Неизвестно"</string>
+    <string name="turn_on_radio">"Включить радиосвязь"</string>
+    <string name="turn_off_radio">"Отключить радиосвязь"</string>
+    <string name="turn_on_qxdm">"Включить журнал QXDM SD"</string>
+    <string name="turn_off_qxdm">"Отключить журнал QXDM SD"</string>
+    <string name="radioInfo_menu_viewADN">"Просмотреть адресную книгу SIM-карты"</string>
+    <string name="radioInfo_menu_viewFDN">"Просмотр номеров с фиксированным набором"</string>
+    <string name="radioInfo_menu_viewSDN">"Просмотр служебных номеров"</string>
+    <string name="radioInfo_menu_getPDP">"Получить список PDP"</string>
+    <string name="radioInfo_menu_enableData">"Разрешить подключение для передачи данных"</string>
+    <string name="radioInfo_menu_disableData">"Выключить подключение к данным"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"Включить данные при загрузке"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"Отключить данные при загрузке"</string>
+    <string name="radioInfo_service_in">"В зоне обслуживания"</string>
+    <string name="radioInfo_service_out">"Вне зоны обслуживания"</string>
+    <string name="radioInfo_service_emergency">"Только экстренные вызовы"</string>
+    <string name="radioInfo_service_off">"Радиосвязь отключена"</string>
+    <string name="radioInfo_roaming_in">"Роуминг"</string>
+    <string name="radioInfo_roaming_not">"Не в роуминге"</string>
+    <string name="radioInfo_phone_idle">"Ожидание"</string>
+    <string name="radioInfo_phone_ringing">"Звонок"</string>
+    <string name="radioInfo_phone_offhook">"Вызов выполняется"</string>
+    <string name="radioInfo_data_disconnected">"Отключено"</string>
+    <string name="radioInfo_data_connecting">"Подключение"</string>
+    <string name="radioInfo_data_connected">"Подключено"</string>
+    <string name="radioInfo_data_suspended">"Приостановлено"</string>
+    <string name="radioInfo_unknown">"неизвестно"</string>
+    <string name="radioInfo_display_packets">"пак."</string>
+    <string name="radioInfo_display_bytes">"байт"</string>
+    <string name="radioInfo_display_dbm">"дБм"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"Отключиться от карты SD"</string>
+    <string name="sdcard_format">"Форматировать карту SD"</string>
+    <string name="small_font">"Мелкий"</string>
+    <string name="medium_font">"Средний"</string>
+    <string name="large_font">"Крупный"</string>
+    <string name="font_size_save">"ОК"</string>
+    <string name="sdcard_setting">"Карта SD"</string>
+    <string name="battery_info_status_label">"Состояние батареи:"</string>
+    <string name="battery_info_scale_label">"Шкала батареи:"</string>
+    <string name="battery_info_level_label">"Уровень заряда батареи:"</string>
+    <string name="battery_info_health_label">"Состояние батареи:"</string>
+    <string name="battery_info_technology_label">"Технология батареи:"</string>
+    <string name="battery_info_voltage_label">"Напряжение батареи:"</string>
+    <string name="battery_info_voltage_units">"мВ"</string>
+    <string name="battery_info_temperature_label">"Температура батареи:"</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"Время с момента загрузки:"</string>
+    <string name="battery_info_awake_battery">"Время действия от батареи:"</string>
+    <string name="battery_info_awake_plugged">"Время активности при зарядке:"</string>
+    <string name="battery_info_screen_on">"Время включения экрана:"</string>
+    <string name="battery_info_status_unknown">"Неизвестно"</string>
+    <string name="battery_info_status_charging">"Зарядка"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"Разрядка"</string>
+    <string name="battery_info_status_not_charging">"Не заряжается"</string>
+    <string name="battery_info_status_full">"Полная"</string>
+    <string name="battery_info_health_unknown">"Неизвестно"</string>
+    <string name="battery_info_health_good">"Достаточная"</string>
+    <string name="battery_info_health_overheat">"Перегрев"</string>
+    <string name="battery_info_health_dead">"Разряженная"</string>
+    <string name="battery_info_health_over_voltage">"Скачок напряжения"</string>
+    <string name="battery_info_health_unspecified_failure">"Неизвестная ошибка"</string>
+    <string name="bluetooth">"Bluetooth"</string>
+    <string name="bluetooth_visibility">"Видно другим"</string>
+    <string name="bluetooth_is_discoverable">"Виден в течение <xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> сек…"</string>
+    <string name="bluetooth_not_discoverable">"Сделать устройство видимым"</string>
+    <string name="bluetooth_devices">"Устройства Bluetooth"</string>
+    <string name="bluetooth_device_name">"Название устройства"</string>
+    <string name="bluetooth_name_not_set">"Имя не задано, используется имя аккаунта"</string>
+    <string name="bluetooth_scan_for_devices">"Поиск устройств"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> будет отключено."</string>
+    <string name="bluetooth_connected">"Подключено"</string>
+    <string name="bluetooth_disconnected">"Отключено"</string>
+    <string name="bluetooth_disconnecting">"Отключение…"</string>
+    <string name="bluetooth_connecting">"Идет подключение…"</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"Создать пару с этим устройством"</string>
+    <string name="bluetooth_pairing">"Идет создание пары..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"гарнитура/наушники"</string>
+    <string name="progress_scanning">"Сканирование"</string>
+    <string name="bluetooth_notif_ticker">"Запрос на соединение Bluetooth"</string>
+    <string name="bluetooth_notif_title">"Запрос на соединение"</string>
+    <string name="bluetooth_notif_message">"Выбрать для соединения "</string>
+    <string name="date_and_time">"Настройки даты и времени"</string>
+    <string name="date_time_12_hour_sample">"13:00"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"Выбрать часовой пояс"</string>
+    <string name="display_preview_label">"Предварительный просмотр:"</string>
+    <string name="display_font_size_label">"Размер шрифта:"</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"Отправить <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>:"</string>
+    <string name="intent_sender_startactivity_text">"Запустить <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
+    <string name="intent_sender_account_label">"Аккаунт:"</string>
+    <string name="proxy_clear_text">"Очистить"</string>
+    <string name="proxy_port_label">"Порт"</string>
+    <string name="proxy_defaultView_text">"Восстановить значения по умолчанию"</string>
+    <string name="proxy_action_text">"Сохранить"</string>
+    <string name="proxy_hostname_label">"Имя узла"</string>
+    <string name="proxy_error">"Внимание"</string>
+    <string name="proxy_error_dismiss">"ОК"</string>
+    <string name="proxy_error_invalid_host">"Указано недействительное имя узла."</string>
+    <string name="proxy_error_empty_port">"Нужно заполнить поле порта."</string>
+    <string name="proxy_error_empty_host_set_port">"Если поле хоста пусто, поле порта тоже должно быть пустым."</string>
+    <string name="proxy_error_invalid_port">"Указанный порт недействителен."</string>
+    <string name="radio_info_signal_location_label">"Местоположение:"</string>
+    <string name="radio_info_neighboring_location_label">"CID поблизости:"</string>
+    <string name="radio_info_data_attempts_label">"Попыток данных:"</string>
+    <string name="radio_info_gprs_service_label">"Обслуживание GPRS:"</string>
+    <string name="radio_info_roaming_label">"Роуминг:"</string>
+    <string name="radio_info_imei_label">"IMEI:"</string>
+    <string name="radio_info_call_redirect_label">"Перенаправление вызова:"</string>
+    <string name="radio_info_ppp_resets_label">"Количество сбросов PPP с момента загрузки:"</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM отключается:"</string>
+    <string name="radio_info_current_network_label">"Текущая сеть:"</string>
+    <string name="radio_info_data_successes_label">"Успешные данные:"</string>
+    <string name="radio_info_ppp_received_label">"Получено PPP:"</string>
+    <string name="radio_info_gsm_service_label">"Обслуживание GSM:"</string>
+    <string name="radio_info_signal_strength_label">"Уровень сигнала:"</string>
+    <string name="radio_info_call_status_label">"Состояние вызова:"</string>
+    <string name="radio_info_ppp_sent_label">"Отправлено PPP:"</string>
+    <string name="radio_info_radio_resets_label">"Сбросы радиосвязи:"</string>
+    <string name="radio_info_message_waiting_label">"Ожидает сообщение:"</string>
+    <string name="radio_info_phone_number_label">"Номер телефона:"</string>
+    <string name="radio_info_band_mode_label">"Выбор диапазона радиосвязи"</string>
+    <string name="radio_info_network_type_label">"Тип сети:"</string>
+    <string name="radio_info_set_perferred_label">"Задать предпочитаемый тип сети:"</string>
+    <string name="radio_info_ping_ipaddr">"IP-адрес Ping:"</string>
+    <string name="radio_info_ping_hostname">"Имя узла для ping (www.google.com):"</string>
+    <string name="radio_info_http_client_test">"Проверка HTTP-клиента:"</string>
+    <string name="radio_info_toggle_ciph_label">"Включить шифрование"</string>
+    <string name="ping_test_label">"Выполнить ping"</string>
+    <string name="radio_info_smsc_label">"SMSC:"</string>
+    <string name="radio_info_smsc_update_label">"Обновить"</string>
+    <string name="radio_info_smsc_refresh_label">"Обновить"</string>
+    <string name="radio_info_toggle_dns_check_label">"Выбор проверки DNS"</string>
+    <string name="band_mode_title">"Установить диапазон GSM/UMTS"</string>
+    <string name="band_mode_loading">"Загрузка списка диапазонов…"</string>
+    <string name="band_mode_set">"Установить"</string>
+    <string name="band_mode_failed">"Ошибка"</string>
+    <string name="band_mode_succeeded">"Успешно"</string>
+    <string name="sdcard_changes_instructions">"Изменения вступят в силу после повторного подключения кабеля USB"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"Включить устройство хранения USB"</string>
+    <string name="sdcard_settings_total_bytes_label">"Всего байт:"</string>
+    <string name="sdcard_settings_not_present_status">"Нет карты SD"</string>
+    <string name="sdcard_settings_available_bytes_label">"Доступно байт:"</string>
+    <string name="sdcard_settings_mass_storage_status">"Карта SD используется как устройство хранения данных."</string>
+    <string name="sdcard_settings_unmounted_status">"Теперь можно безопасно извлечь карту SD"</string>
+    <string name="sdcard_settings_bad_removal_status">"Карта SD извлечена во время использования!"</string>
+    <string name="sdcard_settings_used_bytes_label">"Занято, байт:"</string>
+    <string name="sdcard_settings_scanning_status">"Поиск мультимедиа на карте SD…"</string>
+    <string name="sdcard_settings_read_only_status">"Подключение к карте SD только для чтения"</string>
+    <string name="next_label">"Далее"</string>
+    <string name="language_picker_title">"Локаль"</string>
+    <string name="select_your_language">"Выберите язык"</string>
+    <string name="activity_picker_label">"Выбрать действие"</string>
+    <string name="device_info_label">"Сведения об устройстве"</string>
+    <string name="battery_info_label">"Сведения о батарее"</string>
+    <string name="battery_history_label">"Журнал сведений о батарее"</string>
+    <string name="display_label">"Экран"</string>
+    <string name="phone_info_label">"Сведения о телефоне"</string>
+    <string name="sd_card_settings_label">"Карта SD"</string>
+    <string name="proxy_settings_label">"Настройки прокси"</string>
+    <string name="cancel">"Отмена"</string>
+    <string name="settings_label">"Настройки"</string>
+    <string name="airplane_mode">"Режим полета"</string>
+    <string name="airplane_mode_summary">"Отключить все беспроводные подключения"</string>
+    <string name="airplane_mode_turning_on">"Отключение беспроводных соединений…"</string>
+    <string name="airplane_mode_turning_off">"Включение беспроводных соединений..."</string>
+    <string name="radio_controls_title">"Управление беспроводной связью"</string>
+    <string name="radio_controls_summary">"Управление Wi-Fi, Bluetooth, режимом полета и мобильными сетями"</string>
+    <string name="date_and_time_settings_title">"Дата и время"</string>
+    <string name="date_and_time_settings_summary">"Установка даты, времени, часового пояса и форматов"</string>
+    <string name="date_time_auto">"Автоматически"</string>
+    <string name="date_time_auto_summaryOn">"Использовать значения, предоставленные сетью"</string>
+    <string name="date_time_auto_summaryOff">"Использовать значения, предоставленные сетью"</string>
+    <string name="date_time_24hour">"Использовать 24-часовой формат"</string>
+    <string name="date_time_set_time">"Выбор времени"</string>
+    <string name="date_time_set_timezone">"Выбрать часовой пояс"</string>
+    <string name="date_time_set_date">"Установка даты"</string>
+    <string name="date_time_date_format">"Выбор формата даты"</string>
+    <string name="zone_list_menu_sort_alphabetically">"Расположить в алфавитном порядке"</string>
+    <string name="zone_list_menu_sort_by_timezone">"Сортировать по часовому поясу"</string>
+    <string name="security_settings_title">"Безопасность и местоположение"</string>
+    <string name="security_settings_summary">"Задать местоположение, разблокировку экрана, блокировку SIM-карты"</string>
+    <string name="security_passwords_title">"Пароли"</string>
+    <string name="bluetooth_quick_toggle_title">"Bluetooth"</string>
+    <string name="bluetooth_quick_toggle_summary">"Включить Bluetooth"</string>
+    <string name="bluetooth_settings">"Настройки Bluetooth"</string>
+    <string name="bluetooth_settings_title">"Настройки Bluetooth"</string>
+    <string name="bluetooth_settings_summary">"Управление подключениями, установка названия и видимости устройства"</string>
+    <string name="bluetooth_pin_entry">"Запрос на соединение Bluetooth"</string>
+    <string name="bluetooth_device_info">"Сведения об устройстве Bluetooth"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"Для создания пары укажите PIN."\n"(Попробуйте 0000 или 1234.)"</string>
+    <string name="bluetooth_error_title">"Внимание"</string>
+    <string name="bluetooth_pairing_error_message">"Не удалось создать пару с устройством <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message">"Не удалось создать пару с устройством <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, поскольку указан неверный PIN."</string>
+    <string name="bluetooth_connecting_error_message">"Не удалось подключиться к устройству <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_preference_scan_title">"Поиск устройств"</string>
+    <string name="bluetooth_device_context_connect">"Подключиться"</string>
+    <string name="bluetooth_device_context_disconnect">"Отключить"</string>
+    <string name="bluetooth_device_context_pair_connect">"Создать пару и подключиться"</string>
+    <string name="bluetooth_device_context_unpair">"Отсоединить"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"Отключиться и разорвать пару"</string>
+    <string name="bluetooth_device_context_connect_advanced">"Параметры…"</string>
+    <string name="bluetooth_connect_specific_profiles_title">"Подключиться к…"</string>
+    <string name="bluetooth_profile_a2dp">"Мультимедиа"</string>
+    <string name="bluetooth_profile_headset">"Телефон"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"Подключено к мультимедийному звуковому выходу"</string>
+    <string name="bluetooth_summary_connected_to_headset">"Подключено к звуковому выходу телефона"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"Подключено к звуковому выходу телефона и мультимедиа"</string>
+    <string name="bluetooth_device_advanced_title">"Параметры <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"Подключиться"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"Подключиться к устройству Bluetooth"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"Профили"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"Подключено к мультимедийному звуковому выходу"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"Подключено к звуковому выходу телефона"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"Использовать для звука мультимедиа"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"Использовать для звука телефона"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"Включить Wi-Fi"</string>
+    <string name="wifi_settings">"Настройки Wi-Fi"</string>
+    <string name="wifi_settings_category">"Настройки Wi-Fi"</string>
+    <string name="wifi_settings_summary">"Настройка и управление точками доступа беспроводной связи"</string>
+    <string name="forget_network">"Удалить навсегда"</string>
+    <string name="wifi_status">"Состояние"</string>
+    <string name="wifi_link_speed">"Скорость"</string>
+    <string name="wifi_signal_3">"Отличный"</string>
+    <string name="wifi_signal_2">"Хороший"</string>
+    <string name="wifi_signal_1">"Средний"</string>
+    <string name="wifi_signal_0">"Плохой"</string>
+    <string name="security">"Безопасность"</string>
+    <string name="wifi_security_open">"Без шифрования"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"Неизвестно"</string>
+    <string name="wifi_security_verbose_open">"Открытая сеть"</string>
+    <string name="wifi_security_verbose_wep">"Защищена WEP"</string>
+    <string name="wifi_security_verbose_wpa">"Защищена WPA"</string>
+    <string name="wifi_security_verbose_wpa2">"Защищена WPA2"</string>
+    <string name="ip_address">"IP-адрес"</string>
+    <string name="signal">"Уровень сигнала"</string>
+    <string name="wifi_starting">"Включение…"</string>
+    <string name="wifi_stopping">"Выключение…"</string>
+    <string name="wifi_error">"Ошибка"</string>
+    <string name="error_starting">"Не удается запустить Wi-Fi"</string>
+    <string name="error_stopping">"Не удается остановить Wi-Fi"</string>
+    <string name="error_scanning">"Не удается начать поиск сетей"</string>
+    <string name="error_connecting">"Не удается подключиться к сети"</string>
+    <string name="error_saving">"Не удается сохранить сеть"</string>
+    <string name="connect">"Подключиться"</string>
+    <string name="connect_to_blank">"Подключиться к сети <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"Пароль беспроводной сети"</string>
+    <string name="please_type_hex_key">"Шестнадцатеричный ключ WEP (0-9, A-F)"</string>
+    <string name="wifi_show_password">"Показать пароль."</string>
+    <string name="scan_wifi">"Сканировать"</string>
+    <string name="summary_not_in_range">"Вне зоны действия"</string>
+    <string name="summary_remembered">"Запомнено ранее"</string>
+    <string name="summary_connection_failed">"Соединение не установлено, повторите попытку"</string>
+    <string name="wifi_access_points">"Сети Wi-Fi"</string>
+    <string name="wifi_type_ssid">"SSID сети"</string>
+    <string name="wifi_security">"Безопасность"</string>
+    <string name="wifi_save_config">"Сохранить"</string>
+    <string name="wifi_password_unchanged">"(не изменено)"</string>
+    <string name="wifi_add_other_network">"Добавить сеть Wi-Fi"</string>
+    <string name="wifi_notify_open_networks">"Уведомление о сети"</string>
+    <string name="wifi_notify_open_networks_summary">"Уведомить меня при наличии открытой сети"</string>
+    <string name="wifi_password_incorrect_error">"Указан неверный пароль сети. Повторите попытку."</string>
+    <string name="wifi_generic_connection_error">"Проблема при подключении к сети. Повторите попытку."</string>
+    <string name="wifi_menu_advanced">"Дополнительно"</string>
+    <string name="wifi_ip_settings_titlebar">"Настройки IP"</string>
+    <string name="wifi_ip_settings_menu_save">"Сохранить"</string>
+    <string name="wifi_ip_settings_menu_cancel">"Отмена"</string>
+    <string name="wifi_ip_settings_invalid_ip">"Укажите действительный IP-адрес."</string>
+    <string name="wifi_use_static_ip">"Использовать статический IP"</string>
+    <string name="wifi_ip_address">"IP-адрес"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"Шлюз"</string>
+    <string name="wifi_netmask">"Маска сети"</string>
+    <string name="wifi_context_menu_connect">"Подключиться к сети"</string>
+    <string name="wifi_context_menu_forget">"Удалить сеть"</string>
+    <string name="wifi_context_menu_change_password">"Изменить пароль"</string>
+    <string name="wifi_advanced_titlebar">"Дополнительно"</string>
+    <string name="wifi_setting_num_channels_title">"Управляющий домен"</string>
+    <string name="wifi_setting_num_channels_summary">"Установить количество используемых каналов"</string>
+    <string name="wifi_setting_num_channels_error">"При установке управляющего домена возникла проблема."</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"Каналов: <xliff:g id="NUM_CHANNELS">%1$d</xliff:g>"</string>
+    <string name="wifi_setting_sleep_policy_title">"Правила перехода Wi-Fi в спящий режим"</string>
+    <string name="wifi_setting_sleep_policy_summary">"Укажите, когда следует переходить от Wi-Fi к мобильным данным"</string>
+    <string name="wifi_setting_sleep_policy_error">"При установке правила перехода в спящий режим возникла проблема."</string>
+    <string name="wifi_advanced_mac_address_title">"MAC-адрес"</string>
+    <string name="fragment_status_scanning">"Идет сканирование…"</string>
+    <string name="fragment_status_connecting">"Идет подключение к <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_authenticating">"Аутентификация в сети <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_obtaining_ip">"Получение IP-адреса в <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_connected">"Подключено к <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"Отключение от сети <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</string>
+    <string name="fragment_status_disconnected">"Отключено"</string>
+    <string name="fragment_status_failed">"Ошибка"</string>
+    <string name="status_scanning">"Идет сканирование…"</string>
+    <string name="status_connecting">"Идет подключение…"</string>
+    <string name="status_authenticating">"Идет аутентификация…"</string>
+    <string name="status_obtaining_ip">"Получение адреса…"</string>
+    <string name="status_connected">"Подключено"</string>
+    <string name="status_disconnecting">"Отключение…"</string>
+    <string name="status_disconnected">"Отключено"</string>
+    <string name="status_failed">"Ошибка"</string>
+    <string name="sound_and_display_settings">"Звук и экран"</string>
+    <string name="sound_settings">"Настройки звука"</string>
+    <string name="sound_and_display_settings_summary">"Установка мелодий звонка, уведомлений, яркости экрана"</string>
+    <string name="silent_mode_title">"Беззвучный режим"</string>
+    <string name="silent_mode_summary">"Отключение всех звуков, кроме мультимедиа и будильников"</string>
+    <string name="ringtone_title">"Мелодия звонка телефона"</string>
+    <string name="ringtone_summary">"Установить мелодию звонка для входящих вызовов по умолчанию"</string>
+    <string name="ring_volume_title">"Громкость звонка"</string>
+    <string name="ring_volume_summary">"Установить громкость входящих звонков и уведомлений"</string>
+    <string name="vibrate_title">"Виброзвонок"</string>
+    <string name="vibrate_summary">"Вибрация при входящих вызовах"</string>
+    <string name="notification_sound_title">"Мелодия уведомления"</string>
+    <string name="notification_sound_summary">"Задать мелодию уведомления по умолчанию"</string>
+    <string name="incoming_call_volume_title">"Громкость входящих вызовов"</string>
+    <string name="notification_volume_title">"Громкость уведомления"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"Использовать громкость входящих вызовов для уведомлений"</string>
+    <string name="notification_sound_dialog_title">"Выбрать мелодию уведомления"</string>
+    <string name="media_volume_title">"Громкость звука мультимедиа"</string>
+    <string name="media_volume_summary">"Установить громкость музыки и видео"</string>
+    <string name="dtmf_tone_enable_title">"Звук при нажатии"</string>
+    <string name="dtmf_tone_enable_summary_on">"Издавать сигналы при использовании клавиатуры"</string>
+    <string name="dtmf_tone_enable_summary_off">"Издавать сигналы при использовании клавиатуры"</string>
+    <string name="sound_effects_enable_title">"Звук при выборе"</string>
+    <string name="sound_effects_enable_summary_on">"Воспроизвести звук при выборе на экране"</string>
+    <string name="sound_effects_enable_summary_off">"Воспроизвести звук при выборе на экране"</string>
+    <string name="play_media_notification_sounds_enable_title">"Оповещения карты SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"Отключить звуковые сигналы для карты SD"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"Включить предупреждающие звуки карты SD"</string>
+    <string name="sync_settings">"Синхронизация данных"</string>
+    <string name="sync_settings_summary">"Выбрать синхронизируемые приложения"</string>
+    <string name="display_settings">"Настройки экрана"</string>
+    <string name="animations_title">"Анимация"</string>
+    <string name="animations_summary_on">"Показывать анимацию при открытии и закрытии окон"</string>
+    <string name="animations_summary_off">"Показывать анимацию при открытии и закрытии окон"</string>
+    <string name="brightness">"Яркость"</string>
+    <string name="brightness_summary">"Настроить яркость экрана"</string>
+    <string name="screen_timeout">"Время до отключения экрана"</string>
+    <string name="screen_timeout_summary">"Настроить задержку автоматического отключения экрана"</string>
+    <string name="sim_lock_settings">"Настройки блокировки SIM-карты"</string>
+    <string name="sim_lock_settings_category">"Установить блокировку SIM-карты"</string>
+    <string name="sim_lock_settings_title">"Блокировка SIM-карты"</string>
+    <string name="sim_pin_toggle">"Блокировка SIM-карты"</string>
+    <string name="sim_lock_on">"Для использования телефона требуется PIN"</string>
+    <string name="sim_lock_off">"Для использования телефона требуется PIN"</string>
+    <string name="sim_pin_change">"Изменение PIN SIM-карты"</string>
+    <string name="sim_enter_pin">"PIN SIM-карты"</string>
+    <string name="sim_enable_sim_lock">"Блокировка SIM-карты"</string>
+    <string name="sim_disable_sim_lock">"Разблокировать SIM-карту"</string>
+    <string name="sim_enter_old">"Старый PIN SIM-карты"</string>
+    <string name="sim_enter_new">"Новый PIN SIM-карты"</string>
+    <string name="sim_reenter_new">"Введите новый PIN еще раз"</string>
+    <string name="sim_change_pin">"PIN SIM-карты"</string>
+    <string name="sim_bad_pin">"Неверный PIN!"</string>
+    <string name="sim_pins_dont_match">"PIN-коды не совпадают!"</string>
+    <string name="sim_change_failed">"Не удается изменить PIN."\n"Возможно, указан неверный PIN."</string>
+    <string name="sim_change_succeeded">"PIN SIM-карты успешно изменен"</string>
+    <string name="sim_lock_failed">"Не удается изменить состояние блокировки SIM-карты."\n"Возможно, указан неверный PIN."</string>
+    <string name="sim_enter_ok">"ОК"</string>
+    <string name="sim_enter_cancel">"Отмена"</string>
+    <string name="device_info_settings">"Состояние телефона"</string>
+    <string name="system_update_settings_list_item_title">"Системные обновления"</string>
+    <string name="system_update_settings_list_item_summary">"Проверить наличие системных обновлений"</string>
+    <string name="firmware_version">"Версия микропрограммного обеспечения"</string>
+    <string name="model_number">"Номер модели"</string>
+    <string name="baseband_version">"Версия основного диапазона"</string>
+    <string name="kernel_version">"Версия Kernel"</string>
+    <string name="build_number">"Номер сборки"</string>
+    <string name="device_info_not_available">"Недоступно"</string>
+    <string name="device_status_activity_title">"Состояние"</string>
+    <string name="device_status">"Состояние"</string>
+    <string name="device_status_summary">"IMEI, номер телефона, сигнал и т.д."</string>
+    <string name="storage_settings_title">"Карта SD и память телефона"</string>
+    <string name="storage_settings_summary">"Отключить карту SD, просмотреть объем свободного места"</string>
+    <string name="status_number">"Номер телефона"</string>
+    <string name="status_network_type">"Тип мобильной сети"</string>
+    <string name="status_data_state">"Состояние мобильной сети"</string>
+    <string name="status_service_state">"Наличие обслуживания"</string>
+    <string name="status_signal_strength">"Уровень сигнала"</string>
+    <string name="status_roaming">"Роуминг"</string>
+    <string name="status_operator">"Сеть"</string>
+    <string name="status_wifi_mac_address">"MAC-адрес Wi-Fi"</string>
+    <string name="status_bt_address">"Адрес Bluetooth"</string>
+    <string name="status_unavailable">"Недоступно"</string>
+    <string name="status_network_traffic_stats">"Использование сети"</string>
+    <string name="status_network_traffic_summary">"Отправлено: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Принято: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"Время работы"</string>
+    <string name="status_awake_time">"Время активности"</string>
+    <string name="internal_memory">"Хранение в памяти телефона"</string>
+    <string name="sd_memory">"Карта SD"</string>
+    <string name="memory_available">"Доступное место"</string>
+    <string name="memory_size">"Всего места"</string>
+    <string name="sd_eject">"Демонтировать карту SD"</string>
+    <string name="sd_eject_summary">"Демонтировать карту SD для безопасного удаления"</string>
+    <string name="sd_format">"Форматировать карту SD"</string>
+    <string name="sd_format_summary">"Форматировать (очистить) карту SD"</string>
+    <string name="sd_unavailable">"Недоступно"</string>
+    <string name="read_only">" (Только для чтения)"</string>
+    <string name="battery_status_title">"Состояние батареи"</string>
+    <string name="battery_level_title">"Уровень батареи"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"Изменение точки доступа"</string>
+    <string name="apn_not_set">"&lt;Не задано&gt;"</string>
+    <string name="apn_name">"Имя"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Прокси"</string>
+    <string name="apn_http_port">"Порт"</string>
+    <string name="apn_user">"Имя пользователя"</string>
+    <string name="apn_password">"Пароль"</string>
+    <string name="apn_server">"Сервер"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"Прокси MMS"</string>
+    <string name="apn_mms_port">"Порт MMS"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"Тип APN"</string>
+    <string name="menu_delete">"Удалить APN"</string>
+    <string name="menu_new">"Создать APN"</string>
+    <string name="menu_save">"Сохранить"</string>
+    <string name="menu_cancel">"Закрыть"</string>
+    <string name="error_title">"Внимание"</string>
+    <string name="error_name_empty">"Поле Имя не может быть пустым."</string>
+    <string name="error_apn_empty">"APN не может быть пустым."</string>
+    <string name="error_mcc_not3">"Поле MCC должно содержать 3 цифры."</string>
+    <string name="error_mnc_not23">"Поле MNC должно содержать 2 или 3 цифры."</string>
+    <string name="master_clear_title">"Сброс заводских данных"</string>
+    <string name="master_clear_summary">"Удаление всех данных с телефона"</string>
+    <string name="master_clear_desc">"Это действие сбросит телефон до исходного заводского состояния, удалив все данные и загруженные приложения!"</string>
+    <string name="master_clear_button_text">"Сбросить телефон"</string>
+    <string name="master_clear_final_desc">"Сбросить телефон? Все данные и приложения будут удалены; действия необратимы!"</string>
+    <string name="master_clear_final_button_text">"Удалить все"</string>
+    <string name="master_clear_gesture_prompt">"Воспроизведите комбинацию разблокировки"</string>
+    <string name="master_clear_gesture_explanation">"Для подтверждения сброса телефона нужно воспроизвести комбинацию разблокировки."</string>
+    <string name="master_clear_failed">"Сброс не произведен, так как служба очистки системы недоступна."</string>
+    <string name="media_format_title">"Форматировать карту SD."</string>
+    <string name="media_format_summary">"Удаляет все данные с карты SD"</string>
+    <string name="media_format_desc">"Это действие приведет к очистке карты SD в телефоне. ВСЯ информация, находящаяся на карте, будет удалена!"</string>
+    <string name="media_format_button_text">"Форматировать карту SD"</string>
+    <string name="media_format_final_desc">"Форматировать карту SD с удалением всех ваших данных? Это действие нельзя отменить!"</string>
+    <string name="media_format_final_button_text">"Стереть все"</string>
+    <string name="media_format_gesture_prompt">"Воспроизвести шаблон снятия блока"</string>
+    <string name="media_format_gesture_explanation">"Для подтверждения форматирования карты SD нужно воспроизвести шаблон снятия блока."</string>
+    <string name="call_settings_title">"Настройки вызовов"</string>
+    <string name="call_settings_summary">"Настройка голосовой почты, перенаправления звонков, удержания звонков, идентификатора звонящего"</string>
+    <string name="network_settings_title">"Мобильные сети"</string>
+    <string name="network_settings_summary">"Установить параметры роуминга, сетей, APN"</string>
+    <string name="location_title">"Источники моего местоположения"</string>
+    <string name="location_network_based">"Использовать беспроводные сети"</string>
+    <string name="location_networks_disabled">"Просмотр местоположения в приложениях (например в Картах) с помощью беспроводных сетей"</string>
+    <string name="location_neighborhood_level">"Местоположение определяется с помощью Wi-Fi и/или сотовых сетей"</string>
+    <string name="location_gps">"Включить спутники GPS"</string>
+    <string name="location_street_level">"Определение местоположения с точностью до улицы (для экономии заряда батареи отмените выбор)"</string>
+    <string name="location_gps_disabled">"Находить меня до уровня улицы (требуется больше заряда батареи, а также прямая видимость неба)"</string>
+    <string name="about_settings">"О телефоне"</string>
+    <string name="about_settings_summary">"Просмотреть юридические сведения, состояние телефона, версию ПО"</string>
+    <string name="legal_information">"Юридическая информация"</string>
+    <string name="contributors_title">"Авторы"</string>
+    <string name="copyright_title">"Авторские права"</string>
+    <string name="license_title">"Лицензия"</string>
+    <string name="terms_title">"Условия предоставления услуг"</string>
+    <string name="settings_license_activity_title">"Лицензии Open Source"</string>
+    <string name="settings_license_activity_unavailable">"При загрузке лицензий произошла ошибка."</string>
+    <string name="settings_license_activity_loading">"Идет загрузка…"</string>
+    <string name="lock_settings_title">"Комбинация разблокировки экрана"</string>
+    <string name="lockpattern_change_lock_pattern_label">"Изменить последовательность разблокировки"</string>
+    <string name="lockpattern_need_to_unlock">"Подтвердите сохраненную комбинацию"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"Неверно, попробуйте еще раз:"</string>
+    <string name="lockpattern_recording_intro_header">"Создайте комбинацию разблокировки"</string>
+    <string name="lockpattern_recording_intro_footer">"Для справки нажмите Menu"</string>
+    <string name="lockpattern_recording_inprogress">"По окончании уберите палец."</string>
+    <string name="lockpattern_recording_incorrect_too_short">"Соедините не менее <xliff:g id="NUMBER">%d</xliff:g> точек. Попробуйте еще раз:"</string>
+    <string name="lockpattern_pattern_entered_header">"Последовательность записана!"</string>
+    <string name="lockpattern_need_to_confirm">"Для подтверждения еще раз воспроизведите комбинацию:"</string>
+    <string name="lockpattern_pattern_confirmed_header">"Новая комбинация разблокировки:"</string>
+    <string name="lockpattern_confirm_button_text">"Подтверждение"</string>
+    <string name="lockpattern_restart_button_text">"Изменить"</string>
+    <string name="lockpattern_retry_button_text">"Повторить"</string>
+    <string name="lockpattern_continue_button_text">"Продолжить"</string>
+    <string name="lockpattern_settings_title">"Комбинация разблокировки"</string>
+    <string name="lockpattern_settings_enable_title">"Комбинация обязательна"</string>
+    <string name="lockpattern_settings_enable_summary">"Для разблокировки экрана воспроизведите комбинацию"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"Использовать видимую комбинацию"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"Использовать тактильную обратную связь"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"Задать комбинацию разблокировки"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"Изменить последовательность разблокировки"</string>
+    <string name="lockpattern_settings_help_how_to_record">"Как создать комбинацию разблокировки"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"Слишком много неверных попыток!"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"Повторите попытку через <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
+    <string name="skip_button_label">"Отмена"</string>
+    <string name="next_button_label">"Далее"</string>
+    <string name="lock_title">"Защита телефона"</string>
+    <string name="lock_intro_message"><font size="17">"Защитите телефон от несанкционированного использования, создав личную комбинацию разблокировки экрана. "\n<font height="17">\n</font><b>"1"</b>"  На следующем экране показан пример создания комбинации "\n<font height="17">\n</font><b>"2"</b>"  Просмотрите его и создайте собственную комбинацию разблокировки. Пробуйте разные комбинации, но соединяйте не менее четырех точек. "\n<font height="17">\n</font><b>"3"</b>"  Воспроизведите комбинацию повторно для подтверждения. "\n<font height="17">\n</font><b>"Готовы начать? Нажмите \"Далее\""</b>". "\n<font height="3">\n</font>"Чтобы оставить телефон без защиты, нажмите \"Отмена\"."</font></string>
+    <string name="lock_example_title">"Пример комбинации"</string>
+    <string name="lock_example_message">"Соедините не меньше четырех точек."\n" "\n"Выберите \"Далее\", когда будете готовы создать свою комбинацию."</string>
+    <string name="manageapplications_settings_title">"Управление приложениями"</string>
+    <string name="manageapplications_settings_summary">"Управлять установленными приложениями и удалять их"</string>
+    <string name="applications_settings">"Приложения"</string>
+    <string name="applications_settings_summary">"Управление приложениями, настройка горячих клавиш"</string>
+    <string name="applications_settings_header">"Настройки приложений"</string>
+    <string name="install_applications">"Неизвестные источники"</string>
+    <string name="install_unknown_applications">"Разрешить установку приложений не из Android Маркет"</string>
+    <string name="install_all_warning">"Атака приложений из неизвестных источников более опасна для телефона и личных данных. Вы соглашаетесь, что несете всю ответственность за ущерб телефону или потерю данных, которые могут произойти от использования таких приложений."</string>
+    <string name="application_info_label">"Сведения о приложении"</string>
+    <string name="storage_label">"Хранение"</string>
+    <string name="auto_launch_label">"Запускать по умолчанию"</string>
+    <string name="permissions_label">"Разрешения"</string>
+    <string name="cache_header_label">"Кэш"</string>
+    <string name="clear_cache_btn_text">"Очистить кэш"</string>
+    <string name="cache_size_label">"Кэш"</string>
+    <string name="controls_label">"Элементы управления"</string>
+    <string name="force_stop">"Остановить принудительно"</string>
+    <string name="total_size_label">"Всего"</string>
+    <string name="application_size_label">"Приложение"</string>
+    <string name="data_size_label">"Данные"</string>
+    <string name="uninstall_text">"Удалить"</string>
+    <string name="clear_user_data_text">"Очистить данные"</string>
+    <string name="auto_launch_enable_text">"Это приложение по умолчанию запускается для некоторых действий."</string>
+    <string name="auto_launch_disable_text">"Значения по умолчанию не установлены."</string>
+    <string name="clear_activities">"Очистить значения по умолчанию"</string>
+    <string name="unknown">"Неизвестно"</string>
+    <string name="sort_order_alpha">"Сортировать"</string>
+    <string name="sort_order_size">"Сортировать по размеру"</string>
+    <string name="manage_space_text">"Управление памятью"</string>
+    <string name="filter">"Фильтр"</string>
+    <string name="filter_dlg_title">"Выбрать параметры фильтра"</string>
+    <string name="filter_apps_all">"Все"</string>
+    <string name="filter_apps_third_party">"Сторонние"</string>
+    <string name="filter_apps_running">"Выполняемые"</string>
+    <string name="loading">"Идет загрузка…"</string>
+    <string name="recompute_size">"Перерасчет размера…"</string>
+    <string name="clear_data_dlg_title">"Удалить"</string>
+    <string name="clear_data_dlg_text">"Вся информация, сохраненная в этом приложении, будет удалена навсегда."</string>
+    <string name="dlg_ok">"ОК"</string>
+    <string name="dlg_cancel">"Отмена"</string>
+    <string name="app_not_found_dlg_title">"Приложение не найдено"</string>
+    <string name="app_not_found_dlg_text">"Приложение не найдено в списке установленных приложений."</string>
+    <string name="clear_data_failed">"Не удается очистить данные приложения."</string>
+    <string name="security_settings_desc">"Это приложение имеет доступ к следующему на телефоне:"</string>
+    <string name="computing_size">"Вычисление..."</string>
+    <string name="invalid_size_value">"Невозможно вычислить размер пакета"</string>
+    <string name="empty_list_msg">"У вас не установлено приложений сторонних разработчиков."</string>
+    <string name="language_settings">"Локаль и текст"</string>
+    <string name="language_settings_summary">"Выбор локали (языка и региона), параметров ввода текста и автоисправлений"</string>
+    <string name="language_category">"Настройки локали"</string>
+    <string name="text_category">"Настройки текста"</string>
+    <string name="phone_language">"Выбрать локаль"</string>
+    <string name="phone_language_summary">"Выбрать язык и страну"</string>
+    <string name="auto_replace">"Автозамена"</string>
+    <string name="auto_replace_summary">"Исправлять слова с опечатками"</string>
+    <string name="auto_caps">"Автоматически заменять заглавной буквой"</string>
+    <string name="auto_caps_summary">"Большие буквы в начале предложений"</string>
+    <string name="auto_punctuate">"Автоматическая пунктуация"</string>
+    <string name="hardkeyboard_category">"Настройки внешней клавиатуры"</string>
+    <string name="auto_punctuate_summary">"Чтобы вставить символ \".\", дважды нажмите пробел."</string>
+    <string name="show_password">"Показывать пароли"</string>
+    <string name="show_password_summary">"Показывать пароль при вводе"</string>
+    <string name="user_dict_settings_titlebar">"Пользовательский словарь"</string>
+    <string name="user_dict_settings_title">"Пользовательский словарь"</string>
+    <string name="user_dict_settings_summary">"Добавить или удалить слова из пользовательского словаря"</string>
+    <string name="user_dict_settings_add_menu_title">"Добавить"</string>
+    <string name="user_dict_settings_add_dialog_title">"Добавление в словарь"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"Изменить"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"Удалить"</string>
+    <string name="user_dict_settings_empty_text">"В пользовательском словаре отсутствуют слова. Добавить слово можно с помощью меню."</string>
+    <string name="testing">"Тестирование"</string>
+    <string name="testing_phone_info">"Сведения о телефоне"</string>
+    <string name="testing_battery_info">"Сведения о батарее"</string>
+    <string name="testing_battery_history">"Журнал сведений о батарее"</string>
+    <string name="quick_launch_title">"Быстрый запуск"</string>
+    <string name="quick_launch_summary">"Задать горячие клавиши для запуска приложений"</string>
+    <string name="quick_launch_assign_application">"Назначить приложение"</string>
+    <string name="quick_launch_no_shortcut">"Нет ярлыка"</string>
+    <string name="quick_launch_shortcut">"Поиск + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"Очистить"</string>
+    <string name="quick_launch_clear_dialog_message">"Ярлык <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (для приложения <xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) будет удален."</string>
+    <string name="quick_launch_clear_ok_button">"ОК"</string>
+    <string name="quick_launch_clear_cancel_button">"Отмена"</string>
+    <string name="quick_launch_display_mode_applications">"Приложения"</string>
+    <string name="quick_launch_display_mode_shortcuts">"Ярлыки"</string>
+    <string name="input_methods_settings_title">"Ввод текста"</string>
+    <string name="input_methods_settings_summary">"Управление параметрами ввода текста"</string>
+    <string name="input_methods_settings_label_format">"Настройки %s"</string>
+    <string name="development_settings_title">"Разработка"</string>
+    <string name="development_settings_summary">"Выбрать параметры разработки приложений"</string>
+    <string name="enable_adb">"Отладка USB"</string>
+    <string name="enable_adb_summary">"Режим отладки при подключении USB"</string>
+    <string name="keep_screen_on">"Не выключать"</string>
+    <string name="keep_screen_on_summary">"При зарядке экран не отключается"</string>
+    <string name="allow_mock_location">"Разрешить фиктивные местоположения"</string>
+    <string name="allow_mock_location_summary">"Разрешить фиктивные местоположения"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"Сведения для идентификатора пользователя %d"</string>
+    <string name="battery_history_uid">"Идентификатор пользователя <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"Сведения об использовании сети приложением <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_bytes_received">"Получено байт: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"Отправлено байт: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"Всего байт: <xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"Сведения об использовании процессора приложением <xliff:g id="APP_NAME">%1$s</xliff:g>:"</string>
+    <string name="battery_history_user_time">"Пользовательское время:"</string>
+    <string name="battery_history_system_time">"Системное время:"</string>
+    <string name="battery_history_total_time">"Общее время:"</string>
+    <string name="battery_history_starts">"Запусков: <xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> дн., <xliff:g id="HOURS">%2$d</xliff:g> ч., <xliff:g id="MINUTES">%3$d</xliff:g> мин., <xliff:g id="SECONDS">%4$d</xliff:g> сек."</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> ч., <xliff:g id="MINUTES">%2$d</xliff:g> мин., <xliff:g id="SECONDS">%3$d</xliff:g>сек."</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> мин., <xliff:g id="SECONDS">%2$d</xliff:g> сек."</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> секунд"</string>
+    <string name="battery_history_packages_sharing_this_uid">"Пакеты с этим идентификатором пользователя:"</string>
+    <string name="battery_history_no_data">"Данные об использовании батареи недоступны"</string>
+    <string name="battery_history_sensor">"Сенсор:"</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"Использования сенсора пакетами:"</string>
+    <string name="battery_history_sensor_usage">"Использовано пакетом <xliff:g id="PACKAGE">%2$s</xliff:g>: <xliff:g id="COUNT">%1$d</xliff:g> раз(а)"</string>
+    <string name="battery_history_sensor_usage_multi">"Использовано <xliff:g id="COUNT">%1$d</xliff:g> раз(а) одним из:"</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"Время пребывания экрана включенным:"</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"От батареи:"</string>
+    <string name="battery_history_screen_on_plugged">"Подключен к питанию:"</string>
+    <string name="usage_stats_label">"Статистика использования"</string>
+    <string name="testing_usage_stats">"Статистика использования"</string>
+    <string name="display_order_text">"Упорядочить по:"</string>
+    <string name="app_name_label">"Приложение"</string>
+    <string name="launch_count_label">"Подсчет"</string>
+    <string name="usage_time_label">"Время использования"</string>
+</resources>
diff --git a/res/values-zh-rCN-nokeys/strings.xml b/res/values-zh-rCN-nokeys/strings.xml
new file mode 100644
index 0000000..09bd118
--- /dev/null
+++ b/res/values-zh-rCN-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"管理应用程序"</string>
+</resources>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
new file mode 100644
index 0000000..5b3b651
--- /dev/null
+++ b/res/values-zh-rCN/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"美洲"</item>
+    <item>"欧洲"</item>
+    <item>"非洲"</item>
+    <item>"亚洲"</item>
+    <item>"澳大利亚"</item>
+    <item>"太平洋"</item>
+    <item>"全部"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 秒"</item>
+    <item>"30 秒"</item>
+    <item>"1 分钟"</item>
+    <item>"2 分钟"</item>
+    <item>"10 分钟"</item>
+    <item>"从不待机"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"自动"</item>
+    <item>"无"</item>
+    <item>"WEP"</item>
+    <item>"WPA（个人）"</item>
+    <item>"WPA2（个人）"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"无"</item>
+    <item>"WEP"</item>
+    <item>"WPA（个人）"</item>
+    <item>"WPA2（个人）"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"自动"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP 十六进制"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"当屏幕关闭时"</item>
+    <item>"插入后从不进入休眠状态"</item>
+    <item>"从不"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"使用时间"</item>
+    <item>"启动次数"</item>
+    <item>"应用程序名称"</item>
+  </string-array>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..45148de
--- /dev/null
+++ b/res/values-zh-rCN/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"未知"</string>
+    <string name="turn_on_radio">"打开收音机"</string>
+    <string name="turn_off_radio">"关闭收音机"</string>
+    <string name="turn_on_qxdm">"启用 QXDM SD 日志"</string>
+    <string name="turn_off_qxdm">"禁用 QXDM SD 日志"</string>
+    <string name="radioInfo_menu_viewADN">"查看 SIM 卡地址簿"</string>
+    <string name="radioInfo_menu_viewFDN">"查看固定拨号"</string>
+    <string name="radioInfo_menu_viewSDN">"查看服务拨号"</string>
+    <string name="radioInfo_menu_getPDP">"获取 PDP 列表"</string>
+    <string name="radioInfo_menu_enableData">"启用数据连接"</string>
+    <string name="radioInfo_menu_disableData">"禁用数据连接"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"引导时启用数据"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"引导时禁用数据"</string>
+    <string name="radioInfo_service_in">"在使用中"</string>
+    <string name="radioInfo_service_out">"不在服务区"</string>
+    <string name="radioInfo_service_emergency">"仅紧急呼叫"</string>
+    <string name="radioInfo_service_off">"收音机已关闭"</string>
+    <string name="radioInfo_roaming_in">"漫游"</string>
+    <string name="radioInfo_roaming_not">"无漫游"</string>
+    <string name="radioInfo_phone_idle">"空闲"</string>
+    <string name="radioInfo_phone_ringing">"正在响铃"</string>
+    <string name="radioInfo_phone_offhook">"正在通话"</string>
+    <string name="radioInfo_data_disconnected">"已断开连接"</string>
+    <string name="radioInfo_data_connecting">"正在连接"</string>
+    <string name="radioInfo_data_connected">"已连接"</string>
+    <string name="radioInfo_data_suspended">"已挂起"</string>
+    <string name="radioInfo_unknown">"未知"</string>
+    <string name="radioInfo_display_packets">"pkts"</string>
+    <string name="radioInfo_display_bytes">"字节"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"卸下 SD 卡"</string>
+    <string name="sdcard_format">"格式化 SD 卡"</string>
+    <string name="small_font">"小"</string>
+    <string name="medium_font">"中"</string>
+    <string name="large_font">"大"</string>
+    <string name="font_size_save">"确定"</string>
+    <string name="sdcard_setting">"SD 卡"</string>
+    <string name="battery_info_status_label">"电池状态："</string>
+    <string name="battery_info_scale_label">"电池容量："</string>
+    <string name="battery_info_level_label">"电池级别："</string>
+    <string name="battery_info_health_label">"电池健康状态："</string>
+    <string name="battery_info_technology_label">"电池技术："</string>
+    <string name="battery_info_voltage_label">"电池电压："</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"电池温度："</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"自引导以来的时间："</string>
+    <string name="battery_info_awake_battery">"电池的唤醒时间："</string>
+    <string name="battery_info_awake_plugged">"充电时的唤醒时间："</string>
+    <string name="battery_info_screen_on">"屏幕开启时间："</string>
+    <string name="battery_info_status_unknown">"未知"</string>
+    <string name="battery_info_status_charging">"正在充电"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"正在放电"</string>
+    <string name="battery_info_status_not_charging">"未在充电"</string>
+    <string name="battery_info_status_full">"已满"</string>
+    <string name="battery_info_health_unknown">"未知"</string>
+    <string name="battery_info_health_good">"较强"</string>
+    <string name="battery_info_health_overheat">"过热"</string>
+    <string name="battery_info_health_dead">"没电"</string>
+    <string name="battery_info_health_over_voltage">"过电压"</string>
+    <string name="battery_info_health_unspecified_failure">"未知错误"</string>
+    <string name="bluetooth">"蓝牙"</string>
+    <string name="bluetooth_visibility">"可发现"</string>
+    <string name="bluetooth_is_discoverable">"<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> 秒内可发现..."</string>
+    <string name="bluetooth_not_discoverable">"让设备能被搜索到"</string>
+    <string name="bluetooth_devices">"蓝牙设备"</string>
+    <string name="bluetooth_device_name">"设备名称"</string>
+    <string name="bluetooth_name_not_set">"无名称集，使用帐户名"</string>
+    <string name="bluetooth_scan_for_devices">"扫描以找到设备"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>会断开连接。"</string>
+    <string name="bluetooth_connected">"已连接"</string>
+    <string name="bluetooth_disconnected">"已断开连接"</string>
+    <string name="bluetooth_disconnecting">"正在断开连接..."</string>
+    <string name="bluetooth_connecting">"正在连接..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"与此设备配对"</string>
+    <string name="bluetooth_pairing">"正在配对..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"免持听筒/耳机"</string>
+    <string name="progress_scanning">"正在扫描"</string>
+    <string name="bluetooth_notif_ticker">"蓝牙配对请求"</string>
+    <string name="bluetooth_notif_title">"配对请求"</string>
+    <string name="bluetooth_notif_message">"选择以与以下对象配对 "</string>
+    <string name="date_and_time">"日期和时间设置"</string>
+    <string name="date_time_12_hour_sample">"下午 1:00"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"选择时区"</string>
+    <string name="display_preview_label">"预览："</string>
+    <string name="display_font_size_label">"字体大小："</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"发送<xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>："</string>
+    <string name="intent_sender_startactivity_text">"开始 <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>："</string>
+    <string name="intent_sender_account_label">"帐户："</string>
+    <string name="proxy_clear_text">"清除"</string>
+    <string name="proxy_port_label">"端口"</string>
+    <string name="proxy_defaultView_text">"恢复默认值"</string>
+    <string name="proxy_action_text">"保存"</string>
+    <string name="proxy_hostname_label">"主机名"</string>
+    <string name="proxy_error">"注意"</string>
+    <string name="proxy_error_dismiss">"确定"</string>
+    <string name="proxy_error_invalid_host">"您键入的主机名无效。"</string>
+    <string name="proxy_error_empty_port">"必须完成端口字段。"</string>
+    <string name="proxy_error_empty_host_set_port">"如果主机字段为空，则端口字段必须为空。"</string>
+    <string name="proxy_error_invalid_port">"您键入的端口无效。"</string>
+    <string name="radio_info_signal_location_label">"位置："</string>
+    <string name="radio_info_neighboring_location_label">"相邻的 CID："</string>
+    <string name="radio_info_data_attempts_label">"数据尝试："</string>
+    <string name="radio_info_gprs_service_label">"GPRS 服务："</string>
+    <string name="radio_info_roaming_label">"漫游："</string>
+    <string name="radio_info_imei_label">"IMEI："</string>
+    <string name="radio_info_call_redirect_label">"呼叫重定向："</string>
+    <string name="radio_info_ppp_resets_label">"引导后已重设的 PPP 数："</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM 断开连接："</string>
+    <string name="radio_info_current_network_label">"当前网络："</string>
+    <string name="radio_info_data_successes_label">"数据成功："</string>
+    <string name="radio_info_ppp_received_label">"已收到 PPP："</string>
+    <string name="radio_info_gsm_service_label">"GSM 服务："</string>
+    <string name="radio_info_signal_strength_label">"信号强度："</string>
+    <string name="radio_info_call_status_label">"呼叫状态："</string>
+    <string name="radio_info_ppp_sent_label">"已发送 PPP："</string>
+    <string name="radio_info_radio_resets_label">"收音机重设："</string>
+    <string name="radio_info_message_waiting_label">"消息等待："</string>
+    <string name="radio_info_phone_number_label">"手机号："</string>
+    <string name="radio_info_band_mode_label">"选择收音机波段"</string>
+    <string name="radio_info_network_type_label">"网络类型："</string>
+    <string name="radio_info_set_perferred_label">"设置首选的网络类型："</string>
+    <string name="radio_info_ping_ipaddr">"Ping IpAddr："</string>
+    <string name="radio_info_ping_hostname">"Ping 主机名 (www.google.com)："</string>
+    <string name="radio_info_http_client_test">"HTTP 客户端测试："</string>
+    <string name="radio_info_toggle_ciph_label">"切换加密"</string>
+    <string name="ping_test_label">"进行 Ping 测试"</string>
+    <string name="radio_info_smsc_label">"SMSC："</string>
+    <string name="radio_info_smsc_update_label">"更新"</string>
+    <string name="radio_info_smsc_refresh_label">"刷新"</string>
+    <string name="radio_info_toggle_dns_check_label">"切换 DNS 检查"</string>
+    <string name="band_mode_title">"设置 GSM/UMTS 波段"</string>
+    <string name="band_mode_loading">"正在载入波段列表..."</string>
+    <string name="band_mode_set">"设置"</string>
+    <string name="band_mode_failed">"失败"</string>
+    <string name="band_mode_succeeded">"成功"</string>
+    <string name="sdcard_changes_instructions">"更改会在重新连接 USB 电缆后生效"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"启用 USB 大容量存储"</string>
+    <string name="sdcard_settings_total_bytes_label">"字节总数："</string>
+    <string name="sdcard_settings_not_present_status">"无 SD 卡"</string>
+    <string name="sdcard_settings_available_bytes_label">"可用的字节数："</string>
+    <string name="sdcard_settings_mass_storage_status">"正在将 SD 卡用作大容量存储设备"</string>
+    <string name="sdcard_settings_unmounted_status">"现在可以安全卸下 SD 卡"</string>
+    <string name="sdcard_settings_bad_removal_status">"SD 卡在使用过程中被卸下！"</string>
+    <string name="sdcard_settings_used_bytes_label">"使用的字节数："</string>
+    <string name="sdcard_settings_scanning_status">"正在扫描 SD 卡以获取媒体..."</string>
+    <string name="sdcard_settings_read_only_status">"装载的 SD 卡为只读"</string>
+    <string name="next_label">"下一步"</string>
+    <string name="language_picker_title">"区域"</string>
+    <string name="select_your_language">"选择语言"</string>
+    <string name="activity_picker_label">"选择活动"</string>
+    <string name="device_info_label">"设备信息"</string>
+    <string name="battery_info_label">"电池信息"</string>
+    <string name="battery_history_label">"电池历史记录"</string>
+    <string name="display_label">"显示"</string>
+    <string name="phone_info_label">"手机信息"</string>
+    <string name="sd_card_settings_label">"SD 卡"</string>
+    <string name="proxy_settings_label">"代理设置"</string>
+    <string name="cancel">"取消"</string>
+    <string name="settings_label">"设置"</string>
+    <string name="airplane_mode">"飞航模式"</string>
+    <string name="airplane_mode_summary">"禁用所有无线连接"</string>
+    <string name="airplane_mode_turning_on">"正在禁用无线连接..."</string>
+    <string name="airplane_mode_turning_off">"正在启用无线连接..."</string>
+    <string name="radio_controls_title">"无线控件"</string>
+    <string name="radio_controls_summary">"管理 Wi-Fi、蓝牙、飞航模式和移动网络"</string>
+    <string name="date_and_time_settings_title">"日期和时间"</string>
+    <string name="date_and_time_settings_summary">"设置日期、时间、时区和格式"</string>
+    <string name="date_time_auto">"自动"</string>
+    <string name="date_time_auto_summaryOn">"使用网络提供的值"</string>
+    <string name="date_time_auto_summaryOff">"使用网络提供的值"</string>
+    <string name="date_time_24hour">"使用 24 小时格式"</string>
+    <string name="date_time_set_time">"设置时间"</string>
+    <string name="date_time_set_timezone">"选择时区"</string>
+    <string name="date_time_set_date">"设置日期"</string>
+    <string name="date_time_date_format">"选择日期格式"</string>
+    <string name="zone_list_menu_sort_alphabetically">"按字母顺序排序"</string>
+    <string name="zone_list_menu_sort_by_timezone">"按时区排序"</string>
+    <string name="security_settings_title">"安全性和位置"</string>
+    <string name="security_settings_summary">"设置我的位置、屏幕解锁、SIM 卡锁定"</string>
+    <string name="security_passwords_title">"密码"</string>
+    <string name="bluetooth_quick_toggle_title">"蓝牙"</string>
+    <string name="bluetooth_quick_toggle_summary">"打开蓝牙"</string>
+    <string name="bluetooth_settings">"蓝牙设置"</string>
+    <string name="bluetooth_settings_title">"蓝牙设置"</string>
+    <string name="bluetooth_settings_summary">"管理连接，设置设备名称和可发现性"</string>
+    <string name="bluetooth_pin_entry">"蓝牙配对请求"</string>
+    <string name="bluetooth_device_info">"蓝牙设备信息"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"键入 PIN 码以配对。"\n"（尝试键入 0000 或 1234。）"</string>
+    <string name="bluetooth_error_title">"注意"</string>
+    <string name="bluetooth_pairing_error_message">"与<xliff:g id="DEVICE_NAME">%1$s</xliff:g>配对时出现问题。"</string>
+    <string name="bluetooth_pairing_pin_error_message">"与<xliff:g id="DEVICE_NAME">%1$s</xliff:g>配对时出现问题，因为键入的 PIN 码不正确。"</string>
+    <string name="bluetooth_connecting_error_message">"连接至<xliff:g id="DEVICE_NAME">%1$s</xliff:g>时出现问题。"</string>
+    <string name="bluetooth_preference_scan_title">"扫描以找到设备"</string>
+    <string name="bluetooth_device_context_connect">"连接"</string>
+    <string name="bluetooth_device_context_disconnect">"断开连接"</string>
+    <string name="bluetooth_device_context_pair_connect">"配对和连接"</string>
+    <string name="bluetooth_device_context_unpair">"取消配对"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"断开连接并取消配对"</string>
+    <string name="bluetooth_device_context_connect_advanced">"选项..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"连接至..."</string>
+    <string name="bluetooth_profile_a2dp">"媒体"</string>
+    <string name="bluetooth_profile_headset">"手机"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"已连接至媒体音频"</string>
+    <string name="bluetooth_summary_connected_to_headset">"已连接至手机音频"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"已连接至手机和媒体音频"</string>
+    <string name="bluetooth_device_advanced_title">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>选项"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"连接"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"连接至蓝牙设备"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"个人资料"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"已连接至媒体音频"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"已连接至手机音频"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"用于媒体音频"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"用于手机音频"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"打开 Wi-Fi"</string>
+    <string name="wifi_settings">"Wi-Fi 设置"</string>
+    <string name="wifi_settings_category">"Wi-Fi 设置"</string>
+    <string name="wifi_settings_summary">"设置和管理无线接入点"</string>
+    <string name="forget_network">"忘记"</string>
+    <string name="wifi_status">"状态"</string>
+    <string name="wifi_link_speed">"速度"</string>
+    <string name="wifi_signal_3">"极强"</string>
+    <string name="wifi_signal_2">"较强"</string>
+    <string name="wifi_signal_1">"强"</string>
+    <string name="wifi_signal_0">"弱"</string>
+    <string name="security">"安全性"</string>
+    <string name="wifi_security_open">"开放"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"未知"</string>
+    <string name="wifi_security_verbose_open">"打开网络"</string>
+    <string name="wifi_security_verbose_wep">"用 WEP 保护"</string>
+    <string name="wifi_security_verbose_wpa">"通过 WPA 保护"</string>
+    <string name="wifi_security_verbose_wpa2">"通过 WPA2 保护"</string>
+    <string name="ip_address">"IP 地址"</string>
+    <string name="signal">"信号强度"</string>
+    <string name="wifi_starting">"正在打开..."</string>
+    <string name="wifi_stopping">"正在关闭..."</string>
+    <string name="wifi_error">"错误"</string>
+    <string name="error_starting">"无法启动 Wi-Fi"</string>
+    <string name="error_stopping">"无法停止 Wi-Fi"</string>
+    <string name="error_scanning">"无法扫描以找到网络"</string>
+    <string name="error_connecting">"无法连接至网络"</string>
+    <string name="error_saving">"无法保存网络"</string>
+    <string name="connect">"连接"</string>
+    <string name="connect_to_blank">"连接至 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"无线密码"</string>
+    <string name="please_type_hex_key">"WEP 十六进制键（0-9、A-F）"</string>
+    <string name="wifi_show_password">"显示密码。"</string>
+    <string name="scan_wifi">"扫描"</string>
+    <string name="summary_not_in_range">"不在范围之内"</string>
+    <string name="summary_remembered">"已记忆"</string>
+    <string name="summary_connection_failed">"连接失败，请选择以重试"</string>
+    <string name="wifi_access_points">"Wi-Fi 网络"</string>
+    <string name="wifi_type_ssid">"网络 SSID"</string>
+    <string name="wifi_security">"安全性"</string>
+    <string name="wifi_save_config">"保存"</string>
+    <string name="wifi_password_unchanged">"（未更改）"</string>
+    <string name="wifi_add_other_network">"添加 Wi-Fi 网络"</string>
+    <string name="wifi_notify_open_networks">"网络通知"</string>
+    <string name="wifi_notify_open_networks_summary">"当有开放网络可用时通知我"</string>
+    <string name="wifi_password_incorrect_error">"您键入的网络密码不正确。请重试。"</string>
+    <string name="wifi_generic_connection_error">"连接至网络时出现问题。请重试。"</string>
+    <string name="wifi_menu_advanced">"高级"</string>
+    <string name="wifi_ip_settings_titlebar">"IP 设置"</string>
+    <string name="wifi_ip_settings_menu_save">"保存"</string>
+    <string name="wifi_ip_settings_menu_cancel">"取消"</string>
+    <string name="wifi_ip_settings_invalid_ip">"请键入有效的 IP 地址。"</string>
+    <string name="wifi_use_static_ip">"使用静态 IP"</string>
+    <string name="wifi_ip_address">"IP 地址"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"网关"</string>
+    <string name="wifi_netmask">"网络掩码"</string>
+    <string name="wifi_context_menu_connect">"连接至网络"</string>
+    <string name="wifi_context_menu_forget">"忘记网络"</string>
+    <string name="wifi_context_menu_change_password">"更改密码"</string>
+    <string name="wifi_advanced_titlebar">"高级"</string>
+    <string name="wifi_setting_num_channels_title">"调节域"</string>
+    <string name="wifi_setting_num_channels_summary">"设置要使用的频道数"</string>
+    <string name="wifi_setting_num_channels_error">"设置调节域时出现问题。"</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> 个频道"</string>
+    <string name="wifi_setting_sleep_policy_title">"Wi-Fi 休眠策略"</string>
+    <string name="wifi_setting_sleep_policy_summary">"指定何时从 Wi-Fi 切换到手机数据"</string>
+    <string name="wifi_setting_sleep_policy_error">"设置休眠策略时出现问题。"</string>
+    <string name="wifi_advanced_mac_address_title">"MAC 地址"</string>
+    <string name="fragment_status_scanning">"正在扫描..."</string>
+    <string name="fragment_status_connecting">"正在连接至 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"正在通过 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 验证..."</string>
+    <string name="fragment_status_obtaining_ip">"正在从 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 获取 IP 地址..."</string>
+    <string name="fragment_status_connected">"已连接至 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"正在断开与 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 的连接..."</string>
+    <string name="fragment_status_disconnected">"已断开连接"</string>
+    <string name="fragment_status_failed">"失败"</string>
+    <string name="status_scanning">"正在扫描..."</string>
+    <string name="status_connecting">"正在连接..."</string>
+    <string name="status_authenticating">"正在验证..."</string>
+    <string name="status_obtaining_ip">"正在获取地址..."</string>
+    <string name="status_connected">"已连接"</string>
+    <string name="status_disconnecting">"正在断开连接..."</string>
+    <string name="status_disconnected">"已断开连接"</string>
+    <string name="status_failed">"失败"</string>
+    <string name="sound_and_display_settings">"声音和显示"</string>
+    <string name="sound_settings">"声音设置"</string>
+    <string name="sound_and_display_settings_summary">"设置铃声、通知、屏幕亮度"</string>
+    <string name="silent_mode_title">"静音模式"</string>
+    <string name="silent_mode_summary">"除媒体和闹钟之外的所有声音都被静音"</string>
+    <string name="ringtone_title">"手机铃声"</string>
+    <string name="ringtone_summary">"设置默认的来电铃声"</string>
+    <string name="ring_volume_title">"响铃音量"</string>
+    <string name="ring_volume_summary">"设置来电音量和通知音量"</string>
+    <string name="vibrate_title">"手机振动"</string>
+    <string name="vibrate_summary">"手机来电时振动"</string>
+    <string name="notification_sound_title">"通知铃声"</string>
+    <string name="notification_sound_summary">"设置默认的通知铃声"</string>
+    <string name="incoming_call_volume_title">"来电音量"</string>
+    <string name="notification_volume_title">"通知音量"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"使用来电音量作为通知音量"</string>
+    <string name="notification_sound_dialog_title">"选择通知铃声"</string>
+    <string name="media_volume_title">"媒体音量"</string>
+    <string name="media_volume_summary">"设置音乐和视频的音量"</string>
+    <string name="dtmf_tone_enable_title">"屏幕按键音"</string>
+    <string name="dtmf_tone_enable_summary_on">"使用拨号面板时发出声音"</string>
+    <string name="dtmf_tone_enable_summary_off">"使用拨号面板时发出声音"</string>
+    <string name="sound_effects_enable_title">"操作音选择"</string>
+    <string name="sound_effects_enable_summary_on">"进行屏幕选择时发出声音"</string>
+    <string name="sound_effects_enable_summary_off">"进行屏幕选择时发出声音"</string>
+    <string name="play_media_notification_sounds_enable_title">"SD 卡通知"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"禁用 SD 卡通知声音"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"启用 SD 卡通知声音"</string>
+    <string name="sync_settings">"数据同步"</string>
+    <string name="sync_settings_summary">"选择同步哪些应用程序"</string>
+    <string name="display_settings">"显示设置"</string>
+    <string name="animations_title">"动画"</string>
+    <string name="animations_summary_on">"打开/关闭窗口时显示动画"</string>
+    <string name="animations_summary_off">"打开/关闭窗口时显示动画"</string>
+    <string name="brightness">"亮度"</string>
+    <string name="brightness_summary">"调整屏幕亮度"</string>
+    <string name="screen_timeout">"屏幕待机"</string>
+    <string name="screen_timeout_summary">"在屏幕自动关闭前调整延迟"</string>
+    <string name="sim_lock_settings">"SIM 卡锁定设置"</string>
+    <string name="sim_lock_settings_category">"设置 SIM 卡锁定"</string>
+    <string name="sim_lock_settings_title">"SIM 卡锁定"</string>
+    <string name="sim_pin_toggle">"锁定 SIM 卡"</string>
+    <string name="sim_lock_on">"需要 PIN 码才能使用手机"</string>
+    <string name="sim_lock_off">"需要 PIN 码才能使用手机"</string>
+    <string name="sim_pin_change">"更改 SIM 卡 PIN 码"</string>
+    <string name="sim_enter_pin">"SIM 卡 PIN 码"</string>
+    <string name="sim_enable_sim_lock">"锁定 SIM 卡"</string>
+    <string name="sim_disable_sim_lock">"解锁 SIM 卡"</string>
+    <string name="sim_enter_old">"旧 SIM 卡 PIN 码"</string>
+    <string name="sim_enter_new">"新 SIM 卡 PIN 码"</string>
+    <string name="sim_reenter_new">"重新键入新 PIN 码"</string>
+    <string name="sim_change_pin">"SIM 卡 PIN 码"</string>
+    <string name="sim_bad_pin">"PIN 码不正确！"</string>
+    <string name="sim_pins_dont_match">"PIN 码不匹配！"</string>
+    <string name="sim_change_failed">"无法更改 PIN 码。"\n"PIN 码可能不正确。"</string>
+    <string name="sim_change_succeeded">"SIM 卡 PIN 码更改成功"</string>
+    <string name="sim_lock_failed">"无法更改 SIM 卡锁定状态。"\n"PIN 码可能不正确。"</string>
+    <string name="sim_enter_ok">"确定"</string>
+    <string name="sim_enter_cancel">"取消"</string>
+    <string name="device_info_settings">"手机状态"</string>
+    <string name="system_update_settings_list_item_title">"系统更新"</string>
+    <string name="system_update_settings_list_item_summary">"检查系统更新"</string>
+    <string name="firmware_version">"固件版本"</string>
+    <string name="model_number">"型号"</string>
+    <string name="baseband_version">"Baseband 版本"</string>
+    <string name="kernel_version">"Kernel 版本"</string>
+    <string name="build_number">"内部版本号"</string>
+    <string name="device_info_not_available">"不可用"</string>
+    <string name="device_status_activity_title">"状态"</string>
+    <string name="device_status">"状态"</string>
+    <string name="device_status_summary">"IMEI、手机号、信号等"</string>
+    <string name="storage_settings_title">"SD 卡和手机存储"</string>
+    <string name="storage_settings_summary">"卸下 SD 卡，查看可用的存储空间"</string>
+    <string name="status_number">"手机号"</string>
+    <string name="status_network_type">"手机网络类型"</string>
+    <string name="status_data_state">"手机网络状态"</string>
+    <string name="status_service_state">"服务状态"</string>
+    <string name="status_signal_strength">"信号强度"</string>
+    <string name="status_roaming">"漫游"</string>
+    <string name="status_operator">"网络"</string>
+    <string name="status_wifi_mac_address">"Wi-Fi MAC 地址"</string>
+    <string name="status_bt_address">"蓝牙地址"</string>
+    <string name="status_unavailable">"不可用"</string>
+    <string name="status_network_traffic_stats">"网络使用"</string>
+    <string name="status_network_traffic_summary">"发送：<xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g> 接收：<xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"正常使用时间"</string>
+    <string name="status_awake_time">"唤醒时间"</string>
+    <string name="internal_memory">"手机内部存储"</string>
+    <string name="sd_memory">"SD 卡"</string>
+    <string name="memory_available">"可用的空间"</string>
+    <string name="memory_size">"空间总量"</string>
+    <string name="sd_eject">"删除 SD 卡"</string>
+    <string name="sd_eject_summary">"删除 SD 卡以安全移除"</string>
+    <string name="sd_format">"格式化 SD 卡"</string>
+    <string name="sd_format_summary">"格式化（清除）SD 卡"</string>
+    <string name="sd_unavailable">"不可用"</string>
+    <string name="read_only">" （只读）"</string>
+    <string name="battery_status_title">"电池状态"</string>
+    <string name="battery_level_title">"电池级别"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"编辑接入点"</string>
+    <string name="apn_not_set">"&lt;未设置&gt;"</string>
+    <string name="apn_name">"名称"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"代理"</string>
+    <string name="apn_http_port">"端口"</string>
+    <string name="apn_user">"用户名"</string>
+    <string name="apn_password">"密码"</string>
+    <string name="apn_server">"服务器"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"彩信代理"</string>
+    <string name="apn_mms_port">"彩信端口"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APN 类型"</string>
+    <string name="menu_delete">"删除 APN"</string>
+    <string name="menu_new">"新 APN"</string>
+    <string name="menu_save">"保存"</string>
+    <string name="menu_cancel">"放弃"</string>
+    <string name="error_title">"注意"</string>
+    <string name="error_name_empty">"“名称”字段不能为空。"</string>
+    <string name="error_apn_empty">"APN 不能为空。"</string>
+    <string name="error_mcc_not3">"MCC 字段必须为 3 位数。"</string>
+    <string name="error_mnc_not23">"MNC 字段必须为 2 位数或 3 位数。"</string>
+    <string name="master_clear_title">"已重设出厂数据"</string>
+    <string name="master_clear_summary">"清除手机上的所有数据"</string>
+    <string name="master_clear_desc">"此操作会将手机重设为其初始出厂状态，即清除所有数据和下载的应用程序！"</string>
+    <string name="master_clear_button_text">"重设手机"</string>
+    <string name="master_clear_final_desc">"是否要重设手机以清除所有数据和应用程序？该操作无法撤消！"</string>
+    <string name="master_clear_final_button_text">"清除全部内容"</string>
+    <string name="master_clear_gesture_prompt">"绘制解锁图案"</string>
+    <string name="master_clear_gesture_explanation">"您必须绘制解锁图案才能确认手机重设。"</string>
+    <string name="master_clear_failed">"未执行重设，因为 System Clear 服务不可用。"</string>
+    <string name="media_format_title">"格式化 SD 卡。"</string>
+    <string name="media_format_summary">"清除 SD 卡上的所有数据"</string>
+    <string name="media_format_desc">"该操作会清除手机上的 SD 卡。您会丢失卡上的所有数据。"</string>
+    <string name="media_format_button_text">"格式化 SD 卡"</string>
+    <string name="media_format_final_desc">"是否要格式化 SD 卡，以清除所有媒质？该操作不能撤消！"</string>
+    <string name="media_format_final_button_text">"清除所有内容"</string>
+    <string name="media_format_gesture_prompt">"绘制您的解锁图案"</string>
+    <string name="media_format_gesture_explanation">"您必须绘制解锁图案才能确认格式化 SD 卡。"</string>
+    <string name="call_settings_title">"通话设置"</string>
+    <string name="call_settings_summary">"设置语音信箱、呼叫转移、呼叫等待、呼叫者 ID"</string>
+    <string name="network_settings_title">"移动网络"</string>
+    <string name="network_settings_summary">"为漫游、网络、APN 设置选项"</string>
+    <string name="location_title">"我的位置源"</string>
+    <string name="location_network_based">"使用无线网络"</string>
+    <string name="location_networks_disabled">"使用无线网络查看应用程序（例如 Google 地图）中的位置"</string>
+    <string name="location_neighborhood_level">"通过 Wi-Fi 和/或移动网络确定的位置"</string>
+    <string name="location_gps">"启用 GPS 卫星设置"</string>
+    <string name="location_street_level">"定位时，精确到街道级别（取消选择可节约电量）"</string>
+    <string name="location_gps_disabled">"定位到街道级别（需要更多电量来观看天空）"</string>
+    <string name="about_settings">"关于手机"</string>
+    <string name="about_settings_summary">"查看法律信息、手机状态和软件版本"</string>
+    <string name="legal_information">"法律信息"</string>
+    <string name="contributors_title">"赞助商"</string>
+    <string name="copyright_title">"版权"</string>
+    <string name="license_title">"许可"</string>
+    <string name="terms_title">"条款"</string>
+    <string name="settings_license_activity_title">"开源许可"</string>
+    <string name="settings_license_activity_unavailable">"载入许可时出现问题。"</string>
+    <string name="settings_license_activity_loading">"正在载入..."</string>
+    <string name="lock_settings_title">"屏幕解锁图案"</string>
+    <string name="lockpattern_change_lock_pattern_label">"更改解锁图案"</string>
+    <string name="lockpattern_need_to_unlock">"确认保存的图案"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"很抱歉，请重试："</string>
+    <string name="lockpattern_recording_intro_header">"绘制解锁图案"</string>
+    <string name="lockpattern_recording_intro_footer">"按“菜单”获取帮助。"</string>
+    <string name="lockpattern_recording_inprogress">"完成后松开手指。"</string>
+    <string name="lockpattern_recording_incorrect_too_short">"连接至少 <xliff:g id="NUMBER">%d</xliff:g> 个点。请重试："</string>
+    <string name="lockpattern_pattern_entered_header">"图案已记录！"</string>
+    <string name="lockpattern_need_to_confirm">"重新绘制图案以确认："</string>
+    <string name="lockpattern_pattern_confirmed_header">"您的新解锁图案："</string>
+    <string name="lockpattern_confirm_button_text">"确认"</string>
+    <string name="lockpattern_restart_button_text">"重新绘制"</string>
+    <string name="lockpattern_retry_button_text">"重试"</string>
+    <string name="lockpattern_continue_button_text">"继续"</string>
+    <string name="lockpattern_settings_title">"解锁图案"</string>
+    <string name="lockpattern_settings_enable_title">"需要图案"</string>
+    <string name="lockpattern_settings_enable_summary">"必须绘制图案才能解锁屏幕"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"使用可见的图案"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"使用触觉反馈"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"设置解锁图案"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"更改解锁图案"</string>
+    <string name="lockpattern_settings_help_how_to_record">"如何绘制解锁图案"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"错误尝试的次数太多！"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"<xliff:g id="NUMBER">%d</xliff:g> 秒后重试。"</string>
+    <string name="skip_button_label">"取消"</string>
+    <string name="next_button_label">"下一步"</string>
+    <string name="lock_title">"保护您的手机"</string>
+    <string name="lock_intro_message"><font size="17">"通过创建个人屏幕解锁图案来保护您的手机不受未经授权的使用。"\n<font height="17">\n</font><b>"1"</b>"  在下一屏幕上，观看示例图案的绘制。"\n<font height="17">\n</font><b>"2"</b>"  准备就绪后，绘制您自己的个人解锁图案。尝试不同的图案，但至少要连接四个点。"\n<font height="17">\n</font><b>"3"</b>"  重新绘制您的图案以进行确认。"\n<font height="17">\n</font><b>"可以开始了吗？选择“下一步”"</b>"。"\n<font height="3">\n</font>"要让手机处于不受保护的状态，请选择“取消”。"</font></string>
+    <string name="lock_example_title">"示例图案"</string>
+    <string name="lock_example_message">"连接至少四个点。"\n\n"准备好绘制自己的图案后选择“下一步”。"</string>
+    <string name="manageapplications_settings_title">"管理应用程序"</string>
+    <string name="manageapplications_settings_summary">"管理和删除安装的应用程序"</string>
+    <string name="applications_settings">"应用程序"</string>
+    <string name="applications_settings_summary">"管理应用程序，设置快速启动快捷键"</string>
+    <string name="applications_settings_header">"应用程序设置"</string>
+    <string name="install_applications">"未知源"</string>
+    <string name="install_unknown_applications">"允许安装非市场应用程序"</string>
+    <string name="install_all_warning">"您的手机和个人数据很容易受到来自未知源的应用程序的攻击。您同意单方面承担由于使用这些应用程序而可能对您的手机造成的任何损坏或数据丢失的责任。"</string>
+    <string name="application_info_label">"应用程序信息"</string>
+    <string name="storage_label">"存储"</string>
+    <string name="auto_launch_label">"默认情况下启动"</string>
+    <string name="permissions_label">"权限"</string>
+    <string name="cache_header_label">"缓存"</string>
+    <string name="clear_cache_btn_text">"清除缓存"</string>
+    <string name="cache_size_label">"缓存"</string>
+    <string name="controls_label">"控件"</string>
+    <string name="force_stop">"强制停止"</string>
+    <string name="total_size_label">"总量"</string>
+    <string name="application_size_label">"应用程序"</string>
+    <string name="data_size_label">"数据"</string>
+    <string name="uninstall_text">"卸载"</string>
+    <string name="clear_user_data_text">"清除数据"</string>
+    <string name="auto_launch_enable_text">"您已选择默认情况下启动此应用程序以执行某些操作。"</string>
+    <string name="auto_launch_disable_text">"未设置默认值。"</string>
+    <string name="clear_activities">"清除默认值"</string>
+    <string name="unknown">"未知"</string>
+    <string name="sort_order_alpha">"排序"</string>
+    <string name="sort_order_size">"按大小排序"</string>
+    <string name="manage_space_text">"管理空间"</string>
+    <string name="filter">"过滤"</string>
+    <string name="filter_dlg_title">"选择过滤选项"</string>
+    <string name="filter_apps_all">"全部"</string>
+    <string name="filter_apps_third_party">"第三方"</string>
+    <string name="filter_apps_running">"正在运行"</string>
+    <string name="loading">"正在载入..."</string>
+    <string name="recompute_size">"正在重新计算大小..."</string>
+    <string name="clear_data_dlg_title">"删除"</string>
+    <string name="clear_data_dlg_text">"您保存在此应用程序中的所有信息都会永久删除。"</string>
+    <string name="dlg_ok">"确定"</string>
+    <string name="dlg_cancel">"取消"</string>
+    <string name="app_not_found_dlg_title">"未找到应用程序"</string>
+    <string name="app_not_found_dlg_text">"未在已安装的应用程序的列表中找到该应用程序。"</string>
+    <string name="clear_data_failed">"无法清除应用程序数据。"</string>
+    <string name="security_settings_desc">"此应用程序可访问您手机上的以下内容："</string>
+    <string name="computing_size">"正在计算..."</string>
+    <string name="invalid_size_value">"无法计算包大小"</string>
+    <string name="empty_list_msg">"您尚未安装任何第三方应用程序。"</string>
+    <string name="language_settings">"区域和文本"</string>
+    <string name="language_settings_summary">"设置区域（语言和区域）、文本输入和自动纠错选项"</string>
+    <string name="language_category">"区域设置"</string>
+    <string name="text_category">"文本设置"</string>
+    <string name="phone_language">"选择区域"</string>
+    <string name="phone_language_summary">"选择语言和地区"</string>
+    <string name="auto_replace">"自动替换"</string>
+    <string name="auto_replace_summary">"纠正错误键入的词"</string>
+    <string name="auto_caps">"自动大写"</string>
+    <string name="auto_caps_summary">"将句子中的首字母大写"</string>
+    <string name="auto_punctuate">"自动加标点"</string>
+    <string name="hardkeyboard_category">"物理键盘设置"</string>
+    <string name="auto_punctuate_summary">"按两次空格键来插入“。”"</string>
+    <string name="show_password">"可见的密码"</string>
+    <string name="show_password_summary">"键入时显示密码"</string>
+    <string name="user_dict_settings_titlebar">"用户词典"</string>
+    <string name="user_dict_settings_title">"用户词典"</string>
+    <string name="user_dict_settings_summary">"向用户词典中添加字词以及从用户词典中删除字词"</string>
+    <string name="user_dict_settings_add_menu_title">"添加"</string>
+    <string name="user_dict_settings_add_dialog_title">"添加到词典"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"编辑"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"删除"</string>
+    <string name="user_dict_settings_empty_text">"用户词典中没有您定义的字词。您可以通过菜单添加字词。"</string>
+    <string name="testing">"测试"</string>
+    <string name="testing_phone_info">"手机信息"</string>
+    <string name="testing_battery_info">"电池信息"</string>
+    <string name="testing_battery_history">"电池历史记录"</string>
+    <string name="quick_launch_title">"快速启动"</string>
+    <string name="quick_launch_summary">"设置启动应用程序的键盘快捷键"</string>
+    <string name="quick_launch_assign_application">"分配应用程序"</string>
+    <string name="quick_launch_no_shortcut">"无快捷键"</string>
+    <string name="quick_launch_shortcut">"搜索 + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"清除"</string>
+    <string name="quick_launch_clear_dialog_message">"会清除快捷键 <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>（<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>）。"</string>
+    <string name="quick_launch_clear_ok_button">"确定"</string>
+    <string name="quick_launch_clear_cancel_button">"取消"</string>
+    <string name="quick_launch_display_mode_applications">"应用程序"</string>
+    <string name="quick_launch_display_mode_shortcuts">"快捷键"</string>
+    <string name="input_methods_settings_title">"文本输入"</string>
+    <string name="input_methods_settings_summary">"管理文本输入选项"</string>
+    <string name="input_methods_settings_label_format">"%s 设置"</string>
+    <string name="development_settings_title">"开发"</string>
+    <string name="development_settings_summary">"设置应用程序开发选项"</string>
+    <string name="enable_adb">"USB 调试"</string>
+    <string name="enable_adb_summary">"连接 USB 后启用调试模式"</string>
+    <string name="keep_screen_on">"保持唤醒状态"</string>
+    <string name="keep_screen_on_summary">"充电时屏幕不会休眠"</string>
+    <string name="allow_mock_location">"允许模仿位置"</string>
+    <string name="allow_mock_location_summary">"允许模仿位置"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"有关用户 ID %d 的详情"</string>
+    <string name="battery_history_uid">"用户 ID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"有关<xliff:g id="APP_NAME">%1$s</xliff:g>的网络使用详情："</string>
+    <string name="battery_history_bytes_received">"收到的字节数：<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"发送的字节数：<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"总字节数：<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"有关<xliff:g id="APP_NAME">%1$s</xliff:g>的 CPU 使用详情："</string>
+    <string name="battery_history_user_time">"用户时间："</string>
+    <string name="battery_history_system_time">"系统时间："</string>
+    <string name="battery_history_total_time">"合计时间："</string>
+    <string name="battery_history_starts">"启动次数：<xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> 天 <xliff:g id="HOURS">%2$d</xliff:g> 小时 <xliff:g id="MINUTES">%3$d</xliff:g> 分 <xliff:g id="SECONDS">%4$d</xliff:g> 秒"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> 小时 <xliff:g id="MINUTES">%2$d</xliff:g> 分 <xliff:g id="SECONDS">%3$d</xliff:g> 秒"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> 分 <xliff:g id="SECONDS">%2$d</xliff:g> 秒"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> 秒"</string>
+    <string name="battery_history_packages_sharing_this_uid">"共享该用户 ID 的数据包："</string>
+    <string name="battery_history_no_data">"没有可用的电池使用数据"</string>
+    <string name="battery_history_sensor">"传感器："</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"包使用的传感器："</string>
+    <string name="battery_history_sensor_usage">"<xliff:g id="PACKAGE">%2$s</xliff:g>使用了 <xliff:g id="COUNT">%1$d</xliff:g> 次"</string>
+    <string name="battery_history_sensor_usage_multi">"由以下某项使用过 <xliff:g id="COUNT">%1$d</xliff:g> 次："</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"屏幕开启所花费的时间："</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"正在使用电池："</string>
+    <string name="battery_history_screen_on_plugged">"已插入："</string>
+    <string name="usage_stats_label">"使用情况统计"</string>
+    <string name="testing_usage_stats">"使用情况统计数据"</string>
+    <string name="display_order_text">"排序方式："</string>
+    <string name="app_name_label">"应用程序"</string>
+    <string name="launch_count_label">"次数"</string>
+    <string name="usage_time_label">"使用时间"</string>
+</resources>
diff --git a/res/values-zh-rTW-nokeys/strings.xml b/res/values-zh-rTW-nokeys/strings.xml
new file mode 100644
index 0000000..4a765cc
--- /dev/null
+++ b/res/values-zh-rTW-nokeys/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary">"管理應用程式"</string>
+</resources>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
new file mode 100644
index 0000000..2ec9ed2
--- /dev/null
+++ b/res/values-zh-rTW/arrays.xml
@@ -0,0 +1,72 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item>"美國"</item>
+    <item>"歐洲"</item>
+    <item>"非洲"</item>
+    <item>"亞洲"</item>
+    <item>"澳大利亞"</item>
+    <item>"太平洋"</item>
+    <item>"全部"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item>"15 秒"</item>
+    <item>"30 秒"</item>
+    <item>"1 分鐘"</item>
+    <item>"2 分鐘"</item>
+    <item>"10 分鐘"</item>
+    <item>"從不逾時"</item>
+  </string-array>
+  <string-array name="wifi_security_entries">
+    <item>"自動"</item>
+    <item>"無"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_security_without_auto_entries">
+    <item>"無"</item>
+    <item>"WEP"</item>
+    <item>"WPA Personal"</item>
+    <item>"WPA2 Personal"</item>
+  </string-array>
+  <string-array name="wifi_wep_type">
+    <item>"自動"</item>
+    <item>"WEP ASCII"</item>
+    <item>"WEP (十六進位)"</item>
+  </string-array>
+  <string-array name="wifi_sleep_policy_entries">
+    <item>"關上螢幕時"</item>
+    <item>"插入時絕不"</item>
+    <item>"從不"</item>
+  </string-array>
+    <!-- no translation found for battery_history_type_spinner:0 (2193799199027871385) -->
+    <!-- no translation found for battery_history_type_spinner:1 (6401018715947316517) -->
+    <!-- no translation found for battery_history_type_spinner:2 (188092590354892392) -->
+    <!-- no translation found for battery_history_type_spinner:3 (8414109131222049141) -->
+    <!-- no translation found for battery_history_type_spinner:4 (1327904325081257093) -->
+    <!-- no translation found for battery_history_type_spinner:5 (4832254146664706277) -->
+    <!-- no translation found for battery_history_which_spinner:0 (3451981114763440074) -->
+    <!-- no translation found for battery_history_which_spinner:1 (166936313535197598) -->
+    <!-- no translation found for battery_history_which_spinner:2 (4793941382744963893) -->
+  <string-array name="usage_stats_display_order_types">
+    <item>"使用時間"</item>
+    <item>"啟動計數"</item>
+    <item>"應用程式名稱"</item>
+  </string-array>
+</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..c34d6a5
--- /dev/null
+++ b/res/values-zh-rTW/strings.xml
@@ -0,0 +1,672 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="device_info_default">"未知的"</string>
+    <string name="turn_on_radio">"開啟無線通訊"</string>
+    <string name="turn_off_radio">"關閉無線通訊"</string>
+    <string name="turn_on_qxdm">"啟用 QXDM SD 記錄"</string>
+    <string name="turn_off_qxdm">"停用 QXDM SD 記錄"</string>
+    <string name="radioInfo_menu_viewADN">"檢視 SIM 地址簿"</string>
+    <string name="radioInfo_menu_viewFDN">"檢視限制撥號號碼"</string>
+    <string name="radioInfo_menu_viewSDN">"檢視服務撥號號碼"</string>
+    <string name="radioInfo_menu_getPDP">"取得 PDP 清單"</string>
+    <string name="radioInfo_menu_enableData">"啟用資料連線"</string>
+    <string name="radioInfo_menu_disableData">"停用資料連線"</string>
+    <string name="radioInfo_menu_enableDataOnBoot">"開機顯示資料"</string>
+    <string name="radioInfo_menu_disableDataOnBoot">"開機不顯示資料"</string>
+    <string name="radioInfo_service_in">"服務中"</string>
+    <string name="radioInfo_service_out">"超出服務範圍"</string>
+    <string name="radioInfo_service_emergency">"只能撥打緊急電話"</string>
+    <string name="radioInfo_service_off">"無線通訊關閉"</string>
+    <string name="radioInfo_roaming_in">"漫遊"</string>
+    <string name="radioInfo_roaming_not">"非漫遊"</string>
+    <string name="radioInfo_phone_idle">"閒置"</string>
+    <string name="radioInfo_phone_ringing">"響鈴"</string>
+    <string name="radioInfo_phone_offhook">"通話中"</string>
+    <string name="radioInfo_data_disconnected">"連線中斷"</string>
+    <string name="radioInfo_data_connecting">"連線中"</string>
+    <string name="radioInfo_data_connected">"已連線"</string>
+    <string name="radioInfo_data_suspended">"待命"</string>
+    <string name="radioInfo_unknown">"未知的"</string>
+    <string name="radioInfo_display_packets">"pkts"</string>
+    <string name="radioInfo_display_bytes">"bytes"</string>
+    <string name="radioInfo_display_dbm">"dBm"</string>
+    <string name="radioInfo_display_asu">"asu"</string>
+    <string name="radioInfo_lac">"LAC"</string>
+    <string name="radioInfo_cid">"CID"</string>
+    <string name="sdcard_unmount">"卸載 SD 卡"</string>
+    <string name="sdcard_format">"將 SD 卡格式化"</string>
+    <string name="small_font">"小"</string>
+    <string name="medium_font">"中"</string>
+    <string name="large_font">"大"</string>
+    <string name="font_size_save">"確定"</string>
+    <string name="sdcard_setting">"SD 卡"</string>
+    <string name="battery_info_status_label">"電池狀態："</string>
+    <string name="battery_info_scale_label">"電池計量："</string>
+    <string name="battery_info_level_label">"電池計量："</string>
+    <string name="battery_info_health_label">"電池壽命："</string>
+    <string name="battery_info_technology_label">"電池技術："</string>
+    <string name="battery_info_voltage_label">"電池電壓："</string>
+    <string name="battery_info_voltage_units">"mV"</string>
+    <string name="battery_info_temperature_label">"電池溫度："</string>
+    <string name="battery_info_temperature_units">"° C"</string>
+    <string name="battery_info_uptime">"開機時間："</string>
+    <string name="battery_info_awake_battery">"電池的清醒時間："</string>
+    <string name="battery_info_awake_plugged">"充電時的清醒時間："</string>
+    <string name="battery_info_screen_on">"螢幕顯示時間："</string>
+    <string name="battery_info_status_unknown">"未知的"</string>
+    <string name="battery_info_status_charging">"充電中"</string>
+    <string name="battery_info_status_charging_ac">"(AC)"</string>
+    <string name="battery_info_status_charging_usb">"(USB)"</string>
+    <string name="battery_info_status_discharging">"放電中"</string>
+    <string name="battery_info_status_not_charging">"未充電"</string>
+    <string name="battery_info_status_full">"電力充足"</string>
+    <string name="battery_info_health_unknown">"未知的"</string>
+    <string name="battery_info_health_good">"好"</string>
+    <string name="battery_info_health_overheat">"過熱"</string>
+    <string name="battery_info_health_dead">"電池耗盡"</string>
+    <string name="battery_info_health_over_voltage">"電壓過高"</string>
+    <string name="battery_info_health_unspecified_failure">"未知的錯誤"</string>
+    <string name="bluetooth">"藍牙"</string>
+    <string name="bluetooth_visibility">"無法測得"</string>
+    <string name="bluetooth_is_discoverable">"<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g> 秒無法測得..."</string>
+    <string name="bluetooth_not_discoverable">"設定裝置為可偵測"</string>
+    <string name="bluetooth_devices">"藍牙裝置"</string>
+    <string name="bluetooth_device_name">"裝置名稱"</string>
+    <string name="bluetooth_name_not_set">"未設定名稱，使用帳戶名稱"</string>
+    <string name="bluetooth_scan_for_devices">"掃描裝置"</string>
+    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>即將斷線。"</string>
+    <string name="bluetooth_connected">"已連線"</string>
+    <string name="bluetooth_disconnected">"連線中斷"</string>
+    <string name="bluetooth_disconnecting">"連線中斷..."</string>
+    <string name="bluetooth_connecting">"連線中..."</string>
+    <!-- no translation found for bluetooth_unknown (1905151516611093010) -->
+    <skip />
+    <string name="bluetooth_not_connected">"與此裝置配對"</string>
+    <string name="bluetooth_pairing">"配對中..."</string>
+    <!-- no translation found for bluetooth_paired (1247541089000057726) -->
+    <skip />
+    <string name="bluetooth_device">"免持/頭戴式"</string>
+    <string name="progress_scanning">"掃描中"</string>
+    <string name="bluetooth_notif_ticker">"藍牙配對要求"</string>
+    <string name="bluetooth_notif_title">"配對要求"</string>
+    <string name="bluetooth_notif_message">"選取要配對的裝置 "</string>
+    <string name="date_and_time">"日期與時間設定"</string>
+    <string name="date_time_12_hour_sample">"下午 1:00"</string>
+    <string name="date_time_24_hour_sample">"13:00"</string>
+    <string name="choose_timezone">"選取時區"</string>
+    <string name="display_preview_label">"預覽："</string>
+    <string name="display_font_size_label">"字型大小："</string>
+    <!-- no translation found for intent_sender_data_label (8363026381459131554) -->
+    <skip />
+    <string name="intent_sender_sendbroadcast_text">"傳送 <xliff:g id="BROADCAST">broadcast</xliff:g>"</string>
+    <string name="intent_sender_action_label">"<xliff:g id="ACTION">Action</xliff:g>："</string>
+    <string name="intent_sender_startactivity_text">"開始 <xliff:g id="ACTIVITY">activity</xliff:g>"</string>
+    <string name="intent_sender_resource_label">"<xliff:g id="RESOURCE">Resource</xliff:g>："</string>
+    <string name="intent_sender_account_label">"帳戶："</string>
+    <string name="proxy_clear_text">"清除"</string>
+    <string name="proxy_port_label">"連接埠"</string>
+    <string name="proxy_defaultView_text">"還原預設值"</string>
+    <string name="proxy_action_text">"儲存"</string>
+    <string name="proxy_hostname_label">"主機名稱"</string>
+    <string name="proxy_error">"注意"</string>
+    <string name="proxy_error_dismiss">"確定"</string>
+    <string name="proxy_error_invalid_host">"您輸入的主機名稱無效。"</string>
+    <string name="proxy_error_empty_port">"您必須輸入連接埠欄位。"</string>
+    <string name="proxy_error_empty_host_set_port">"若主機欄位空白，連接埠欄位也須空白。"</string>
+    <string name="proxy_error_invalid_port">"您輸入的連接埠無效。"</string>
+    <string name="radio_info_signal_location_label">"位置："</string>
+    <string name="radio_info_neighboring_location_label">"附近的 CID："</string>
+    <string name="radio_info_data_attempts_label">"嘗試資料："</string>
+    <string name="radio_info_gprs_service_label">"GPRS 服務："</string>
+    <string name="radio_info_roaming_label">"漫遊："</string>
+    <string name="radio_info_imei_label">"IMEI："</string>
+    <string name="radio_info_call_redirect_label">"來電轉接："</string>
+    <string name="radio_info_ppp_resets_label">"開機之後 PPP 重設次數："</string>
+    <string name="radio_info_gsm_disconnects_label">"GSM 連線中斷："</string>
+    <string name="radio_info_current_network_label">"目前網路："</string>
+    <string name="radio_info_data_successes_label">"資料成功傳輸："</string>
+    <string name="radio_info_ppp_received_label">"PPP 已接收："</string>
+    <string name="radio_info_gsm_service_label">"GSM 服務："</string>
+    <string name="radio_info_signal_strength_label">"訊號強度："</string>
+    <string name="radio_info_call_status_label">"通話狀態："</string>
+    <string name="radio_info_ppp_sent_label">"PPP 傳送："</string>
+    <string name="radio_info_radio_resets_label">"無線通訊重設："</string>
+    <string name="radio_info_message_waiting_label">"簡訊等候中："</string>
+    <string name="radio_info_phone_number_label">"電話號碼："</string>
+    <string name="radio_info_band_mode_label">"選取無線通訊頻道"</string>
+    <string name="radio_info_network_type_label">"網路類型："</string>
+    <string name="radio_info_set_perferred_label">"設定喜好網路類型："</string>
+    <string name="radio_info_ping_ipaddr">"Ping IP 位址："</string>
+    <string name="radio_info_ping_hostname">"Ping 主機名稱 (www.google.com.tw)："</string>
+    <string name="radio_info_http_client_test">"HTTP 用戶端測試："</string>
+    <string name="radio_info_toggle_ciph_label">"選取加密"</string>
+    <string name="ping_test_label">"執行 ping 測試"</string>
+    <string name="radio_info_smsc_label">"SMSC："</string>
+    <string name="radio_info_smsc_update_label">"更新"</string>
+    <string name="radio_info_smsc_refresh_label">"重新整理"</string>
+    <string name="radio_info_toggle_dns_check_label">"切換 DNS 檢查"</string>
+    <string name="band_mode_title">"設定 GSM/UMTS 頻道"</string>
+    <string name="band_mode_loading">"載入頻道清單..."</string>
+    <string name="band_mode_set">"設定"</string>
+    <string name="band_mode_failed">"失敗"</string>
+    <string name="band_mode_succeeded">"成功"</string>
+    <string name="sdcard_changes_instructions">"USB 纜線重新連接時，變更才會生效"</string>
+    <string name="sdcard_settings_screen_mass_storage_text">"啟用 USB 大量儲存裝置"</string>
+    <string name="sdcard_settings_total_bytes_label">"總容量 (bytes)："</string>
+    <string name="sdcard_settings_not_present_status">"沒有 SD 卡"</string>
+    <string name="sdcard_settings_available_bytes_label">"可用容量 (bytes)："</string>
+    <string name="sdcard_settings_mass_storage_status">"SD 卡已視為 USB 大量儲存裝置"</string>
+    <string name="sdcard_settings_unmounted_status">"您現在可以放心移除 SD 卡"</string>
+    <string name="sdcard_settings_bad_removal_status">"SD 卡仍在使用時便被移除！"</string>
+    <string name="sdcard_settings_used_bytes_label">"使用容量 (bytes)："</string>
+    <string name="sdcard_settings_scanning_status">"從 SD 卡掃描媒體中..."</string>
+    <string name="sdcard_settings_read_only_status">"SD 卡為唯讀狀態"</string>
+    <string name="next_label">"下一步"</string>
+    <string name="language_picker_title">"地區"</string>
+    <string name="select_your_language">"選取語言"</string>
+    <string name="activity_picker_label">"選取動作"</string>
+    <string name="device_info_label">"裝置資訊"</string>
+    <string name="battery_info_label">"電池資訊"</string>
+    <string name="battery_history_label">"電池記錄"</string>
+    <string name="display_label">"顯示"</string>
+    <string name="phone_info_label">"手機資訊"</string>
+    <string name="sd_card_settings_label">"SD 卡"</string>
+    <string name="proxy_settings_label">"Proxy 設定"</string>
+    <string name="cancel">"取消"</string>
+    <string name="settings_label">"設定"</string>
+    <string name="airplane_mode">"飛航模式"</string>
+    <string name="airplane_mode_summary">"停用所有的無線連線"</string>
+    <string name="airplane_mode_turning_on">"停用無線網路連線中..."</string>
+    <string name="airplane_mode_turning_off">"啟動無線網路連線中..."</string>
+    <string name="radio_controls_title">"無線網路控制"</string>
+    <string name="radio_controls_summary">"管理 Wi-Fi、藍牙、飛航模式與行動網路"</string>
+    <string name="date_and_time_settings_title">"日期與時間"</string>
+    <string name="date_and_time_settings_summary">"設定日期、時間、時區與格式"</string>
+    <string name="date_time_auto">"自動"</string>
+    <string name="date_time_auto_summaryOn">"使用網路提供的資料"</string>
+    <string name="date_time_auto_summaryOff">"使用網路提供的資料"</string>
+    <string name="date_time_24hour">"使用 24 小時格式"</string>
+    <string name="date_time_set_time">"設定時間"</string>
+    <string name="date_time_set_timezone">"選取時區"</string>
+    <string name="date_time_set_date">"設定日期"</string>
+    <string name="date_time_date_format">"選取日期格式"</string>
+    <string name="zone_list_menu_sort_alphabetically">"依照字母排序"</string>
+    <string name="zone_list_menu_sort_by_timezone">"依時區排序"</string>
+    <string name="security_settings_title">"安全與位置"</string>
+    <string name="security_settings_summary">"設定我的位置、螢幕解鎖、SIM 卡鎖定"</string>
+    <string name="security_passwords_title">"密碼"</string>
+    <string name="bluetooth_quick_toggle_title">"藍牙"</string>
+    <string name="bluetooth_quick_toggle_summary">"開啟藍牙"</string>
+    <string name="bluetooth_settings">"藍牙設定"</string>
+    <string name="bluetooth_settings_title">"藍牙設定"</string>
+    <string name="bluetooth_settings_summary">"管理連線、設定裝置名稱與可偵測性"</string>
+    <string name="bluetooth_pin_entry">"藍牙配對要求"</string>
+    <string name="bluetooth_device_info">"藍牙裝置資訊"</string>
+    <string name="bluetooth_enter_pin_msg">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"\n\n"輸入 PIN 進行配對。"\n"(請嘗試 0000 或 1234。)"</string>
+    <string name="bluetooth_error_title">"注意"</string>
+    <string name="bluetooth_pairing_error_message">"與<xliff:g id="DEVICE_NAME">%1$s</xliff:g>配對時發生問題。"</string>
+    <string name="bluetooth_pairing_pin_error_message">"由於輸入的 PIN 不正確，因此無法與<xliff:g id="DEVICE_NAME">%1$s</xliff:g>配對。"</string>
+    <string name="bluetooth_connecting_error_message">"連接至<xliff:g id="DEVICE_NAME">%1$s</xliff:g>時發生問題。"</string>
+    <string name="bluetooth_preference_scan_title">"掃描裝置"</string>
+    <string name="bluetooth_device_context_connect">"連線"</string>
+    <string name="bluetooth_device_context_disconnect">"斷線"</string>
+    <string name="bluetooth_device_context_pair_connect">"配對並連線"</string>
+    <string name="bluetooth_device_context_unpair">"解除配對"</string>
+    <string name="bluetooth_device_context_disconnect_unpair">"中斷連接並解除配對"</string>
+    <string name="bluetooth_device_context_connect_advanced">"選項..."</string>
+    <string name="bluetooth_connect_specific_profiles_title">"連線到..."</string>
+    <string name="bluetooth_profile_a2dp">"媒體"</string>
+    <string name="bluetooth_profile_headset">"電話"</string>
+    <string name="bluetooth_summary_connected_to_a2dp">"連接至媒體音訊"</string>
+    <string name="bluetooth_summary_connected_to_headset">"連接至電話音訊"</string>
+    <string name="bluetooth_summary_connected_to_a2dp_headset">"連接至電話和媒體音訊"</string>
+    <string name="bluetooth_device_advanced_title">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> 選項"</string>
+    <string name="bluetooth_device_advanced_online_mode_title">"連線"</string>
+    <string name="bluetooth_device_advanced_online_mode_summary">"連接至藍牙裝置"</string>
+    <string name="bluetooth_device_advanced_profile_header_title">"設定檔"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected">"連接至媒體音訊"</string>
+    <string name="bluetooth_headset_profile_summary_connected">"連接至電話音訊"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for">"用作媒體音訊"</string>
+    <string name="bluetooth_headset_profile_summary_use_for">"用作電話音訊"</string>
+    <string name="wifi">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_title">"Wi-Fi"</string>
+    <string name="wifi_quick_toggle_summary">"開啟 Wi-Fi"</string>
+    <string name="wifi_settings">"Wi-Fi 設定"</string>
+    <string name="wifi_settings_category">"Wi-Fi 設定"</string>
+    <string name="wifi_settings_summary">"設定、管理無線存取點"</string>
+    <string name="forget_network">"清除"</string>
+    <string name="wifi_status">"狀態"</string>
+    <string name="wifi_link_speed">"速度"</string>
+    <string name="wifi_signal_3">"極佳"</string>
+    <string name="wifi_signal_2">"好"</string>
+    <string name="wifi_signal_1">"差"</string>
+    <string name="wifi_signal_0">"微弱"</string>
+    <string name="security">"安全性"</string>
+    <string name="wifi_security_open">"開啟"</string>
+    <string name="wifi_security_wep">"WEP"</string>
+    <string name="wifi_security_wpa">"WPA"</string>
+    <string name="wifi_security_wpa2">"WPA2"</string>
+    <string name="wifi_security_unknown">"未知的"</string>
+    <string name="wifi_security_verbose_open">"開啟網路"</string>
+    <string name="wifi_security_verbose_wep">"以 WEP 加密"</string>
+    <string name="wifi_security_verbose_wpa">"以 WPA 保護連線"</string>
+    <string name="wifi_security_verbose_wpa2">"以  WPA2 保護連線"</string>
+    <string name="ip_address">"IP 位址"</string>
+    <string name="signal">"訊號強度"</string>
+    <string name="wifi_starting">"開啟中..."</string>
+    <string name="wifi_stopping">"關閉中..."</string>
+    <string name="wifi_error">"錯誤"</string>
+    <string name="error_starting">"無法開始 Wi-Fi"</string>
+    <string name="error_stopping">"無法停止 Wi-Fi"</string>
+    <string name="error_scanning">"無法掃描網路"</string>
+    <string name="error_connecting">"無法連線到此網路"</string>
+    <string name="error_saving">"無法儲存網路"</string>
+    <string name="connect">"連線"</string>
+    <string name="connect_to_blank">"連線到 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="please_type_passphrase">"無線網路密碼"</string>
+    <string name="please_type_hex_key">"WEP hex key (0-9，A-F)"</string>
+    <string name="wifi_show_password">"顯示密碼"</string>
+    <string name="scan_wifi">"掃描"</string>
+    <string name="summary_not_in_range">"不在範圍內"</string>
+    <string name="summary_remembered">"已記憶"</string>
+    <string name="summary_connection_failed">"連線失敗，選取此項再試一次。"</string>
+    <string name="wifi_access_points">"Wi-Fi 網路"</string>
+    <string name="wifi_type_ssid">"網路 SSID"</string>
+    <string name="wifi_security">"安全性"</string>
+    <string name="wifi_save_config">"儲存"</string>
+    <string name="wifi_password_unchanged">"(未變更)"</string>
+    <string name="wifi_add_other_network">"新增 Wi-Fi 網路"</string>
+    <string name="wifi_notify_open_networks">"網路通知"</string>
+    <string name="wifi_notify_open_networks_summary">"有開放網路時通知我"</string>
+    <string name="wifi_password_incorrect_error">"您輸入的網路密碼不正確。請再試一次。"</string>
+    <string name="wifi_generic_connection_error">"連線到網路時發生問題。請再試一次。"</string>
+    <string name="wifi_menu_advanced">"進階"</string>
+    <string name="wifi_ip_settings_titlebar">"IP 設定"</string>
+    <string name="wifi_ip_settings_menu_save">"儲存"</string>
+    <string name="wifi_ip_settings_menu_cancel">"取消"</string>
+    <string name="wifi_ip_settings_invalid_ip">"請輸入有效的 IP 位址。"</string>
+    <string name="wifi_use_static_ip">"使用靜態 IP"</string>
+    <string name="wifi_ip_address">"IP 位址"</string>
+    <string name="wifi_dns1">"DNS 1"</string>
+    <string name="wifi_dns2">"DNS 2"</string>
+    <string name="wifi_gateway">"閘道"</string>
+    <string name="wifi_netmask">"網路遮罩"</string>
+    <string name="wifi_context_menu_connect">"連線到網路"</string>
+    <string name="wifi_context_menu_forget">"清除網路"</string>
+    <string name="wifi_context_menu_change_password">"變更密碼"</string>
+    <string name="wifi_advanced_titlebar">"進階"</string>
+    <string name="wifi_setting_num_channels_title">"管理網域"</string>
+    <string name="wifi_setting_num_channels_summary">"設定要使用的頻道號碼"</string>
+    <string name="wifi_setting_num_channels_error">"設定管理網域時發生問題。"</string>
+    <string name="wifi_setting_num_channels_channel_phrase">"<xliff:g id="NUM_CHANNELS">%1$d</xliff:g> 頻道"</string>
+    <string name="wifi_setting_sleep_policy_title">"Wi-Fi 休眠設定"</string>
+    <string name="wifi_setting_sleep_policy_summary">"指定何時要從 Wi-Fi 切換到行動數據"</string>
+    <string name="wifi_setting_sleep_policy_error">"休眠設定時發生問題。"</string>
+    <string name="wifi_advanced_mac_address_title">"MAC 位址"</string>
+    <string name="fragment_status_scanning">"掃描中..."</string>
+    <string name="fragment_status_connecting">"連線到 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</string>
+    <string name="fragment_status_authenticating">"驗證 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 中..."</string>
+    <string name="fragment_status_obtaining_ip">"從 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 取得 IP 位址中..."</string>
+    <string name="fragment_status_connected">"已連線到 <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
+    <string name="fragment_status_disconnecting">"從 <xliff:g id="NETWORK_NAME">%1$s</xliff:g> 斷線中..."</string>
+    <string name="fragment_status_disconnected">"連線中斷"</string>
+    <string name="fragment_status_failed">"失敗"</string>
+    <string name="status_scanning">"掃描中..."</string>
+    <string name="status_connecting">"連線中..."</string>
+    <string name="status_authenticating">"認證中..."</string>
+    <string name="status_obtaining_ip">"取得位址中..."</string>
+    <string name="status_connected">"已連線"</string>
+    <string name="status_disconnecting">"連線中斷..."</string>
+    <string name="status_disconnected">"連線中斷"</string>
+    <string name="status_failed">"失敗"</string>
+    <string name="sound_and_display_settings">"音效與顯示"</string>
+    <string name="sound_settings">"音效設定"</string>
+    <string name="sound_and_display_settings_summary">"設定鈴聲、通知與螢幕亮度"</string>
+    <string name="silent_mode_title">"靜音模式"</string>
+    <string name="silent_mode_summary">"將媒體和鬧鐘以外的所有音效靜音"</string>
+    <string name="ringtone_title">"電話鈴聲"</string>
+    <string name="ringtone_summary">"設定預設來電鈴聲"</string>
+    <string name="ring_volume_title">"鈴聲音量"</string>
+    <string name="ring_volume_summary">"設定來電和通知的音量"</string>
+    <string name="vibrate_title">"手機震動"</string>
+    <string name="vibrate_summary">"來電震動"</string>
+    <string name="notification_sound_title">"通知鈴聲"</string>
+    <string name="notification_sound_summary">"設定預設通知鈴聲"</string>
+    <string name="incoming_call_volume_title">"來電音量"</string>
+    <string name="notification_volume_title">"通知音量"</string>
+    <string name="checkbox_notification_same_as_incoming_call">"通知使用來電音量"</string>
+    <string name="notification_sound_dialog_title">"選取通知鈴聲"</string>
+    <string name="media_volume_title">"媒體音量"</string>
+    <string name="media_volume_summary">"設定音樂與影片的音量"</string>
+    <string name="dtmf_tone_enable_title">"觸碰音效"</string>
+    <string name="dtmf_tone_enable_summary_on">"使用撥號面板時播放按鍵音效"</string>
+    <string name="dtmf_tone_enable_summary_off">"使用撥號面板時播放按鍵音效"</string>
+    <string name="sound_effects_enable_title">"可聽見選項"</string>
+    <string name="sound_effects_enable_summary_on">"使用螢幕選取時播放音效"</string>
+    <string name="sound_effects_enable_summary_off">"使用螢幕選取時播放音效"</string>
+    <string name="play_media_notification_sounds_enable_title">"SD 卡通知"</string>
+    <string name="play_media_notification_sounds_enable_summary_on">"停用 SD 卡通知音效"</string>
+    <string name="play_media_notification_sounds_enable_summary_off">"啟用 SD 卡通知音效"</string>
+    <string name="sync_settings">"資料同步化"</string>
+    <string name="sync_settings_summary">"選取要同步處理的應用程式"</string>
+    <string name="display_settings">"顯示設定"</string>
+    <string name="animations_title">"動畫"</string>
+    <string name="animations_summary_on">"開啟/關閉視窗時顯示動畫"</string>
+    <string name="animations_summary_off">"開啟/關閉視窗時顯示動畫"</string>
+    <string name="brightness">"亮度"</string>
+    <string name="brightness_summary">"調整螢幕亮度"</string>
+    <string name="screen_timeout">"螢幕逾時"</string>
+    <string name="screen_timeout_summary">"調整螢幕自動關閉前的延遲時間"</string>
+    <string name="sim_lock_settings">"SIM 卡鎖定設定"</string>
+    <string name="sim_lock_settings_category">"設定 SIM 卡鎖定"</string>
+    <string name="sim_lock_settings_title">"SIM 卡鎖定"</string>
+    <string name="sim_pin_toggle">"鎖定 SIM 卡"</string>
+    <string name="sim_lock_on">"需要輸入 PIN 才可使用電話"</string>
+    <string name="sim_lock_off">"需要輸入 PIN 才可使用電話"</string>
+    <string name="sim_pin_change">"變更 SIM PIN"</string>
+    <string name="sim_enter_pin">"SIM PIN"</string>
+    <string name="sim_enable_sim_lock">"鎖定 SIM 卡"</string>
+    <string name="sim_disable_sim_lock">"解除鎖定 SIM 卡"</string>
+    <string name="sim_enter_old">"舊的 SIM PIN"</string>
+    <string name="sim_enter_new">"新增 SIM PIN"</string>
+    <string name="sim_reenter_new">"重新輸入新的 PIN"</string>
+    <string name="sim_change_pin">"SIM PIN"</string>
+    <string name="sim_bad_pin">"PIN 錯誤！"</string>
+    <string name="sim_pins_dont_match">"PIN 不符合！"</string>
+    <string name="sim_change_failed">"無法變更 PIN。"\n"可能 PIN 不正確。"</string>
+    <string name="sim_change_succeeded">"成功變更 SIM PIN"</string>
+    <string name="sim_lock_failed">"無法變更 SIM 卡鎖定狀態。"\n"可能是 PIN 錯誤。"</string>
+    <string name="sim_enter_ok">"確定"</string>
+    <string name="sim_enter_cancel">"取消"</string>
+    <string name="device_info_settings">"手機狀態"</string>
+    <string name="system_update_settings_list_item_title">"系統更新"</string>
+    <string name="system_update_settings_list_item_summary">"檢查系統更新"</string>
+    <string name="firmware_version">"韌體版本"</string>
+    <string name="model_number">"模組號碼"</string>
+    <string name="baseband_version">"基頻版本"</string>
+    <string name="kernel_version">"核心版本"</string>
+    <string name="build_number">"版本號碼"</string>
+    <string name="device_info_not_available">"無法取得"</string>
+    <string name="device_status_activity_title">"狀態"</string>
+    <string name="device_status">"狀態"</string>
+    <string name="device_status_summary">"IMEI、電話號碼、訊號等。"</string>
+    <string name="storage_settings_title">"SD 卡與手機儲存"</string>
+    <string name="storage_settings_summary">"卸載 SD 卡，檢視可用儲存媒體。"</string>
+    <string name="status_number">"電話號碼"</string>
+    <string name="status_network_type">"行動網路類型"</string>
+    <string name="status_data_state">"行動網路狀態"</string>
+    <string name="status_service_state">"服務狀態"</string>
+    <string name="status_signal_strength">"訊號強度"</string>
+    <string name="status_roaming">"漫遊"</string>
+    <string name="status_operator">"網路"</string>
+    <string name="status_wifi_mac_address">"Wi-Fi MAC 位址"</string>
+    <string name="status_bt_address">"藍牙位址"</string>
+    <string name="status_unavailable">"無法取得"</string>
+    <string name="status_network_traffic_stats">"網路使用率"</string>
+    <string name="status_network_traffic_summary">"已傳送：<xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>已接收：<xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
+    <string name="status_up_time">"開機時間"</string>
+    <string name="status_awake_time">"清醒時間"</string>
+    <string name="internal_memory">"手機內部記憶體"</string>
+    <string name="sd_memory">"SD 卡"</string>
+    <string name="memory_available">"可用空間"</string>
+    <string name="memory_size">"總空間"</string>
+    <string name="sd_eject">"卸載 SD 卡"</string>
+    <string name="sd_eject_summary">"必須先卸載 SD 卡，才能安全移除"</string>
+    <string name="sd_format">"將 SD 卡格式化"</string>
+    <string name="sd_format_summary">"將 SD 卡格式化 (清除)"</string>
+    <string name="sd_unavailable">"無法取得資訊"</string>
+    <string name="read_only">" (唯讀)"</string>
+    <string name="battery_status_title">"電池狀態"</string>
+    <string name="battery_level_title">"電池計量"</string>
+    <string name="apn_settings">"APN"</string>
+    <string name="apn_edit">"編輯存取點"</string>
+    <string name="apn_not_set">"(未設定)"</string>
+    <string name="apn_name">"名稱"</string>
+    <string name="apn_apn">"APN"</string>
+    <string name="apn_http_proxy">"Proxy"</string>
+    <string name="apn_http_port">"連接埠"</string>
+    <string name="apn_user">"使用者名稱"</string>
+    <string name="apn_password">"密碼"</string>
+    <string name="apn_server">"伺服器"</string>
+    <string name="apn_mmsc">"MMSC"</string>
+    <string name="apn_mms_proxy">"MMS proxy"</string>
+    <string name="apn_mms_port">"MMS 連接埠"</string>
+    <string name="apn_mcc">"MCC"</string>
+    <string name="apn_mnc">"MNC"</string>
+    <string name="apn_type">"APN 類型"</string>
+    <string name="menu_delete">"刪除 APN"</string>
+    <string name="menu_new">"新增 APN"</string>
+    <string name="menu_save">"儲存"</string>
+    <string name="menu_cancel">"放棄"</string>
+    <string name="error_title">"注意"</string>
+    <string name="error_name_empty">"名稱欄位不能空白。"</string>
+    <string name="error_apn_empty">"APN 不能空白。"</string>
+    <string name="error_mcc_not3">"MCC 欄位必須為 3 位。"</string>
+    <string name="error_mnc_not23">"MNC 欄位至少要 2 或 3 位。"</string>
+    <string name="master_clear_title">"出廠資料重設"</string>
+    <string name="master_clear_summary">"清除手機上所有資料"</string>
+    <string name="master_clear_desc">"此項操作會將手機回復至出廠設定，清除所有資料與下載的應用程式！"</string>
+    <string name="master_clear_button_text">"重設手機"</string>
+    <string name="master_clear_final_desc">"確定要重設手機，清除所有資料與應用程式？此項操作無法復原！"</string>
+    <string name="master_clear_final_button_text">"清除全部"</string>
+    <string name="master_clear_gesture_prompt">"畫出解鎖圖形"</string>
+    <string name="master_clear_gesture_explanation">"請畫出解鎖圖形，以確認重設手機。"</string>
+    <string name="master_clear_failed">"因「系統清除」服務異常，未成功執行重設。"</string>
+    <string name="media_format_title">"將 SD 卡格式化。"</string>
+    <string name="media_format_summary">"清除 SD 卡上的所有資料"</string>
+    <string name="media_format_desc">"此動作將會清除手機中 SD 卡上的所有資料。SD 卡上的所有資料將會遺失！"</string>
+    <string name="media_format_button_text">"將 SD 卡格式化"</string>
+    <string name="media_format_final_desc">"要將 SD 卡格式化、清除所有媒體嗎？此動作無法復原！"</string>
+    <string name="media_format_final_button_text">"全部清除"</string>
+    <string name="media_format_gesture_prompt">"畫出解鎖圖形"</string>
+    <string name="media_format_gesture_explanation">"您必須畫出解鎖圖形，以確認將 SD 卡格式化。"</string>
+    <string name="call_settings_title">"通話設定"</string>
+    <string name="call_settings_summary">"設定語音信箱、來電指定轉接、話中插接、本機號碼"</string>
+    <string name="network_settings_title">"行動網路"</string>
+    <string name="network_settings_summary">"設定漫遊、網路、APN 選項"</string>
+    <string name="location_title">"我的位置來源"</string>
+    <string name="location_network_based">"使用無線網路"</string>
+    <string name="location_networks_disabled">"使用無線網路，在應用程式中查詢位置 (例如 Google 地圖)"</string>
+    <string name="location_neighborhood_level">"位置根據 Wi-Fi 與/或行動網路決定"</string>
+    <string name="location_gps">"啟用 GPS 衛星接收器"</string>
+    <string name="location_street_level">"定位時，精準度設定為街道層級 (不選此項較省電)"</string>
+    <string name="location_gps_disabled">"切換到街道檢視 (需要更多電力及天候允許)"</string>
+    <string name="about_settings">"關於手機"</string>
+    <string name="about_settings_summary">"檢視法律資訊、手機狀態、軟體版本"</string>
+    <string name="legal_information">"法律資訊"</string>
+    <string name="contributors_title">"貢獻者"</string>
+    <string name="copyright_title">"版權"</string>
+    <string name="license_title">"授權"</string>
+    <string name="terms_title">"條款及細則"</string>
+    <string name="settings_license_activity_title">"開啟原始授權"</string>
+    <string name="settings_license_activity_unavailable">"載入授權時發生問題"</string>
+    <string name="settings_license_activity_loading">"載入中..."</string>
+    <string name="lock_settings_title">"螢幕解鎖圖形"</string>
+    <string name="lockpattern_change_lock_pattern_label">"變更解鎖圖形"</string>
+    <string name="lockpattern_need_to_unlock">"確認儲存的圖形"</string>
+    <string name="lockpattern_need_to_unlock_wrong">"抱歉，請再試一次："</string>
+    <string name="lockpattern_recording_intro_header">"畫出解鎖圖形"</string>
+    <string name="lockpattern_recording_intro_footer">"按下 [選單] 尋求幫助。"</string>
+    <string name="lockpattern_recording_inprogress">"完成後手指離開。"</string>
+    <string name="lockpattern_recording_incorrect_too_short">"請連接至少 <xliff:g id="NUMBER">%d</xliff:g> 點。再試一次："</string>
+    <string name="lockpattern_pattern_entered_header">"圖形已記錄！"</string>
+    <string name="lockpattern_need_to_confirm">"再次畫出圖形以確認："</string>
+    <string name="lockpattern_pattern_confirmed_header">"新的解鎖圖形："</string>
+    <string name="lockpattern_confirm_button_text">"確認"</string>
+    <string name="lockpattern_restart_button_text">"重畫"</string>
+    <string name="lockpattern_retry_button_text">"重試"</string>
+    <string name="lockpattern_continue_button_text">"繼續"</string>
+    <string name="lockpattern_settings_title">"解鎖圖形"</string>
+    <string name="lockpattern_settings_enable_title">"需要解鎖圖形"</string>
+    <string name="lockpattern_settings_enable_summary">"必須畫出解鎖圖形以解鎖螢幕"</string>
+    <string name="lockpattern_settings_enable_visible_pattern_title">"使用可見圖形"</string>
+    <string name="lockpattern_settings_enable_tactile_feedback_title">"使用觸覺回饋"</string>
+    <string name="lockpattern_settings_choose_lock_pattern">"設定解鎖圖形"</string>
+    <string name="lockpattern_settings_change_lock_pattern">"變更解鎖圖形"</string>
+    <string name="lockpattern_settings_help_how_to_record">"如何畫出解鎖圖形"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">"錯誤嘗試太多！"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">"<xliff:g id="NUMBER">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="skip_button_label">"取消"</string>
+    <string name="next_button_label">"下一步"</string>
+    <string name="lock_title">"手機安全設定"</string>
+    <string name="lock_intro_message"><font size="17">" 建立個人螢幕解鎖圖形，避免您的手機在未授權狀態下被使用。"\n<font height="17">\n</font><b>" 1 "</b>"  在下個螢幕中，檢視範例圖形繪畫示範。"\n<font height="17">\n</font><b>" 2 "</b>"  您準備好後，便可畫出個人解鎖圖形。您可以嘗試不同的圖形，但需要至少連接四點。"\n<font height="17">\n</font><b>" 3 "</b>"  再次畫出圖形以確認。"\n<font height="17">\n</font><b>" 準備開始了嗎？選取 [下一步]"</b>"。"\n<font height="3">\n</font>" 若要保持未保護狀態，請選取 [取消]。"</font></string>
+    <string name="lock_example_title">"範例圖形"</string>
+    <string name="lock_example_message">"畫出圖形時，需要至少連接四個點。"\n" "\n"準備好要畫出您的解鎖圖形時，請選取 [下一步]。"</string>
+    <string name="manageapplications_settings_title">"管理應用程式"</string>
+    <string name="manageapplications_settings_summary">"管理及移除已安裝的應用程式"</string>
+    <string name="applications_settings">"應用程式"</string>
+    <string name="applications_settings_summary">"管理應用程式，設定快速啟動捷徑"</string>
+    <string name="applications_settings_header">"應用程式設定"</string>
+    <string name="install_applications">"未知的來源"</string>
+    <string name="install_unknown_applications">"允許安裝非市場應用程式"</string>
+    <string name="install_all_warning">"如果是未知來源的應用程式，便比較可能攻擊您的手機與個人資訊。若使用這些應用程式造成手機受損或資料遺失，您必須為此完全負責。"</string>
+    <string name="application_info_label">"應用程式資訊"</string>
+    <string name="storage_label">"儲存"</string>
+    <string name="auto_launch_label">"依預設值啟動"</string>
+    <string name="permissions_label">"許可"</string>
+    <string name="cache_header_label">"快取"</string>
+    <string name="clear_cache_btn_text">"清除快取"</string>
+    <string name="cache_size_label">"快取"</string>
+    <string name="controls_label">"控制項"</string>
+    <string name="force_stop">"強制停止"</string>
+    <string name="total_size_label">"總共"</string>
+    <string name="application_size_label">"應用程式"</string>
+    <string name="data_size_label">"資料"</string>
+    <string name="uninstall_text">"解除安裝"</string>
+    <string name="clear_user_data_text">"清除資料"</string>
+    <string name="auto_launch_enable_text">"您已設定在某些動作下啟動此應用程式。"</string>
+    <string name="auto_launch_disable_text">"沒有預設值。"</string>
+    <string name="clear_activities">"清除預設值"</string>
+    <string name="unknown">"未知的"</string>
+    <string name="sort_order_alpha">"排序"</string>
+    <string name="sort_order_size">"依大小排序"</string>
+    <string name="manage_space_text">"管理空間"</string>
+    <string name="filter">"篩選"</string>
+    <string name="filter_dlg_title">"選取篩選選項"</string>
+    <string name="filter_apps_all">"全部"</string>
+    <string name="filter_apps_third_party">"第三方"</string>
+    <string name="filter_apps_running">"執行中"</string>
+    <string name="loading">"載入中..."</string>
+    <string name="recompute_size">"重新計算大小..."</string>
+    <string name="clear_data_dlg_title">"刪除"</string>
+    <string name="clear_data_dlg_text">"所有儲存在此應用程式的資訊都會被永久刪除。"</string>
+    <string name="dlg_ok">"確定"</string>
+    <string name="dlg_cancel">"取消"</string>
+    <string name="app_not_found_dlg_title">"找不到應用程式"</string>
+    <string name="app_not_found_dlg_text">"在已安裝程式清單中找不到此應用程式。"</string>
+    <string name="clear_data_failed">"無法清除應用程式資料。"</string>
+    <string name="security_settings_desc">"此應用程式可存取您電話中的下列項目："</string>
+    <string name="computing_size">"計算中..."</string>
+    <string name="invalid_size_value">"無法計算封裝大小"</string>
+    <string name="empty_list_msg">"您尚未安裝任何的第三方應用程式。"</string>
+    <string name="language_settings">"地區與文字"</string>
+    <string name="language_settings_summary">"設定地區 (語言和地區)、文字輸入和文字自動校正選項"</string>
+    <string name="language_category">"地區設定"</string>
+    <string name="text_category">"文字設定"</string>
+    <string name="phone_language">"選取地區"</string>
+    <string name="phone_language_summary">"選取語言及地區"</string>
+    <string name="auto_replace">"自動取代"</string>
+    <string name="auto_replace_summary">"修改不正確的字"</string>
+    <string name="auto_caps">"自動大寫"</string>
+    <string name="auto_caps_summary">"句子首字字母大寫"</string>
+    <string name="auto_punctuate">"自動標點"</string>
+    <string name="hardkeyboard_category">"實體鍵盤設定"</string>
+    <string name="auto_punctuate_summary">"按空白鍵兩次可插入「.」"</string>
+    <string name="show_password">"密碼可見"</string>
+    <string name="show_password_summary">"顯示輸入的密碼"</string>
+    <string name="user_dict_settings_titlebar">"使用者字典"</string>
+    <string name="user_dict_settings_title">"使用者字典"</string>
+    <string name="user_dict_settings_summary">"在使用者字典中新增及移除字詞"</string>
+    <string name="user_dict_settings_add_menu_title">"新增"</string>
+    <string name="user_dict_settings_add_dialog_title">"新增至字典"</string>
+    <string name="user_dict_settings_context_menu_edit_title">"編輯"</string>
+    <string name="user_dict_settings_context_menu_delete_title">"刪除"</string>
+    <string name="user_dict_settings_empty_text">"您的使用者字典中沒有任何字詞。您可以透過選單新增字詞。"</string>
+    <string name="testing">"測試中"</string>
+    <string name="testing_phone_info">"手機資訊"</string>
+    <string name="testing_battery_info">"電池資訊"</string>
+    <string name="testing_battery_history">"電池記錄"</string>
+    <string name="quick_launch_title">"快速啟動"</string>
+    <string name="quick_launch_summary">"設定啟動應用程式的鍵盤捷徑"</string>
+    <string name="quick_launch_assign_application">"分配應用程式"</string>
+    <string name="quick_launch_no_shortcut">"沒有捷徑"</string>
+    <string name="quick_launch_shortcut">"搜尋 + <xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g>"</string>
+    <string name="quick_launch_clear_dialog_title">"清除"</string>
+    <string name="quick_launch_clear_dialog_message">"<xliff:g id="SHORTCUT_LETTER">%1$s</xliff:g> (<xliff:g id="APPLICATION_NAME">%2$s</xliff:g>) 的捷徑會被清除。"</string>
+    <string name="quick_launch_clear_ok_button">"確定"</string>
+    <string name="quick_launch_clear_cancel_button">"取消"</string>
+    <string name="quick_launch_display_mode_applications">"應用程式"</string>
+    <string name="quick_launch_display_mode_shortcuts">"捷徑"</string>
+    <string name="input_methods_settings_title">"文字輸入法"</string>
+    <string name="input_methods_settings_summary">"管理輸入法選項"</string>
+    <string name="input_methods_settings_label_format">"%s 設定"</string>
+    <string name="development_settings_title">"開發"</string>
+    <string name="development_settings_summary">"設定應用程式開發的選項"</string>
+    <string name="enable_adb">"USB 除錯中"</string>
+    <string name="enable_adb_summary">"USB 連線時進入除錯模式"</string>
+    <string name="keep_screen_on">"保持清醒"</string>
+    <string name="keep_screen_on_summary">"充電時螢幕不會進入休眠"</string>
+    <string name="allow_mock_location">"允許模擬位置"</string>
+    <string name="allow_mock_location_summary">"允許模擬位置"</string>
+    <!-- no translation found for gadget_picker_title (98374951396755811) -->
+    <skip />
+    <!-- no translation found for widget_picker_title (9130684134213467557) -->
+    <skip />
+    <string name="battery_history_details_for">"UID %d 的詳細資料"</string>
+    <string name="battery_history_uid">"UID <xliff:g id="USER_ID">%1$d</xliff:g>"</string>
+    <string name="battery_history_network_usage">"<xliff:g id="APP_NAME">%1$s</xliff:g> 的網路使用率詳細資料："</string>
+    <string name="battery_history_bytes_received">"已接收的位元組數：<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_sent">"已傳送的位元組數：<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_bytes_total">"總容量 (bytes)：<xliff:g id="BYTES">%1$d</xliff:g>"</string>
+    <string name="battery_history_cpu_usage">"<xliff:g id="APP_NAME">%1$s</xliff:g> 的 CPU 使用率詳細資料："</string>
+    <string name="battery_history_user_time">"使用者時間："</string>
+    <string name="battery_history_system_time">"系統時間："</string>
+    <string name="battery_history_total_time">"總計時間："</string>
+    <string name="battery_history_starts">"啟動次數：<xliff:g id="STARTS">%1$d</xliff:g>"</string>
+    <string name="battery_history_days">"<xliff:g id="DAYS">%1$d</xliff:g> 天，<xliff:g id="HOURS">%2$d</xliff:g> 小時，<xliff:g id="MINUTES">%3$d</xliff:g> 分鐘，<xliff:g id="SECONDS">%4$d</xliff:g> 秒"</string>
+    <string name="battery_history_hours">"<xliff:g id="HOURS">%1$d</xliff:g> 小時，<xliff:g id="MINUTES">%2$d</xliff:g> 分鐘，<xliff:g id="SECONDS">%3$d</xliff:g> 秒"</string>
+    <string name="battery_history_minutes">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘，<xliff:g id="SECONDS">%2$d</xliff:g> 秒"</string>
+    <string name="battery_history_seconds">"<xliff:g id="SECONDS">%1$d</xliff:g> 秒"</string>
+    <string name="battery_history_packages_sharing_this_uid">"共用此 UID 的封裝："</string>
+    <string name="battery_history_no_data">"沒有電池使用資料"</string>
+    <string name="battery_history_sensor">"感應器："</string>
+    <!-- no translation found for battery_history_wakelock (608683447522396293) -->
+    <skip />
+    <string name="battery_history_used_by_packages">"程式使用的感應器："</string>
+    <string name="battery_history_sensor_usage">"使用次數：<xliff:g id="COUNT">%1$d</xliff:g>，使用的封裝：<xliff:g id="PACKAGE">%2$s</xliff:g>"</string>
+    <string name="battery_history_sensor_usage_multi">"使用次數：<xliff:g id="COUNT">%1$d</xliff:g>，使用者為下列其中之一："</string>
+    <!-- no translation found for battery_history_awake_label (8449792868990080882) -->
+    <skip />
+    <!-- no translation found for battery_history_screen_on_label (1848936521786339362) -->
+    <skip />
+    <!-- no translation found for battery_history_phone_on_label (700191958853142297) -->
+    <skip />
+    <!-- no translation found for battery_history_awake (4350886665719031057) -->
+    <skip />
+    <string name="battery_history_screen_on">"螢幕開啟時間："</string>
+    <!-- no translation found for battery_history_phone_on (4891504401623839532) -->
+    <skip />
+    <string name="battery_history_screen_on_battery">"使用電池："</string>
+    <string name="battery_history_screen_on_plugged">"插入時間："</string>
+    <string name="usage_stats_label">"使用統計資料"</string>
+    <string name="testing_usage_stats">"使用統計資料"</string>
+    <string name="display_order_text">"排序依據："</string>
+    <string name="app_name_label">"應用程式"</string>
+    <string name="launch_count_label">"計數"</string>
+    <string name="usage_time_label">"使用時間"</string>
+</resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
new file mode 100644
index 0000000..d9480c2
--- /dev/null
+++ b/res/values/arrays.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+<resources>
+    <!-- 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. -->
+        <item>America</item>
+	<!-- 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. -->
+        <item>Africa</item>
+	<!-- 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. -->
+        <item>Australia</item>
+	<!-- 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. -->
+        <item>All</item>
+    </string-array>
+
+    <!-- There is a setting to control the format of dates displayed throughout the system.  This is in the Date & Time Settings screen.  Unfortunately, these cannot be changed at all. --> <skip />
+    <!-- Do not translate.  This is fed directly to the formatter. -->
+    <string-array name="date_format_values">
+        <!-- Do not translate.  This is fed directly to the formatter. -->
+        <item>MM-dd-yyyy</item>
+        <!-- Do not translate.  This is fed directly to the formatter. -->
+        <item>dd-MM-yyyy</item>
+        <!-- Do not translate.  This is fed directly to the formatter. -->
+        <item>MMM dd, yyyy</item>
+        <!-- Do not translate.  This is fed directly to the formatter. -->
+        <item>dd-MMM-yyyy</item>
+        <!-- Do not translate.  This is fed directly to the formatter. -->
+        <item>yyyy-MM-dd</item>
+    </string-array>
+
+    <!-- Display settings.  The delay in inactivity before the screen is turned off. These are shown ain a list dialog. -->
+    <string-array name="screen_timeout_entries">
+        <item>15 seconds</item>
+        <item>30 seconds</item>
+        <item>1 minute</item>
+        <item>2 minutes</item>
+        <item>10 minutes</item>
+        <!-- Choosing this means the screen will only turn off after the user manually does so.  There will be no inactivity check. -->
+        <item>Never timeout</item>
+    </string-array>
+
+    <!-- Do not translate. -->
+    <string-array name="screen_timeout_values">
+        <!-- Do not translate. -->
+        <item>15000</item>
+        <!-- Do not translate. -->
+        <item>30000</item>
+        <!-- Do not translate. -->
+        <item>60000</item>
+        <!-- Do not translate. -->
+        <item>120000</item>
+        <!-- Do not translate. -->
+        <item>600000</item>
+        <!-- Do not translate. -->
+        <item>-1</item>
+    </string-array>
+
+    <!-- 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 Personal</item>
+        <!-- The Wi-Fi network has WPA2 personal security. WPA Personal is a tech term, and might be better left untranslated? -->
+        <item>WPA2 Personal</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 Personal</item>
+        <!-- The Wi-Fi network has WPA2 personal security. WPA Personal is a tech term, and might be better left untranslated? -->
+        <item>WPA2 Personal</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>
+        <!-- Do not translate. -->
+        <item>WEP ASCII</item>
+        <!-- WEP key that is in hexadecimal. -->
+        <item>WEP hexadecimal</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. -->
+        <item>When screen turns off</item>
+        <!-- When plugged in, never go to sleep.  When on battery, go to sleep when screen turns off. -->
+        <item>Never when plugged in</item>
+        <!-- Never go to sleep. -->
+        <item>Never</item>
+    </string-array>
+
+    <!-- Match with wifi_sleep_policy_entries and the values of the settings in Settings class. --> <skip />
+    <!-- Do not translate. -->
+    <string-array name="wifi_sleep_policy_values">
+        <!-- Do not translate. -->
+        <item>0</item>
+        <!-- Do not translate. -->
+        <item>1</item>
+        <!-- Do not translate. -->
+        <item>2</item>
+    </string-array>
+
+    <!-- Match with constants in BatteryHistory class -->
+    <string-array name="battery_history_type_spinner">
+        <item>CPU usage</item>
+        <item>Network usage</item>
+        <item>GPS usage</item>
+        <item>Sensor usage</item>
+        <item>Partial wake usage</item>
+        <item>Other usage</item>
+    </string-array>
+
+    <!-- Match with constants in BatteryStats class -->
+    <string-array name="battery_history_which_spinner">
+        <item>Since last unplugged</item>
+        <item>Total since boot</item>
+        <item>Total in all time</item>
+    </string-array>
+
+    <!-- Display options for UsageStats class -->
+    <string-array name="usage_stats_display_order_types">
+        <item>Usage Time</item>
+        <item>Launch Count</item>
+        <item>Application Name</item>
+    </string-array>
+
+</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
new file mode 100644
index 0000000..9bf79f9
--- /dev/null
+++ b/res/values/attrs.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<resources>
+    <declare-styleable name="WifiEncryptionState">
+        <attr name="state_encrypted" format="boolean" />
+    </declare-styleable>
+</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
new file mode 100644
index 0000000..a170c92
--- /dev/null
+++ b/res/values/colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<resources>
+    <color name="black">#000</color>
+</resources>
+         
diff --git a/res/values/strings.xml b/res/values/strings.xml
new file mode 100644
index 0000000..ecf6e02
--- /dev/null
+++ b/res/values/strings.xml
@@ -0,0 +1,1503 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- Device Info --> <skip />
+    <!-- Device Info screen. Used for a status item's value when the proper value is not known -->
+    <string name="device_info_default">Unknown</string>
+
+    <!-- Phone info -->
+    <!-- Phone Info screen. Button label to turn on the radio . Only shown in diagnostic screen, so precise translation is not needed. -->
+    <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>
+    <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_menu_viewFDN">View Fixed Dialing Numbers</string>
+    <!-- Phone Info screen. Menu item label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <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>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_service_out">Out of service</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_service_emergency">Emergency calls only</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_service_off">Radio off</string>
+
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_roaming_in">Roaming</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_roaming_not">Not roaming</string>
+
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_phone_idle">Idle</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_phone_ringing">Ringing</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_phone_offhook">Call in progress</string>
+
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_data_disconnected">Disconnected</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_data_connecting">Connecting</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_data_connected">Connected</string>
+    <!-- Phone Info screen. Status label.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_data_suspended">Suspended</string>
+
+    <!-- Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_unknown">unknown</string>
+    <!-- Phone Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_display_packets">pkts</string>
+    <!-- Phone Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_display_bytes">bytes</string>
+    <!-- Phone Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_display_dbm">dBm</string>
+    <!-- Phone Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_display_asu">asu</string>
+    <!-- Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_lac">LAC</string>
+    <!-- Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radioInfo_cid">CID</string>
+
+    <!-- Used for diagnostic info screens, precise translation isn't needed. Unmounts the SD card from the phone, meaning it will become available for an attached computer  -->
+    <string name="sdcard_unmount">Unmount SD card</string>
+
+    <!-- Used for diagnostic info screens, precise translation isn't needed. Formats the SD card in the phone, meaning it will be erased and reformatted -->
+    <string name="sdcard_format">Format SD card</string>
+
+    <!-- choice for the font size spinner -->
+    <string name="small_font">Small</string>
+    <!-- choice for the font size spinner -->
+    <string name="medium_font">Medium</string>
+    <!-- choice for the font size spinner -->
+    <string name="large_font">Large</string>
+
+    <!-- Do not translate. label for font size preview.  Does not need to be translated. -->
+    <string name="font_size_preview_text">Servez à ce monsieur une bière et des kiwis.</string>
+    <!-- Button. Chosen when they want to save the chosen text size. -->
+    <string name="font_size_save">OK</string>
+
+    <!-- Title for a notification shown. -->
+    <string name="sdcard_setting">SD card</string>
+
+
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_label">Battery status:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_scale_label">Battery scale:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_level_label">Battery level:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_health_label">Battery health:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_technology_label">Battery technology:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_voltage_label">Battery voltage:</string>
+    <!-- Battery Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_voltage_units">mV</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_temperature_label">Battery temperature:</string>
+    <!-- Battery Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_temperature_units">\u00B0 C</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_uptime">Time since boot:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_awake_battery">Awake time on battery:</string>
+    <!-- Battery Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <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>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_charging">Charging</string>
+    <!-- Battery Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_charging_ac">(AC)</string>
+    <!-- Battery Info screen. Units shown after a value.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_charging_usb">(USB)</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_discharging">Discharging</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_not_charging">Not charging</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_status_full">Full</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 -->
+    <string name="battery_info_health_good">Good</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_health_overheat">Overheat</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_health_dead">Dead</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_health_over_voltage">Over voltage</string>
+    <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="battery_info_health_unspecified_failure">Unknown error</string>
+
+    <!-- Used as setting title (for checkbox) on second screen after selecting Bluetooth settings -->
+    <string name="bluetooth">Bluetooth</string>
+    <!-- Bluetooth settings screen, check box label when the Bluetooth device can be seen by others -->
+    <string name="bluetooth_visibility">Discoverable</string>
+    <!-- Bluetooth settings screen,  summary after selecting Discoverable check box -->
+    <string name="bluetooth_is_discoverable">Discoverable for <xliff:g id="discoverable_time_period">%1$s</xliff:g> seconds\u2026</string>
+    <!-- Bluetooth settings screen, Discoverable checkbox summary text -->
+    <string name="bluetooth_not_discoverable">Make device discoverable</string>
+    <!-- Bluetooth settings screen, heading above the list of nearby bluetooth devices -->
+    <string name="bluetooth_devices">Bluetooth devices</string>
+    <!-- Bluetooth settings screen, title for the current bluetooth name setting -->
+    <string name="bluetooth_device_name">Device name</string>
+    <!-- Bluetooth settings screen, summary text when there isn't a name set (for the name setting) -->
+    <string name="bluetooth_name_not_set">No name set, using account name</string>
+    <!-- Bluetooth settings screen, menu item to scan for nearby bluetooth devices -->
+    <string name="bluetooth_scan_for_devices">Scan for devices</string>
+    <!-- Bluetooth settings.  Message for disconnecting from a bluetooth device -->
+    <string name="bluetooth_disconnect_blank"><xliff:g id="device_name">%1$s</xliff:g> will be disconnected.</string>
+    <!-- Bluetooth settings.  Message when cnonected to a device -->
+    <string name="bluetooth_connected">Connected</string>
+    <!-- Bluetooth settings.  Message when a device is disconnected -->
+    <string name="bluetooth_disconnected">Disconnected</string>
+    <!-- Bluetooth settings.  Message when disconnecting from a device -->
+    <string name="bluetooth_disconnecting">Disconnecting\u2026</string>
+    <!-- Bluetooth settings.  Message when connecting to a device -->
+    <string name="bluetooth_connecting">Connecting\u2026</string>
+    <!-- Bluetooth settings.  Message when the device state is unknown -->
+    <string name="bluetooth_unknown"></string>
+    <!--Bluetooth settings screen, summary text under individual Bluetooth devices when not paired yet -->
+    <string name="bluetooth_not_connected">Pair with this device</string>
+    <!--Bluetooth settings screen, summary text under individual Bluetooth devices when pairing -->
+    <string name="bluetooth_pairing">Pairing\u2026</string>
+    <!--Bluetooth settings screen, summary text under individual Bluetooth devices when paired with one -->
+    <string name="bluetooth_paired">Paired but not connected</string>
+    <!--Bluetooth settings screen, summary text under individual Bluetooth devices that are hands free or a headset -->
+    <string name="bluetooth_device">handsfree/headset</string>
+    <!--Bluetooth settings screen, text that appears in heading bar when scanning for devices -->
+    <string name="progress_scanning">Scanning</string>
+    <!-- Notification ticker text (shown in the status bar) when a Bluetooth device wants to pair with us -->
+    <string name="bluetooth_notif_ticker">Bluetooth pairing request</string>
+    <!-- Notification title when a Bluetooth device wants to pair with us -->
+    <string name="bluetooth_notif_title">Pairing request</string>
+    <!-- Notification message when a Bluetooth device wants to pair with us -->
+    <string name="bluetooth_notif_message">Select to pair with\u0020</string>
+
+
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="bluetooth_scan_text">Empty button\u2026</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="bluetooth_settings_text">Empty button\u2026</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="bluetooth_enable_text">Empty button\u2026</string>
+
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="bluetooth_device_info_connectButton_text">Turn on Bluetooth</string>
+    <!-- Do not translate. Used for diagnostic screens, precise translation is not necessary -->
+    <string name="bluetooth_device_info_deviceInfo_text"></string>
+
+    <!-- Date & time settings screen title -->
+    <string name="date_and_time">Date &amp; time settings</string>
+    <!-- Date/time settings.  Summary of the checkbox for choosing between 12 hour time or 24 hour time.  Sample of 12-hour time -->
+    <string name="date_time_12_hour_sample">1:00 pm</string>
+    <!-- Date/time settings.  Summary of the checkbox for choosing between 12 hour time or 24 hour time.  Sample of 24-hour time -->
+    <string name="date_time_24_hour_sample">13:00</string>
+    <!-- Do not translate. Title to change time -->
+    <string name="date_time_changeTime_text">Change time</string>
+    <!-- Do not translate. Title to change date -->
+    <string name="date_time_changeDate_text">Date</string>
+    <!-- The title of the activity to pick a time zone. -->
+    <string name="choose_timezone">Select time zone</string>
+    <!-- Do not translate. Used as the value for a setting. -->
+    <string name="default_date_format"><xliff:g id="default_date_format">MM/dd/yyyy</xliff:g></string>
+
+    <!-- Label of preview text when tweaking font size -->
+    <string name="display_preview_label">Preview:</string>
+    <!-- Label for chosen font size -->
+    <string name="display_font_size_label">Font size:</string>
+
+    <!-- Used for diagnostic screens, precise translation is not necessary -->
+    <string name="intent_sender_data_label"><xliff:g id="data">Data:</xliff:g></string>
+    <!-- Used for diagnostic screens, precise translation is not necessary -->
+    <string name="intent_sender_sendbroadcast_text">Send <xliff:g id="broadcast">broadcast</xliff:g></string>
+    <!-- Used for diagnostic screens, precise translation is not necessary -->
+    <string name="intent_sender_action_label"><xliff:g id="action">Action</xliff:g>:</string>
+    <!-- Used for diagnostic screens, precise translation is not necessary -->
+    <string name="intent_sender_startactivity_text">Start <xliff:g id="activity">activity</xliff:g></string>
+    <!-- Used for diagnostic screens, precise translation is not necessary -->
+    <string name="intent_sender_resource_label"><xliff:g id="resource">Resource</xliff:g>: </string>
+    <!-- Used for diagnostic screens, precise translation is not necessary -->
+    <string name="intent_sender_account_label">Account: </string>
+
+    <!-- HTTP proxy settings. Button to clear the proxy box. -->
+    <string name="proxy_clear_text">Clear</string>
+    <!-- HTTP proxy settings. The port number label. -->
+    <string name="proxy_port_label">Port</string>
+    <!-- HTTP proxy settings. The button to restore the defaults. -->
+    <string name="proxy_defaultView_text">Restore defaults</string>
+    <!-- HTTP proxy settings. The button to save. -->
+    <string name="proxy_action_text">Save</string>
+    <!-- HTTP proxy settings. The text field for the hostname -->
+    <string name="proxy_hostname_label">Hostname</string>
+    <!-- HTTP proxy settings. Title if there is an error-->
+    <string name="proxy_error">Attention</string>
+    <!-- HTTP proxy settings. Button to get rid of error box-->
+    <string name="proxy_error_dismiss">OK</string>
+    <!-- HTTP proxy settings. The error if the hostname is not valid -->
+    <string name="proxy_error_invalid_host">The hostname you typed is not valid.</string>
+    <!-- HTTP proxy settings. Error msg -->
+    <string name="proxy_error_empty_port">You must complete the port field.</string>
+    <!-- HTTP proxy settings. Error msg -->
+    <string name="proxy_error_empty_host_set_port">The port field must be empty if the host field is empty.</string>
+    <!-- HTTP proxy settings. Error msg -->
+    <string name="proxy_error_invalid_port">The port you typed is not valid.</string>
+
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_signal_location_label">Location:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_neighboring_location_label">Neighboring CID:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_data_attempts_label">Data attempts:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_gprs_service_label">GPRS service:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_roaming_label">Roaming:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_imei_label">IMEI:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_call_redirect_label">Call redirect:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_ppp_resets_label">Number of PPP reset since boot:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_gsm_disconnects_label">GSM disconnects:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_current_network_label">Current network:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_data_successes_label">Data successes:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_ppp_received_label">PPP received:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_gsm_service_label">GSM service:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_signal_strength_label">Signal strength:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_call_status_label">Call status:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_ppp_sent_label">PPP sent:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_radio_resets_label">Radio resets:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_message_waiting_label">Message waiting:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_phone_number_label">Phone number:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_band_mode_label">Select radio band</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_network_type_label">Network type:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_set_perferred_label">Set preferred network type:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_ping_ipaddr">Ping IpAddr:</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_ping_hostname">Ping Hostname(www.google.com):</string>
+    <!-- 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>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <string name="radio_info_smsc_update_label">Update</string>
+    <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
+    <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>
+
+    <!-- Band Mode Selection -->
+    <!-- Band mode screen.  Title of activity. -->
+    <string name="band_mode_title">Set GSM/UMTS band</string>
+    <!-- Band mode screen.  Loading message. -->
+    <string name="band_mode_loading">Loading band list\u2026</string>
+    <!-- Band mode screen. Button caption to set the bandmode. -->
+    <string name="band_mode_set">Set</string>
+    <!-- Band mode screen. Status message when unsuccessful. -->
+    <string name="band_mode_failed">Unsuccessful</string>
+    <!-- Band mode screen. Statusm essage when successful. -->
+    <string name="band_mode_succeeded">Successful</string>
+
+    <!-- Instructions after the user changes the mass storage settings -->
+    <string name="sdcard_changes_instructions">Changes take effect when USB cable is reconnected</string>
+    <!-- Enable USB mass storage mode checkbox title -->
+    <string name="sdcard_settings_screen_mass_storage_text">Enable USB mass storage</string>
+    <!-- The label for total bytes on SD card -->
+    <string name="sdcard_settings_total_bytes_label">Total bytes:</string>
+    <!-- Message when there is no SD card present -->
+    <string name="sdcard_settings_not_present_status">No SD card</string>
+    <!-- Th label for the available (free) sapce on the SD card -->
+    <string name="sdcard_settings_available_bytes_label">Available bytes:</string>
+    <!-- Message when the SD card is being used by the computer as mass storage -->
+    <string name="sdcard_settings_mass_storage_status">SD card is being used as a mass storage device</string>
+    <!-- Message when it is safe to remove the SD card -->
+    <string name="sdcard_settings_unmounted_status">It is now safe to remove the SD card</string>
+    <!-- Error message when the SD card was removed without properly unmounting -->
+    <string name="sdcard_settings_bad_removal_status">SD card was removed while still in use!</string>
+    <!-- Label for used bytes on the SD card -->
+    <string name="sdcard_settings_used_bytes_label">Used bytes:</string>
+    <!-- Message when it is scanning the SD card for new files -->
+    <string name="sdcard_settings_scanning_status">Scanning SD card for media\u2026</string>
+    <!-- Message when the SD card is mounted as read only -->
+    <string name="sdcard_settings_read_only_status">SD card mounted read-only</string>
+
+    <!-- SetupWizard strings used by DateTimeSettingsSetupWizard.  The button label for going to the next screen. -->
+    <string name="next_label">Next</string>
+
+    <!-- LocalePicker -->
+    <!-- Title for the locale picker activity -->
+    <string name="language_picker_title">Locale</string>
+    <!-- Locale picker screen. Label for choosing the locale -->
+    <string name="select_your_language">Select your language</string>
+
+    <!-- The title of the dialog to pick an activity.  This is shown when there are multiple activities that can do a particular action.  For example, suppose you click on the "Share" menu item in the Browser.  Since you can share the webpage URL via many communication methods, this dialog would come up with choices like "Email", "IM", etc.  This is a generic message, and the previous example is a single possible scenario (so please don't assume it's for the browser or anything :) ). -->
+    <string name="activity_picker_label">Select activity</string>
+    <!-- Do not translate. -->
+    <string name="debug_intent_sender_label">Debug intent sender</string>
+    <!-- The title of the activity to see random device info. -->
+    <string name="device_info_label">Device info</string>
+    <!-- The title of the activity to see battery info. -->
+    <string name="battery_info_label">Battery info</string>
+    <!-- The title of the activity to see battery history. -->
+    <string name="battery_history_label">Battery history</string>
+    <!-- The title of the activity to adjust display settings -->
+    <string name="display_label">Display</string>
+    <!-- The title of the activity to see phone info -->
+    <string name="phone_info_label">Phone info</string>
+    <!-- The title of the activity to adjust SD card settings-->
+    <string name="sd_card_settings_label">SD card</string>
+    <!-- The title of the activity to adjust proxy settings -->
+    <string name="proxy_settings_label">Proxy settings</string>
+
+    <!-- ======================================================================================= -->
+    <!-- NEW STUFF -->
+    <!-- ======================================================================================= -->
+
+    <!-- Button label for generic cancel action -->
+    <string name="cancel">Cancel</string>
+
+    <!-- Main Settings screen title -->
+    <string name="settings_label">Settings</string>
+    <!-- Wireless controls settings screen, setting check box label -->
+    <string name="airplane_mode">Airplane mode</string>
+    <!-- Wireless controls settings screen, setting option summary text -->
+    <string name="airplane_mode_summary">Disable all wireless connections</string>
+    <!-- Wireless controls settings screen, setting option summary text as airplane mode is being enabled (so it is disabling all wireless connections)  -->
+    <string name="airplane_mode_turning_on">Disabling wireless connections\u2026</string>
+    <!-- Wireless controls settings screen, setting option summary text as airplane mode is being disabled (so it is re-enabling all the wireless conenctions) -->
+    <string name="airplane_mode_turning_off">Enabling wireless connections\u2026</string>
+    <!-- Main Settings screen settings title for things like Wi-Fi, bluetooth, airplane mode.  This will take you to another screen with those settings. -->
+    <string name="radio_controls_title">Wireless controls</string>
+    <!-- Main Settings screen settings summary text for the "Wireless controls" setting -->
+    <string name="radio_controls_summary">Manage Wi-Fi, Bluetooth, airplane mode, &amp; mobile networks</string>
+
+
+    <!-- Date and time settings -->
+    <!-- Main Settings screen setting option name to go into the date and time settings-->
+    <string name="date_and_time_settings_title">Date &amp; time</string>
+    <!-- Main Settings screen setting option summary text for the item to go into the date and time settings. -->
+    <string name="date_and_time_settings_summary">Set date, time, time zone &amp; formats</string>
+    <!-- Date & time setting screen setting check box title if the date and time should be determined automatically -->
+    <string name="date_time_auto">Automatic</string>
+    <!-- Date & time setting screen setting option summary text when Automatic check box is selected (that is, when date and time should be determined automatically) -->
+    <string name="date_time_auto_summaryOn">Use network-provided values</string>
+    <!-- Date & time setting screen setting option summary text when Automatic check box is clear -->
+    <string name="date_time_auto_summaryOff">Use network-provided values</string>
+    <!-- Date & time setting screen setting check box title -->
+    <string name="date_time_24hour">Use 24-hour format</string>
+    <!-- Date & time setting screen setting option title -->
+    <string name="date_time_set_time">Set time</string>
+    <!-- Date & time setting screen setting option title -->
+    <string name="date_time_set_timezone">Select time zone</string>
+    <!-- Date & time setting screen setting option title -->
+    <string name="date_time_set_date">Set date</string>
+    <!-- Date & time setting screen setting option title.  This setting allows the user to choose how the date should be displayed in apps (what ordering for month and day, etc.) -->
+    <string name="date_time_date_format">Select date format</string>
+    <!-- Menu item on Select time zone screen -->
+    <string name="zone_list_menu_sort_alphabetically">Sort alphabetically</string>
+    <!-- Menu item on Select time zone screen -->
+    <string name="zone_list_menu_sort_by_timezone">Sort by time zone</string>
+
+    <!-- Main Settings screen setting option title for the item to take you the security and location screen -->
+    <string name="security_settings_title">Security &amp; location</string>
+    <!-- Main Settings screen setting option summary text for the item tot ake you to the security and location screen -->
+    <string name="security_settings_summary">Set My Location, screen unlock, SIM card lock</string>
+    <!-- In the security screen, the header title for settings related to  Passwords-->
+    <string name="security_passwords_title">Passwords</string>
+
+    <!-- Bluetooth settings -->
+    <!-- Bluetooth settings check box title on Main Settings screen -->
+    <string name="bluetooth_quick_toggle_title">Bluetooth</string>
+    <!-- Bluetooth settings check box summary for turning on bluetooth -->
+    <string name="bluetooth_quick_toggle_summary">Turn on Bluetooth</string>
+    <!--Used as title on second screen after selecting Bluetooth settings -->
+    <string name="bluetooth_settings">Bluetooth settings</string>
+    <!--Wireless controls screen, settings title for the item to take you to the bluetooth settings screen -->
+    <string name="bluetooth_settings_title">Bluetooth settings</string>
+    <!--Wireless controls screen, settings summary for the item tot ake you to the bluetooth settings screen -->
+    <string name="bluetooth_settings_summary">Manage connections, set device name &amp; discoverability</string>
+
+    <!-- Title for the dialog to enter PIN.  -->
+    <string name="bluetooth_pin_entry">Bluetooth pairing request</string>
+    <!-- Title for the bluetooth device info screen. -->
+    <string name="bluetooth_device_info">Bluetooth device info</string>
+    <!-- Message when bluetooth dialog for pin entry is shwoing -->
+    <string name="bluetooth_enter_pin_msg"><xliff:g id="device_name">%1$s</xliff:g>\n\nType PIN to pair.\n(Try 0000 or 1234.)</string>
+
+    <!-- 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> 
+    <!-- Message for the error dialog when BT pairing fails because the PIN 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 typed PIN is incorrect.</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> 
+
+    <!-- Do not translate -->
+    <string name="bluetooth_device_info_alias">Device alias</string>
+    <!-- Do not translate -->
+    <string name="bluetooth_device_info_no_alias">Type alias here\u2026</string>
+    <!-- Do not translate -->
+    <string name="bluetooth_device_info_delete">Remove this device</string>
+    <!-- Do not translate -->
+    <string name="bluetooth_device_info_sdp">List supported services</string>
+
+    <!-- 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. -->
+    <string name="bluetooth_device_context_disconnect">Disconnect</string>
+    <!-- Bluetooth settings.  Context menu item for a device.  Action will first pair, and then connect to all profiles on the device. -->
+    <string name="bluetooth_device_context_pair_connect">Pair &amp; connect</string>
+    <!-- Bluetooth settings.  Context menu item for a device.  Action will remove pairing with the device. -->
+    <string name="bluetooth_device_context_unpair">Unpair</string>
+    <!-- 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>    
+    
+    <!-- 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>
+
+    <!-- Bluetooth settings.  The user-visible string that is used whenever referring to the A2DP profile. -->
+    <string name="bluetooth_profile_a2dp">Media</string>
+    <!-- Bluetooth settings.  The user-visible string that is used whenever referring to the headset or handsfree profile. -->
+    <string name="bluetooth_profile_headset">Phone</string>
+
+    <!-- Bluetooth settings.  The summary string when a device is connected to the A2DP profile. -->
+    <string name="bluetooth_summary_connected_to_a2dp">Connected to media audio</string>
+    <!-- Bluetooth settings.  The summary string when a device is connected to the headset profile. -->
+    <string name="bluetooth_summary_connected_to_headset">Connected to phone audio</string>
+    <!-- Bluetooth settings.  The summary string when a device is connected to the A2DP and headset profiles. -->
+    <string name="bluetooth_summary_connected_to_a2dp_headset">Connected to phone and media audio</string>
+
+    <!-- Bluetooth settings.  Connection options screen.  The title of the screen. -->
+    <string name="bluetooth_device_advanced_title"><xliff:g id="device_name">%1$s</xliff:g> options</string>
+    <!-- Bluetooth settings.  Connection options screen.  The title of the checkbox that controls whether the device is in "online" mode or "offline" mode.  This essentially is the checkbox that controls whether any checks / unchecks on a profile should be applied immediately, or next time the device is connected. -->
+    <string name="bluetooth_device_advanced_online_mode_title">Connect</string>
+    <!-- Bluetooth settings.  Connection options screen.  The summary of the online mode checkbox.  This describes what the setting does in the context of the screen. -->
+    <string name="bluetooth_device_advanced_online_mode_summary">Connect to Bluetooth device</string>
+    <!-- Bluetooth settings.  Connection options screen.  The title of the header that is above all of the profiles. -->
+    <string name="bluetooth_device_advanced_profile_header_title">Profiles</string>
+    <!-- Bluetooth settings.  Connection options screen.  The summary for the A2DP checkbox preference when A2DP is connected. -->
+    <string name="bluetooth_a2dp_profile_summary_connected">Connected to media audio</string>
+    <!-- Bluetooth settings.  Connection options screen.  The summary for the headset checkbox preference when headset is connected. -->
+    <string name="bluetooth_headset_profile_summary_connected">Connected to phone audio</string>
+
+    <!-- Bluetooth settings.  Connection options screen.  The summary for the A2DP checkbox preference that describes how checking it will set the A2DP profile as preferred. -->
+    <string name="bluetooth_a2dp_profile_summary_use_for">Use for media audio</string>
+    <!-- Bluetooth settings.  Connection options screen.  The summary for the headset checkbox preference that describes how checking it will set the headset profile as preferred. -->
+    <string name="bluetooth_headset_profile_summary_use_for">Use for phone audio</string>
+
+    <!-- Wi-Fi settings -->
+    <!-- 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 -->
+    <string name="wifi_quick_toggle_title">Wi-Fi</string>
+    <!-- Used in the 1st-level settings screen as the turn-on summary -->
+    <string name="wifi_quick_toggle_summary">Turn on Wi-Fi</string>
+    <!-- Used in the 1st-level settings screen to go to the 2nd-level settings screen -->
+    <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 -->
+    <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_wpa">WPA</string>
+    <!-- Value for the wifi security -->
+    <string name="wifi_security_wpa2">WPA2</string>
+    <!-- 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. -->
+    <string name="wifi_security_verbose_open">Open network</string>
+    <!-- Verbose security type of a wifi network.  -->
+    <string name="wifi_security_verbose_wep">Secured with WEP</string>
+    <!-- Verbose security type of a wifi network.  -->
+    <string name="wifi_security_verbose_wpa">Secured with WPA</string>
+    <!-- Verbose security type of a wifi network.  -->
+    <string name="wifi_security_verbose_wpa2">Secured with WPA2</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 -->
+    <string name="wifi_starting">Turning on\u2026</string>
+    <!--Wireless controls setting screen, Wi-Fi check box summary text when turning Wi-Fi off -->
+    <string name="wifi_stopping">Turning off\u2026</string>
+    <!-- Generic error message , probably not used-->
+    <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 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 -->
+    <string name="summary_remembered">Remembered</string>
+    <!-- Wifi network summary when there was an error connecting -->
+    <string name="summary_connection_failed">Connection unsuccessful, select 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>
+    <!-- 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 -->
+    <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>
+
+    <!-- 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 -->
+    <string name="wifi_setting_num_channels_title">Regulatory domain</string>
+    <!-- Wi-Fi settings screen, setting summary for choosing the number of channels to be used -->
+    <string name="wifi_setting_num_channels_summary">Set the number of channels to use</string>
+    <!-- Wi-Fi settings screen, generic error message when the regulatory domain could not be set. -->
+    <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>
+
+    <!-- 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>
+
+    <!-- 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>
+
+    <!-- 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>
+    <!-- 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 -->
+    <string name="silent_mode_summary">All sounds except media &amp; alarms 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>
+    <!-- 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>
+    <!-- Sound settings screen, setting option name checkbox -->
+    <string name="vibrate_title">Phone vibrate</string>
+    <!-- Sound settings screen, setting option summary text -->
+    <string name="vibrate_summary">Vibrate phone for incoming calls</string>
+    <!-- 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>
+    <!-- Sound settings screen, the title of the volume bar to adjust the incoming call volume -->
+    <string name="incoming_call_volume_title">Incoming call volume</string>
+    <!-- Sound settings screen, the title of the volume bar to adjust the notification volume -->
+    <string name="notification_volume_title">Notification volume</string>
+    <!-- Sound settings screen, the caption of the checkbox for having the notification volume be
+         the same as the incoming call volume. -->
+    <string name="checkbox_notification_same_as_incoming_call">Use incoming call volume for notifications</string>
+    <!-- Sound settings screen, setting option title-->
+    <string name="notification_sound_dialog_title">Select notification ringtone</string>
+    <!-- Sound settings screen, setting option name -->
+    <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, setting check box label -->
+    <string name="dtmf_tone_enable_title">Audible touch tones</string>
+    <!-- Sound settings screen, setting option summary text when check box is selected -->
+    <string name="dtmf_tone_enable_summary_on">Play tones when using dial pad</string>
+    <!-- Sound settings screen, setting option summary text when check box is clear -->
+    <string name="dtmf_tone_enable_summary_off">Play tones when using dial pad</string>
+    <!-- Sound settings screen, setting check box label -->
+    <string name="sound_effects_enable_title">Audible selection</string>
+    <!-- Sound settings screen, setting option summary text when check box is selected -->
+    <string name="sound_effects_enable_summary_on">Play sound when making screen selection</string>
+    <!-- Sound settings screen, setting option summary text when check box is clear -->
+    <string name="sound_effects_enable_summary_off">Play sound when making screen selection</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">Disable SD card notification sounds</string>
+    <!-- Sound settings screen, setting option summary text when check box is clear -->
+    <string name="play_media_notification_sounds_enable_summary_off">Enable SD card notification sounds</string>
+
+    <!-- Main Settings screen setting option name to go into the screen for data sync settings-->
+    <string name="sync_settings">Data synchronization</string>
+    <!-- Main Settings screen setting option summary text for the itme to go into the screen with data sync settings-->
+    <string name="sync_settings_summary">Select which applications are synchronized</string>
+
+    <!-- Display settings -->
+    <!-- Sound & display settings screen, section header for settings related to display -->
+    <string name="display_settings">Display settings</string>
+    <!-- Sound & display settings screen, animations check box label -->
+    <string name="animations_title">Animation</string>
+    <!-- Sound & display settings screen, animations option summary text when check box is selected -->
+    <string name="animations_summary_on">Show animation when opening/closing windows</string>
+    <!-- Sound & display settings screen, animations option summary text when check box is clear -->
+    <string name="animations_summary_off">Show animation when opening/closing windows</string>
+    <!-- Sound & display settings screen, setting option name to change brightness -->
+    <string name="brightness">Brightness</string>
+    <!-- Sound & display settings screen, setting option summary to change brightness -->
+    <string name="brightness_summary">Adjust the brightness of the screen</string>
+    <!-- Sound & display settings screen, setting option name to change screen timeout -->
+    <string name="screen_timeout">Screen timeout</string>
+    <!-- Sound & display settings screen, setting option summary to change screen timeout -->
+    <string name="screen_timeout_summary">Adjust the delay before the screen automatically turns off</string>
+
+    <!-- SIM lock settings title -->
+    <string name="sim_lock_settings">SIM card lock settings</string>
+    <!-- Security & location settings screen, setting option name -->
+    <string name="sim_lock_settings_category">Set up SIM card lock</string>
+    <!-- Security & location settings screen, section heading for settings related to sim card locking -->
+    <string name="sim_lock_settings_title">SIM card lock</string>
+    <!-- SIM card lock settings screen, setting check box label -->
+    <string name="sim_pin_toggle">Lock SIM card</string>
+    <!-- SIM card lock settings screen, setting option summary text when SIM lock check box is selected -->
+    <string name="sim_lock_on">Require PIN to use phone</string>
+    <!-- SIM card lock settings screen, setting option summary text when SIM lock check box is clear -->
+    <string name="sim_lock_off">Require PIN to use phone</string>
+    <!-- SIM card lock settings screen, setting option name to change the SIM PIN -->
+    <string name="sim_pin_change">Change SIM PIN</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message instruction -->
+    <string name="sim_enter_pin">SIM PIN</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message instruction -->
+    <string name="sim_enable_sim_lock">Lock SIM card</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message instruction -->
+    <string name="sim_disable_sim_lock">Unlock SIM card</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message instruction -->
+    <string name="sim_enter_old">Old SIM PIN</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message instruction -->
+    <string name="sim_enter_new">New SIM PIN</string>
+    <string name="sim_reenter_new">Re-type new PIN</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message instruction -->
+    <string name="sim_change_pin">SIM PIN</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message when wrong PIN is entered -->
+    <string name="sim_bad_pin">Incorrect PIN!</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message when PINs don't match -->
+    <string name="sim_pins_dont_match">PINs don\'t match!</string>
+    <!-- SIM card lock settings screen, toast after not entering correct SIM PIN -->
+    <string name="sim_change_failed">Unable to change PIN.\nPossibly incorrect PIN.</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog message when the entered PIN is correct-->
+    <string name="sim_change_succeeded">SIM PIN changed successfully</string>
+    <!-- SIM card lock settings screen, toast after not entering correct SIM PIN -->
+    <string name="sim_lock_failed">Unable to change SIM card lock state.\nPossibly incorrect PIN.</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog button labels: -->
+    <string name="sim_enter_ok">OK</string>
+    <!-- SIM card lock settings screen, SIM PIN dialog button labels: -->
+    <string name="sim_enter_cancel">Cancel</string>
+
+    <!-- Advanced (used for diagnostics) device info activity title -->
+    <string name="device_info_settings">Phone status</string>
+
+    <!-- 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>
+
+    <!-- About phone screen, status item label -->
+    <string name="firmware_version">Firmware version</string>
+    <!-- About phone screen, status item label-->
+    <string name="model_number">Model number</string>
+    <!-- About phone screen,  setting option name-->
+    <string name="baseband_version">Baseband version</string>
+    <!-- About phone screen,  setting option name-->
+    <string name="kernel_version">Kernel version</string>
+    <!-- About phone screen,  setting option name-->
+    <string name="build_number">Build number</string>
+
+    <!-- About phone screen, show when a value of some status item is unavailable. -->
+    <string name="device_info_not_available">Not available</string>
+    <!-- About phone screen, phone status screen title -->
+    <string name="device_status_activity_title">Status</string>
+    <!-- About phone screen, title of the item to go into the Phone status screen -->
+    <string name="device_status">Status</string>
+    <!-- About phone screen, summary of the item to go into the phone status screen -->
+    <string name="device_status_summary">IMEI, phone number, signal, etc.</string>
+    <!-- Main settings screen item's title to go into the SD card and storage settings screen-->
+    <string name="storage_settings_title">SD card &amp; phone storage</string>
+    <!-- Main settings screen item's summary for the SD card and storage settings -->
+    <string name="storage_settings_summary">Unmount SD card, view available storage</string>
+    <!-- Do not translate. About phone, status item title -->
+    <string name="status_imei">IMEI</string>
+    <!-- Do not translate. About phone, status item title -->
+    <string name="status_imei_sv">IMEI SV</string>
+    <!-- About phone, status item title.  The phone number of the current device.-->
+    <string name="status_number">Phone number</string>
+    <!-- About phone, status item title for the type of data phone network we're connected to, for example 3G or Edge or GPRS -->
+    <string name="status_network_type">Mobile network type</string>
+    <!-- About phone, status item title. The status of data access.  For example, the value may be "Connected" -->
+    <string name="status_data_state">Mobile network state</string>
+    <!-- About phone, status item title. The status of whether we have service.  for example, the value may be "In service" -->
+    <string name="status_service_state">Service state</string>
+    <!-- About phone, status item title. The  current cell tower signal strength -->
+    <string name="status_signal_strength">Signal strength</string>
+    <!-- About phone, status item title, The status for roaming.  For example, the value might be "Not roaming" -->
+    <string name="status_roaming">Roaming</string>
+    <!-- About phone, status item title. The cell carrier that the user is connected to.  -->
+    <string name="status_operator">Network</string>
+    <!-- About phone, status item title.  The MAC address of the Wi-Fi network adapter. -->
+    <string name="status_wifi_mac_address">Wi-Fi MAC address</string>
+    <!-- About phone, status item title.  The bluetooth adapter's hardware address-->
+    <string name="status_bt_address">Bluetooth address</string>
+    <!-- About phone, status item value if the actual value is not available. -->
+    <string name="status_unavailable">Unavailable</string>
+    <!-- About phone, status item title.  How many packets and bytes have been sent and received across all network interfaces. -->
+    <string name="status_network_traffic_stats">Network usage</string>
+    <!-- About phone, status item summary.  How many packets and bytes have been sent and received across all network interfaces. -->
+    <string name="status_network_traffic_summary">Sent: <xliff:g id="network_traffic">%1$d packets, %2$d bytes%n</xliff:g>Rcvd: <xliff:g id="network_traffic">%3$d packets, %4$d bytes</xliff:g></string>
+    <!-- About phone, status item title.  How long the device has been running since its last reboot. -->
+    <string name="status_up_time">Up time</string>
+    <!-- About phone, status item title.  How much time the device has had its main CPU awake. -->
+    <string name="status_awake_time">Awake time</string>
+    <!-- SD card & phone storage settings screen heading. This is displayed above items that pertain to the phone's internal storage  -->
+    <string name="internal_memory">Internal phone storage</string>
+    <!-- SD card & phone storage settings screen heading. This is displayed above items that pertain to the SD card -->
+    <string name="sd_memory">SD card</string>
+    <!-- SD card & phone storage settings title. The amount of free space for some storage partition.  For example, this is listed under both the "Internal phone storage" section and the "SD card" section. -->
+    <string name="memory_available">Available space</string>
+    <!-- SD card & phone storage settings screen heading.  The total amount of storage space for some storage partition.  For example, this is listed under both the "Internal phone storage" section and the "SD card" section -->
+    <string name="memory_size">Total space</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">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 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.   -->
+    <string name="sd_format_summary">Format (erase) the SD card</string>
+    <!-- SD card status when it is not available status -->
+    <string name="sd_unavailable">Unavailable</string>
+    <!-- SD card status when it is mounted as read only  -->
+    <string name="read_only">\u0020(Read-only)</string>
+    <!-- Phone info screen, section titles: -->
+    <string name="battery_status_title">Battery status</string>
+    <!-- Phone info screen, section titles: -->
+    <string name="battery_level_title">Battery level</string>
+
+    <!-- APN Settings -->
+    <!-- APN settings screen title -->
+    <string name="apn_settings">APNs</string>
+    <!-- Screen title after user selects APNs setting option -->
+    <string name="apn_edit">Edit access point</string>
+    <!-- Edit access point label summary text when no value has been set -->
+    <string name="apn_not_set">&lt;Not set&gt;</string>
+    <!-- Edit access point labels: A label the user can give to the APN to allow him to differentiate it from the others -->
+    <string name="apn_name">Name</string>
+    <!-- Edit access point labels: The actual access point name-->
+    <string name="apn_apn">APN</string>
+    <!-- Edit access point labels: The addess of the proxy to use for this APN -->
+    <string name="apn_http_proxy">Proxy</string>
+    <!-- Edit access point labels: The port number of the proxy to use for this APN -->
+    <string name="apn_http_port">Port</string>
+    <!-- Edit access point labels: The username that will be used when conencting to this APN-->
+    <string name="apn_user">Username</string>
+    <!-- Edit access point labels: The password that will be used when connecting to this APN -->
+    <string name="apn_password">Password</string>
+    <!-- Edit access point labels: The server address to conenct to for this APN -->
+    <string name="apn_server">Server</string>
+    <!-- Edit access point labels: -->
+    <string name="apn_mmsc">MMSC</string>
+    <!-- Edit access point labels: The proxy to use for MMS (multimedia messages)-->
+    <string name="apn_mms_proxy">MMS proxy</string>
+    <!-- Edit access point labels: The port on the proxy used for MMS-->
+    <string name="apn_mms_port">MMS port</string>
+    <!-- Edit access point labels: -->
+    <string name="apn_mcc">MCC</string>
+    <!-- Edit access point labels: -->
+    <string name="apn_mnc">MNC</string>
+    <!-- Edit access point labels: The type of APN -->
+    <string name="apn_type">APN type</string>
+    <!-- Edit access point screen menu option to delete this APN -->
+    <string name="menu_delete">Delete APN</string>
+    <!-- APNs screen menu option to create a brand spanking new APN -->
+    <string name="menu_new">New APN</string>
+    <!-- Edit access point screen menu option to save the user's changes for this APN to the persistent storage -->
+    <string name="menu_save">Save</string>
+    <!-- Edit access point screen menu option to discard the user's changes for this APN -->
+    <string name="menu_cancel">Discard</string>
+    <!-- APN error dialog title -->
+    <string name="error_title">Attention</string>
+    <!-- APN error dialog messages: -->
+    <string name="error_name_empty">The Name field cannot be empty.</string>
+    <!-- APN error dialog messages: -->
+    <string name="error_apn_empty">The APN cannot be empty.</string>
+    <!-- APN error dialog messages: -->
+    <string name="error_mcc_not3">MCC field must be 3 digits.</string>
+    <!-- APN error dialog messages: -->
+    <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>    
+
+    <!-- Master Clear -->
+    <!-- SD card & phone storage settings screen, setting option name under Internal phone storage heading -->
+    <string name="master_clear_title">Factory data reset</string>
+    <!-- SD card & phone storage settings screen, setting option summary text under Internal phone storage heading -->
+    <string name="master_clear_summary">Erases all data on phone</string>
+    <!-- SD card & phone storage settings screen, message on screen after user selects Factory data reset -->
+    <string name="master_clear_desc">This action will reset the phone to its initial factory state, erasing all data and downloaded applications!</string>
+    <!-- SD card & phone storage settings screen, button on screen after user selects Factory data reset -->
+    <string name="master_clear_button_text">Reset phone</string>
+    <!-- SD card & phone storage settings screen, message on screen after user selects Reset phone button -->
+    <string name="master_clear_final_desc">Reset phone, erasing all your data and applications? Action cannot be reversed!</string>
+    <!-- SD card & phone storage settings screen, button on screen after user selects Reset phone button -->
+    <string name="master_clear_final_button_text">Erase everything</string>
+    <!-- Message to draw an unlock pattern before clearing the device -->
+    <string name="master_clear_gesture_prompt">Draw your unlock pattern</string>
+    <!-- Explanation of drawing unlockp attern to reset phone -->
+    <string name="master_clear_gesture_explanation">You must draw your unlock pattern to confirm a phone reset.</string>
+    <!-- Master clear failed message -->
+    <string name="master_clear_failed">No reset was performed because the System Clear service is not available.</string>
+
+    <!-- Media Format -->
+    <!-- SD card & phone storage settings screen, setting option name under Internal phone storage heading -->
+    <string name="media_format_title">Format SD card.</string>
+    <!-- SD card & phone storage settings screen, setting option summary text under Internal phone storage heading -->
+    <string name="media_format_summary">Erases all data on the SD card</string>
+    <!-- SD card & phone storage settings screen, message on screen after user selects Factory data reset -->
+    <string name="media_format_desc">This action will erase the SD card in the phone. You will lose ALL data on the card!</string>
+    <!-- SD card & phone storage settings screen, button on screen after user selects Factory data reset -->
+    <string name="media_format_button_text">Format SD card</string>
+    <!-- SD card & phone storage settings screen, message on screen after user selects Format media button -->
+    <string name="media_format_final_desc">Format SD card, erasing all your media? Action cannot be reversed!</string>
+    <!-- SD card & phone storage settings screen, button on screen after user selects Format media button -->
+    <string name="media_format_final_button_text">Erase everything</string>
+    <!-- Message to draw an unlock pattern before clearing the device -->
+    <string name="media_format_gesture_prompt">Draw your unlock pattern</string>
+    <!-- Explanation of drawing unlock pattern to format card -->
+    <string name="media_format_gesture_explanation">You must draw your unlock pattern to confirm an SD card format.</string>
+
+    <!-- Main settings screen, Call settings title for item to go into the call settings -->
+    <string name="call_settings_title">Call settings</string>
+    <!-- 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>
+
+    <!-- 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 -->
+    <string name="network_settings_summary">Set options for roaming, networks, APNs</string>
+
+    <!-- Security & location settings screen, section header for settings relating to location -->
+    <string name="location_title">My Location sources</string>
+    <!-- Security & location settings screen, setting check box label if the user wants to use wireless network-based positioning (cell ID, wifi, etc.) -->
+    <string name="location_network_based">Use wireless networks</string>
+    <!-- Security & location settings screen, setting summary when Use wireless networks check box is clear -->
+    <string name="location_networks_disabled">See location in applications (such as Maps) using wireless networks</string>
+    <!-- Security & location settings screen, setting summary when Use wireless networks check box is selected -->
+    <string name="location_neighborhood_level">Location determined by Wi-Fi and/or mobile networks</string>
+    <!-- Security & location settings screen, setting check box label if the GPS receiver should be enabled -->
+    <string name="location_gps">Enable GPS satellites</string>
+    <!-- Security & location settings screen, setting summary when Enable GPS satellites check box is selected -->
+    <string name="location_street_level">When locating, accurate to street level (deselect to conserve battery)</string>
+    <!-- Security & location settings screen, setting summary when Enable GPS satellites check box is clear -->
+    <string name="location_gps_disabled">Locate to street-level (requires more battery plus view of sky)</string>
+
+    <!-- About -->
+    <!-- Main settings screen, setting title for the user to go into the About phone screen -->
+    <string name="about_settings">About phone</string>
+    <!-- Main settings screen, setting summary for the user to go into the About phone screen-->
+    <string name="about_settings_summary">View legal info, phone status, software version</string>
+    <!-- About phone settings screen, setting option name to go to dialog that shows legal info -->
+    <string name="legal_information">Legal information</string>
+    <!-- About phone settings screen, setting option name to see a list of contributors -->
+    <string name="contributors_title">Contributors</string>
+    <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+    <!-- About phone settings screen, setting option name to see copyright-related info -->
+    <string name="copyright_title">Copyright</string>
+    <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+    <!-- About phone settings screen, setting option name to see licensing info -->
+    <string name="license_title">License</string>
+    <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+    <!-- About phone settings screen, setting option name to see terms and conditions -->
+    <string name="terms_title">Terms and conditions</string>
+
+    <!-- Title for actual Settings license activity. --> <skip />
+    <!-- About phone settings, Legal information setting option name and title of dialog box holding license info -->
+    <string name="settings_license_activity_title">Open source licenses</string>
+    <!-- About phone settings screen, Open source license dialog message when licenses cannot be loaded -->
+    <string name="settings_license_activity_unavailable">There is a problem loading the licenses.</string>
+    <!-- About phone settings screen, Open source license dialog title until license is fully loaded -->
+    <string name="settings_license_activity_loading">Loading\u2026</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_need_to_unlock">Confirm saved pattern</string>
+    <!-- Do not translate. -->
+    <string name="lockpattern_need_to_unlock_footer"></string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction if user draws incorrect pattern -->
+    <string name="lockpattern_need_to_unlock_wrong">Sorry, try again:</string>
+    <!-- Do not translate. -->
+    <string name="lockpattern_need_to_unlock_wrong_footer"></string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction on top of screen.  This si when they are supposed to draw a new unlock pattern (for example, if they are changing their unlock patterns)..-->
+    <string name="lockpattern_recording_intro_header">Draw an unlock pattern</string>
+    <!-- Security & location settings screen, change unlock pattern screen hint on bottom of screen.  We are telling them to press the menu button to see more options or help. -->
+    <string name="lockpattern_recording_intro_footer">Press Menu for help.</string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction on top of screen while drawing pattern -->
+    <string name="lockpattern_recording_inprogress">Release finger when done.</string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction on top of screen if user doesn't connect enough dots -->
+    <string name="lockpattern_recording_incorrect_too_short">Connect at least <xliff:g id="number">%d</xliff:g> dots. Try again:</string>
+    <!-- Security & location settings screen, change unlock pattern screen message on top of screen after drawing pattern -->
+    <string name="lockpattern_pattern_entered_header">Pattern recorded!</string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction on top of screen to confirm pattern -->
+    <string name="lockpattern_need_to_confirm">Draw pattern again to confirm:</string>
+    <string name="lockpattern_pattern_confirmed_header">Your new unlock pattern:</string>
+    <!-- Security & location settings screen, change unlock pattern screen button, on bottom of screen.  After they draw a pattern and release their finger, we display the pattern so they remember.  When they are ready to draw it once again to confirm it, they press this button. -->
+    <string name="lockpattern_confirm_button_text">Confirm</string>
+    <!-- Security & location settings screen, change unlock pattern screen button, on bottom of screen.  After they draw a pattern and release their finger, we display the pattern so they remember.  If they are nto satisfied with this pattern, they click this button to redraw the pattern. -->
+    <string name="lockpattern_restart_button_text">Redraw</string>
+    <!-- Security & location settings screen, change unlock pattern screen button, on bottom of screen. If they are supposed to enter their current pattern before being able to draw another one, and they screw up, they hit this button to try again -->
+    <string name="lockpattern_retry_button_text">Retry</string>
+    <!-- Security & location settings screen, change unlock pattern screen button, on bottom of screen. Once they draw a new pattern and confirm it by drawing it again, they press this button to exit -->
+    <string name="lockpattern_continue_button_text">Continue</string>
+    <!-- Security & location settings screen, unlock screen activity title -->
+    <string name="lockpattern_settings_title">Unlock pattern</string>
+    <!-- Security & location settings screen, setting check box title if the unlock pattern MUST be drawn everytime they turn on the screen -->
+    <string name="lockpattern_settings_enable_title">Require pattern</string>
+    <!-- Security & location settings screen, setting summary for the checkbox "Require pattern" -->
+    <string name="lockpattern_settings_enable_summary">Must draw pattern to unlock screen</string>
+    <!-- Security & location settings screen, setting check box title. This setting controls whether a visible green line is drawn as the user moves his finger around while drawing the unlock pattern.  If checked, this line is drawn.  If unchecked, there is nothing drawn so the user does not reveal his pattern while he unlocks the phone.-->
+    <string name="lockpattern_settings_enable_visible_pattern_title">Use visible pattern</string>
+    <!-- Security & location settings screen, setting check box title. This setting controls whether tactile feedback will be produced when the user draws the pattern.-->
+    <string name="lockpattern_settings_enable_tactile_feedback_title">Use tactile feedback</string>
+    <!-- Security & location settings screen, setting option name when user has never set an unlock pattern -->
+    <string name="lockpattern_settings_choose_lock_pattern">Set unlock pattern</string>
+    <!-- Security & location settings screen, setting option name when user has previously set an unlock pattern and wants to change to a new pattern -->
+    <string name="lockpattern_settings_change_lock_pattern">Change unlock pattern</string>
+    <!-- Security & location settings screen, the help instructions (an animation) caption -->
+    <string name="lockpattern_settings_help_how_to_record">How to draw an unlock pattern</string>
+    <!-- Security & location settings screen, change unlock pattern screen instruction on top of screen after too many incorrect attempts -->
+    <string name="lockpattern_too_many_failed_confirmation_attempts_header">Too many incorrect attempts!</string>
+    <!-- Security & location settings screen, change unlock pattern screen countdown hint on bottom of screen after too many incorrect attempts -->
+    <string name="lockpattern_too_many_failed_confirmation_attempts_footer">Try again in <xliff:g id="number">%d</xliff:g> seconds.</string>
+
+    <!-- ChooseLockPatternTutorial --> <skip />
+    <!-- ChooseLockPatternTutorial, button labels: This is to cancel the tutorial -->
+    <string name="skip_button_label">Cancel</string>
+    <!-- ChooseLockPatternTutorial, button labels: Continue to the next page of the tutorial -->
+    <string name="next_button_label">Next</string>
+    <!-- ChooseLockPatternTutorial, tutorial screen title -->
+    <string name="lock_title">Securing your phone</string>
+    <!-- ChooseLockPatternTutorial, tutorial screen text -->
+    <string name="lock_intro_message"><font size="17">Protect your phone from unauthorized use by creating a personal screen unlock pattern.
+        \n<font height="17">\n</font><b>1</b>\u00A0 On the next screen, watch while an example pattern is drawn.
+        \n<font height="17">\n</font><b>2</b>\u00A0 When ready, draw your own personal unlock pattern. Experiment with different patterns but connect at least four dots.
+        \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? Select \u201CNext\u201D</b>.
+        \n<font height="3">\n</font>To leave your phone unprotected, select \u201CCancel\u201D.</font>
+    </string>    
+        
+    <!-- ChooseLockPatternExample --> <skip />
+    <!-- ChooseLockPatternExample, screen title that shows an example pattern -->
+    <string name="lock_example_title">Example pattern</string>
+    <!-- ChooseLockPatternExample, screen hint text at bottom of screen. These are instructions and rules for drawing a good patttern -->
+    <string name="lock_example_message">Connect at least four dots.\n
+        \nSelect \u201CNext\u201D when you\u2019re ready to draw your own pattern.
+    </string>
+
+    <!-- Applications Settings --> <skip />
+    <!-- Applications settings screen, setting option name for the user to go to the screen to manage installed applications  -->
+    <string name="manageapplications_settings_title">Manage applications</string>
+    <!-- Applications settings screen, setting option summary for the user to go to the screen to manage installed applications  -->
+    <string name="manageapplications_settings_summary">Manage and remove installed applications</string>
+    <!-- Applications settings title, on main settings screen. If clicked, the user is taken to a settings screen full of application settings-->
+    <string name="applications_settings">Applications</string>
+    <!-- Applications settings summary, on main settings screen. The summary for the "Applications" item on the main settings screen. Describes what settings are accessible from the "Applications" screen. -->
+    <string name="applications_settings_summary">Manage applications, set up quick launch shortcuts</string>
+    <!-- Applications settings screen heading. The header for the Application settings screen. -->
+    <string name="applications_settings_header">Application settings</string>
+    <!-- Applications settings screen, setting check box title. If checked, the system allows installation of applications that are downloaded from random places, such as web sites.  -->
+    <string name="install_applications">Unknown sources</string>
+    <!-- Applications settings screen, setting check box summary.  This is the summary for "Unknown sources" checkbox  -->
+    <string name="install_unknown_applications">Allow install of non-Market applications</string>
+    <!-- Applications settings screen, message text of alert that appears if user selects the "Unknown sources" check box -->
+    <string name="install_all_warning">Your phone and personal data are more vulnerable to attack by applications
+ from unknown sources. You agree that you are solely responsible for any
+ damage to your phone or loss of data that may result from using
+ these applications.</string>
+    <!-- Manage applications, individual application info screen title. For example, if they click on "Browser" in "Manage applications", the title of the next screen will be this -->
+    <string name="application_info_label">Application info</string>
+    <!-- Manage applications, individual application info screen, section heading for stuff relating to an app's storage settings. -->
+    <string name="storage_label">Storage</string>
+    <!-- Manage applications, individual application info screen,  heading for settings related to controlling whether this app is the default for some actions -->
+    <string name="auto_launch_label">Launch by default</string>
+    <!-- Manage applications, individual application info screen, heading for settings related to the app's permissions. for example, it may list all the permissions the app has. -->
+    <string name="permissions_label">Permissions</string>
+    <!-- Manage applications, Header name used for cache information -->
+    <string name="cache_header_label">Cache</string>
+    <!-- Manage applications, text label for button -->
+    <string name="clear_cache_btn_text">Clear cache</string>
+    <!-- Manage applications, label that appears next to the cache size -->
+    <string name="cache_size_label">Cache</string>
+    <!-- Manage applications, Header name used for other controls -->
+    <string name="controls_label">Controls</string>
+    <!-- Manage applications, text label for button to kill / force stop an application -->
+    <string name="force_stop">Force stop</string>
+    <!-- Manage applications, individual application info screen,label under Storage heading.  The total storage space taken up by this app. -->
+    <string name="total_size_label">Total</string>
+    <!-- Manage applications, individual application info screen, label under Storage heading. The amount of space taken up by the application itself (for example, the java compield files and things like that) -->
+    <string name="application_size_label">Application</string>
+    <!-- Manage applications, individual application info screen, label under Storage heading.  The amount of sapce taken up by the app's data (for example, downloaded emails or something like that) -->
+    <string name="data_size_label">Data</string>
+    <!-- Manage applications, individual application info screen, button label under Storage heading. Button to remove the application from the system. -->
+    <string name="uninstall_text">Uninstall</string>
+    <!-- Manage applications, individual application info screen, button label under Storage heading. Button to clear all data associated with tis app (for exampel, remove all cached emails for an Email app) -->
+    <string name="clear_user_data_text">Clear data</string>
+    <!-- Manage applications, individual application info screen, screen, message text under Launch by default heading. This is present if the app is set as a default for some actions. -->
+    <string name="auto_launch_enable_text">You have selected to launch this application by default for some actions.</string>
+    <!-- Manage applications, individual application screen, text under Launch by default heading if the app is NOT a default for actions -->
+    <string name="auto_launch_disable_text">No defaults set.</string>
+    <!-- Manage applications, individual application screen, button label under Launch by default heading.  This is used to clear any default actions that may be assigned to this app.  -->
+    <string name="clear_activities">Clear defaults</string>
+    <!-- Manage apps, individual app screen, substituted for the application's label when the app's label CAN NOT be determined.-->
+    <string name="unknown">Unknown</string>
+    <!-- Manage applications screen, menu item.  Sorts all of the apps in the list alphabetically. -->
+    <string name="sort_order_alpha">Sort</string>
+    <!-- Manage applications screen, menu item. Sorts all of the apps in the list based on their file size.  This is used to uninstall when space is getting low. -->
+    <string name="sort_order_size">Sort by size</string>
+    <!-- Manage applications screen, individual app screen, button label when the user wants to manage the space taken up by an app. -->
+    <string name="manage_space_text">Manage space</string>
+    <!-- Text for menu option in ManageApps screen to present various menu options -->
+    <string name="filter">Filter</string>
+    <!-- Title of dialog for presenting filter options -->
+    <string name="filter_dlg_title">Select filter options</string>
+    <!-- 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 
+    applications only -->
+    <string name="filter_apps_third_party">Third-party</string>
+    <!-- Text for filter option in ManageApps screen to display list of running
+    packages only. -->
+    <string name="filter_apps_running">Running</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>
+    <!-- Manage applications, individual application screen, confirmation dialog title. Displays when user selects to "Clear data". -->
+    <string name="clear_data_dlg_title">Delete</string>
+    <!-- Manage applications, individual application screen, confirmation dialog message. Displays when user selects to "Clear data". It warns the user of the consequences of clearing the data for an app. -->
+    <string name="clear_data_dlg_text">All information you\'ve saved in this application will be deleted permanently.</string>
+    <!-- Manage applications, individual application screen, confirmation dialog button. Displays when user selects to "Clear data". Goes through with the clearing of the data. -->
+    <string name="dlg_ok">OK</string>
+    <!-- Manage applications, individual application screen, confirmation dialog button. Displays when user selects to "Clear data". -->
+    <string name="dlg_cancel">Cancel</string>
+    <!-- Manage applications, individual application dialog box title. Shown when the user somehow got into a state where it wants to manage some app that isn't found. -->
+    <string name="app_not_found_dlg_title">Application not found</string>
+    <!-- Manage applications, individual application dialog box message. Shown when the user somehow got into a state where it wants to manage some app that isn't found. -->
+    <string name="app_not_found_dlg_text"> The application was not
+found in the list of installed applications.</string>
+    <!-- Manage applications, individual application dialog box message. Shown when there was an error trying to clear the data. -->
+    <string name="clear_data_failed">Unable to clear application data.</string>
+    <!-- Manage applications, individual application info screen, text that appears under the "Permissions" heading. This describes the permissions that the application has. -->
+    <string name="security_settings_desc">This application can access the following on your phone:</string>
+    <string name="computing_size">Computing\u2026</string>
+    <string name="invalid_size_value">Unable to compute package size</string>
+    <!-- String displayed when list is empty -->
+    <string name="empty_list_msg">You do not have any third-party apps installed.</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">Locale &amp; text</string>
+    <!-- Summary 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_summary">Set locale (language and region), text input and auto-correction options</string>
+    <!-- On Text & language settings screen, heading. Inside the "Locale & text" screen, this is the header for settings that are for locale changes. -->
+    <string name="language_category">Locale setting</string>
+    <!-- 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>
+    <!-- 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>
+    <!-- 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. -->
+    <string name="auto_replace_summary">Correct mistyped words</string>
+    <!-- On Text & language settings screen, setting option name.  title of the setting to enable autocapitalization of entered text.  for example, after the user finishes a sentence, the next letter he types will automatically be capitalizated. -->
+    <string name="auto_caps">Auto-cap</string>
+    <!-- On Text & language settings screen, setting summary. Summary for the Auto-cap setting. -->
+    <string name="auto_caps_summary">Capitalize first letter in sentences</string>
+    <!-- On Text & language settings screen, setting option name. title of the setting to enable automatic punctuation of entered text.  for example, it will change an entered "youre" to "you're". -->
+    <string name="auto_punctuate">Auto-punctuate</string>
+    <!-- On Text & language settings screen, category for physical keyboard text entry options. -->
+    <string name="hardkeyboard_category">Physical keyboard settings</string>
+    <!-- On Text & language settings screen, setting summary for the Auto-punctuate setting. -->
+    <string name="auto_punctuate_summary">Press Space key twice to insert \u0022.\u0022</string>
+    <!-- On Security & location settings screen, setting check box name. Title of the checkbox to set whether password edit fields will show the most recent character typed and then hide it, or just hide it right away.  By hide, I mean mask it out. -->
+    <string name="show_password">Visible passwords</string>
+    <!-- On Security & location settings screen, setting check box summary. Summary for the visible passwords setting. -->
+    <string name="show_password_summary">Show password as you type</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>
+    <!-- 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. -->
+    <string name="user_dict_settings_add_dialog_title">Add to dictionary</string>
+    <!-- User dictionary settings. The title of the context menu item to edit the current word -->
+    <string name="user_dict_settings_context_menu_edit_title">Edit</string>
+    <!-- User dictionary settings. The title of the context menu item to delete the current word -->
+    <string name="user_dict_settings_context_menu_delete_title">Delete</string>
+    <!-- User dictionary settings. The text to show when there are no user-defined words in the dictionary -->
+    <string name="user_dict_settings_empty_text">You do not have any words in the user dictionary. You can add a word through the menu.</string>
+
+    <!-- This is for diagnostics screen. The title of a screen with various items realted to launching screens that will giev the user info. For example, it contains "Phone information" and "Battery information" -->
+    <string name="testing">Testing</string>
+    <!-- In the Testing screen.  The item title of the activity that shows a bunch of phone-related information.  -->
+    <string name="testing_phone_info">Phone information</string>
+    <!-- In the Testing screen. The item title of the activity that shows a bunch of battery-related information.  -->
+    <string name="testing_battery_info">Battery information</string>
+    <!-- In the Testing screen. The item title of the activity that shows a bunch of historical battery-related information.  -->
+    <string name="testing_battery_history">Battery history</string>
+    <!-- Do not translate. In the Testing screen. The item title of the activity that shows a bunch of SIM-related operations.  -->
+    <string name="testing_sim_toolkit">SIM toolkit</string>
+
+    <!-- The title of the item to go into the Quick launch settings. -->
+    <string name="quick_launch_title">Quick launch</string>
+    <!-- The summary of the item to go into the Quick launch settings. This is a description of what Quick launch offers. -->
+    <string name="quick_launch_summary">Set keyboard shortcuts to launch applications</string>
+    <!-- On the Quick launch settings screen, title of the item for shortcut letters that are not assigned to an application yet. Quick launch is assigning a global shortcut to launch a specific app. -->
+    <string name="quick_launch_assign_application">Assign application</string>
+    <!-- On the Quick launch settings screen, summary text for the item of letters that are not assigned. See the quick launch "Assign application" for a description of quick launch -->
+    <string name="quick_launch_no_shortcut">No shortcut</string>
+    <!-- On the Quick launch settings screen, summary text under the item for each assigned letter.  -->
+    <string name="quick_launch_shortcut">Search + <xliff:g id="shortcut_letter">%1$s</xliff:g></string>
+    <!-- On the Quick launch settings screen, title of "Clear shortcut" confirmation dialog. This is reached by longpressing an item for a shortcut letter.  This allows the user to clear the assigned applicatino for that shortcut letter. -->
+    <string name="quick_launch_clear_dialog_title">Clear</string>
+    <!-- On the Quick launch settings screen, message in the "Clear shortcut" confirmation dialog.  See the title for this dialog for more info. -->
+    <string name="quick_launch_clear_dialog_message">Your shortcut for <xliff:g id="shortcut_letter">%1$s</xliff:g> (<xliff:g id="application_name">%2$s</xliff:g>) will be cleared.</string>
+    <!-- Clear dialog for quick launch setting box button labels: -->
+    <string name="quick_launch_clear_ok_button">OK</string>
+    <!-- Clear dialog for quick launch setting box button labels: -->
+    <string name="quick_launch_clear_cancel_button">Cancel</string>
+    <!-- Quick launch screen, when assigning an app to a shortcut, this menu item to show a list of all applications.  -->
+    <string name="quick_launch_display_mode_applications">Applications</string>
+    <!-- Quick launch screen, when assigning an app to a shortcut, this menu item to show a list of all shortcutable applications -->
+    <string name="quick_launch_display_mode_shortcuts">Shortcuts</string>
+
+    <!-- Input methods Settings -->
+    <string name="input_methods_settings_title">Text input</string>
+    <string name="input_methods_settings_summary">Manage text input options</string>
+    <!-- Input Methods Settings localized format string for generating the appropriate "Foo settings" menu label for the Input Method named "Foo" -->
+    <string name="input_methods_settings_label_format">%s settings</string>
+
+    <!-- Development Settings.  the title for the item to take the user to Development settings.  Development settings are settings meant for application developers.  -->
+    <string name="development_settings_title">Development</string>
+    <!-- Development Settings summary.  The summary of the item to take the user to Development settings.  Development settings are settings meant for application developers. -->
+    <string name="development_settings_summary">Set options for application development</string>
+    <!-- Setting checkbox title for Whether to enable USB debugging support on the phone. -->
+    <string name="enable_adb">USB debugging</string>
+    <!-- Setting checkbox summary for Whether to enable USB debugging support on the phone -->
+    <string name="enable_adb_summary">Debug mode when USB is connected</string>
+    <!-- Setting Checkbox title whether to keep the screen on when plugged in to a power source -->
+    <string name="keep_screen_on">Stay awake</string>
+    <!-- setting Checkbox summary whether to keep the screen on when plugged in  -->
+    <string name="keep_screen_on_summary">Screen will never sleep while charging</string>
+    <!-- Setting Checkbox title whether to allow mock locations -->
+    <string name="allow_mock_location">Allow mock locations</string>
+    <!-- setting Checkbox summary whether to allow mock locations  -->
+    <string name="allow_mock_location_summary">Allow mock locations</string>
+
+    <!-- Title for the screen that lets the user choose a gadget to add to the home screen
+         (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. -->
+    <string name="widget_picker_title">Choose widget</string>
+
+    <!-- Used to display "Details for UID 1234" in BatteryHistory -->
+    <string name="battery_history_details_for">Details for UID %d</string>
+
+    <!-- Used to name a set of apps that share a user id in BatteryHistory -->
+    <string name="battery_history_uid">UID <xliff:g id="user_id">%1$d</xliff:g></string>
+
+    <!-- Used as a title for the network usage details screen in BatteryHistory -->
+    <string name="battery_history_network_usage">Network usage details for <xliff:g id="app_name">%1$s</xliff:g>:</string>
+
+    <!-- Used to show the number of bytes received by an app over the network in BatteryHistory -->
+    <string name="battery_history_bytes_received">Bytes received: <xliff:g id="bytes">%1$d</xliff:g></string>
+
+    <!-- Used to show the number of bytes sent by an app over the network in BatteryHistory -->
+    <string name="battery_history_bytes_sent">Bytes sent: <xliff:g id="bytes">%1$d</xliff:g></string>
+
+    <!-- Used to show the number of bytes sent and received by an app over the network in BatteryHistory -->
+    <string name="battery_history_bytes_total">Total bytes: <xliff:g id="bytes">%1$d</xliff:g></string>
+
+    <!-- Used as a title for the cpu usage details screen in BatteryHistory -->
+    <string name="battery_history_cpu_usage">CPU usage details for <xliff:g id="app_name">%1$s</xliff:g>:</string>
+
+    <!-- Used to show the time spent in user code for a given app in BatteryHistory -->
+    <string name="battery_history_user_time">User time: </string>
+
+    <!-- Used to show the time spent in system code for a given app in BatteryHistory -->
+    <string name="battery_history_system_time">System time: </string>
+
+    <!-- Used to show the time spent in user or system code for a given app in BatteryHistory -->
+    <string name="battery_history_total_time">Total time: </string>
+
+    <!-- Used to show the number of times an app has been started in BatteryHistory -->
+    <string name="battery_history_starts">Starts: <xliff:g id="starts">%1$d</xliff:g></string>
+
+    <!-- Used to show an amount of time in the form "d days, h hours, m minutes, s seconds" in BatteryHistory -->
+    <string name="battery_history_days"><xliff:g id="days">%1$d</xliff:g> days, <xliff:g id="hours">%2$d</xliff:g> hours, <xliff:g id="minutes">%3$d</xliff:g> minutes, <xliff:g id="seconds">%4$d</xliff:g> seconds</string>
+
+    <!-- Used to show an amount of time in the form "h hours, m minutes, s seconds" in BatteryHistory -->
+    <string name="battery_history_hours"><xliff:g id="hours">%1$d</xliff:g> hours, <xliff:g id="minutes">%2$d</xliff:g> minutes, <xliff:g id="seconds">%3$d</xliff:g> seconds</string>
+
+    <!-- Used to show an amount of time in the form "m minutes, s seconds" in BatteryHistory -->
+    <string name="battery_history_minutes"><xliff:g id="minutes">%1$d</xliff:g> minutes, <xliff:g id="seconds">%2$d</xliff:g> seconds</string>
+
+    <!-- Used to show an amount of time in the form "s seconds" in BatteryHistory -->
+    <string name="battery_history_seconds"><xliff:g id="seconds">%1$d</xliff:g> seconds</string>
+
+    <!-- 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 -->
+    <string name="display_order_text">Sort by:</string>
+    <!-- label for application name -->
+    <string name="app_name_label">Application</string>
+    <!-- label for launch count -->
+    <string name="launch_count_label">Count</string>
+    <!-- label for usage time -->
+    <string name="usage_time_label">Usage time</string>
+</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100644
index 0000000..33e43bb
--- /dev/null
+++ b/res/values/styles.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/Preferences/assets/res/any/styles.xml
+**
+** Copyright 2006, 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.
+*/
+-->
+<resources>
+
+    <style name="info_label">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:textAppearance">@style/TextAppearance.info_label</item>
+        <item name="android:paddingRight">4dip</item>
+    </style>
+
+    <style name="info_value">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:textAppearance">@style/TextAppearance.info_value</item>
+    </style>
+
+    <style name="info_small">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:textAppearance">@style/TextAppearance.info_small</item>
+    </style>
+
+    <style name="info_layout">
+        <item name="android:orientation">vertical</item>
+        <item name="android:paddingLeft">10dip</item>
+        <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>
+    </style>
+
+    <style name="entry_layout">
+        <item name="android:orientation">horizontal</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+    </style>
+    
+    <style name="form_value">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">fill_parent</item>
+    </style>
+
+
+    <style name="TextAppearance" parent="android:TextAppearance">
+    </style>
+
+    <style name="TextAppearance.info_label">
+        <item name="android:textSize">14sp</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="TextAppearance.info_small">
+        <item name="android:textSize">12sp</item>
+        <item name="android:textStyle">normal</item>
+    </style>
+
+    <style name="TextAppearance.info_value">
+        <item name="android:textSize">14sp</item>
+        <item name="android:textStyle">normal</item>
+    </style>
+
+</resources>
diff --git a/res/xml/apn_editor.xml b/res/xml/apn_editor.xml
new file mode 100644
index 0000000..34029d1
--- /dev/null
+++ b/res/xml/apn_editor.xml
@@ -0,0 +1,98 @@
+<?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"
+        android:title="@string/apn_edit">
+    <EditTextPreference
+        android:title="@string/apn_name"
+        android:dialogTitle="@string/apn_name"
+        android:key="apn_name"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_apn"
+        android:dialogTitle="@string/apn_apn"
+        android:key="apn_apn"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_http_proxy"
+        android:dialogTitle="@string/apn_http_proxy"
+        android:key="apn_http_proxy"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_http_port"
+        android:dialogTitle="@string/apn_http_port"
+        android:key="apn_http_port"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_user"
+        android:dialogTitle="@string/apn_user"
+        android:key="apn_user"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_password"
+        android:dialogTitle="@string/apn_password"
+        android:key="apn_password"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_server"
+        android:dialogTitle="@string/apn_server"
+        android:key="apn_server"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_mmsc"
+        android:dialogTitle="@string/apn_mmsc"
+        android:key="apn_mmsc"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_mms_proxy"
+        android:dialogTitle="@string/apn_mms_proxy"
+        android:key="apn_mms_proxy"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_mms_port"
+        android:dialogTitle="@string/apn_mms_port"
+        android:key="apn_mms_port"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_mcc"
+        android:dialogTitle="@string/apn_mcc"
+        android:key="apn_mcc"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_mnc"
+        android:dialogTitle="@string/apn_mnc"
+        android:key="apn_mnc"
+        android:singleLine="true"
+        />
+    <EditTextPreference
+        android:title="@string/apn_type"
+        android:dialogTitle="@string/apn_type"
+        android:key="apn_type"
+        android:singleLine="true"
+        />
+</PreferenceScreen>   
diff --git a/res/xml/apn_settings.xml b/res/xml/apn_settings.xml
new file mode 100644
index 0000000..86a336c
--- /dev/null
+++ b/res/xml/apn_settings.xml
@@ -0,0 +1,20 @@
+<?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"
+        android:title="@string/apn_settings" android:key="apn_list">
+</PreferenceScreen>
diff --git a/res/xml/application_settings.xml b/res/xml/application_settings.xml
new file mode 100644
index 0000000..8d0a7cb
--- /dev/null
+++ b/res/xml/application_settings.xml
@@ -0,0 +1,55 @@
+<?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/applications_settings_header"
+        android:summary="@string/applications_settings_summary"
+        android:key="applications_settings">
+
+    <CheckBoxPreference
+            android:key="toggle_install_applications"
+            android:title="@string/install_applications"
+            android:summaryOff="@string/install_unknown_applications"
+            android:summaryOn="@string/install_unknown_applications"
+            android:persistent="false" />
+        
+    <PreferenceScreen
+            android:key="quick_launch"
+            android:title="@string/quick_launch_title"
+            android:summary="@string/quick_launch_summary">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.quicklaunch.QuickLaunchSettings" />
+    </PreferenceScreen>
+        
+    <PreferenceScreen
+            android:title="@string/manageapplications_settings_title"
+            android:summary="@string/manageapplications_settings_summary">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.ManageApplications" />
+    </PreferenceScreen>
+
+    <PreferenceScreen 
+            android:title="@string/development_settings_title" 
+            android:summary="@string/development_settings_summary">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.DevelopmentSettings" />
+    </PreferenceScreen>
+    
+</PreferenceScreen>
+
diff --git a/res/xml/bluetooth_device_advanced.xml b/res/xml/bluetooth_device_advanced.xml
new file mode 100644
index 0000000..5611595
--- /dev/null
+++ b/res/xml/bluetooth_device_advanced.xml
@@ -0,0 +1,36 @@
+<?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">
+
+    <PreferenceCategory
+            android:key="title" />
+            
+    <CheckBoxPreference
+            android:key="online_mode"
+            android:title="@string/bluetooth_device_advanced_online_mode_title"
+            android:persistent="false" />
+                
+    <PreferenceCategory
+            android:key="profile_container"
+            android:title="@string/bluetooth_device_advanced_profile_header_title">
+
+        <!-- Profile checkboxes will be added here programmatically. -->
+        
+    </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/bluetooth_settings.xml b/res/xml/bluetooth_settings.xml
new file mode 100644
index 0000000..131f7a0
--- /dev/null
+++ b/res/xml/bluetooth_settings.xml
@@ -0,0 +1,54 @@
+<?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/bluetooth_settings" >
+
+    <CheckBoxPreference
+        android:key="bt_checkbox"
+        android:title="@string/bluetooth"
+        android:summary="@string/bluetooth_quick_toggle_summary" />
+
+    <com.android.settings.bluetooth.BluetoothNamePreference
+        android:key="bt_name"
+        android:title="@string/bluetooth_device_name"
+        android:summary="@string/bluetooth_name_not_set"
+        android:dialogTitle="@string/bluetooth_device_name"
+        android:dependency="bt_checkbox"
+        android:persistent="false"
+        android:singleLine="true" />
+
+    <CheckBoxPreference
+        android:key="bt_discoverable"
+        android:title="@string/bluetooth_visibility"
+        android:dependency="bt_checkbox"
+        android:summaryOn="@string/bluetooth_is_discoverable"
+        android:summaryOff="@string/bluetooth_not_discoverable"
+        android:persistent="false" />
+
+    <Preference
+        android:key="bt_scan"
+        android:dependency="bt_checkbox"
+        android:title="@string/bluetooth_preference_scan_title" />
+
+    <com.android.settings.ProgressCategory
+        android:key="bt_device_list"
+        android:title="@string/bluetooth_devices"
+        android:dependency="bt_checkbox"
+        android:orderingFromXml="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml
new file mode 100644
index 0000000..5e696de
--- /dev/null
+++ b/res/xml/date_time_prefs.xml
@@ -0,0 +1,44 @@
+<?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/date_and_time">
+    <CheckBoxPreference android:key="auto_time" 
+        android:title="@string/date_time_auto"
+        android:summaryOn="@string/date_time_auto_summaryOn"
+        android:summaryOff="@string/date_time_auto_summaryOff"
+        />
+    <Preference android:key="date" 
+        android:title="@string/date_time_set_date" 
+        android:summary="03/10/2008"
+        />
+    <PreferenceScreen android:key="timezone" 
+        android:title="@string/date_time_set_timezone" 
+        android:summary="GMT-8:00"
+        />
+    <Preference android:key="time" 
+        android:title="@string/date_time_set_time" 
+        android:summary="12:00am"
+        />
+    <CheckBoxPreference android:key="24 hour" 
+        android:title="@string/date_time_24hour"
+        android:summaryOn="@string/date_time_24_hour_sample"
+        android:summaryOff="@string/date_time_12_hour_sample"/>
+    <ListPreference
+        android:key="date_format"
+        android:title="@string/date_time_date_format" 
+        android:summary="mm/dd/yyyy"/>
+</PreferenceScreen>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
new file mode 100644
index 0000000..77c100a
--- /dev/null
+++ b/res/xml/development_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/development_settings_title">
+        
+    <CheckBoxPreference 
+        android:key="enable_adb" 
+        android:title="@string/enable_adb" 
+        android:summary="@string/enable_adb_summary"/>
+
+    <CheckBoxPreference 
+        android:key="keep_screen_on" 
+        android:title="@string/keep_screen_on" 
+        android:summary="@string/keep_screen_on_summary"/>
+
+    <CheckBoxPreference 
+        android:key="allow_mock_location" 
+        android:title="@string/allow_mock_location" 
+        android:summary="@string/allow_mock_location_summary"/>
+
+</PreferenceScreen>
diff --git a/res/xml/device_info_memory.xml b/res/xml/device_info_memory.xml
new file mode 100644
index 0000000..b7ec3c1
--- /dev/null
+++ b/res/xml/device_info_memory.xml
@@ -0,0 +1,50 @@
+<?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">
+
+    <PreferenceCategory android:title="@string/sd_memory">
+        <Preference android:key="memory_sd_size" 
+            style="?android:attr/preferenceInformationStyle" 
+            android:title="@string/memory_size"
+            android:summary="00"/>
+        <Preference android:key="memory_sd_avail" 
+            style="?android:attr/preferenceInformationStyle" 
+            android:title="@string/memory_available"
+            android:summary="00"/>
+        <Preference android:key="memory_sd_unmount"
+            android:title="@string/sd_eject"
+            android:summary="@string/sd_eject_summary"/>
+        <Preference android:key="memory_sd_format"
+            android:title="@string/sd_format"
+            android:summary="@string/sd_format_summary"/>
+    </PreferenceCategory>
+
+    <PreferenceCategory android:title="@string/internal_memory">
+        <Preference android:key="memory_internal_avail" 
+            style="?android:attr/preferenceInformationStyle" 
+            android:title="@string/memory_available"
+            android:summary="00"/>
+        <PreferenceScreen 
+            android:title="@string/master_clear_title" 
+            android:summary="@string/master_clear_summary">
+            <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.MasterClear" />
+        </PreferenceScreen>
+    </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml
new file mode 100644
index 0000000..205e588
--- /dev/null
+++ b/res/xml/device_info_settings.xml
@@ -0,0 +1,109 @@
+<?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/about_settings">
+
+        <!-- System update settings - launches activity -->
+        <PreferenceScreen android:key="system_update_settings"
+                android:title="@string/system_update_settings_list_item_title" 
+                android:summary="@string/system_update_settings_list_item_summary">
+            <intent android:action="android.settings.SYSTEM_UPDATE_SETTINGS" />
+        </PreferenceScreen>
+        
+        <!-- Device status - launches activity -->
+        <PreferenceScreen android:key="status_info"
+                android:title="@string/device_status" 
+                android:summary="@string/device_status_summary">
+            <intent android:action="android.intent.action.MAIN"
+                    android:targetPackage="com.android.settings"
+                    android:targetClass="com.android.settings.deviceinfo.Status" />
+        </PreferenceScreen>
+        
+        <!-- Legal Information -->
+        <PreferenceScreen
+                android:key="container"
+                android:title="@string/legal_information">
+
+            <!-- Title for this other screen -->
+            <PreferenceCategory android:title="@string/legal_information" />
+                    
+            <!-- Note: The titles given here probably won't be used.  Instead, we programmatically
+                       fill the title with the label of the activity with the corresponding action.
+                       If there is not an activity for an action, the item will be removed from the
+                       list. -->
+
+            <!-- Copyright information -->
+            <PreferenceScreen
+                    android:key="copyright"
+                    android:title="@string/copyright_title">
+                <intent android:action="android.settings.COPYRIGHT" />
+            </PreferenceScreen>
+
+            <!-- License information -->
+            <PreferenceScreen
+                    android:key="license"
+                    android:title="@string/license_title">
+                <intent android:action="android.settings.LICENSE" />
+            </PreferenceScreen>
+
+            <!-- Terms and conditions -->
+            <PreferenceScreen
+                    android:key="terms"
+                    android:title="@string/terms_title">
+                <intent android:action="android.settings.TERMS" />
+            </PreferenceScreen>
+
+        </PreferenceScreen>
+        
+        <!-- Contributors -->
+        <PreferenceScreen
+                android:key="contributors"
+                android:title="@string/contributors_title">
+            <intent android:action="android.settings.TEAM" />
+        </PreferenceScreen>
+        
+        <!-- Device hardware model -->
+        <Preference android:key="device_model" 
+                style="?android:preferenceInformationStyle"
+                android:title="@string/model_number"
+                android:summary="@string/device_info_default"/>
+                
+        <!-- Device firmware version -->
+        <Preference android:key="firmware_version" 
+                style="?android:preferenceInformationStyle"
+                android:title="@string/firmware_version"
+                android:summary="@string/device_info_default"/>
+                
+        <!-- Device Baseband version -->
+        <Preference android:key="baseband_version" 
+                style="?android:preferenceInformationStyle"
+                android:title="@string/baseband_version"
+                android:summary="@string/device_info_default"/>
+        
+        <!-- Device Kernel version -->
+        <Preference android:key="kernel_version" 
+                style="?android:preferenceInformationStyle"
+                android:title="@string/kernel_version"
+                android:summary="@string/device_info_default"/>
+
+        <!-- Detailed build version -->
+        <Preference android:key="build_number" 
+                style="?android:preferenceInformationStyle"
+                android:title="@string/build_number"
+                android:summary="@string/device_info_default"/>
+
+</PreferenceScreen>
diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml
new file mode 100644
index 0000000..9537795
--- /dev/null
+++ b/res/xml/device_info_status.xml
@@ -0,0 +1,101 @@
+<?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/device_status_activity_title">
+
+    <Preference android:key="battery_status" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/battery_status_title"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="battery_level" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/battery_level_title"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="number" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_number"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="operator_name" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_operator"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="signal_strength"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_signal_strength"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="network_type"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_network_type"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="service_state" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_service_state"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="roaming_state" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_roaming"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="data_state"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_data_state"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="imei" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_imei"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="imei_sv" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_imei_sv"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="wifi_mac_address"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_wifi_mac_address"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="bt_address"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_bt_address"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="network_traffic_stats"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_network_traffic_stats"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="up_time"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_up_time"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+    <Preference android:key="awake_time"
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/status_awake_time"
+        android:summary="@string/device_info_not_available"
+        android:persistent="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/input_methods_prefs.xml b/res/xml/input_methods_prefs.xml
new file mode 100644
index 0000000..9a4f527
--- /dev/null
+++ b/res/xml/input_methods_prefs.xml
@@ -0,0 +1,22 @@
+<?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.
+ */
+-->
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/input_methods_settings_title">
+
+</PreferenceScreen>
diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml
new file mode 100644
index 0000000..050896f
--- /dev/null
+++ b/res/xml/language_settings.xml
@@ -0,0 +1,62 @@
+<?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"
+        android:title="@string/language_settings">
+
+    <PreferenceScreen
+            android:title="@string/phone_language"
+            android:summary="@string/phone_language_summary">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.LocalePicker"/>
+    </PreferenceScreen>
+
+    <PreferenceCategory android:key="text_category"
+            android:title="@string/text_category" />
+
+    <PreferenceScreen 
+            android:title="@string/user_dict_settings_title" 
+            android:summary="@string/user_dict_settings_summary">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.UserDictionarySettings" />
+    </PreferenceScreen>
+
+    <PreferenceCategory
+            android:key="hardkeyboard_category"
+            android:title="@string/hardkeyboard_category">
+        <CheckBoxPreference
+                android:key="auto_replace"
+                android:title="@string/auto_replace"
+                android:summaryOn="@string/auto_replace_summary"
+                android:summaryOff="@string/auto_replace_summary"
+                android:persistent="false"/>
+        <CheckBoxPreference
+                android:key="auto_caps"
+                android:title="@string/auto_caps"
+                android:summaryOn="@string/auto_caps_summary"
+                android:summaryOff="@string/auto_caps_summary"
+                android:persistent="false"/>
+        <CheckBoxPreference
+                android:key="auto_punctuate"
+                android:title="@string/auto_punctuate"
+                android:summaryOn="@string/auto_punctuate_summary"
+                android:summaryOff="@string/auto_punctuate_summary"
+                android:persistent="false"/>
+    </PreferenceCategory>
+</PreferenceScreen>
diff --git a/res/xml/quick_launch_settings.xml b/res/xml/quick_launch_settings.xml
new file mode 100644
index 0000000..eb5585c
--- /dev/null
+++ b/res/xml/quick_launch_settings.xml
@@ -0,0 +1,23 @@
+<?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:key="shortcut_category"
+        android:title="@string/quick_launch_title">
+            
+    <!-- Preferences will be filled here. -->
+
+</PreferenceScreen>   
diff --git a/res/xml/security_settings.xml b/res/xml/security_settings.xml
new file mode 100644
index 0000000..788aae3
--- /dev/null
+++ b/res/xml/security_settings.xml
@@ -0,0 +1,36 @@
+<?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">
+
+    <PreferenceCategory
+        android:title="@string/location_title">
+        
+        <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" 
+            android:title="@string/location_gps"
+            android:summaryOn="@string/location_street_level"
+            android:summaryOff="@string/location_gps_disabled"/>
+            
+    </PreferenceCategory>
+            
+</PreferenceScreen>
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
new file mode 100644
index 0000000..5c0a1e1
--- /dev/null
+++ b/res/xml/settings.xml
@@ -0,0 +1,129 @@
+<?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/settings_label"
+    android:key="parent">
+            
+        <PreferenceScreen
+            android:title="@string/radio_controls_title"
+            android:summary="@string/radio_controls_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.WirelessSettings" />
+        </PreferenceScreen>
+
+        <PreferenceScreen
+            android:key="call_settings"
+            android:title="@string/call_settings_title"
+            android:summary="@string/call_settings_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.phone"
+                android:targetClass="com.android.phone.CallFeaturesSetting" />
+        </PreferenceScreen>
+
+        <!-- Sound and Display -->
+        
+        <PreferenceScreen
+            android:title="@string/sound_and_display_settings"
+            android:summary="@string/sound_and_display_settings_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.SoundAndDisplaySettings" />
+        </PreferenceScreen>
+
+        <!-- Data Sync. The settings activity will ensure this is resolved to an
+             activity on the system image, otherwise it will remove this
+             preference. -->
+        
+        <PreferenceScreen
+            android:title="@string/sync_settings"
+            android:summary="@string/sync_settings_summary"
+            android:key="sync_settings">
+            <intent android:action="android.settings.SYNC_SETTINGS" />
+        </PreferenceScreen>
+
+        <!-- Security & Privacy -->
+        
+        <PreferenceScreen
+            android:title="@string/security_settings_title"
+            android:summary="@string/security_settings_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.SecuritySettings" />
+        </PreferenceScreen>
+
+        <!-- Application Settings -->
+        
+        <PreferenceScreen
+            android:title="@string/applications_settings"
+            android:summary="@string/applications_settings_summary"
+            android:key="applications_settings">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.ApplicationSettings" />
+        </PreferenceScreen>
+
+        <!-- Storage -->
+        
+        <PreferenceScreen 
+            android:title="@string/storage_settings_title" 
+            android:summary="@string/storage_settings_summary">
+            <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.deviceinfo.Memory" />
+        </PreferenceScreen>
+
+        <!-- Date & Time -->
+        
+        <PreferenceScreen
+            android:title="@string/date_and_time_settings_title"
+            android:summary="@string/date_and_time_settings_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.DateTimeSettings" />
+        </PreferenceScreen>
+
+        <!-- Language -->
+
+        <PreferenceScreen
+            android:title="@string/language_settings"
+            android:summary="@string/language_settings_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.LanguageSettings" />
+        </PreferenceScreen>
+
+        <!-- About Device -->
+ 
+        <PreferenceScreen
+            android:title="@string/about_settings"
+            android:summary="@string/about_settings_summary">
+            <intent
+                android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.DeviceInfoSettings" />
+        </PreferenceScreen>
+
+</PreferenceScreen>
diff --git a/res/xml/sim_lock_settings.xml b/res/xml/sim_lock_settings.xml
new file mode 100644
index 0000000..b2ecb11
--- /dev/null
+++ b/res/xml/sim_lock_settings.xml
@@ -0,0 +1,33 @@
+<?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"
+        android:title="@string/sim_lock_settings">
+    
+    <CheckBoxPreference
+            android:key="sim_toggle"
+            android:title="@string/sim_pin_toggle"
+            android:summaryOn="@string/sim_lock_on"
+            android:summaryOff="@string/sim_lock_off"/>
+    <com.android.settings.EditPinPreference
+            android:key="sim_pin"
+            android:title="@string/sim_pin_change"
+            android:dialogTitle="@string/sim_change_pin"
+            android:dialogMessage="@string/sim_enter_old"
+            android:positiveButtonText="@string/sim_enter_ok"
+            android:negativeButtonText="@string/sim_enter_cancel"/>
+</PreferenceScreen>   
diff --git a/res/xml/sound_and_display_settings.xml b/res/xml/sound_and_display_settings.xml
new file mode 100644
index 0000000..2aa44c8
--- /dev/null
+++ b/res/xml/sound_and_display_settings.xml
@@ -0,0 +1,124 @@
+<?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:title="@string/sound_settings">
+            
+        <CheckBoxPreference
+                android:key="silent"
+                android:title="@string/silent_mode_title"
+                android:summary="@string/silent_mode_summary"
+                android:persistent="false"
+                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: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: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:ringtoneType="ringtone" />
+    
+        <CheckBoxPreference
+                android:key="vibrate"
+                android:title="@string/vibrate_title"
+                android:summary="@string/vibrate_summary"
+                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:ringtoneType="notification" />
+                
+        <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: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: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:defaultValue="true" />
+
+    </PreferenceCategory>
+
+    <PreferenceCategory
+            android:title="@string/display_settings">
+
+        <CheckBoxPreference
+                android:key="animations"
+                android:title="@string/animations_title"
+                android:summaryOn="@string/animations_summary_on"
+                android:summaryOff="@string/animations_summary_off" />
+
+    
+        <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/testing_settings.xml b/res/xml/testing_settings.xml
new file mode 100644
index 0000000..87c9cf8
--- /dev/null
+++ b/res/xml/testing_settings.xml
@@ -0,0 +1,58 @@
+<?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/testing" >
+            
+    <PreferenceScreen
+            android:title="@string/testing_phone_info">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.RadioInfo" />
+    </PreferenceScreen>
+        
+    <PreferenceScreen
+            android:title="@string/testing_battery_info">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.BatteryInfo" />
+    </PreferenceScreen>
+
+
+    <PreferenceScreen
+            android:title="@string/testing_battery_history">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.battery_history.BatteryHistory" />
+    </PreferenceScreen>
+
+    <PreferenceScreen
+            android:title="@string/testing_usage_stats">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.settings"
+                android:targetClass="com.android.settings.UsageStats" />
+    </PreferenceScreen>
+    <!--    
+    <PreferenceScreen
+            android:title="@string/testing_sim_toolkit">
+        <intent android:action="android.intent.action.MAIN"
+                android:targetPackage="com.android.stk"
+                android:targetClass="com.android.stk.StkSettings" />
+    </PreferenceScreen>
+    -->
+
+</PreferenceScreen>
+        
diff --git a/res/xml/timezones.xml b/res/xml/timezones.xml
new file mode 100644
index 0000000..e515f16
--- /dev/null
+++ b/res/xml/timezones.xml
@@ -0,0 +1,84 @@
+<timezones>
+    <timezone id="Pacific/Majuro">Marshall Islands</timezone>
+    <timezone id="Pacific/Midway">Midway Island</timezone>
+    <timezone id="Pacific/Honolulu">Hawaii</timezone>
+    <timezone id="America/Anchorage">Alaska</timezone>
+    <timezone id="America/Los_Angeles">Pacific Time</timezone>
+    <timezone id="America/Tijuana">Tijuana</timezone>
+    <timezone id="America/Phoenix">Arizona</timezone>
+    <timezone id="America/Chihuahua">Chihuahua</timezone>
+    <timezone id="America/Denver">Mountain Time</timezone>
+    <timezone id="America/Costa_Rica">Central America</timezone>
+    <timezone id="America/Chicago">Central Time</timezone>
+    <timezone id="America/Mexico_City">Mexico City</timezone>
+    <timezone id="America/Regina">Saskatchewan</timezone>
+    <timezone id="America/Bogota">Bogota</timezone>
+    <timezone id="America/New_York">Eastern Time</timezone>
+    <timezone id="America/Caracas">Venezuela</timezone>
+    <timezone id="America/Barbados">Atlantic Time</timezone>
+    <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/Argentina/Buenos_Aires">Buenos Aires</timezone>
+    <timezone id="America/Godthab">Greenland</timezone>
+    <timezone id="America/Montevideo">Montevideo</timezone>
+    <timezone id="Atlantic/South_Georgia">Mid-Atlantic</timezone>
+    <timezone id="Atlantic/Azores">Azores</timezone>
+    <timezone id="Atlantic/Cape_Verde">Cape Verde Islands</timezone>
+    <timezone id="Africa/Casablanca">Casablanca</timezone>
+    <timezone id="Europe/London">London, Dublin</timezone>
+    <timezone id="Europe/Amsterdam">Amsterdam, Berlin</timezone>
+    <timezone id="Europe/Belgrade">Belgrade</timezone>
+    <timezone id="Europe/Brussels">Brussels</timezone>
+    <timezone id="Europe/Sarajevo">Sarajevo</timezone>
+    <timezone id="Africa/Windhoek">Windhoek</timezone>
+    <timezone id="Africa/Brazzaville">W. Africa Time</timezone>
+    <timezone id="Asia/Amman">Amman, Jordan</timezone>
+    <timezone id="Europe/Athens">Athens, Istanbul</timezone>
+    <timezone id="Asia/Beirut">Beirut, Lebanon</timezone>
+    <timezone id="Africa/Cairo">Cairo</timezone>
+    <timezone id="Europe/Helsinki">Helsinki</timezone>
+    <timezone id="Asia/Jerusalem">Jerusalem</timezone>
+    <timezone id="Europe/Minsk">Minsk</timezone>
+    <timezone id="Africa/Harare">Harare</timezone>
+    <timezone id="Asia/Baghdad">Baghdad</timezone>
+    <timezone id="Europe/Moscow">Moscow</timezone>
+    <timezone id="Asia/Kuwait">Kuwait</timezone>
+    <timezone id="Africa/Nairobi">Nairobi</timezone>
+    <timezone id="Asia/Tehran">Tehran</timezone>
+    <timezone id="Asia/Baku">Baku</timezone>
+    <timezone id="Asia/Tbilisi">Tbilisi</timezone>
+    <timezone id="Asia/Yerevan">Yerevan</timezone>
+    <timezone id="Asia/Dubai">Dubai</timezone>
+    <timezone id="Asia/Kabul">Kabul</timezone>
+    <timezone id="Asia/Karachi">Islamabad, Karachi</timezone>
+    <timezone id="Asia/Oral">Ural'sk</timezone>
+    <timezone id="Asia/Yekaterinburg">Yekaterinburg</timezone>
+    <timezone id="Asia/Calcutta">Kolkata</timezone>
+    <timezone id="Asia/Colombo">Sri Lanka</timezone>
+    <timezone id="Asia/Katmandu">Kathmandu</timezone>
+    <timezone id="Asia/Almaty">Astana</timezone>
+    <timezone id="Asia/Rangoon">Yangon</timezone>
+    <timezone id="Asia/Krasnoyarsk">Krasnoyarsk</timezone>
+    <timezone id="Asia/Bangkok">Bangkok</timezone>
+    <timezone id="Asia/Hong_Kong">Beijing, Hong Kong</timezone>
+    <timezone id="Asia/Irkutsk">Irkutsk</timezone>
+    <timezone id="Asia/Kuala_Lumpur">Kuala Lumpur</timezone>
+    <timezone id="Australia/Perth">Perth</timezone>
+    <timezone id="Asia/Taipei">Taipei</timezone>
+    <timezone id="Asia/Seoul">Seoul</timezone>
+    <timezone id="Asia/Tokyo">Tokyo, Osaka</timezone>
+    <timezone id="Asia/Yakutsk">Yakutsk</timezone>
+    <timezone id="Australia/Adelaide">Adelaide</timezone>
+    <timezone id="Australia/Darwin">Darwin</timezone>
+    <timezone id="Australia/Brisbane">Brisbane</timezone>
+    <timezone id="Australia/Hobart">Hobart</timezone>
+    <timezone id="Australia/Sydney">Sydney, Canberra</timezone>
+    <timezone id="Asia/Vladivostok">Vladivostok</timezone>
+    <timezone id="Pacific/Guam">Guam</timezone>
+    <timezone id="Asia/Magadan">Magadan</timezone>
+    <timezone id="Pacific/Auckland">Auckland</timezone>
+    <timezone id="Pacific/Fiji">Fiji</timezone>
+    <timezone id="Pacific/Tongatapu">Tonga</timezone>
+</timezones>
diff --git a/res/xml/wifi_advanced_settings.xml b/res/xml/wifi_advanced_settings.xml
new file mode 100644
index 0000000..3e0ff05
--- /dev/null
+++ b/res/xml/wifi_advanced_settings.xml
@@ -0,0 +1,91 @@
+<?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/wifi_advanced_titlebar">
+
+    <ListPreference
+            android:key="num_channels"
+            android:title="@string/wifi_setting_num_channels_title"
+            android:summary="@string/wifi_setting_num_channels_summary"
+            android:persistent="false"
+            />
+    
+    <ListPreference
+            android:key="sleep_policy"
+            android:title="@string/wifi_setting_sleep_policy_title"
+            android:summary="@string/wifi_setting_sleep_policy_summary"
+            android:persistent="false"
+            android:entries="@array/wifi_sleep_policy_entries"
+            android:entryValues="@array/wifi_sleep_policy_values"
+            />
+    
+    <Preference android:key="mac_address" 
+        style="?android:attr/preferenceInformationStyle" 
+        android:title="@string/wifi_advanced_mac_address_title"
+        />
+    
+    <PreferenceCategory
+            android:title="@string/wifi_ip_settings_titlebar"
+            />
+    
+    <CheckBoxPreference
+            android:key="use_static_ip"
+            android:title="@string/wifi_use_static_ip"
+            android:persistent="false"
+            />    
+    
+    <EditTextPreference
+            android:dependency="use_static_ip"
+            android:key="ip_address"
+            android:title="@string/wifi_ip_address"
+            android:persistent="false"
+            android:singleLine="true"
+            />    
+    
+    <EditTextPreference
+            android:dependency="use_static_ip"
+            android:key="gateway"
+            android:title="@string/wifi_gateway"
+            android:persistent="false"
+            android:singleLine="true"
+            />    
+    
+    <EditTextPreference
+            android:dependency="use_static_ip"
+            android:key="netmask"
+            android:title="@string/wifi_netmask"
+            android:persistent="false"
+            android:singleLine="true"
+            />    
+
+    <EditTextPreference
+            android:dependency="use_static_ip"
+            android:key="dns1"
+            android:title="@string/wifi_dns1"
+            android:persistent="false"
+            android:singleLine="true"
+            />    
+    
+    <EditTextPreference
+            android:dependency="use_static_ip"
+            android:key="dns2"
+            android:title="@string/wifi_dns2"
+            android:persistent="false"
+            android:singleLine="true"
+            />    
+    
+</PreferenceScreen>   
diff --git a/res/xml/wifi_settings.xml b/res/xml/wifi_settings.xml
new file mode 100644
index 0000000..9101e46
--- /dev/null
+++ b/res/xml/wifi_settings.xml
@@ -0,0 +1,45 @@
+<?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/wifi_settings_category">
+
+    <CheckBoxPreference
+            android:key="wifi_enabled"
+            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: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: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:persistent="false" />
+
+</PreferenceScreen>   
diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml
new file mode 100644
index 0000000..f81fb41
--- /dev/null
+++ b/res/xml/wireless_settings.xml
@@ -0,0 +1,73 @@
+<?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/radio_controls_title">
+
+                <!-- Programmatically will have dynamic summary, but we provide the fallback summary. -->
+                <CheckBoxPreference
+                    android:key="toggle_wifi"
+                    android:title="@string/wifi_quick_toggle_title"
+                    android:summary="@string/wifi_quick_toggle_summary"
+                    android:persistent="false"
+                    android:dependency="toggle_airplane" />
+
+                <PreferenceScreen
+                    android:title="@string/wifi_settings"
+                    android:summary="@string/wifi_settings_summary"
+                    android:dependency="toggle_airplane">
+                    <intent
+                        android:action="android.intent.action.MAIN"
+                        android:targetPackage="com.android.settings"
+                        android:targetClass="com.android.settings.wifi.WifiSettings" />
+                </PreferenceScreen>
+
+                <CheckBoxPreference
+                    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" />
+
+                <PreferenceScreen
+                    android:title="@string/bluetooth_settings_title"
+                    android:summary="@string/bluetooth_settings_summary"
+                    android:dependency="toggle_airplane">
+                    <intent
+                        android:action="android.intent.action.MAIN"
+                        android:targetPackage="com.android.settings"
+                        android:targetClass="com.android.settings.bluetooth.BluetoothSettings" />
+                </PreferenceScreen>
+
+                <PreferenceScreen
+                    android:title="@string/network_settings_title"
+                    android:summary="@string/network_settings_summary"
+                    android:dependency="toggle_airplane">
+                    <intent
+                        android:action="android.intent.action.MAIN"
+                        android:targetPackage="com.android.phone"
+                        android:targetClass="com.android.phone.Settings" />
+                </PreferenceScreen>
+
+                <CheckBoxPreference
+                    android:key="toggle_airplane"
+                    android:title="@string/airplane_mode"
+                    android:summary="@string/airplane_mode_summary"
+                    android:persistent="false"
+                    android:disableDependentsState="true" />
+
+
+</PreferenceScreen>
diff --git a/src/com/android/settings/ActivityPicker.java b/src/com/android/settings/ActivityPicker.java
new file mode 100644
index 0000000..47e005f
--- /dev/null
+++ b/src/com/android/settings/ActivityPicker.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * 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.LauncherActivity;
+import android.content.Intent;
+import android.os.Parcelable;
+import android.view.View;
+import android.widget.ListView;
+
+/**
+ * Displays a list of all activities matching the incoming {@link Intent.EXTRA_INTENT}
+ * query, along with any applicable icons. 
+ */
+public class ActivityPicker extends LauncherActivity {
+    
+    @Override
+    protected Intent getTargetIntent() {
+        Intent intent = this.getIntent();
+        Intent targetIntent = new Intent(Intent.ACTION_MAIN, null);
+        targetIntent.addCategory(Intent.CATEGORY_DEFAULT);
+        
+        // Use a custom title for this dialog, if provided
+        if (intent.hasExtra(Intent.EXTRA_TITLE)) {
+            String title = intent.getStringExtra(Intent.EXTRA_TITLE);
+            setTitle(title);
+        }
+        
+        Parcelable parcel = intent.getParcelableExtra(Intent.EXTRA_INTENT);
+        if (parcel instanceof Intent) {
+            targetIntent = (Intent) parcel;
+        }
+        
+        return targetIntent;
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        Intent intent = intentForPosition(position);
+        setResult(RESULT_OK, intent);
+        finish();
+    }
+
+}
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
new file mode 100644
index 0000000..f105712
--- /dev/null
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -0,0 +1,118 @@
+/*
+ * 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;
+
+import com.android.internal.telephony.PhoneStateIntentReceiver;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.Message;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.provider.Settings;
+import android.telephony.ServiceState;
+
+public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListener {
+
+    private final Context mContext;
+
+    private PhoneStateIntentReceiver mPhoneStateReceiver;
+    
+    private final CheckBoxPreference mCheckBoxPref;
+
+    private static final int EVENT_SERVICE_STATE_CHANGED = 3;
+
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case EVENT_SERVICE_STATE_CHANGED:
+                    onAirplaneModeChanged();
+                    break;
+            }
+        }
+    };
+
+    public AirplaneModeEnabler(Context context, CheckBoxPreference airplaneModeCheckBoxPreference) {
+        
+        mContext = context;
+        mCheckBoxPref = airplaneModeCheckBoxPreference;
+        
+        airplaneModeCheckBoxPreference.setPersistent(false);
+    
+        mPhoneStateReceiver = new PhoneStateIntentReceiver(mContext, mHandler);
+        mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
+    }
+
+    public void resume() {
+        
+        // This is the widget enabled state, not the preference toggled state
+        mCheckBoxPref.setEnabled(true);
+        mCheckBoxPref.setChecked(isAirplaneModeOn(mContext));
+
+        mPhoneStateReceiver.registerIntent();
+        mCheckBoxPref.setOnPreferenceChangeListener(this);
+    }
+    
+    public void pause() {
+        mPhoneStateReceiver.unregisterIntent();
+        mCheckBoxPref.setOnPreferenceChangeListener(null);
+    }
+    
+    static boolean isAirplaneModeOn(Context context) {
+        return Settings.System.getInt(context.getContentResolver(),
+                Settings.System.AIRPLANE_MODE_ON, 0) != 0;
+    }
+
+    private void setAirplaneModeOn(boolean enabling) {
+        
+        mCheckBoxPref.setEnabled(false);
+        mCheckBoxPref.setSummary(enabling ? R.string.airplane_mode_turning_on
+                : R.string.airplane_mode_turning_off);
+        
+        // Change the system setting
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 
+                                enabling ? 1 : 0);
+        
+        // Post the intent
+        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+        intent.putExtra("state", enabling);
+        mContext.sendBroadcast(intent);
+    }
+
+    /**
+     * Called when we've received confirmation that the airplane mode was set.
+     */
+    private void onAirplaneModeChanged() {
+        ServiceState serviceState = mPhoneStateReceiver.getServiceState();
+        boolean airplaneModeEnabled = serviceState.getState() == ServiceState.STATE_POWER_OFF;
+        mCheckBoxPref.setChecked(airplaneModeEnabled);
+        mCheckBoxPref.setSummary(airplaneModeEnabled ? null : 
+                mContext.getString(R.string.airplane_mode_summary));            
+        mCheckBoxPref.setEnabled(true);
+    }
+    
+    /**
+     * Called when someone clicks on the checkbox preference.
+     */
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        setAirplaneModeOn((Boolean) newValue);
+        return true;
+    }
+
+}
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
new file mode 100644
index 0000000..f1fa2ef
--- /dev/null
+++ b/src/com/android/settings/ApnEditor.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2006 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.AlertDialog;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.preference.EditTextPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.provider.Telephony;
+import com.android.internal.telephony.TelephonyProperties;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+
+
+public class ApnEditor extends PreferenceActivity 
+        implements SharedPreferences.OnSharedPreferenceChangeListener {
+    
+
+    private final static String TAG = ApnEditor.class.getSimpleName();
+    
+    private final static String SAVED_POS = "pos";
+    
+    private static final int MENU_DELETE = Menu.FIRST;
+    private static final int MENU_SAVE = Menu.FIRST + 1;
+    private static final int MENU_CANCEL = Menu.FIRST + 2;
+    
+    private static String sNotSet;
+    private EditTextPreference mName;
+    private EditTextPreference mApn;
+    private EditTextPreference mProxy;
+    private EditTextPreference mPort;
+    private EditTextPreference mUser;
+    private EditTextPreference mServer;
+    private EditTextPreference mPassword;
+    private EditTextPreference mMmsc;
+    private EditTextPreference mMcc;
+    private EditTextPreference mMnc;
+    private EditTextPreference mMmsProxy;
+    private EditTextPreference mMmsPort;
+    private EditTextPreference mApnType;
+    private String mCurMnc;
+    private String mCurMcc;
+    
+    private Uri mUri;
+    private Cursor mCursor;
+    private boolean mNewApn;
+    private boolean mFirstTime;
+    private Resources mRes;
+    
+    /**
+     * Standard projection for the interesting columns of a normal note.
+     */
+    private static final String[] sProjection = new String[] {
+            Telephony.Carriers._ID,     // 0
+            Telephony.Carriers.NAME,    // 1
+            Telephony.Carriers.APN,     // 2
+            Telephony.Carriers.PROXY,   // 3
+            Telephony.Carriers.PORT,    // 4
+            Telephony.Carriers.USER,    // 5
+            Telephony.Carriers.SERVER,  // 6
+            Telephony.Carriers.PASSWORD, // 7
+            Telephony.Carriers.MMSC, // 8
+            Telephony.Carriers.MCC, // 9
+            Telephony.Carriers.MNC, // 10
+            Telephony.Carriers.NUMERIC, // 11
+            Telephony.Carriers.MMSPROXY,// 12
+            Telephony.Carriers.MMSPORT, // 13
+            Telephony.Carriers.TYPE, // 14
+    };
+    
+    private static final int ID_INDEX = 0;
+    private static final int NAME_INDEX = 1;
+    private static final int APN_INDEX = 2;
+    private static final int PROXY_INDEX = 3;
+    private static final int PORT_INDEX = 4;
+    private static final int USER_INDEX = 5;
+    private static final int SERVER_INDEX = 6;
+    private static final int PASSWORD_INDEX = 7;
+    private static final int MMSC_INDEX = 8;
+    private static final int MCC_INDEX = 9;
+    private static final int MNC_INDEX = 10;
+    private static final int MMSPROXY_INDEX = 12;
+    private static final int MMSPORT_INDEX = 13;
+    private static final int TYPE_INDEX = 14;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.apn_editor);
+
+        sNotSet = getResources().getString(R.string.apn_not_set);
+        mName = (EditTextPreference) findPreference("apn_name");
+        mApn = (EditTextPreference) findPreference("apn_apn");
+        mProxy = (EditTextPreference) findPreference("apn_http_proxy");
+        mPort = (EditTextPreference) findPreference("apn_http_port");
+        mUser = (EditTextPreference) findPreference("apn_user");
+        mServer = (EditTextPreference) findPreference("apn_server");
+        mPassword = (EditTextPreference) findPreference("apn_password");
+        mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy");
+        mMmsPort = (EditTextPreference) findPreference("apn_mms_port");
+        mMmsc = (EditTextPreference) findPreference("apn_mmsc");
+        mMcc = (EditTextPreference) findPreference("apn_mcc");
+        mMnc = (EditTextPreference) findPreference("apn_mnc");
+        mApnType = (EditTextPreference) findPreference("apn_type");
+        
+        mRes = getResources();
+        
+        final Intent intent = getIntent();
+        final String action = intent.getAction();
+
+        mFirstTime = icicle == null;
+        
+        if (action.equals(Intent.ACTION_EDIT)) {
+            mUri = intent.getData();
+        } else if (action.equals(Intent.ACTION_INSERT)) {
+            if (mFirstTime) {
+                mUri = getContentResolver().insert(intent.getData(), new ContentValues());
+            } else {
+                mUri = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, 
+                        icicle.getInt(SAVED_POS));
+            }
+            mNewApn = true;
+            // If we were unable to create a new note, then just finish
+            // this activity.  A RESULT_CANCELED will be sent back to the
+            // original activity if they requested a result.
+            if (mUri == null) {
+                Log.w(TAG, "Failed to insert new telephony provider into "
+                        + getIntent().getData());
+                finish();
+                return;
+            }
+            
+            // The new entry was created, so assume all will end well and
+            // set the result to be returned.
+            setResult(RESULT_OK, (new Intent()).setAction(mUri.toString()));
+
+        } else {
+            finish();
+            return;
+        }
+
+        mCursor = managedQuery(mUri, sProjection, null, null);
+        mCursor.moveToFirst();
+        
+        fillUi();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+    }
+    
+    @Override
+    public void onPause() {
+        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+        super.onPause();        
+    }
+    
+    private void fillUi() {
+        if (mFirstTime) {            
+            mFirstTime = false;
+            // Fill in all the values from the db in both text editor and summary
+            mName.setText(mCursor.getString(NAME_INDEX));
+            mApn.setText(mCursor.getString(APN_INDEX));
+            mProxy.setText(mCursor.getString(PROXY_INDEX));
+            mPort.setText(mCursor.getString(PORT_INDEX));
+            mUser.setText(mCursor.getString(USER_INDEX));
+            mServer.setText(mCursor.getString(SERVER_INDEX));
+            mPassword.setText(mCursor.getString(PASSWORD_INDEX));
+            mMmsProxy.setText(mCursor.getString(MMSPROXY_INDEX));
+            mMmsPort.setText(mCursor.getString(MMSPORT_INDEX));
+            mMmsc.setText(mCursor.getString(MMSC_INDEX));
+            mMcc.setText(mCursor.getString(MCC_INDEX));
+            mMnc.setText(mCursor.getString(MNC_INDEX));
+            mApnType.setText(mCursor.getString(TYPE_INDEX));
+            if (mNewApn) {
+                String numeric = 
+                    SystemProperties.get(TelephonyProperties.PROPERTY_SIM_OPERATOR_NUMERIC);
+                // MCC is first 3 chars and then in 2 - 3 chars of MNC
+                if (numeric != null && numeric.length() > 4) {
+                    // Country code
+                    String mcc = numeric.substring(0, 3);
+                    // Network code
+                    String mnc = numeric.substring(3);
+                    // Auto populate MNC and MCC for new entries, based on what SIM reports
+                    mMcc.setText(mcc);
+                    mMnc.setText(mnc);
+                    mCurMnc = mnc;
+                    mCurMcc = mcc;
+                }
+            }
+        }
+        
+        mName.setSummary(checkNull(mName.getText()));
+        mApn.setSummary(checkNull(mApn.getText()));
+        mProxy.setSummary(checkNull(mProxy.getText()));
+        mPort.setSummary(checkNull(mPort.getText()));
+        mUser.setSummary(checkNull(mUser.getText()));
+        mServer.setSummary(checkNull(mServer.getText()));
+        mPassword.setSummary(starify(mPassword.getText()));
+        mMmsProxy.setSummary(checkNull(mMmsProxy.getText()));
+        mMmsPort.setSummary(checkNull(mMmsPort.getText()));
+        mMmsc.setSummary(checkNull(mMmsc.getText()));
+        mMcc.setSummary(checkNull(mMcc.getText()));
+        mMnc.setSummary(checkNull(mMnc.getText()));
+        mApnType.setSummary(checkNull(mApnType.getText()));
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        // If it's a new APN, then cancel will delete the new entry in onPause
+        if (!mNewApn) {
+            menu.add(0, MENU_DELETE, 0, R.string.menu_delete)
+                .setIcon(android.R.drawable.ic_menu_delete);
+        }
+        menu.add(0, MENU_SAVE, 0, R.string.menu_save)
+            .setIcon(android.R.drawable.ic_menu_save);
+        menu.add(0, MENU_CANCEL, 0, R.string.menu_cancel)
+            .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+        case MENU_DELETE:
+            deleteApn();
+            return true;
+        case MENU_SAVE:
+            if (validateAndSave(false)) {
+                finish();
+            }
+            return true;
+        case MENU_CANCEL:
+            if (mNewApn) {
+                getContentResolver().delete(mUri, null, null);
+            }
+            finish();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+    
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_BACK: {
+                if (validateAndSave(false)) {
+                    finish();
+                }
+                return true;
+            }
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle icicle) {
+        super.onSaveInstanceState(icicle);
+        validateAndSave(true);
+        icicle.putInt(SAVED_POS, mCursor.getInt(ID_INDEX));
+    }
+    
+    /**
+     * Check the key fields' validity and save if valid.
+     * @param force save even if the fields are not valid, if the app is
+     *        being suspended
+     * @return true if the data was saved
+     */
+    private boolean validateAndSave(boolean force) {
+        String name = checkNotSet(mName.getText());
+        String apn = checkNotSet(mApn.getText());
+        String mcc = checkNotSet(mMcc.getText());
+        String mnc = checkNotSet(mMnc.getText());
+        
+        String errorMsg = null;
+        if (name.length() < 1) {
+            errorMsg = mRes.getString(R.string.error_name_empty);
+        } else if (apn.length() < 1) {
+            errorMsg = mRes.getString(R.string.error_apn_empty);
+        } else if (mcc.length() != 3) {
+            errorMsg = mRes.getString(R.string.error_mcc_not3);
+        } else if ((mnc.length() & 0xFFFE) != 2) {
+            errorMsg = mRes.getString(R.string.error_mnc_not23);
+        }
+        
+        if (errorMsg != null && !force) {
+            showErrorMessage(errorMsg);
+            return false;
+        }
+        
+        if (!mCursor.moveToFirst()) {
+            Log.w(TAG,
+                    "Could not go to the first row in the Cursor when saving data.");
+            return false;
+        }
+        
+        ContentValues values = new ContentValues();
+        
+        values.put(Telephony.Carriers.NAME, name);
+        values.put(Telephony.Carriers.APN, apn);
+        values.put(Telephony.Carriers.PROXY, checkNotSet(mProxy.getText()));
+        values.put(Telephony.Carriers.PORT, checkNotSet(mPort.getText()));
+        values.put(Telephony.Carriers.MMSPROXY, checkNotSet(mMmsProxy.getText()));
+        values.put(Telephony.Carriers.MMSPORT, checkNotSet(mMmsPort.getText()));
+        values.put(Telephony.Carriers.USER, checkNotSet(mUser.getText()));
+        values.put(Telephony.Carriers.SERVER, checkNotSet(mServer.getText()));
+        values.put(Telephony.Carriers.PASSWORD, checkNotSet(mPassword.getText()));
+        values.put(Telephony.Carriers.MMSC, checkNotSet(mMmsc.getText()));            
+        values.put(Telephony.Carriers.TYPE, checkNotSet(mApnType.getText()));
+
+        values.put(Telephony.Carriers.MCC, mcc);
+        values.put(Telephony.Carriers.MNC, mnc);
+        
+        values.put(Telephony.Carriers.NUMERIC, mcc + mnc);
+        
+        if (mCurMnc != null && mCurMcc != null) {
+            if (mCurMnc.equals(mnc) && mCurMcc.equals(mcc)) {
+                values.put(Telephony.Carriers.CURRENT, 1);
+            }
+        }
+        
+        getContentResolver().update(mUri, values, null, null);
+        
+        return true;
+    }
+
+    private void showErrorMessage(String message) {
+        new AlertDialog.Builder(this)
+            .setTitle(R.string.error_title)
+            .setMessage(message)
+            .setPositiveButton(android.R.string.ok, null)
+            .show();
+    }
+
+    private void deleteApn() {
+        getContentResolver().delete(mUri, null, null);
+        finish();
+    }
+    
+    private String starify(String value) {
+        if (value == null || value.length() == 0) {
+            return sNotSet;
+        } else {
+            char[] password = new char[value.length()];
+            for (int i = 0; i < password.length; i++) {
+                password[i] = '*';
+            }
+            return new String(password);
+        }
+    }
+    
+    private String checkNull(String value) {
+        if (value == null || value.length() == 0) {
+            return sNotSet;
+        } else {
+            return value;
+        }
+    }
+    
+    private String checkNotSet(String value) {
+        if (value == null || value.equals(sNotSet)) {
+            return "";
+        } else {
+            return value;
+        }
+    }
+    
+    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+        Preference pref = findPreference(key);
+        if (pref != null) {
+            pref.setSummary(checkNull(sharedPreferences.getString(key, "")));
+        }
+    }
+}
diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java
new file mode 100644
index 0000000..87e3412
--- /dev/null
+++ b/src/com/android/settings/ApnSettings.java
@@ -0,0 +1,229 @@
+/*
+ * 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.Dialog;
+import android.app.ProgressDialog;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.Message;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
+import android.provider.Telephony;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+public class ApnSettings extends PreferenceActivity {
+
+    public static final String EXTRA_POSITION = "position";
+    public static final String RESTORE_CARRIERS_URI =
+        "content://telephony/carriers/restore";
+
+    private static final int ID_INDEX = 0;
+    private static final int NAME_INDEX = 1;
+    private static final int APN_INDEX = 2;
+
+    private static final int MENU_NEW = Menu.FIRST;
+    private static final int MENU_RESTORE = Menu.FIRST + 1;
+
+    private static final int EVENT_RESTORE_DEFAULTAPN_START = 1;
+    private static final int EVENT_RESTORE_DEFAULTAPN_COMPLETE = 2;
+
+    private static final int DIALOG_RESTORE_DEFAULTAPN = 1001;
+
+    private static final Uri DEFAULTAPN_URI = Uri.parse(RESTORE_CARRIERS_URI);
+
+    private static boolean mRestoreDefaultApnMode;
+
+    private RestoreApnUiHandler mRestoreApnUiHandler;
+    private RestoreApnProcessHandler mRestoreApnProcessHandler;
+
+    private Cursor mCursor;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.apn_settings);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        if (!mRestoreDefaultApnMode) {
+            fillList();
+        } else {
+            showDialog(DIALOG_RESTORE_DEFAULTAPN);
+        }
+    }
+
+    private void fillList() {
+        mCursor = managedQuery(Telephony.Carriers.CONTENT_URI, new String[] {
+                "_id", "name", "apn"}, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
+
+        PreferenceGroup apnList = (PreferenceGroup) findPreference("apn_list");
+        apnList.removeAll();
+
+        mCursor.moveToFirst();
+        while (!mCursor.isAfterLast()) {
+            String name = mCursor.getString(NAME_INDEX);
+            String apn = mCursor.getString(APN_INDEX);
+
+            if (name != null && apn != null && TextUtils.getTrimmedLength(name) > 0
+                    && TextUtils.getTrimmedLength(apn) > 0) {
+                Preference pref = new Preference((Context) this);
+                pref.setKey(mCursor.getString(ID_INDEX));
+                pref.setTitle(name);
+                pref.setSummary(apn);
+                pref.setPersistent(false);
+                apnList.addPreference(pref);
+            }
+
+            mCursor.moveToNext();
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        menu.add(0, MENU_NEW, 0,
+                getResources().getString(R.string.menu_new))
+                .setIcon(android.R.drawable.ic_menu_add);
+        menu.add(0, MENU_RESTORE, 0,
+                getResources().getString(R.string.menu_restore))
+                .setIcon(android.R.drawable.ic_menu_upload);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+        case MENU_NEW:
+            addNewApn();
+            return true;
+
+        case MENU_RESTORE:
+            restoreDefaultApn();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void addNewApn() {
+        startActivity(new Intent(Intent.ACTION_INSERT, Telephony.Carriers.CONTENT_URI));
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        int pos = Integer.parseInt(preference.getKey());
+        Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos);
+        startActivity(new Intent(Intent.ACTION_EDIT, url));
+        return true;
+    }
+
+    private boolean restoreDefaultApn() {
+        showDialog(DIALOG_RESTORE_DEFAULTAPN);
+        mRestoreDefaultApnMode = true;
+
+        if (mRestoreApnUiHandler == null) {
+            mRestoreApnUiHandler = new RestoreApnUiHandler();
+        }
+
+        if (mRestoreApnProcessHandler == null) {
+            HandlerThread restoreDefaultApnThread = new HandlerThread(
+                    "Restore default APN Handler: Process Thread");
+            restoreDefaultApnThread.start();
+            mRestoreApnProcessHandler = new RestoreApnProcessHandler(
+                    restoreDefaultApnThread.getLooper(), mRestoreApnUiHandler);
+        }
+
+        mRestoreApnProcessHandler
+                .sendEmptyMessage(EVENT_RESTORE_DEFAULTAPN_START);
+        return true;
+    }
+
+    private class RestoreApnUiHandler extends Handler {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case EVENT_RESTORE_DEFAULTAPN_COMPLETE:
+                    fillList();
+                    getPreferenceScreen().setEnabled(true);
+                    mRestoreDefaultApnMode = false;
+                    dismissDialog(DIALOG_RESTORE_DEFAULTAPN);
+                    Toast.makeText(
+                        ApnSettings.this,
+                        getResources().getString(
+                                R.string.restore_default_apn_completed),
+                        Toast.LENGTH_LONG).show();
+                    break;
+            }
+        }
+    }
+
+    private class RestoreApnProcessHandler extends Handler {
+        private Handler mRestoreApnUiHandler;
+
+        public RestoreApnProcessHandler(Looper looper, Handler restoreApnUiHandler) {
+            super(looper);
+            this.mRestoreApnUiHandler = restoreApnUiHandler;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case EVENT_RESTORE_DEFAULTAPN_START:
+                    ContentResolver resolver = getContentResolver();
+                    resolver.delete(DEFAULTAPN_URI, null, null);                    
+                    mRestoreApnUiHandler
+                        .sendEmptyMessage(EVENT_RESTORE_DEFAULTAPN_COMPLETE);
+                    break;
+            }
+        }
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        if (id == DIALOG_RESTORE_DEFAULTAPN) {
+            ProgressDialog dialog = new ProgressDialog(this);
+            dialog.setMessage(getResources().getString(R.string.restore_default_apn));
+            dialog.setCancelable(false);
+            return dialog;
+        }
+        return null;
+    }
+
+    @Override
+    protected void onPrepareDialog(int id, Dialog dialog) {
+        if (id == DIALOG_RESTORE_DEFAULTAPN) {
+            getPreferenceScreen().setEnabled(false);
+        }
+    }
+}
diff --git a/src/com/android/settings/ApplicationSettings.java b/src/com/android/settings/ApplicationSettings.java
new file mode 100644
index 0000000..85fe11f
--- /dev/null
+++ b/src/com/android/settings/ApplicationSettings.java
@@ -0,0 +1,98 @@
+/*
+ * 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.AlertDialog;
+import android.content.DialogInterface;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+
+public class ApplicationSettings extends PreferenceActivity implements
+        DialogInterface.OnClickListener {
+    
+    private static final String KEY_TOGGLE_INSTALL_APPLICATIONS = "toggle_install_applications";
+    private static final String KEY_QUICK_LAUNCH = "quick_launch";
+
+    private CheckBoxPreference mToggleAppInstallation;
+    
+    private DialogInterface mWarnInstallApps;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.application_settings);
+
+        mToggleAppInstallation = (CheckBoxPreference) findPreference(KEY_TOGGLE_INSTALL_APPLICATIONS);
+        mToggleAppInstallation.setChecked(isNonMarketAppsAllowed());
+
+        if (getResources().getConfiguration().keyboard == Configuration.KEYBOARD_NOKEYS) {
+            // No hard keyboard, remove the setting for quick launch
+            Preference quickLaunchSetting = findPreference(KEY_QUICK_LAUNCH);
+            getPreferenceScreen().removePreference(quickLaunchSetting);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (preference == mToggleAppInstallation) {
+            if (mToggleAppInstallation.isChecked()) {
+                mToggleAppInstallation.setChecked(false);
+                warnAppInstallation();
+            } else {
+                setNonMarketAppsAllowed(false);
+            }
+        }
+        
+        return super.onPreferenceTreeClick(preferenceScreen, preference);
+    }
+
+    public void onClick(DialogInterface dialog, int which) {
+        if (dialog == mWarnInstallApps && which == DialogInterface.BUTTON1) {
+            setNonMarketAppsAllowed(true);
+            mToggleAppInstallation.setChecked(true);
+        }
+    }
+
+    private void setNonMarketAppsAllowed(boolean enabled) {
+        // Change the system setting
+        Settings.Secure.putInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 
+                                enabled ? 1 : 0);
+    }
+    
+    private boolean isNonMarketAppsAllowed() {
+        return Settings.Secure.getInt(getContentResolver(), 
+                                      Settings.Secure.INSTALL_NON_MARKET_APPS, 0) > 0;
+    }
+
+    private void warnAppInstallation() {
+        mWarnInstallApps = new AlertDialog.Builder(this)
+                .setTitle(getString(R.string.error_title))
+                .setIcon(com.android.internal.R.drawable.ic_dialog_alert)
+                .setMessage(getResources().getString(R.string.install_all_warning))
+                .setPositiveButton(android.R.string.yes, this)
+                .setNegativeButton(android.R.string.no, null)
+                .show();
+    }
+    
+    
+}
diff --git a/src/com/android/settings/BandMode.java b/src/com/android/settings/BandMode.java
new file mode 100644
index 0000000..1297cad
--- /dev/null
+++ b/src/com/android/settings/BandMode.java
@@ -0,0 +1,217 @@
+package com.android.settings;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
+import android.os.Bundle;
+import android.os.Message;
+import android.os.Handler;
+import android.os.AsyncResult;
+import android.util.Log;
+import android.content.DialogInterface;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.Window;
+import android.widget.ListView;
+import android.widget.ArrayAdapter;
+import android.widget.AdapterView;
+
+
+/**
+ * Radio Band Mode Selection Class
+ *
+ * It will query baseband about all available band modes and display them
+ * in screen. It will display all six band modes if the query failed.
+ *
+ * After user select one band, it will send the selection to baseband.
+ *
+ * It will alter user the result of select operation and exit, no matter success
+ * or not.
+ *
+ */
+public class BandMode extends Activity {
+    private static final String LOG_TAG = "phone";
+    private static final boolean DBG = false;
+
+    private static final int EVENT_BAND_SCAN_COMPLETED = 100;
+    private static final int EVENT_BAND_SELECTION_DONE = 200;
+
+    private static final String[] BAND_NAMES = new String[] {
+            "Automatic",
+            "EURO Band",
+            "USA Band",
+            "JAPAN Band",
+            "AUS Band",
+            "AUS2 Band"
+    };
+
+    private ListView mBandList;
+    private ArrayAdapter mBandListAdapter;
+    private BandListItem mTargetBand = null;
+    private DialogInterface mProgressPanel;
+
+    private Phone mPhone = null;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+        
+        setContentView(R.layout.band_mode);
+
+        setTitle(getString(R.string.band_mode_title));
+        getWindow().setLayout(WindowManager.LayoutParams.FILL_PARENT,
+                                    WindowManager.LayoutParams.WRAP_CONTENT);
+
+        mPhone = PhoneFactory.getDefaultPhone();
+
+        mBandList = (ListView) findViewById(R.id.band);
+        mBandListAdapter = new ArrayAdapter<BandListItem>(this,
+                android.R.layout.simple_list_item_1);
+        mBandList.setAdapter(mBandListAdapter);
+        mBandList.setOnItemClickListener(mBandSelectionHandler);
+
+
+
+        loadBandList();
+    }
+
+    private AdapterView.OnItemClickListener mBandSelectionHandler =
+            new AdapterView.OnItemClickListener () {
+                public void onItemClick(AdapterView parent, View v,
+                        int position, long id) {
+
+                    getWindow().setFeatureInt(
+                            Window.FEATURE_INDETERMINATE_PROGRESS,
+                            Window.PROGRESS_VISIBILITY_ON);
+
+                    mTargetBand = (BandListItem) parent.getAdapter().getItem(position);
+
+                    if (DBG) log("Select band : " + mTargetBand.toString());
+
+                    Message msg =
+                            mHandler.obtainMessage(EVENT_BAND_SELECTION_DONE);
+                    mPhone.setBandMode(mTargetBand.getBand(), msg);
+                }
+            };
+
+    private class BandListItem {
+        private int mBandMode = Phone.BM_UNSPECIFIED;
+
+        public BandListItem(int bm) {
+            mBandMode = bm;
+        }
+
+        public int getBand() {
+            return mBandMode;
+        }
+
+        public String toString() {
+            return BAND_NAMES[mBandMode];
+        }
+    }
+
+    private void loadBandList() {
+        String str = getString(R.string.band_mode_loading);
+
+        if (DBG) log(str);
+
+
+        //ProgressDialog.show(this, null, str, true, true, null);
+        mProgressPanel = new AlertDialog.Builder(this)
+            .setMessage(str)
+            .show();
+
+        Message msg = mHandler.obtainMessage(EVENT_BAND_SCAN_COMPLETED);
+        mPhone.queryAvailableBandMode(msg);
+
+    }
+
+    private void bandListLoaded(AsyncResult result) {
+        if (DBG) log("network list loaded");
+
+        if (mProgressPanel != null) mProgressPanel.dismiss();
+
+        clearList();
+
+        boolean addBandSuccess = false;
+        BandListItem item;
+
+        if (result.result != null) {
+            int bands[] = (int[])result.result;
+            int size = bands[0];
+
+            if (size > 0) {
+                for (int i=1; i<size; i++) {
+                    item = new BandListItem(bands[i]);
+                    mBandListAdapter.add(item);
+                    if (DBG) log("Add " + item.toString());
+                }
+                addBandSuccess = true;
+            }
+        }
+
+        if (addBandSuccess == false) {
+            if (DBG) log("Error in query, add default list");
+            for (int i=0; i<Phone.BM_BOUNDARY; i++) {
+                item = new BandListItem(i);
+                mBandListAdapter.add(item);
+                if (DBG) log("Add default " + item.toString());
+            }
+        }
+        mBandList.requestFocus();
+    }
+
+    private void displayBandSelectionResult(Throwable ex) {
+        String status = getString(R.string.band_mode_set)
+                +" [" + mTargetBand.toString() + "] ";
+
+        if (ex != null) {
+            status = status + getString(R.string.band_mode_failed);
+        } else {
+            status = status + getString(R.string.band_mode_succeeded);
+        }
+
+        mProgressPanel = new AlertDialog.Builder(this)
+            .setMessage(status)
+            .setPositiveButton(android.R.string.ok, null).show();
+    }
+
+    private void clearList() {
+        while(mBandListAdapter.getCount() > 0) {
+            mBandListAdapter.remove(
+                    mBandListAdapter.getItem(0));
+        }
+    }
+
+    private void log(String msg) {
+        Log.d(LOG_TAG, "[BandsList] " + msg);
+    }
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            AsyncResult ar;
+            switch (msg.what) {
+                case EVENT_BAND_SCAN_COMPLETED:
+                    ar = (AsyncResult) msg.obj;
+
+                    bandListLoaded(ar);
+                    break;
+
+                case EVENT_BAND_SELECTION_DONE:
+                    ar = (AsyncResult) msg.obj;
+
+                    getWindow().setFeatureInt(
+                            Window.FEATURE_INDETERMINATE_PROGRESS,
+                            Window.PROGRESS_VISIBILITY_OFF);
+
+                    displayBandSelectionResult(ar.exception);
+                    break;
+            }
+        }
+    };
+
+
+}
diff --git a/src/com/android/settings/BatteryInfo.java b/src/com/android/settings/BatteryInfo.java
new file mode 100644
index 0000000..f9962fa
--- /dev/null
+++ b/src/com/android/settings/BatteryInfo.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2006 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.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.BatteryManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IPowerManager;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.text.format.DateUtils;
+import android.widget.TextView;
+
+import com.android.internal.app.IBatteryStats;
+
+public class BatteryInfo extends Activity {
+    private TextView mStatus;
+    private TextView mLevel;
+    private TextView mScale;
+    private TextView mHealth;
+    private TextView mVoltage;
+    private TextView mTemperature;
+    private TextView mTechnology;
+    private TextView mUptime;
+    private TextView mAwakeBattery;
+    private TextView mAwakePlugged;
+    private TextView mScreenOn;
+    private IBatteryStats mBatteryStats;
+    private IPowerManager mScreenStats;
+    
+    private static final int EVENT_TICK = 1;
+    
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case EVENT_TICK:
+                    updateBatteryStats();
+                    sendEmptyMessageDelayed(EVENT_TICK, 1000);
+                    break;
+            }
+        }
+    };
+
+    /**
+     * Format a number of tenths-units as a decimal string without using a
+     * conversion to float.  E.g. 347 -> "34.7"
+     */
+    private final String tenthsToFixedString(int x) {
+        int tens = x / 10;
+        return new String("" + tens + "." + (x - 10*tens));
+    }
+
+   /**
+    *Listens for intent broadcasts
+    */
+    private IntentFilter   mIntentFilter;
+
+    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
+                int plugType = intent.getIntExtra("plugged", 0);
+
+                mLevel.setText("" + intent.getIntExtra("level", 0));
+                mScale.setText("" + intent.getIntExtra("scale", 0));
+                mVoltage.setText("" + intent.getIntExtra("voltage", 0) + " "
+                        + getString(R.string.battery_info_voltage_units));
+                mTemperature.setText("" + tenthsToFixedString(intent.getIntExtra("temperature", 0))
+                        + getString(R.string.battery_info_temperature_units));
+                mTechnology.setText("" + intent.getStringExtra("technology"));
+                
+                int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
+                String statusString;
+                if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
+                    statusString = getString(R.string.battery_info_status_charging);
+                    if (plugType > 0) {
+                        statusString = statusString + " " + getString(
+                                (plugType == BatteryManager.BATTERY_PLUGGED_AC)
+                                        ? R.string.battery_info_status_charging_ac
+                                        : R.string.battery_info_status_charging_usb);
+                    }
+                } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
+                    statusString = getString(R.string.battery_info_status_discharging);
+                } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
+                    statusString = getString(R.string.battery_info_status_not_charging);
+                } else if (status == BatteryManager.BATTERY_STATUS_FULL) {
+                    statusString = getString(R.string.battery_info_status_full);
+                } else {
+                    statusString = getString(R.string.battery_info_status_unknown);
+                }
+                mStatus.setText(statusString);
+
+                int health = intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN);
+                String healthString;
+                if (health == BatteryManager.BATTERY_HEALTH_GOOD) {
+                    healthString = getString(R.string.battery_info_health_good);
+                } else if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT) {
+                    healthString = getString(R.string.battery_info_health_overheat);
+                } else if (health == BatteryManager.BATTERY_HEALTH_DEAD) {
+                    healthString = getString(R.string.battery_info_health_dead);
+                } else if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE) {
+                    healthString = getString(R.string.battery_info_health_over_voltage);
+                } else if (health == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE) {
+                    healthString = getString(R.string.battery_info_health_unspecified_failure);
+                } else {
+                    healthString = getString(R.string.battery_info_health_unknown);
+                }
+                mHealth.setText(healthString);
+            }
+        }
+    };
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setContentView(R.layout.battery_info);
+
+        // create the IntentFilter that will be used to listen
+        // to battery status broadcasts
+        mIntentFilter = new IntentFilter();
+        mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        mStatus = (TextView)findViewById(R.id.status);
+        mLevel = (TextView)findViewById(R.id.level);
+        mScale = (TextView)findViewById(R.id.scale);
+        mHealth = (TextView)findViewById(R.id.health);
+        mTechnology = (TextView)findViewById(R.id.technology);
+        mVoltage = (TextView)findViewById(R.id.voltage);
+        mTemperature = (TextView)findViewById(R.id.temperature);
+        mUptime = (TextView) findViewById(R.id.uptime);
+        mAwakeBattery = (TextView) findViewById(R.id.awakeBattery);
+        mAwakePlugged = (TextView) findViewById(R.id.awakePlugged);
+        mScreenOn = (TextView) findViewById(R.id.screenOn);
+        
+        // Get awake time plugged in and on battery
+        mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo"));
+        mScreenStats = IPowerManager.Stub.asInterface(ServiceManager.getService(POWER_SERVICE));
+        mHandler.sendEmptyMessageDelayed(EVENT_TICK, 1000);
+        
+        registerReceiver(mIntentReceiver, mIntentFilter);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mHandler.removeMessages(EVENT_TICK);
+        
+        // we are no longer on the screen stop the observers
+        unregisterReceiver(mIntentReceiver);
+    }
+
+    private void updateBatteryStats() {
+        long uptime = SystemClock.elapsedRealtime();
+        mUptime.setText(DateUtils.formatElapsedTime(uptime / 1000));
+        
+        if (mBatteryStats != null) {
+            try {
+                long awakeTimeBattery = mBatteryStats.getAwakeTimeBattery() / 1000;
+                long awakeTimePluggedIn = mBatteryStats.getAwakeTimePlugged() / 1000;
+                mAwakeBattery.setText(DateUtils.formatElapsedTime(awakeTimeBattery / 1000) 
+                        + " (" + (100 * awakeTimeBattery / uptime) + "%)");
+                mAwakePlugged.setText(DateUtils.formatElapsedTime(awakeTimePluggedIn / 1000)
+                        + " (" + (100 * awakeTimePluggedIn / uptime) + "%)");
+            } catch (RemoteException re) {
+                mAwakeBattery.setText("Unknown");
+                mAwakePlugged.setText("Unknown");            
+            }
+        }
+        if (mScreenStats != null) {
+            try {
+                long screenOnTime = mScreenStats.getScreenOnTime();
+                mScreenOn.setText(DateUtils.formatElapsedTime(screenOnTime / 1000));
+            } catch (RemoteException re) {
+                mScreenOn.setText("Unknown");
+            }
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/BrightnessPreference.java b/src/com/android/settings/BrightnessPreference.java
new file mode 100644
index 0000000..a9851cc
--- /dev/null
+++ b/src/com/android/settings/BrightnessPreference.java
@@ -0,0 +1,103 @@
+/*
+ * 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.content.Context;
+import android.os.RemoteException;
+import android.os.IHardwareService;
+import android.os.ServiceManager;
+import android.preference.SeekBarPreference;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.SeekBar;
+
+import java.util.Map;
+
+public class BrightnessPreference extends SeekBarPreference implements
+        SeekBar.OnSeekBarChangeListener {
+
+    private SeekBar mSeekBar;
+    
+    private int mOldBrightness;
+    
+    // Backlight range is from 0 - 255. Need to make sure that user
+    // doesn't set the backlight to 0 and get stuck
+    private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10;
+    private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON;
+
+    public BrightnessPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onBindDialogView(View view) {
+        super.onBindDialogView(view);
+
+        mSeekBar = getSeekBar(view);
+        mSeekBar.setOnSeekBarChangeListener(this);
+        mSeekBar.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT);
+        try {
+            mOldBrightness = Settings.System.getInt(getContext().getContentResolver(), 
+                Settings.System.SCREEN_BRIGHTNESS);
+        } catch (SettingNotFoundException snfe) {
+            mOldBrightness = MAXIMUM_BACKLIGHT;
+        }
+        mSeekBar.setProgress(mOldBrightness - MINIMUM_BACKLIGHT);
+    }
+
+    public void onProgressChanged(SeekBar seekBar, int progress,
+            boolean fromTouch) {
+        setBrightness(progress + MINIMUM_BACKLIGHT);
+    }
+
+    public void onStartTrackingTouch(SeekBar seekBar) {
+        // NA
+    }
+
+    public void onStopTrackingTouch(SeekBar seekBar) {
+        // NA
+    }
+
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        super.onDialogClosed(positiveResult);
+        
+        if (positiveResult) {
+            Settings.System.putInt(getContext().getContentResolver(), 
+                    Settings.System.SCREEN_BRIGHTNESS,
+                    mSeekBar.getProgress() + MINIMUM_BACKLIGHT);
+        } else {
+            setBrightness(mOldBrightness);
+        }
+    }
+    
+    private void setBrightness(int brightness) {
+        try {
+            IHardwareService hardware = IHardwareService.Stub.asInterface(
+                    ServiceManager.getService("hardware"));
+            if (hardware != null) {
+                hardware.setScreenBacklight(brightness);
+            }
+        } catch (RemoteException doe) {
+            
+        }        
+    }
+}
+
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
new file mode 100644
index 0000000..47fc07f
--- /dev/null
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -0,0 +1,497 @@
+/*
+ * 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;
+
+import com.google.android.collect.Lists;
+
+import com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockPatternView;
+import static com.android.internal.widget.LockPatternView.DisplayMode;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.Window;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * If the user has a lock pattern set already, makes them confirm the existing one.
+ *
+ * Then, prompts the user to choose a lock pattern:
+ * - prompts for initial pattern
+ * - asks for confirmation / restart
+ * - 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.
+     * <p>
+     * Previously, each activity in the wizard would finish itself after
+     * starting the next activity. However, this leads to broken 'Back'
+     * behavior. So, now an activity does not finish itself until it gets this
+     * result.
+     */
+    static final int RESULT_FINISHED = RESULT_FIRST_USER;
+    
+    // how long after a confirmation message is shown before moving on
+    static final int INFORMATION_MSG_TIMEOUT_MS = 3000;
+
+    // how long we wait to clear a wrong pattern
+    private static final int WRONG_PATTERN_CLEAR_TIMEOUT_MS = 2000;
+
+    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)
+                    ));
+
+
+    /**
+     * The pattern listener that responds according to a user choosing a new
+     * lock pattern.
+     */
+    protected LockPatternView.OnPatternListener mChooseNewLockPatternListener = new LockPatternView.OnPatternListener() {
+
+            public void onPatternStart() {
+                mLockPatternView.removeCallbacks(mClearPatternRunnable);
+                patternInProgress();
+            }
+
+            public void onPatternCleared() {
+                mLockPatternView.removeCallbacks(mClearPatternRunnable);
+            }
+
+            public void onPatternDetected(List<LockPatternView.Cell> pattern) {
+                if (mUiStage == Stage.NeedToConfirm || mUiStage == Stage.ConfirmWrong) {
+                    if (mChosenPattern == null) throw new IllegalStateException("null chosen pattern in stage 'need to confirm");
+                    if (mChosenPattern.equals(pattern)) {
+                        updateStage(Stage.ChoiceConfirmed);
+                    } else {
+                        updateStage(Stage.ConfirmWrong);
+                    }
+                } else if (mUiStage == Stage.Introduction || mUiStage == Stage.ChoiceTooShort){
+                    if (pattern.size() < LockPatternUtils.MIN_LOCK_PATTERN_SIZE) {
+                        updateStage(Stage.ChoiceTooShort);
+                    } else {
+                        mChosenPattern = new ArrayList<LockPatternView.Cell>(pattern);
+                        updateStage(Stage.FirstChoiceValid);
+                    }
+                } else {
+                    throw new IllegalStateException("Unexpected stage " + mUiStage + " when "
+                            + "entering the pattern.");
+                }
+            }
+
+            private void patternInProgress() {
+                mHeaderText.setText(R.string.lockpattern_recording_inprogress);
+                mFooterText.setText("");
+                mFooterLeftButton.setEnabled(false);
+                mFooterRightButton.setEnabled(false);
+            }
+     };
+
+
+    /**
+     * The states of the left footer button.
+     */
+    enum LeftButtonMode {
+        Cancel(R.string.cancel, true),
+        CancelDisabled(R.string.cancel, false),
+        Retry(R.string.lockpattern_retry_button_text, true),
+        RetryDisabled(R.string.lockpattern_retry_button_text, false),
+        Gone(ID_EMPTY_MESSAGE, false);
+
+
+        /**
+         * @param text The displayed text for this mode.
+         * @param enabled Whether the button should be enabled.
+         */
+        LeftButtonMode(int text, boolean enabled) {
+            this.text = text;
+            this.enabled = enabled;
+        }
+
+        final int text;
+        final boolean enabled;
+    }
+
+    /**
+     * The states of the right button.
+     */
+    enum RightButtonMode {
+        Continue(R.string.lockpattern_continue_button_text, true),
+        ContinueDisabled(R.string.lockpattern_continue_button_text, false),
+        Confirm(R.string.lockpattern_confirm_button_text, true),
+        ConfirmDisabled(R.string.lockpattern_confirm_button_text, false),
+        Ok(android.R.string.ok, true);
+
+        /**
+         * @param text The displayed text for this mode.
+         * @param enabled Whether the button should be enabled.
+         */
+        RightButtonMode(int text, boolean enabled) {
+            this.text = text;
+            this.enabled = enabled;
+        }
+
+        final int text;
+        final boolean enabled;
+    }
+
+    /**
+     * Keep track internally of where the user is in choosing a pattern.
+     */
+    protected enum Stage {
+
+        Introduction(
+                R.string.lockpattern_recording_intro_header,
+                LeftButtonMode.Cancel, RightButtonMode.ContinueDisabled,
+                R.string.lockpattern_recording_intro_footer, true),
+        HelpScreen(
+                R.string.lockpattern_settings_help_how_to_record,
+                LeftButtonMode.Gone, RightButtonMode.Ok, ID_EMPTY_MESSAGE, false),
+        ChoiceTooShort(
+                R.string.lockpattern_recording_incorrect_too_short,
+                LeftButtonMode.Retry, RightButtonMode.ContinueDisabled,
+                ID_EMPTY_MESSAGE, true),
+        FirstChoiceValid(
+                R.string.lockpattern_pattern_entered_header,
+                LeftButtonMode.Retry, RightButtonMode.Continue, ID_EMPTY_MESSAGE, false),
+        NeedToConfirm(
+                R.string.lockpattern_need_to_confirm,
+                LeftButtonMode.CancelDisabled, RightButtonMode.ConfirmDisabled,
+                ID_EMPTY_MESSAGE, true),
+        ConfirmWrong(
+                R.string.lockpattern_need_to_unlock_wrong,
+                LeftButtonMode.Cancel, RightButtonMode.ConfirmDisabled,
+                ID_EMPTY_MESSAGE, true),
+        ChoiceConfirmed(
+                R.string.lockpattern_pattern_confirmed_header,
+                LeftButtonMode.Cancel, RightButtonMode.Confirm, ID_EMPTY_MESSAGE, false);
+
+
+        /**
+         * @param headerMessage The message displayed at the top.
+         * @param leftMode The mode of the left button.
+         * @param rightMode The mode of the right button.
+         * @param footerMessage The footer message.
+         * @param patternEnabled Whether the pattern widget is enabled.
+         */
+        Stage(int headerMessage,
+                LeftButtonMode leftMode,
+                RightButtonMode rightMode,
+                int footerMessage, boolean patternEnabled) {
+            this.headerMessage = headerMessage;
+            this.leftMode = leftMode;
+            this.rightMode = rightMode;
+            this.footerMessage = footerMessage;
+            this.patternEnabled = patternEnabled;
+        }
+
+        final int headerMessage;
+        final LeftButtonMode leftMode;
+        final RightButtonMode rightMode;
+        final int footerMessage;
+        final boolean patternEnabled;
+    }
+
+    private Stage mUiStage = Stage.Introduction;
+
+    private Runnable mClearPatternRunnable = new Runnable() {
+        public void run() {
+            mLockPatternView.clearPattern();
+        }
+    };
+
+    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());
+
+        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
+                = (LinearLayoutWithDefaultTouchRecepient) findViewById(
+                R.id.topLayout);
+        topLayout.setDefaultTouchRecepient(mLockPatternView);
+
+        if (savedInstanceState == null) {
+            // first launch
+            updateStage(Stage.Introduction);
+            if (mLockPatternUtils.savedPatternExists()) {
+                confirmPattern();
+            } 
+        } else {
+            // restore from previous state
+            final String patternString = savedInstanceState.getString(KEY_PATTERN_CHOICE);
+            if (patternString != null) {
+                mChosenPattern = LockPatternUtils.stringToPattern(patternString);
+            }
+            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());        
+
+        mFooterText = (TextView) findViewById(R.id.footerText);
+
+        mFooterLeftButton = (TextView) findViewById(R.id.footerLeftButton);
+        mFooterRightButton = (TextView) findViewById(R.id.footerRightButton);
+
+        mFooterLeftButton.setOnClickListener(this);
+        mFooterRightButton.setOnClickListener(this);
+    }
+
+    public void onClick(View v) {
+        if (v == mFooterLeftButton) {
+            if (mUiStage.leftMode == LeftButtonMode.Retry) {
+                mChosenPattern = null;
+                mLockPatternView.clearPattern();
+                updateStage(Stage.Introduction);
+            } else if (mUiStage.leftMode == LeftButtonMode.Cancel) {
+                // They are canceling the entire wizard
+                setResult(RESULT_FINISHED);
+                finish();
+            } else {
+                throw new IllegalStateException("left footer button pressed, but stage of " +
+                    mUiStage + " doesn't make sense");
+            }
+        } else if (v == mFooterRightButton) {
+
+            if (mUiStage.rightMode == RightButtonMode.Continue) {
+                if (mUiStage != Stage.FirstChoiceValid) {
+                    throw new IllegalStateException("expected ui stage " + Stage.FirstChoiceValid
+                            + " when button is " + RightButtonMode.Continue);
+                }
+                updateStage(Stage.NeedToConfirm);
+            } else if (mUiStage.rightMode == RightButtonMode.Confirm) {
+                if (mUiStage != Stage.ChoiceConfirmed) {
+                    throw new IllegalStateException("expected ui stage " + Stage.ChoiceConfirmed
+                            + " when button is " + RightButtonMode.Confirm);
+                }
+                saveChosenPatternAndFinish();
+            } else if (mUiStage.rightMode == RightButtonMode.Ok) {
+                if (mUiStage != Stage.HelpScreen) {
+                    throw new IllegalStateException("Help screen is only mode with ok button, but " +
+                            "stage is " + mUiStage);
+                }
+                mLockPatternView.clearPattern();
+                mLockPatternView.setDisplayMode(DisplayMode.Correct);
+                updateStage(Stage.Introduction);
+            }
+        }
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
+            if (mUiStage == Stage.HelpScreen) {
+                updateStage(Stage.Introduction);
+                return true;
+            }
+        }
+        if (keyCode == KeyEvent.KEYCODE_MENU && mUiStage == Stage.Introduction) {
+            updateStage(Stage.HelpScreen);
+            return true;
+        }
+
+        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);
+
+        outState.putInt(KEY_UI_STAGE, mUiStage.ordinal());
+        if (mChosenPattern != null) {
+            outState.putString(KEY_PATTERN_CHOICE, LockPatternUtils.patternToString(mChosenPattern));
+        }
+    }
+
+
+    /**
+     * Updates the messages and buttons appropriate to what stage the user
+     * is at in choosing a view.  This doesn't handle clearing out the pattern;
+     * the pattern is expected to be in the right state.
+     * @param stage
+     */
+    protected void updateStage(Stage stage) {
+
+        mUiStage = stage;
+
+        // header text, footer text, visibility and 
+        // enabled state all known from the stage
+        if (stage == Stage.ChoiceTooShort) {
+            mHeaderText.setText(
+                    getResources().getString(
+                            stage.headerMessage,
+                            LockPatternUtils.MIN_LOCK_PATTERN_SIZE));
+        } else {
+            mHeaderText.setText(stage.headerMessage);
+        }
+        if (stage.footerMessage == ID_EMPTY_MESSAGE) {
+            mFooterText.setText("");
+        } else {
+            mFooterText.setText(stage.footerMessage);
+        }
+
+        if (stage.leftMode == LeftButtonMode.Gone) {
+            mFooterLeftButton.setVisibility(View.GONE);
+        } else {
+            mFooterLeftButton.setVisibility(View.VISIBLE);
+            mFooterLeftButton.setText(stage.leftMode.text);
+            mFooterLeftButton.setEnabled(stage.leftMode.enabled);
+        }
+
+        mFooterRightButton.setText(stage.rightMode.text);
+        mFooterRightButton.setEnabled(stage.rightMode.enabled);
+
+        // same for whether the patten is enabled
+        if (stage.patternEnabled) {
+            mLockPatternView.enableInput();
+        } else {
+            mLockPatternView.disableInput();
+        }
+
+        // the rest of the stuff varies enough that it is easier just to handle
+        // on a case by case basis.
+        mLockPatternView.setDisplayMode(DisplayMode.Correct);
+
+        switch (mUiStage) {
+            case Introduction:
+                mLockPatternView.clearPattern();
+                break;
+            case HelpScreen:
+                mLockPatternView.setPattern(DisplayMode.Animate, mAnimatePattern);
+                break;
+            case ChoiceTooShort:
+                mLockPatternView.setDisplayMode(DisplayMode.Wrong);
+                postClearPatternRunnable();
+                break;
+            case FirstChoiceValid:
+                break;
+            case NeedToConfirm:
+                mLockPatternView.clearPattern();
+                break;
+            case ConfirmWrong:
+                mLockPatternView.setDisplayMode(DisplayMode.Wrong);
+                postClearPatternRunnable();
+                break;
+            case ChoiceConfirmed:
+                break;
+        }
+    }
+
+
+    // clear the wrong pattern unless they have started a new one
+    // already
+    private void postClearPatternRunnable() {
+        mLockPatternView.removeCallbacks(mClearPatternRunnable);
+        mLockPatternView.postDelayed(mClearPatternRunnable, WRONG_PATTERN_CLEAR_TIMEOUT_MS);
+    }
+
+    private void saveChosenPatternAndFinish() {
+        boolean patternExistedBefore = mLockPatternUtils.savedPatternExists();
+        mLockPatternUtils.saveLockPattern(mChosenPattern);
+
+        // if setting pattern for first time, enable the lock gesture.  otherwise,
+        // keep the user's setting.
+        if (!patternExistedBefore) {
+            mLockPatternUtils.setLockPatternEnabled(true);
+            mLockPatternUtils.setVisiblePatternEnabled(true);
+        }
+        
+        setResult(RESULT_FINISHED);
+        finish();
+    }
+}
diff --git a/src/com/android/settings/ChooseLockPatternExample.java b/src/com/android/settings/ChooseLockPatternExample.java
new file mode 100644
index 0000000..77517b9
--- /dev/null
+++ b/src/com/android/settings/ChooseLockPatternExample.java
@@ -0,0 +1,104 @@
+/*
+ * 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.content.Intent;
+import android.graphics.drawable.AnimationDrawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.View;
+import android.widget.ImageView;
+
+public class ChooseLockPatternExample extends Activity implements View.OnClickListener {
+    private static final int REQUESTCODE_CHOOSE = 1;
+    private static final long START_DELAY = 1000;
+    protected static final String TAG = "Settings";
+    private View mNextButton;
+    private View mSkipButton;
+    private View mImageView;
+    private AnimationDrawable mAnimation;
+    private Handler mHandler = new Handler();
+    private Runnable mRunnable = new Runnable() {
+        public void run() {
+            startAnimation(mAnimation);
+        }
+    };
+   
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.choose_lock_pattern_example);
+        initViews();
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mHandler.postDelayed(mRunnable, START_DELAY);
+    }
+    
+    @Override
+    protected void onPause() {
+        super.onPause();
+        stopAnimation(mAnimation);
+    }
+    
+    public void onClick(View v) {
+        if (v == mSkipButton) {
+            // Canceling, so finish all
+            setResult(ChooseLockPattern.RESULT_FINISHED);
+            finish();
+        } else if (v == mNextButton) {
+            stopAnimation(mAnimation);
+            Intent intent = new Intent(this, ChooseLockPattern.class);
+            startActivityForResult(intent, REQUESTCODE_CHOOSE);
+        }
+    }
+    
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == REQUESTCODE_CHOOSE && resultCode == ChooseLockPattern.RESULT_FINISHED) {
+            setResult(resultCode);
+            finish();
+        }
+    }
+    
+    private void initViews() {
+        mNextButton = findViewById(R.id.next_button);
+        mNextButton.setOnClickListener(this);
+        
+        mSkipButton = findViewById(R.id.skip_button);
+        mSkipButton.setOnClickListener(this);
+        
+        mImageView = (ImageView) findViewById(R.id.lock_anim);
+        mImageView.setBackgroundResource(R.drawable.lock_anim);
+        mImageView.setOnClickListener(this);
+        mAnimation = (AnimationDrawable) mImageView.getBackground();
+    }
+    
+    protected void startAnimation(final AnimationDrawable animation) {
+        if (animation != null && !animation.isRunning()) {
+            animation.run();
+        }
+    }
+   
+    protected void stopAnimation(final AnimationDrawable animation) {
+        if (animation != null && animation.isRunning()) animation.stop();
+    }
+}
+
diff --git a/src/com/android/settings/ChooseLockPatternTutorial.java b/src/com/android/settings/ChooseLockPatternTutorial.java
new file mode 100644
index 0000000..a0a878a
--- /dev/null
+++ b/src/com/android/settings/ChooseLockPatternTutorial.java
@@ -0,0 +1,75 @@
+/*
+ * 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 com.android.internal.widget.LockPatternUtils;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+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());
+        if (savedInstanceState == null && lockPatternUtils.savedPatternExists()) {
+            Intent intent = new Intent();
+            intent.setClassName("com.android.settings", "com.android.settings.ChooseLockPattern");
+            startActivity(intent);
+            finish();
+        } else {
+            initViews();
+        }
+    }
+    
+    private void initViews() {
+        setContentView(R.layout.choose_lock_pattern_tutorial);
+        mNextButton = findViewById(R.id.next_button);
+        mNextButton.setOnClickListener(this);
+        mSkipButton = findViewById(R.id.skip_button);
+        mSkipButton.setOnClickListener(this);
+    }
+
+    public void onClick(View v) {
+        if (v == mSkipButton) {
+            // Canceling, so finish all
+            setResult(ChooseLockPattern.RESULT_FINISHED);
+            finish();
+        } else if (v == mNextButton) {
+            startActivityForResult(new Intent(this, ChooseLockPatternExample.class),
+                    REQUESTCODE_EXAMPLE);
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == REQUESTCODE_EXAMPLE && resultCode == ChooseLockPattern.RESULT_FINISHED) {
+            setResult(resultCode);
+            finish();
+        }
+    }
+    
+}
+
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
new file mode 100644
index 0000000..44baccc
--- /dev/null
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -0,0 +1,260 @@
+/*
+ * 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 com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockPatternView;
+import com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.SystemClock;
+import android.os.Bundle;
+import android.widget.TextView;
+import android.view.Window;
+
+import java.util.List;
+
+/**
+ * Launch this when you want the user to confirm their lock pattern.
+ *
+ * Sets an activity result of {@link Activity#RESULT_OK} when the user
+ * successfully confirmed their pattern.
+ */
+public class ConfirmLockPattern extends Activity {
+
+    /**
+     * Names of {@link CharSequence} fields within the originating {@link Intent}
+     * that are used to configure the keyguard confirmation view's labeling.
+     * The view will use the system-defined resource strings for any labels that
+     * the caller does not supply.
+     */
+    public static final String HEADER_TEXT = "com.android.settings.ConfirmLockPattern.header";
+    public static final String FOOTER_TEXT = "com.android.settings.ConfirmLockPattern.footer";
+    public static final String HEADER_WRONG_TEXT = "com.android.settings.ConfirmLockPattern.header_wrong";
+    public static final String FOOTER_WRONG_TEXT = "com.android.settings.ConfirmLockPattern.footer_wrong";
+
+    // how long we wait to clear a wrong pattern
+    private static final int WRONG_PATTERN_CLEAR_TIMEOUT_MS = 2000;
+
+    private static final String KEY_NUM_WRONG_ATTEMPTS = "num_wrong_attempts";
+
+    private LockPatternView mLockPatternView;
+    private LockPatternUtils mLockPatternUtils;
+    private int mNumWrongConfirmAttempts;
+    private CountDownTimer mCountdownTimer;
+
+    private TextView mHeaderTextView;
+    private TextView mFooterTextView;
+
+    // caller-supplied text for various prompts
+    private CharSequence mHeaderText;
+    private CharSequence mFooterText;
+    private CharSequence mHeaderWrongText;
+    private CharSequence mFooterWrongText;
+
+
+    private enum Stage {
+        NeedToUnlock,
+        NeedToUnlockWrong,
+        LockedOut
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        mLockPatternUtils = new LockPatternUtils(getContentResolver());
+
+        requestWindowFeature(Window.FEATURE_NO_TITLE);
+        setContentView(R.layout.confirm_lock_pattern);
+
+        mHeaderTextView = (TextView) findViewById(R.id.headerText);
+        mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern);
+        mFooterTextView = (TextView) findViewById(R.id.footerText);
+
+        // make it so unhandled touch events within the unlock screen go to the
+        // lock pattern view.
+        final LinearLayoutWithDefaultTouchRecepient topLayout
+                = (LinearLayoutWithDefaultTouchRecepient) findViewById(
+                R.id.topLayout);
+        topLayout.setDefaultTouchRecepient(mLockPatternView);        
+
+        Intent intent = getIntent();
+        if (intent != null) {
+            mHeaderText = intent.getCharSequenceExtra(HEADER_TEXT);
+            mFooterText = intent.getCharSequenceExtra(FOOTER_TEXT);
+            mHeaderWrongText = intent.getCharSequenceExtra(HEADER_WRONG_TEXT);
+            mFooterWrongText = intent.getCharSequenceExtra(FOOTER_WRONG_TEXT);
+        }
+
+        mLockPatternView.setTactileFeedbackEnabled(mLockPatternUtils.isTactileFeedbackEnabled());
+        mLockPatternView.setOnPatternListener(mConfirmExistingLockPatternListener);
+        updateStage(Stage.NeedToUnlock);
+
+        if (savedInstanceState != null) {
+            mNumWrongConfirmAttempts = savedInstanceState.getInt(KEY_NUM_WRONG_ATTEMPTS);
+        } else {
+            // on first launch, if no lock pattern is set, then finish with
+            // success (don't want user to get stuck confirming something that
+            // doesn't exist).
+            if (!mLockPatternUtils.savedPatternExists()) {
+                setResult(RESULT_OK);
+                finish();
+            }
+        }
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        // deliberately not calling super since we are managing this in full
+        outState.putInt(KEY_NUM_WRONG_ATTEMPTS, mNumWrongConfirmAttempts);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        if (mCountdownTimer != null) {
+            mCountdownTimer.cancel();
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        // if the user is currently locked out, enforce it.
+        long deadline = mLockPatternUtils.getLockoutAttemptDeadline();
+        if (deadline != 0) {
+            handleAttemptLockout(deadline);
+        }
+    }
+
+    private void updateStage(Stage stage) {
+
+        switch (stage) {
+            case NeedToUnlock:
+                if (mHeaderText != null) {
+                    mHeaderTextView.setText(mHeaderText);
+                } else {
+                    mHeaderTextView.setText(R.string.lockpattern_need_to_unlock);
+                }
+                if (mFooterText != null) {
+                    mFooterTextView.setText(mFooterText);
+                } else {
+                    mFooterTextView.setText(R.string.lockpattern_need_to_unlock_footer);
+                }
+                
+                mLockPatternView.setEnabled(true);
+                mLockPatternView.enableInput();
+                break;
+            case NeedToUnlockWrong:
+                if (mHeaderWrongText != null) {
+                    mHeaderTextView.setText(mHeaderWrongText);
+                } else {
+                    mHeaderTextView.setText(R.string.lockpattern_need_to_unlock_wrong);
+                }
+                if (mFooterWrongText != null) {
+                    mFooterTextView.setText(mFooterWrongText);
+                } else {
+                    mFooterTextView.setText(R.string.lockpattern_need_to_unlock_wrong_footer);
+                }
+                
+                mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong);
+                mLockPatternView.setEnabled(true);
+                mLockPatternView.enableInput();
+                break;
+            case LockedOut:
+                mLockPatternView.clearPattern();
+                // enabled = false means: disable input, and have the
+                // appearance of being disabled.
+                mLockPatternView.setEnabled(false); // appearance of being disabled
+                break;
+        }
+    }
+
+    private Runnable mClearPatternRunnable = new Runnable() {
+        public void run() {
+            mLockPatternView.clearPattern();
+        }
+    };
+
+    // clear the wrong pattern unless they have started a new one
+    // already
+    private void postClearPatternRunnable() {
+        mLockPatternView.removeCallbacks(mClearPatternRunnable);
+        mLockPatternView.postDelayed(mClearPatternRunnable, WRONG_PATTERN_CLEAR_TIMEOUT_MS);
+    }
+
+    /**
+     * The pattern listener that responds according to a user confirming
+     * an existing lock pattern.
+     */
+    private LockPatternView.OnPatternListener mConfirmExistingLockPatternListener = new LockPatternView.OnPatternListener()  {
+
+        public void onPatternStart() {
+            mLockPatternView.removeCallbacks(mClearPatternRunnable);
+        }
+
+        public void onPatternCleared() {
+            mLockPatternView.removeCallbacks(mClearPatternRunnable);
+        }
+
+        public void onPatternDetected(List<LockPatternView.Cell> pattern) {
+            if (mLockPatternUtils.checkPattern(pattern)) {
+                setResult(RESULT_OK);
+                finish();
+            } else {
+                if (pattern.size() >= LockPatternUtils.MIN_PATTERN_REGISTER_FAIL &&
+                        ++mNumWrongConfirmAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) {
+                    long deadline = mLockPatternUtils.setLockoutAttemptDeadline();
+                    handleAttemptLockout(deadline);
+                } else {
+                    updateStage(Stage.NeedToUnlockWrong);
+                    postClearPatternRunnable();
+                }
+            }
+        }
+    };
+
+
+    private void handleAttemptLockout(long elapsedRealtimeDeadline) {
+        updateStage(Stage.LockedOut);
+        long elapsedRealtime = SystemClock.elapsedRealtime();
+        mCountdownTimer = new CountDownTimer(
+                elapsedRealtimeDeadline - elapsedRealtime,
+                LockPatternUtils.FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS) {
+
+            @Override
+            public void onTick(long millisUntilFinished) {
+                mHeaderTextView.setText(R.string.lockpattern_too_many_failed_confirmation_attempts_header);
+                final int secondsCountdown = (int) (millisUntilFinished / 1000);
+                mFooterTextView.setText(getString(
+                        R.string.lockpattern_too_many_failed_confirmation_attempts_footer,
+                        secondsCountdown));
+            }
+
+            @Override
+            public void onFinish() {
+                mNumWrongConfirmAttempts = 0;
+                updateStage(Stage.NeedToUnlock);
+            }
+        }.start();
+    }
+}
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
new file mode 100644
index 0000000..e78215a
--- /dev/null
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -0,0 +1,366 @@
+/*
+ * 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.Dialog;
+import android.app.DatePickerDialog;
+import android.app.TimePickerDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.text.format.DateFormat;
+import android.widget.DatePicker;
+import android.widget.TimePicker;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+public class DateTimeSettings 
+        extends PreferenceActivity 
+        implements OnSharedPreferenceChangeListener,
+                TimePickerDialog.OnTimeSetListener , DatePickerDialog.OnDateSetListener {
+
+    private static final String HOURS_12 = "12";
+    private static final String HOURS_24 = "24";
+    
+    private Calendar mDummyDate;
+    private static final String KEY_DATE_FORMAT = "date_format";
+    private static final String KEY_AUTO_TIME = "auto_time";
+
+    private static final int DIALOG_DATEPICKER = 0;
+    private static final int DIALOG_TIMEPICKER = 1;
+    
+    private CheckBoxPreference mAutoPref;
+    private Preference mTimePref;
+    private Preference mTime24Pref;
+    private Preference mTimeZone;
+    private Preference mDatePref;
+    private ListPreference mDateFormat;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        
+        addPreferencesFromResource(R.xml.date_time_prefs);
+        
+        initUI();        
+    }
+    
+    private void initUI() {
+        boolean autoEnabled = getAutoState();
+
+        mDummyDate = Calendar.getInstance();
+        mDummyDate.set(mDummyDate.get(Calendar.YEAR), 11, 31, 13, 0, 0);
+        
+        mAutoPref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME);
+        mAutoPref.setChecked(autoEnabled);
+        mTimePref = findPreference("time");
+        mTime24Pref = findPreference("24 hour");
+        mTimeZone = findPreference("timezone");
+        mDatePref = findPreference("date");
+        mDateFormat = (ListPreference) findPreference(KEY_DATE_FORMAT);
+        
+        int currentFormatIndex = -1;
+        String [] dateFormats = getResources().getStringArray(R.array.date_format_values);
+        String [] formattedDates = new String[dateFormats.length];
+        String currentFormat = getDateFormat();
+        // Initialize if DATE_FORMAT is not set in the system settings
+        // This can happen after a factory reset (or data wipe)
+        if (currentFormat == null) {
+            currentFormat = getResources().getString(R.string.default_date_format);
+            setDateFormat(currentFormat);
+        }
+        for (int i = 0; i < formattedDates.length; i++) {
+            formattedDates[i] = DateFormat.format(dateFormats[i], mDummyDate).toString();
+            if (currentFormat.equals(dateFormats[i])) currentFormatIndex = i;
+        }
+        
+        mDateFormat.setEntries(formattedDates);
+        mDateFormat.setEntryValues(R.array.date_format_values);
+        mDateFormat.setValue(currentFormat);
+        
+        mTimePref.setEnabled(!autoEnabled);
+        mDatePref.setEnabled(!autoEnabled);
+        mTimeZone.setEnabled(!autoEnabled);
+
+        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);        
+    }
+
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour());
+
+        // Register for time ticks and other reasons for time change
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_TIME_TICK);
+        filter.addAction(Intent.ACTION_TIME_CHANGED);
+        filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
+        registerReceiver(mIntentReceiver, filter, null, null);
+        
+        updateTimeAndDateDisplay();
+    }
+
+    @Override 
+    protected void onPause() {
+        super.onPause();
+        unregisterReceiver(mIntentReceiver);
+    }
+    
+    private void updateTimeAndDateDisplay() {
+        java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(this);
+        Date now = Calendar.getInstance().getTime();
+        Date dummyDate = mDummyDate.getTime();
+        mTimePref.setSummary(DateFormat.getTimeFormat(this).format(now));
+        mTimeZone.setSummary(getTimeZoneText());
+        mDatePref.setSummary(shortDateFormat.format(now));
+        mDateFormat.setSummary(shortDateFormat.format(dummyDate));
+    }
+
+    public void onDateSet(DatePicker view, int year, int month, int day) {
+        Calendar c = Calendar.getInstance();
+
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, month);
+        c.set(Calendar.DAY_OF_MONTH, day);
+        long when = c.getTimeInMillis();
+
+        if (when / 1000 < Integer.MAX_VALUE) {
+            SystemClock.setCurrentTimeMillis(when);
+        }
+        updateTimeAndDateDisplay();
+    }
+
+    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+        Calendar c = Calendar.getInstance();
+
+        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
+        c.set(Calendar.MINUTE, minute);
+        long when = c.getTimeInMillis();
+
+        if (when / 1000 < Integer.MAX_VALUE) {
+            SystemClock.setCurrentTimeMillis(when);
+        }
+        updateTimeAndDateDisplay();
+        timeUpdated();
+    }
+
+    public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
+        if (key.equals(KEY_DATE_FORMAT)) {
+            String format = preferences.getString(key, 
+                    getResources().getString(R.string.default_date_format));
+            Settings.System.putString(getContentResolver(), 
+                    Settings.System.DATE_FORMAT, format);
+            updateTimeAndDateDisplay();
+        } else if (key.equals(KEY_AUTO_TIME)) {
+            boolean autoEnabled = preferences.getBoolean(key, true);
+            Settings.System.putInt(getContentResolver(), 
+                    Settings.System.AUTO_TIME, 
+                    autoEnabled ? 1 : 0);
+            mTimePref.setEnabled(!autoEnabled);
+            mDatePref.setEnabled(!autoEnabled);
+            mTimeZone.setEnabled(!autoEnabled);
+        }
+    }
+
+    @Override
+    public Dialog onCreateDialog(int id) {
+        Dialog d;
+
+        switch (id) {
+        case DIALOG_DATEPICKER: {
+            final Calendar calendar = Calendar.getInstance();
+            d = new DatePickerDialog(
+                this,
+                this,
+                calendar.get(Calendar.YEAR),
+                calendar.get(Calendar.MONTH),
+                calendar.get(Calendar.DAY_OF_MONTH));
+            d.setTitle(getResources().getString(R.string.date_time_changeDate_text));
+            break;
+        }
+        case DIALOG_TIMEPICKER: {
+            final Calendar calendar = Calendar.getInstance();
+            d = new TimePickerDialog(
+                    this,
+                    this,
+                    calendar.get(Calendar.HOUR_OF_DAY),
+                    calendar.get(Calendar.MINUTE),
+                    DateFormat.is24HourFormat(this));
+            d.setTitle(getResources().getString(R.string.date_time_changeTime_text));
+            break;
+        }
+        default:
+            d = null;
+            break;
+        }
+
+        return d;
+    }
+
+    @Override
+    public void onPrepareDialog(int id, Dialog d) {
+        switch (id) {
+        case DIALOG_DATEPICKER: {
+            DatePickerDialog datePicker = (DatePickerDialog)d;
+            final Calendar calendar = Calendar.getInstance();
+            datePicker.updateDate(
+                    calendar.get(Calendar.YEAR),
+                    calendar.get(Calendar.MONTH),
+                    calendar.get(Calendar.DAY_OF_MONTH));
+            break;
+        }
+        case DIALOG_TIMEPICKER: {
+            TimePickerDialog timePicker = (TimePickerDialog)d;
+            final Calendar calendar = Calendar.getInstance();
+            timePicker.updateTime(
+                    calendar.get(Calendar.HOUR_OF_DAY),
+                    calendar.get(Calendar.MINUTE));
+            break;
+        }
+        default:
+            break;
+        }
+    }
+    
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (preference == mDatePref) {
+            showDialog(DIALOG_DATEPICKER);
+        } else if (preference == mTimePref) {
+            // The 24-hour mode may have changed, so recreate the dialog
+            removeDialog(DIALOG_TIMEPICKER);
+            showDialog(DIALOG_TIMEPICKER);
+        } else if (preference == mTime24Pref) {
+            set24Hour(((CheckBoxPreference)mTime24Pref).isChecked());
+            updateTimeAndDateDisplay();
+            timeUpdated();
+        } else if (preference == mTimeZone) {
+            Intent intent = new Intent();
+            intent.setClass(this, ZoneList.class);
+            startActivityForResult(intent, 0);
+        }
+        return false;
+    }
+    
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode,
+            Intent data) {
+        updateTimeAndDateDisplay();
+    }
+    
+    private void timeUpdated() {
+        Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED);
+        sendBroadcast(timeChanged);
+    }
+    
+    /*  Get & Set values from the system settings  */
+    
+    private boolean is24Hour() {
+        return DateFormat.is24HourFormat(this);
+    }
+    
+    private void set24Hour(boolean is24Hour) {
+        Settings.System.putString(getContentResolver(),
+                Settings.System.TIME_12_24,
+                is24Hour? HOURS_24 : HOURS_12);
+    }
+    
+    private String getDateFormat() {
+        return Settings.System.getString(getContentResolver(), 
+                Settings.System.DATE_FORMAT);
+    }
+    
+    private boolean getAutoState() {
+        try {
+            return Settings.System.getInt(getContentResolver(), 
+                Settings.System.AUTO_TIME) > 0;            
+        } catch (SettingNotFoundException snfe) {
+            return true;
+        }
+    }
+
+    private void setDateFormat(String format) {
+        Settings.System.putString(getContentResolver(), Settings.System.DATE_FORMAT, format);        
+    }
+    
+    /*  Helper routines to format timezone */
+    
+    private String getTimeZoneText() {
+        TimeZone    tz = java.util.Calendar.getInstance().getTimeZone();
+        boolean daylight = tz.inDaylightTime(new Date());
+        StringBuilder sb = new StringBuilder();
+
+        sb.append(formatOffset(tz.getRawOffset() +
+                               (daylight ? tz.getDSTSavings() : 0))).
+            append(", ").
+            append(tz.getDisplayName(daylight, TimeZone.LONG));
+
+        return sb.toString();        
+    }
+
+    private char[] formatOffset(int off) {
+        off = off / 1000 / 60;
+
+        char[] buf = new char[9];
+        buf[0] = 'G';
+        buf[1] = 'M';
+        buf[2] = 'T';
+
+        if (off < 0) {
+            buf[3] = '-';
+            off = -off;
+        } else {
+            buf[3] = '+';
+        }
+
+        int hours = off / 60; 
+        int minutes = off % 60;
+
+        buf[4] = (char) ('0' + hours / 10);
+        buf[5] = (char) ('0' + hours % 10);
+
+        buf[6] = ':';
+
+        buf[7] = (char) ('0' + minutes / 10);
+        buf[8] = (char) ('0' + minutes % 10);
+
+        return buf;
+    }
+    
+    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            updateTimeAndDateDisplay();
+        }
+    };
+}
diff --git a/src/com/android/settings/DateTimeSettingsSetupWizard.java b/src/com/android/settings/DateTimeSettingsSetupWizard.java
new file mode 100644
index 0000000..8dd970b
--- /dev/null
+++ b/src/com/android/settings/DateTimeSettingsSetupWizard.java
@@ -0,0 +1,41 @@
+/*
+ * 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.view.View;
+import android.view.Window;
+import android.view.View.OnClickListener;
+import android.widget.LinearLayout;
+
+public class DateTimeSettingsSetupWizard extends DateTimeSettings implements OnClickListener {
+    private View mNextButton;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        requestWindowFeature(Window.FEATURE_NO_TITLE); 
+        super.onCreate(icicle);
+        setContentView(R.layout.date_time_settings_setupwizard);
+        mNextButton = findViewById(R.id.next_button);
+        mNextButton.setOnClickListener(this);
+    }
+
+    public void onClick(View v) {
+        setResult(RESULT_OK);
+        finish();
+    }
+}
diff --git a/src/com/android/settings/DebugIntentSender.java b/src/com/android/settings/DebugIntentSender.java
new file mode 100644
index 0000000..9fed947
--- /dev/null
+++ b/src/com/android/settings/DebugIntentSender.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2006 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.widget.EditText;
+import android.widget.Button;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.text.TextUtils;
+import android.text.Spannable;
+import android.text.Selection;
+import android.net.Uri;
+
+/**
+ * A simple activity that provides a UI for sending intents
+ */
+public class DebugIntentSender extends Activity {
+    private EditText mIntentField;
+    private EditText mDataField;
+    private EditText mAccountField;
+    private EditText mResourceField;
+    private Button mSendBroadcastButton;
+    private Button mStartActivityButton;
+    private View.OnClickListener mClicked = new View.OnClickListener() {
+        public void onClick(View v) {
+            if ((v == mSendBroadcastButton) ||
+                       (v == mStartActivityButton)) {
+                String intentAction = mIntentField.getText().toString();
+                String intentData = mDataField.getText().toString();
+                String account = mAccountField.getText().toString();
+                String resource = mResourceField.getText().toString();
+
+                Intent intent = new Intent(intentAction);
+                if (!TextUtils.isEmpty(intentData)) {
+                    intent.setData(Uri.parse(intentData));
+                }
+                intent.putExtra("account", account);
+                intent.putExtra("resource", resource);
+                if (v == mSendBroadcastButton) {
+                    sendBroadcast(intent);
+                } else {
+                    startActivity(intent);
+                }
+
+                setResult(RESULT_OK);
+                finish();
+            }
+        }
+    };
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        setContentView(R.layout.intent_sender);
+
+        mIntentField = (EditText) findViewById(R.id.intent);
+        mIntentField.setText(Intent.ACTION_SYNC);
+        Selection.selectAll((Spannable) mIntentField.getText());
+
+        mDataField = (EditText) findViewById(R.id.data);
+        mDataField.setBackgroundResource(android.R.drawable.editbox_background);
+
+        mAccountField = (EditText) findViewById(R.id.account);
+        mResourceField = (EditText) findViewById(R.id.resource);
+
+        mSendBroadcastButton = (Button) findViewById(R.id.sendbroadcast);
+        mSendBroadcastButton.setOnClickListener(mClicked);
+
+        mStartActivityButton = (Button) findViewById(R.id.startactivity);
+        mStartActivityButton.setOnClickListener(mClicked);
+    }
+}
diff --git a/src/com/android/settings/DefaultRingtonePreference.java b/src/com/android/settings/DefaultRingtonePreference.java
new file mode 100644
index 0000000..8eed563
--- /dev/null
+++ b/src/com/android/settings/DefaultRingtonePreference.java
@@ -0,0 +1,62 @@
+/*
+ * 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;
+
+
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.preference.RingtonePreference;
+import android.util.AttributeSet;
+import android.util.Config;
+import android.util.Log;
+
+public class DefaultRingtonePreference extends RingtonePreference {
+    private static final String TAG = "DefaultRingtonePreference";
+    
+    public DefaultRingtonePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onPrepareRingtonePickerIntent(Intent ringtonePickerIntent) {
+        super.onPrepareRingtonePickerIntent(ringtonePickerIntent);
+        
+        /*
+         * Since this preference is for choosing the default ringtone, it
+         * doesn't make sense to show a 'Default' item.
+         */
+        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
+        
+        /*
+         * Similarly, 'Silent' shouldn't be shown here. 
+         */
+        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
+    }
+
+    @Override
+    protected void onSaveRingtone(Uri ringtoneUri) {
+        RingtoneManager.setActualDefaultRingtoneUri(getContext(), getRingtoneType(), ringtoneUri);
+    }
+
+    @Override
+    protected Uri onRestoreRingtone() {
+        return RingtoneManager.getActualDefaultRingtoneUri(getContext(), getRingtoneType());
+    }
+    
+}
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
new file mode 100644
index 0000000..155f085
--- /dev/null
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -0,0 +1,88 @@
+/*
+ * 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.BatteryManager;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+/*
+ * Displays preferences for application developers.
+ */
+public class DevelopmentSettings extends PreferenceActivity {
+
+    private static final String ENABLE_ADB = "enable_adb";
+    private static final String KEEP_SCREEN_ON = "keep_screen_on";
+    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
+
+    private CheckBoxPreference mEnableAdb;
+    private CheckBoxPreference mKeepScreenOn;
+    private CheckBoxPreference mAllowMockLocation;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.development_prefs);
+
+        mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
+        mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
+        mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        
+        mEnableAdb.setChecked(Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.ADB_ENABLED, 0) != 0);
+        mKeepScreenOn.setChecked(Settings.System.getInt(getContentResolver(),
+                Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
+        mAllowMockLocation.setChecked(Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+
+        // Those monkeys kept committing suicide, so we add this property
+        // to disable this functionality
+        if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
+            return false;
+        }
+
+        if (preference == mEnableAdb) {
+            Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 
+                    mEnableAdb.isChecked() ? 1 : 0);
+        } else if (preference == mKeepScreenOn) {
+            Settings.System.putInt(getContentResolver(), Settings.System.STAY_ON_WHILE_PLUGGED_IN, 
+                    mKeepScreenOn.isChecked() ? 
+                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
+        } else if (preference == mAllowMockLocation) {
+            Settings.Secure.putInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION,
+                    mAllowMockLocation.isChecked() ? 1 : 0);
+        }
+        
+        return false;
+    }
+}
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
new file mode 100644
index 0000000..be01f7d
--- /dev/null
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -0,0 +1,153 @@
+/*
+ * 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.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.util.Config;
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DeviceInfoSettings extends PreferenceActivity {
+
+    private static final String TAG = "DeviceInfoSettings";
+    private static final boolean LOGD = false || Config.LOGD;
+
+    private static final String KEY_CONTAINER = "container";
+    private static final String KEY_TEAM = "team";
+    private static final String KEY_CONTRIBUTORS = "contributors";
+    private static final String KEY_TERMS = "terms";
+    private static final String KEY_LICENSE = "license";
+    private static final String KEY_COPYRIGHT = "copyright";
+    private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings";
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        
+        addPreferencesFromResource(R.xml.device_info_settings);
+       
+        setStringSummary("firmware_version", Build.VERSION.RELEASE);
+        setValueSummary("baseband_version", "gsm.version.baseband");
+        setStringSummary("device_model", Build.MODEL);
+        setStringSummary("build_number", Build.DISPLAY);
+        findPreference("kernel_version").setSummary(getFormattedKernelVersion());
+
+        /*
+         * Settings is a generic app and should not contain any device-specific
+         * info.
+         */
+        
+        // These are contained in the "container" preference group
+        PreferenceGroup parentPreference = (PreferenceGroup) findPreference(KEY_CONTAINER);
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_TERMS,
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_LICENSE,
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_COPYRIGHT,
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_TEAM,
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
+        
+        // These are contained by the root preference screen
+        parentPreference = getPreferenceScreen();
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference,
+                KEY_SYSTEM_UPDATE_SETTINGS,
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parentPreference, KEY_CONTRIBUTORS,
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
+    }
+    
+    private void setStringSummary(String preference, String value) {
+        try {
+            findPreference(preference).setSummary(value);
+        } catch (RuntimeException e) {
+            findPreference(preference).setSummary(
+                getResources().getString(R.string.device_info_default));
+        }
+    }
+    
+    private void setValueSummary(String preference, String property) {
+        try {
+            findPreference(preference).setSummary(
+                    SystemProperties.get(property, 
+                            getResources().getString(R.string.device_info_default)));
+        } catch (RuntimeException e) {
+
+        }
+    }
+
+    private String getFormattedKernelVersion() {
+        String procVersionStr;
+
+        try {
+            BufferedReader reader = new BufferedReader(new FileReader("/proc/version"), 256);
+            try {
+                procVersionStr = reader.readLine();
+            } finally {
+                reader.close();
+            }
+
+            final String PROC_VERSION_REGEX =
+                "\\w+\\s+" + /* ignore: Linux */
+                "\\w+\\s+" + /* ignore: version */
+                "([^\\s]+)\\s+" + /* group 1: 2.6.22-omap1 */
+                "\\(([^\\s@]+(?:@[^\\s.]+)?)[^)]*\\)\\s+" + /* group 2: (xxxxxx@xxxxx.constant) */
+                "\\([^)]+\\)\\s+" + /* ignore: (gcc ..) */
+                "([^\\s]+)\\s+" + /* group 3: #26 */
+                "(?:PREEMPT\\s+)?" + /* ignore: PREEMPT (optional) */
+                "(.+)"; /* group 4: date */
+
+            Pattern p = Pattern.compile(PROC_VERSION_REGEX);
+            Matcher m = p.matcher(procVersionStr);
+
+            if (!m.matches()) {
+                Log.e(TAG, "Regex did not match on /proc/version: " + procVersionStr);
+                return "Unavailable";
+            } else if (m.groupCount() < 4) {
+                Log.e(TAG, "Regex match on /proc/version only returned " + m.groupCount()
+                        + " groups");
+                return "Unavailable";
+            } else {
+                return (new StringBuilder(m.group(1)).append("\n").append(
+                        m.group(2)).append(" ").append(m.group(3)).append("\n")
+                        .append(m.group(4))).toString();
+            }
+        } catch (IOException e) {  
+            Log.e(TAG,
+                "IO Exception when getting kernel version for Device Info screen",
+                e);
+
+            return "Unavailable";
+        }
+    }
+
+}
diff --git a/src/com/android/settings/Display.java b/src/com/android/settings/Display.java
new file mode 100644
index 0000000..f90e0f0
--- /dev/null
+++ b/src/com/android/settings/Display.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2006 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.app.ActivityManagerNative;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+
+public class Display extends Activity implements View.OnClickListener {
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setContentView(R.layout.display);
+
+        mFontSize = (Spinner) findViewById(R.id.fontSize);
+        mFontSize.setOnItemSelectedListener(mFontSizeChanged);
+        String[] states = new String[3];
+        Resources r = getResources();
+        states[0] = r.getString(R.string.small_font);
+        states[1] = r.getString(R.string.medium_font);
+        states[2] = r.getString(R.string.large_font);
+        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
+                android.R.layout.simple_spinner_item, states);
+        adapter.setDropDownViewResource(
+                android.R.layout.simple_spinner_dropdown_item);
+        mFontSize.setAdapter(adapter);
+
+        mPreview = (TextView) findViewById(R.id.preview);
+        mPreview.setText(r.getText(R.string.font_size_preview_text));
+
+        Button save = (Button) findViewById(R.id.save);
+        save.setText(r.getText(R.string.font_size_save));
+        save.setOnClickListener(this);
+
+        mTextSizeTyped = new TypedValue();
+        TypedArray styledAttributes = 
+            obtainStyledAttributes(android.R.styleable.TextView);
+        styledAttributes.getValue(android.R.styleable.TextView_textSize,
+                mTextSizeTyped);
+
+        DisplayMetrics metrics = getResources().getDisplayMetrics();
+        mDisplayMetrics = new DisplayMetrics();
+        mDisplayMetrics.density = metrics.density;
+        mDisplayMetrics.heightPixels = metrics.heightPixels;
+        mDisplayMetrics.scaledDensity = metrics.scaledDensity;
+        mDisplayMetrics.widthPixels = metrics.widthPixels;
+        mDisplayMetrics.xdpi = metrics.xdpi;
+        mDisplayMetrics.ydpi = metrics.ydpi;
+        
+        styledAttributes.recycle();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        try {
+            mCurConfig.updateFrom(
+                ActivityManagerNative.getDefault().getConfiguration());
+        } catch (RemoteException e) {
+        }
+        if (mCurConfig.fontScale < 1) {
+            mFontSize.setSelection(0);
+        } else if (mCurConfig.fontScale > 1) {
+            mFontSize.setSelection(2);
+        } else {
+            mFontSize.setSelection(1);
+        }
+        updateFontScale();
+    }
+
+    private void updateFontScale() {
+        mDisplayMetrics.scaledDensity = mDisplayMetrics.density *
+                mCurConfig.fontScale;
+
+        float size = mTextSizeTyped.getDimension(mDisplayMetrics);
+        mPreview.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
+    }
+
+    public void onClick(View v) {
+        try {
+            ActivityManagerNative.getDefault().updateConfiguration(mCurConfig);
+        } catch (RemoteException e) {
+        }
+        finish();
+    }
+
+    private Spinner.OnItemSelectedListener mFontSizeChanged
+                                    = new Spinner.OnItemSelectedListener() {
+        public void onItemSelected(android.widget.AdapterView av, View v,
+                                    int position, long id) {
+            if (position == 0) {
+                mCurConfig.fontScale = .75f;
+            } else if (position == 2) {
+                mCurConfig.fontScale = 1.25f;
+            } else {
+                mCurConfig.fontScale = 1.0f;
+            }
+
+            updateFontScale();
+        }
+
+        public void onNothingSelected(android.widget.AdapterView av) {
+        }
+    };
+
+    private Spinner mFontSize;
+    private TextView mPreview;
+    private TypedValue mTextSizeTyped;
+    private DisplayMetrics mDisplayMetrics;
+    private Configuration mCurConfig = new Configuration();
+}
diff --git a/src/com/android/settings/EditPinPreference.java b/src/com/android/settings/EditPinPreference.java
new file mode 100644
index 0000000..ee3143c
--- /dev/null
+++ b/src/com/android/settings/EditPinPreference.java
@@ -0,0 +1,84 @@
+/*
+ * 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.content.Context;
+import android.preference.EditTextPreference;
+import android.text.method.DigitsKeyListener;
+import android.text.method.PasswordTransformationMethod;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.EditText;
+
+import java.util.Map;
+
+/**
+ * TODO: Add a soft dialpad for PIN entry.
+ */
+class EditPinPreference extends EditTextPreference {
+
+    private boolean mDialogOpen;
+    
+    interface OnPinEnteredListener {
+        void onPinEntered(EditPinPreference preference, boolean positiveResult);
+    }
+    
+    private OnPinEnteredListener mPinListener;
+    
+    public EditPinPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public EditPinPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+    
+    public void setOnPinEnteredListener(OnPinEnteredListener listener) {
+        mPinListener = listener;
+    }
+    
+    @Override
+    protected void onBindDialogView(View view) {
+        super.onBindDialogView(view);
+        
+        final EditText editText = (EditText) view.findViewById(android.R.id.edit);
+        
+        if (editText != null) {
+            editText.setSingleLine(true);
+            editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
+            editText.setKeyListener(DigitsKeyListener.getInstance());
+        }
+    }
+
+    public boolean isDialogOpen() {
+        return mDialogOpen;
+    }
+    
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        super.onDialogClosed(positiveResult);
+        mDialogOpen = false;
+        if (mPinListener != null) {
+            mPinListener.onPinEntered(this, positiveResult);
+        }
+    }
+    
+    public void showPinDialog() {
+        mDialogOpen = true;
+        showDialog(null);
+    }
+}
diff --git a/src/com/android/settings/GadgetPickActivity.java b/src/com/android/settings/GadgetPickActivity.java
new file mode 100644
index 0000000..840a6a5
--- /dev/null
+++ b/src/com/android/settings/GadgetPickActivity.java
@@ -0,0 +1,131 @@
+/*
+ * 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.LauncherActivity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.gadget.GadgetProviderInfo;
+import android.gadget.GadgetManager;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ListView;
+import android.util.Log;
+
+import java.text.Collator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public class GadgetPickActivity extends LauncherActivity
+{
+    private static final String TAG = "GadgetPickActivity";
+
+    GadgetManager mGadgetManager;
+    int mGadgetId;
+    
+    public GadgetPickActivity() {
+        mGadgetManager = GadgetManager.getInstance(this);
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        Bundle extras = getIntent().getExtras();
+        mGadgetId = extras.getInt(GadgetManager.EXTRA_GADGET_ID);
+
+        setResultData(RESULT_CANCELED);
+    }
+
+    @Override
+    public void onListItemClick(ListView l, View v, int position, long id)
+    {
+        Intent intent = intentForPosition(position);
+        int result;
+        try {
+            mGadgetManager.bindGadgetId(mGadgetId, intent.getComponent());
+            result = RESULT_OK;
+        } catch (IllegalArgumentException e) {
+            // This is thrown if they're already bound, or otherwise somehow
+            // bogus.  Set the result to canceled, and exit.  The app *should*
+            // clean up at this point.  We could pass the error along, but
+            // it's not clear that that's useful -- the gadget will simply not
+            // appear.
+            result = RESULT_CANCELED;
+        }
+        setResultData(result);
+        finish();
+    }
+    
+    @Override
+    public List<ListItem> makeListItems() {
+        List<GadgetProviderInfo> installed = mGadgetManager.getInstalledProviders();
+        PackageManager pm = getPackageManager();
+
+        Drawable defaultIcon = null;
+        IconResizer resizer = new IconResizer();
+
+        ArrayList<ListItem> result = new ArrayList();
+        final int N = installed.size();
+        for (int i=0; i<N; i++) {
+            GadgetProviderInfo info = installed.get(i);
+
+            LauncherActivity.ListItem item = new LauncherActivity.ListItem();
+            item.packageName = info.provider.getPackageName();
+            item.className = info.provider.getClassName();
+            
+            item.label = info.label;
+            if (info.icon != 0) {
+                Drawable d = pm.getDrawable( item.packageName, info.icon, null);
+                if (d != null) {
+                    item.icon = resizer.createIconThumbnail(d);
+                } else {
+                    Log.w(TAG, "Can't load icon drawable 0x" + Integer.toHexString(info.icon)
+                            + " for package: " + item.packageName);
+                }
+            }
+            if (item.icon == null) {
+                // (including error case above)
+                if (defaultIcon == null) {
+                    // TODO: Load standard icon.
+                }
+                item.icon = defaultIcon;
+            }
+            
+            result.add(item);
+        }
+
+        Collections.sort(result, new Comparator<ListItem>() {
+                Collator mCollator = Collator.getInstance();
+                public int compare(ListItem lhs, ListItem rhs) {
+                    return mCollator.compare(lhs.label, rhs.label);
+                }
+            });
+        return result;
+    }
+
+    void setResultData(int code) {
+        Intent result = new Intent();
+        result.putExtra(GadgetManager.EXTRA_GADGET_ID, mGadgetId);
+        setResult(code, result);
+    }
+}
+
diff --git a/src/com/android/settings/InputMethodsSettings.java b/src/com/android/settings/InputMethodsSettings.java
new file mode 100644
index 0000000..51b770d
--- /dev/null
+++ b/src/com/android/settings/InputMethodsSettings.java
@@ -0,0 +1,191 @@
+/*
+ * 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 java.util.HashSet;
+import java.util.List;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+
+/*
+ * Displays preferences for input methods.
+ */
+public class InputMethodsSettings extends PreferenceActivity {
+    private List<InputMethodInfo> mInputMethodProperties;
+
+    final TextUtils.SimpleStringSplitter mStringColonSplitter
+            = new TextUtils.SimpleStringSplitter(':');
+    
+    private String mLastInputMethodId;
+    private String mLastTickedInputMethodId;
+
+    static public String getInputMethodIdFromKey(String key) {
+        return key;
+    }
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.input_methods_prefs);
+
+        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+
+        mInputMethodProperties = imm.getInputMethodList();
+
+        mLastInputMethodId = Settings.Secure.getString(getContentResolver(),
+            Settings.Secure.DEFAULT_INPUT_METHOD);
+
+        int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties
+                .size());
+        for (int i = 0; i < N; ++i) {
+            InputMethodInfo property = mInputMethodProperties.get(i);
+            String prefKey = property.getId();
+
+            CharSequence label = property.loadLabel(getPackageManager());
+            
+            // Add a check box.
+            CheckBoxPreference chkbxPref = new CheckBoxPreference(this);
+            chkbxPref.setKey(prefKey);
+            chkbxPref.setTitle(label);
+            getPreferenceScreen().addPreference(chkbxPref);
+
+            // If setting activity is available, add a setting screen entry.
+            if (null != property.getSettingsActivity()) {
+                PreferenceScreen prefScreen = new PreferenceScreen(this, null);
+                prefScreen.setKey(property.getSettingsActivity());
+                prefScreen.setTitle(getResources().getString(
+                        R.string.input_methods_settings_label_format, label));
+                getPreferenceScreen().addPreference(prefScreen);
+            }
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        final HashSet<String> enabled = new HashSet<String>();
+        String enabledStr = Settings.Secure.getString(getContentResolver(),
+                Settings.Secure.ENABLED_INPUT_METHODS);
+        if (enabledStr != null) {
+            final TextUtils.SimpleStringSplitter splitter = mStringColonSplitter;
+            splitter.setString(enabledStr);
+            while (splitter.hasNext()) {
+                enabled.add(splitter.next());
+            }
+        }
+        
+        // Update the statuses of the Check Boxes.
+        int N = mInputMethodProperties.size();
+        for (int i = 0; i < N; ++i) {
+            final String id = mInputMethodProperties.get(i).getId();
+            CheckBoxPreference pref = (CheckBoxPreference) findPreference(mInputMethodProperties
+                    .get(i).getId());
+            pref.setChecked(enabled.contains(id));
+        }
+        mLastTickedInputMethodId = null;
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        StringBuilder builder = new StringBuilder(256);
+        
+        boolean haveLastInputMethod = false;
+        
+        int firstEnabled = -1;
+        int N = mInputMethodProperties.size();
+        for (int i = 0; i < N; ++i) {
+            final String id = mInputMethodProperties.get(i).getId();
+            CheckBoxPreference pref = (CheckBoxPreference) findPreference(id);
+            boolean hasIt = id.equals(mLastInputMethodId);
+            if (pref.isChecked()) {
+                if (builder.length() > 0) builder.append(':');
+                builder.append(id);
+                if (firstEnabled < 0) {
+                    firstEnabled = i;
+                }
+                if (hasIt) haveLastInputMethod = true;
+            } else if (hasIt) {
+                mLastInputMethodId = mLastTickedInputMethodId;
+            }
+        }
+
+        // If the last input method is unset, set it as the first enabled one.
+        if (null == mLastInputMethodId || "".equals(mLastInputMethodId)) {
+            if (firstEnabled >= 0) {
+                mLastInputMethodId = mInputMethodProperties.get(firstEnabled).getId();
+            } else {
+                mLastInputMethodId = null;
+            }
+        }
+        
+        Settings.Secure.putString(getContentResolver(),
+            Settings.Secure.ENABLED_INPUT_METHODS, builder.toString());
+        Settings.Secure.putString(getContentResolver(),
+            Settings.Secure.DEFAULT_INPUT_METHOD, mLastInputMethodId);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+            Preference preference) {
+
+        // Those monkeys kept committing suicide, so we add this property
+        // to disable this functionality
+        if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
+            return false;
+        }
+
+        if (preference instanceof CheckBoxPreference) {
+            CheckBoxPreference chkPref = (CheckBoxPreference) preference;
+            String id = getInputMethodIdFromKey(chkPref.getKey());
+            if (chkPref.isChecked()) {
+                mLastTickedInputMethodId = id;
+            } else if (id.equals(mLastTickedInputMethodId)) {
+                mLastTickedInputMethodId = null;
+            }
+        } else if (preference instanceof PreferenceScreen) {
+            if (preference.getIntent() == null) {
+                PreferenceScreen pref = (PreferenceScreen) preference;
+                String activityName = pref.getKey();
+                String packageName = activityName.substring(0, activityName
+                        .lastIndexOf("."));
+                if (activityName.length() > 0) {
+                    Intent i = new Intent(Intent.ACTION_MAIN);
+                    i.setClassName(packageName, activityName);
+                    startActivity(i);
+                }
+            }
+        }
+
+        return false;
+    }
+}
diff --git a/src/com/android/settings/InstalledAppDetails.java b/src/com/android/settings/InstalledAppDetails.java
new file mode 100644
index 0000000..327874b
--- /dev/null
+++ b/src/com/android/settings/InstalledAppDetails.java
@@ -0,0 +1,478 @@
+
+
+/**
+ * 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;
+
+import com.android.settings.R;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageDataObserver;
+import android.content.pm.IPackageStatsObserver;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageStats;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.text.format.Formatter;
+import android.util.Config;
+import android.util.Log;
+import java.util.ArrayList;
+import java.util.List;
+import android.content.ComponentName;
+import android.view.View;
+import android.widget.AppSecurityPermissions;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+/**
+ * Activity to display application information from Settings. This activity presents
+ * extended information associated with a package like code, data, total size, permissions
+ * used by the application and also the set of default launchable activities.
+ * For system applications, an option to clear user data is displayed only if data size is > 0.
+ * System applications that do not want clear user data do not have this option.
+ * For non-system applications, there is no option to clear data. Instead there is an option to
+ * uninstall the application.
+ */
+public class InstalledAppDetails extends Activity implements View.OnClickListener, DialogInterface.OnClickListener  {
+    private static final String TAG="InstalledAppDetails";
+    private static final int _UNKNOWN_APP=R.string.unknown;
+    private ApplicationInfo mAppInfo;
+    private Button mAppButton;
+    private Button mActivitiesButton;
+    private boolean mCanUninstall;
+    private boolean localLOGV=Config.LOGV || false;
+    private TextView mAppSnippetSize;
+    private TextView mTotalSize;
+    private TextView mAppSize;
+    private TextView mDataSize;
+    private PkgSizeObserver mSizeObserver;
+    private ClearUserDataObserver mClearDataObserver;
+    // Views related to cache info
+    private View mCachePanel;
+    private TextView mCacheSize;
+    private Button mClearCacheButton;
+    private ClearCacheObserver mClearCacheObserver;
+    private Button mForceStopButton;
+    
+    PackageStats mSizeInfo;
+    private Button mManageSpaceButton;
+    private PackageManager mPm;
+    
+    //internal constants used in Handler
+    private static final int OP_SUCCESSFUL = 1;
+    private static final int OP_FAILED = 2;
+    private static final int CLEAR_USER_DATA = 1;
+    private static final int GET_PKG_SIZE = 2;
+    private static final int CLEAR_CACHE = 3;
+    private static final String ATTR_PACKAGE_STATS="PackageStats";
+    
+    // invalid size value used initially and also when size retrieval through PackageManager
+    // fails for whatever reason
+    private static final int SIZE_INVALID = -1;
+    
+    // Resource strings
+    private CharSequence mInvalidSizeStr;
+    private CharSequence mComputingStr;
+    private CharSequence mAppButtonText;
+    
+    // Possible btn states
+    private enum AppButtonStates {
+        CLEAR_DATA,
+        UNINSTALL,
+        NONE
+    } 
+    private AppButtonStates mAppButtonState;
+    
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case CLEAR_USER_DATA:
+                    processClearMsg(msg);
+                    break;
+                case GET_PKG_SIZE:
+                    refreshSizeInfo(msg);
+                    break;
+                case CLEAR_CACHE:
+                    // Refresh size info
+                    mPm.getPackageSizeInfo(mAppInfo.packageName, mSizeObserver);
+                    break;
+                default:
+                    break;
+            }
+        }
+    };
+    
+    private boolean isUninstallable() {
+        if (((mAppInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0) && 
+                ((mAppInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0)) {
+            return false;
+        }
+        return true;
+    }
+    
+    class ClearUserDataObserver extends IPackageDataObserver.Stub {
+       public void onRemoveCompleted(final String packageName, final boolean succeeded) {
+           final Message msg = mHandler.obtainMessage(CLEAR_USER_DATA);
+           msg.arg1 = succeeded?OP_SUCCESSFUL:OP_FAILED;
+           mHandler.sendMessage(msg);
+        }
+    }
+    
+    class PkgSizeObserver extends IPackageStatsObserver.Stub {
+        public int idx;
+        public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
+             Message msg = mHandler.obtainMessage(GET_PKG_SIZE);
+             Bundle data = new Bundle();
+             data.putParcelable(ATTR_PACKAGE_STATS, pStats);
+             msg.setData(data);
+             mHandler.sendMessage(msg);
+            
+         }
+     }
+    
+    class ClearCacheObserver extends IPackageDataObserver.Stub {
+        public void onRemoveCompleted(final String packageName, final boolean succeeded) {
+            final Message msg = mHandler.obtainMessage(CLEAR_CACHE);
+            msg.arg1 = succeeded?OP_SUCCESSFUL:OP_FAILED;
+            mHandler.sendMessage(msg);
+         }
+     }
+    
+    private String getSizeStr(long size) {
+        if (size == SIZE_INVALID) {
+            return mInvalidSizeStr.toString();
+        }
+        return Formatter.formatFileSize(this, size);
+    }
+    
+    private void setAppBtnState() {
+        boolean visible = false;
+        if(mCanUninstall) {
+            //app can clear user data
+            if((mAppInfo.flags & ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA) 
+                    == ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA) {
+                mAppButtonText = getText(R.string.clear_user_data_text);
+               mAppButtonState = AppButtonStates.CLEAR_DATA;
+               visible = true;
+            } else {
+                //hide button if diableClearUserData is set
+                visible = false;
+                mAppButtonState = AppButtonStates.NONE;
+            }
+        } else {
+            visible = true;
+            mAppButtonState = AppButtonStates.UNINSTALL;
+            mAppButtonText = getText(R.string.uninstall_text);
+        }
+        if(visible) {
+            mAppButton.setText(mAppButtonText);
+            mAppButton.setVisibility(View.VISIBLE);
+        } else {
+            mAppButton.setVisibility(View.GONE);
+        }
+    }
+    
+    /** Called when the activity is first created. */
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        //get package manager
+        mPm = getPackageManager();
+        //get application's name from intent
+        Intent intent = getIntent();
+        final String packageName = intent.getStringExtra(ManageApplications.APP_PKG_NAME);
+        mComputingStr = getText(R.string.computing_size);
+        // Try retrieving package stats again
+        CharSequence totalSizeStr, appSizeStr, dataSizeStr;
+        totalSizeStr = appSizeStr = dataSizeStr = mComputingStr;
+        if(localLOGV) Log.i(TAG, "Have to compute package sizes");
+        mSizeObserver = new PkgSizeObserver();
+        mPm.getPackageSizeInfo(packageName, mSizeObserver);
+
+        try {
+            mAppInfo = mPm.getApplicationInfo(packageName, 
+                    PackageManager.GET_UNINSTALLED_PACKAGES);
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "Exception when retrieving package:"+packageName, e);
+            displayErrorDialog(R.string.app_not_found_dlg_text, true, true);
+        }
+        setContentView(R.layout.installed_app_details);       
+        ((ImageView)findViewById(R.id.app_icon)).setImageDrawable(mAppInfo.loadIcon(mPm));
+        //set application name TODO version
+        CharSequence appName = mAppInfo.loadLabel(mPm);
+        if(appName == null) {
+            appName = getString(_UNKNOWN_APP);
+        }
+        ((TextView)findViewById(R.id.app_name)).setText(appName);
+        mAppSnippetSize = ((TextView)findViewById(R.id.app_size));
+        mAppSnippetSize.setText(totalSizeStr);
+        //TODO download str and download url
+        //set values on views
+        mTotalSize = (TextView)findViewById(R.id.total_size_text);
+        mTotalSize.setText(totalSizeStr);
+        mAppSize = (TextView)findViewById(R.id.application_size_text);
+        mAppSize.setText(appSizeStr);
+        mDataSize = (TextView)findViewById(R.id.data_size_text);
+        mDataSize.setText(dataSizeStr);
+         
+         mAppButton = ((Button)findViewById(R.id.uninstall_button));
+        //determine if app is a system app
+         mCanUninstall = !isUninstallable();
+         if(localLOGV) Log.i(TAG, "Is systemPackage "+mCanUninstall);
+         setAppBtnState();
+         mManageSpaceButton = (Button)findViewById(R.id.manage_space_button);
+         if(mAppInfo.manageSpaceActivityName != null) {
+             mManageSpaceButton.setVisibility(View.VISIBLE);
+             mManageSpaceButton.setOnClickListener(this);
+         }
+         
+         // Cache section
+         mCachePanel = findViewById(R.id.cache_panel);
+         mCacheSize = (TextView) findViewById(R.id.cache_size_text);
+         mCacheSize.setText(mComputingStr);
+         mClearCacheButton = (Button) findViewById(R.id.clear_cache_button);
+         mForceStopButton = (Button) findViewById(R.id.force_stop_button);
+         mForceStopButton.setOnClickListener(this);
+         
+         //clear activities
+         mActivitiesButton = (Button)findViewById(R.id.clear_activities_button);
+         List<ComponentName> prefActList = new ArrayList<ComponentName>();
+         //intent list cannot be null. so pass empty list
+         List<IntentFilter> intentList = new ArrayList<IntentFilter>();
+         mPm.getPreferredActivities(intentList,  prefActList, packageName);
+         if(localLOGV) Log.i(TAG, "Have "+prefActList.size()+" number of activities in prefered list");
+         TextView autoLaunchView = (TextView)findViewById(R.id.auto_launch);
+         if(prefActList.size() <= 0) {
+             //disable clear activities button
+             autoLaunchView.setText(R.string.auto_launch_disable_text);
+             mActivitiesButton.setEnabled(false);
+         } else {
+             autoLaunchView.setText(R.string.auto_launch_enable_text);
+             mActivitiesButton.setOnClickListener(this);
+         }
+         
+         // security permissions section
+         LinearLayout permsView = (LinearLayout) findViewById(R.id.permissions_section);
+         AppSecurityPermissions asp = new AppSecurityPermissions(this, packageName);
+         if(asp.getPermissionCount() > 0) {
+             permsView.setVisibility(View.VISIBLE);
+             // Make the security sections header visible
+             LinearLayout securityList = (LinearLayout) permsView.findViewById(
+                     R.id.security_settings_list);
+             securityList.addView(asp.getPermissionsView());
+         } else {
+             permsView.setVisibility(View.GONE);
+         }
+    }
+    
+    private void displayErrorDialog(int msgId, final boolean finish, final boolean changed) {
+        //display confirmation dialog
+        new AlertDialog.Builder(this)
+        .setTitle(getString(R.string.app_not_found_dlg_title))
+        .setIcon(android.R.drawable.ic_dialog_alert)
+        .setMessage(getString(msgId))
+        .setNeutralButton(getString(R.string.dlg_ok), 
+                new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        //force to recompute changed value
+                        setIntentAndFinish(finish, changed);
+                    }
+                }
+        )
+        .show();
+    }
+    
+    private void setIntentAndFinish(boolean finish, boolean appChanged) {
+        if(localLOGV) Log.i(TAG, "appChanged="+appChanged);
+        Intent intent = new Intent();
+        intent.putExtra(ManageApplications.APP_CHG, appChanged);
+        setResult(ManageApplications.RESULT_OK, intent);
+        mAppButton.setEnabled(false);
+        if(finish) {
+            finish();
+        }
+    }
+    
+    /*
+     * Private method to handle get size info notification from observer when
+     * the async operation from PackageManager is complete. The current user data
+     * info has to be refreshed in the manage applications screen as well as the current screen.
+     */
+    private void refreshSizeInfo(Message msg) {
+        boolean changed = false;
+        PackageStats newPs = msg.getData().getParcelable(ATTR_PACKAGE_STATS);
+        long newTot = newPs.cacheSize+newPs.codeSize+newPs.dataSize;
+        if(mSizeInfo == null) {
+            mSizeInfo = newPs;
+            String str = getSizeStr(newTot);
+            mTotalSize.setText(str);
+            mAppSnippetSize.setText(str);
+            mAppSize.setText(getSizeStr(newPs.codeSize));
+            mDataSize.setText(getSizeStr(newPs.dataSize));
+            mCacheSize.setText(getSizeStr(newPs.cacheSize));
+        } else {
+            long oldTot = mSizeInfo.cacheSize+mSizeInfo.codeSize+mSizeInfo.dataSize;
+            if(newTot != oldTot) {
+                String str = getSizeStr(newTot);
+                mTotalSize.setText(str);
+                mAppSnippetSize.setText(str);
+                changed = true;
+            }
+            if(newPs.codeSize != mSizeInfo.codeSize) {
+                mAppSize.setText(getSizeStr(newPs.codeSize));
+                changed = true;
+            }
+            if(newPs.dataSize != mSizeInfo.dataSize) {
+                mDataSize.setText(getSizeStr(newPs.dataSize));
+                changed = true;
+            }
+            if(newPs.cacheSize != mSizeInfo.cacheSize) {
+                mCacheSize.setText(getSizeStr(newPs.cacheSize));
+                changed = true;
+            }
+            if(changed) {
+                mSizeInfo = newPs;
+            }
+        }
+        
+        long data = mSizeInfo.dataSize;
+        // Disable button if data is 0
+        if(mAppButtonState != AppButtonStates.NONE){
+            mAppButton.setText(mAppButtonText);
+            if((mAppButtonState == AppButtonStates.CLEAR_DATA) && (data == 0)) {
+                mAppButton.setEnabled(false);
+            } else {
+                mAppButton.setEnabled(true);
+                mAppButton.setOnClickListener(this);
+            }            
+        }
+        refreshCacheInfo(newPs.cacheSize);
+    }
+    
+    private void refreshCacheInfo(long cacheSize) {
+        // Set cache info
+        mCacheSize.setText(getSizeStr(cacheSize));
+        if (cacheSize <= 0) {
+            mClearCacheButton.setEnabled(false);
+        } else {
+            mClearCacheButton.setOnClickListener(this);
+        }
+    }
+    
+    /*
+     * Private method to handle clear message notification from observer when
+     * the async operation from PackageManager is complete
+     */
+    private void processClearMsg(Message msg) {
+        int result = msg.arg1;
+        String packageName = mAppInfo.packageName;
+        if(result == OP_SUCCESSFUL) {
+            Log.i(TAG, "Cleared user data for system package:"+packageName);
+            mPm.getPackageSizeInfo(packageName, mSizeObserver);
+        } else {
+            mAppButton.setText(R.string.clear_user_data_text);
+            mAppButton.setEnabled(true);
+        }
+    }
+    
+    /*
+     * Private method to initiate clearing user data when the user clicks the clear data 
+     * button for a system package
+     */
+    private  void initiateClearUserDataForSysPkg() {
+        mAppButton.setEnabled(false);
+        //invoke uninstall or clear user data based on sysPackage
+        String packageName = mAppInfo.packageName;
+        Log.i(TAG, "Clearing user data for system package");
+        if(mClearDataObserver == null) {
+            mClearDataObserver = new ClearUserDataObserver();
+        }
+        ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+        boolean res = am.clearApplicationUserData(packageName, mClearDataObserver);
+        if(!res) {
+            //doesnt initiate clear. some error. should not happen but just log error for now
+            Log.i(TAG, "Couldnt clear application user data for package:"+packageName);
+            displayErrorDialog(R.string.clear_data_failed, false, false);
+        } else {
+                mAppButton.setText(R.string.recompute_size);
+        }
+    }
+    
+    /*
+     * Method implementing functionality of buttons clicked
+     * @see android.view.View.OnClickListener#onClick(android.view.View)
+     */
+    public void onClick(View v) {
+        String packageName = mAppInfo.packageName;
+        if(v == mAppButton) {
+            if(mCanUninstall) {
+                //display confirmation dialog
+                new AlertDialog.Builder(this)
+                .setTitle(getString(R.string.clear_data_dlg_title))
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setMessage(getString(R.string.clear_data_dlg_text))
+                .setPositiveButton(R.string.dlg_ok, this)
+                .setNegativeButton(R.string.dlg_cancel, this)
+                .show();
+            } else {
+                //create new intent to launch Uninstaller activity
+                Uri packageURI = Uri.parse("package:"+packageName);
+                Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
+                startActivity(uninstallIntent);
+                setIntentAndFinish(true, true);
+            }
+        } else if(v == mActivitiesButton) {
+            mPm.clearPackagePreferredActivities(packageName);
+            mActivitiesButton.setEnabled(false);
+        } else if(v == mManageSpaceButton) {
+            Intent intent = new Intent(Intent.ACTION_DEFAULT);
+            intent.setClassName(mAppInfo.packageName, mAppInfo.manageSpaceActivityName);
+            startActivityForResult(intent, -1);
+        } else if (v == mClearCacheButton) {
+            // Lazy initialization of observer
+            if (mClearCacheObserver == null) {
+                mClearCacheObserver = new ClearCacheObserver();
+            }
+            mPm.deleteApplicationCacheFiles(packageName, mClearCacheObserver);
+        } else if (v == mForceStopButton) {
+            ActivityManager am = (ActivityManager)getSystemService(
+                    Context.ACTIVITY_SERVICE);
+            am.restartPackage(packageName);
+        }
+    }
+
+    public void onClick(DialogInterface dialog, int which) {
+        if(which == AlertDialog.BUTTON_POSITIVE) {
+            //invoke uninstall or clear user data based on sysPackage
+            initiateClearUserDataForSysPkg();
+        } else {
+            //cancel do nothing just retain existing screen
+        }
+    }
+}
+
diff --git a/src/com/android/settings/LanguageSettings.java b/src/com/android/settings/LanguageSettings.java
new file mode 100644
index 0000000..8463d26
--- /dev/null
+++ b/src/com/android/settings/LanguageSettings.java
@@ -0,0 +1,247 @@
+/*
+ * 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.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.System;
+import android.text.TextUtils;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+
+import java.util.HashSet;
+import java.util.List;
+
+public class LanguageSettings extends PreferenceActivity {
+    
+    private final String[] mSettingsUiKey = {
+            "auto_caps",
+            "auto_replace",
+            "auto_punctuate",
+    };
+    
+    // Note: Order of this array should correspond to the order of the above array
+    private final String[] mSettingsSystemId = {
+            System.TEXT_AUTO_CAPS,
+            System.TEXT_AUTO_REPLACE,
+            System.TEXT_AUTO_PUNCTUATE,
+    };
+
+    // Note: Order of this array should correspond to the order of the above array
+    private final int[] mSettingsDefault = {
+            1,
+            1,
+            1,
+    };
+    
+    private List<InputMethodInfo> mInputMethodProperties;
+
+    final TextUtils.SimpleStringSplitter mStringColonSplitter
+            = new TextUtils.SimpleStringSplitter(':');
+    
+    private String mLastInputMethodId;
+    private String mLastTickedInputMethodId;
+
+    static public String getInputMethodIdFromKey(String key) {
+        return key;
+    }
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        addPreferencesFromResource(R.xml.language_settings);
+
+        if (getAssets().getLocales().length == 1) {
+            getPreferenceScreen().
+                removePreference(findPreference("language_category"));
+        }
+    
+        Configuration config = getResources().getConfiguration();
+        if (config.keyboard != Configuration.KEYBOARD_QWERTY) {
+            getPreferenceScreen().removePreference(
+                    getPreferenceScreen().findPreference("hardkeyboard_category"));
+        } else {
+            ContentResolver resolver = getContentResolver();
+            for (int i = 0; i < mSettingsUiKey.length; i++) {
+                CheckBoxPreference pref = (CheckBoxPreference) findPreference(mSettingsUiKey[i]);
+                pref.setChecked(System.getInt(resolver, mSettingsSystemId[i],
+                                              mSettingsDefault[i]) > 0);
+            }
+        }
+
+        onCreateIMM();
+    }
+    
+    private void onCreateIMM() {
+        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+
+        mInputMethodProperties = imm.getInputMethodList();
+
+        mLastInputMethodId = Settings.Secure.getString(getContentResolver(),
+            Settings.Secure.DEFAULT_INPUT_METHOD);
+        
+        PreferenceGroup textCategory = (PreferenceGroup) findPreference("text_category");
+        
+        int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties
+                .size());
+        for (int i = 0; i < N; ++i) {
+            InputMethodInfo property = mInputMethodProperties.get(i);
+            String prefKey = property.getId();
+
+            CharSequence label = property.loadLabel(getPackageManager());
+            
+            // Add a check box.
+            CheckBoxPreference chkbxPref = new CheckBoxPreference(this);
+            chkbxPref.setKey(prefKey);
+            chkbxPref.setTitle(label);
+            textCategory.addPreference(chkbxPref);
+
+            // If setting activity is available, add a setting screen entry.
+            if (null != property.getSettingsActivity()) {
+                PreferenceScreen prefScreen = new PreferenceScreen(this, null);
+                prefScreen.setKey(property.getSettingsActivity());
+                CharSequence settingsLabel = getResources().getString(
+                        R.string.input_methods_settings_label_format, label);
+                prefScreen.setTitle(settingsLabel);
+                textCategory.addPreference(prefScreen);
+            }
+        }
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        final HashSet<String> enabled = new HashSet<String>();
+        String enabledStr = Settings.Secure.getString(getContentResolver(),
+                Settings.Secure.ENABLED_INPUT_METHODS);
+        if (enabledStr != null) {
+            final TextUtils.SimpleStringSplitter splitter = mStringColonSplitter;
+            splitter.setString(enabledStr);
+            while (splitter.hasNext()) {
+                enabled.add(splitter.next());
+            }
+        }
+        
+        // Update the statuses of the Check Boxes.
+        int N = mInputMethodProperties.size();
+        for (int i = 0; i < N; ++i) {
+            final String id = mInputMethodProperties.get(i).getId();
+            CheckBoxPreference pref = (CheckBoxPreference) findPreference(mInputMethodProperties
+                    .get(i).getId());
+            pref.setChecked(enabled.contains(id));
+        }
+        mLastTickedInputMethodId = null;
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        StringBuilder builder = new StringBuilder(256);
+        
+        boolean haveLastInputMethod = false;
+        
+        int firstEnabled = -1;
+        int N = mInputMethodProperties.size();
+        for (int i = 0; i < N; ++i) {
+            final String id = mInputMethodProperties.get(i).getId();
+            CheckBoxPreference pref = (CheckBoxPreference) findPreference(id);
+            boolean hasIt = id.equals(mLastInputMethodId);
+            if (pref.isChecked()) {
+                if (builder.length() > 0) builder.append(':');
+                builder.append(id);
+                if (firstEnabled < 0) {
+                    firstEnabled = i;
+                }
+                if (hasIt) haveLastInputMethod = true;
+            } else if (hasIt) {
+                mLastInputMethodId = mLastTickedInputMethodId;
+            }
+        }
+
+        // If the last input method is unset, set it as the first enabled one.
+        if (null == mLastInputMethodId || "".equals(mLastInputMethodId)) {
+            if (firstEnabled >= 0) {
+                mLastInputMethodId = mInputMethodProperties.get(firstEnabled).getId();
+            } else {
+                mLastInputMethodId = null;
+            }
+        }
+        
+        Settings.Secure.putString(getContentResolver(),
+            Settings.Secure.ENABLED_INPUT_METHODS, builder.toString());
+        Settings.Secure.putString(getContentResolver(),
+            Settings.Secure.DEFAULT_INPUT_METHOD, mLastInputMethodId);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+
+        // Physical keyboard stuff
+        for (int i = 0; i < mSettingsUiKey.length; i++) {
+            if (mSettingsUiKey[i].equals(preference.getKey())) {
+                System.putInt(getContentResolver(), mSettingsSystemId[i], 
+                        ((CheckBoxPreference)preference).isChecked()? 1 : 0);
+                return true;
+            }
+        }
+
+        // Input Method stuff
+        // Those monkeys kept committing suicide, so we add this property
+        // to disable this functionality
+        if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
+            return false;
+        }
+
+        if (preference instanceof CheckBoxPreference) {
+            CheckBoxPreference chkPref = (CheckBoxPreference) preference;
+            String id = getInputMethodIdFromKey(chkPref.getKey());
+            if (chkPref.isChecked()) {
+                mLastTickedInputMethodId = id;
+            } else if (id.equals(mLastTickedInputMethodId)) {
+                mLastTickedInputMethodId = null;
+            }
+        } else if (preference instanceof PreferenceScreen) {
+            if (preference.getIntent() == null) {
+                PreferenceScreen pref = (PreferenceScreen) preference;
+                String activityName = pref.getKey();
+                String packageName = activityName.substring(0, activityName
+                        .lastIndexOf("."));
+                if (activityName.length() > 0) {
+                    Intent i = new Intent(Intent.ACTION_MAIN);
+                    i.setClassName(packageName, activityName);
+                    startActivity(i);
+                }
+            }
+        }
+
+        return super.onPreferenceTreeClick(preferenceScreen, preference);
+    }
+
+}
diff --git a/src/com/android/settings/LauncherGadgetBinder.java b/src/com/android/settings/LauncherGadgetBinder.java
new file mode 100644
index 0000000..f7b5a61
--- /dev/null
+++ b/src/com/android/settings/LauncherGadgetBinder.java
@@ -0,0 +1,225 @@
+/*
+ * 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.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.gadget.GadgetManager;
+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 LauncherGadgetBinder extends Activity {
+    private static final String TAG = "LauncherGadgetBinder";
+    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_GADGET_BITMAPS = "com.android.camera.gadgetbitmaps";
+    
+    /**
+     * {@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 GADGET_ID = "gadgetId";
+        static final String ICON = "icon";
+
+        static final int ITEM_TYPE_GADGET = 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.GADGET_ID,
+        LauncherProvider.ICON,
+    };
+    
+    static final int INDEX_ID = 0;
+    static final int INDEX_ITEM_TYPE = 1;
+    static final int INDEX_GADGET_ID = 2;
+    static final int INDEX_ICON = 3;
+    
+    static final ComponentName BIND_PHOTO_GADGET = new ComponentName("com.android.camera",
+            "com.android.camera.PhotoGadgetBind");
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        finish();
+
+        // This helper reaches into the Launcher database and binds any unlinked
+        // gadgets. 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 GadgetManager gadgetManager = GadgetManager.getInstance(this);
+        
+        boolean foundPhotoGadgets = false;
+        final ArrayList<Integer> photoGadgetIds = 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 gadgetId = c.getInt(INDEX_GADGET_ID);
+                byte[] iconData = c.getBlob(INDEX_ICON);
+                
+                // Find the binding target for this type
+                ComponentName targetGadget = null;
+                for (int i = 0; i < bindSources.length; i++) {
+                    if (bindSources[i] == itemType) {
+                        targetGadget = bindTargets.get(i);
+                        break;
+                    }
+                }
+                
+                if (LOGD) Log.d(TAG, "found matching targetGadget="+targetGadget.toString()+" for favoriteId="+favoriteId);
+                
+                boolean bindSuccess = false;
+                try {
+                    gadgetManager.bindGadgetId(gadgetId, targetGadget);
+                    bindSuccess = true;
+                } catch (RuntimeException ex) {
+                    Log.w(TAG, "Problem binding gadget", ex);
+                }
+                
+                // Handle special case of photo gadget 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);
+                    
+                    photoGadgetIds.add(gadgetId);
+                    photoBitmaps.add(bitmap);
+                    foundPhotoGadgets = 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_GADGET);
+                    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 gadgetIds for Launcher", ex);
+        } finally {
+            if (c != null) {
+                c.close();
+            }
+        }
+        
+        if (foundPhotoGadgets) {
+            // Convert gadgetIds into int[]
+            final int N = photoGadgetIds.size();
+            final int[] photoGadgetIdsArray = new int[N];
+            for (int i = 0; i < N; i++) {
+                photoGadgetIdsArray[i] = photoGadgetIds.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_GADGET);
+            
+            final Bundle bindExtras = new Bundle();
+            bindExtras.putIntArray(GadgetManager.EXTRA_GADGET_IDS, photoGadgetIdsArray);
+            bindExtras.putParcelableArrayList(EXTRA_GADGET_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
new file mode 100644
index 0000000..386d7e0
--- /dev/null
+++ b/src/com/android/settings/LocalePicker.java
@@ -0,0 +1,153 @@
+/*
+ * 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;
+
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
+import android.app.ListActivity;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.util.Log;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import java.io.BufferedWriter;
+import java.io.FileOutputStream;
+import java.util.Arrays;
+import java.util.Locale;
+
+public class LocalePicker extends ListActivity {
+    private static final String TAG = "LocalePicker";
+
+    Loc[] mLocales;
+
+    private static class Loc {
+        String label;
+        Locale locale;
+
+        public Loc(String label, Locale locale) {
+            this.label = label;
+            this.locale = locale;
+        }
+
+        @Override
+        public String toString() {
+            return this.label;
+        }
+    }
+
+    int getContentView() {
+        return R.layout.locale_picker;
+    }
+    
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        setContentView(getContentView());
+
+        String[] locales = getAssets().getLocales();
+        Arrays.sort(locales);
+
+        final int origSize = locales.length;
+        Loc[] preprocess = new Loc[origSize];
+        int finalSize = 0;
+        for (int i = 0 ; i < origSize; i++ ) {
+            String s = locales[i];
+            int len = s.length();
+            if (len == 2) {
+                Locale l = new Locale(s);
+                preprocess[finalSize++] = new Loc(toTitleCase(l.getDisplayLanguage()), l);
+            } else if (len == 5) {
+                String language = s.substring(0, 2);
+                String country = s.substring(3, 5);
+                Locale l = new Locale(language, country);
+
+                if (finalSize == 0) {
+                    preprocess[finalSize++] = new Loc(toTitleCase(l.getDisplayLanguage()), l);
+                } else {
+                    // check previous entry:
+                    //  same lang and no country -> overwrite it with a lang-only name
+                    //  same lang and a country -> upgrade to full name and 
+                    //    insert ours with full name
+                    //  diff lang -> insert ours with lang-only name
+                    if (preprocess[finalSize-1].locale.getLanguage().equals(language)) {
+                       String prevCountry = preprocess[finalSize-1].locale.getCountry();
+                       if (prevCountry.length() == 0) {
+                            preprocess[finalSize-1].locale = l;
+                            preprocess[finalSize-1].label = toTitleCase(l.getDisplayLanguage());
+                        } else {
+                            preprocess[finalSize-1].label = toTitleCase(preprocess[finalSize-1].locale.getDisplayName());
+                            preprocess[finalSize++] = new Loc(toTitleCase(l.getDisplayName()), l);
+                        }
+                    } else {
+                        String displayName;
+                        if (s.equals("zz_ZZ")) {
+                            displayName = "Pseudo...";
+                        } else {
+                            displayName = toTitleCase(l.getDisplayLanguage());
+                        }
+                        preprocess[finalSize++] = new Loc(displayName, l);
+                    }
+                }
+            }
+        }
+        mLocales = new Loc[finalSize];
+        for (int i = 0; i < finalSize ; i++) {
+            mLocales[i] = preprocess[i];
+        }
+        int layoutId = R.layout.locale_picker_item;
+        int fieldId = R.id.locale;
+        ArrayAdapter<Loc> adapter = new ArrayAdapter<Loc>(this, layoutId, fieldId, mLocales);
+        getListView().setAdapter(adapter);
+    }
+
+    private static String toTitleCase(String s) {
+        if (s.length() == 0) {
+            return s;
+        }
+
+        return Character.toUpperCase(s.charAt(0)) + s.substring(1);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        getListView().requestFocus();
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        try {
+            IActivityManager am = ActivityManagerNative.getDefault();
+            Configuration config = am.getConfiguration();
+
+            Loc loc = mLocales[position];
+            config.locale = loc.locale;
+
+            // indicate this isn't some passing default - the user wants this remembered
+            config.userSetLocale = true;
+
+            am.updateConfiguration(config);
+        } catch (RemoteException e) {
+            // Intentionally left blank
+        }
+        finish();
+    }
+}
diff --git a/src/com/android/settings/LocalePickerInSetupWizard.java b/src/com/android/settings/LocalePickerInSetupWizard.java
new file mode 100644
index 0000000..b160e89
--- /dev/null
+++ b/src/com/android/settings/LocalePickerInSetupWizard.java
@@ -0,0 +1,43 @@
+/*
+ * 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;
+
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
+import android.app.ListActivity;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.util.Log;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import java.io.BufferedWriter;
+import java.io.FileOutputStream;
+import java.util.Arrays;
+import java.util.Locale;
+
+public class LocalePickerInSetupWizard extends LocalePicker {
+    
+    @Override 
+    int getContentView() {
+        return R.layout.locale_picker_in_setupwizard;
+    }
+
+}
diff --git a/src/com/android/settings/ManageApplications.java b/src/com/android/settings/ManageApplications.java
new file mode 100644
index 0000000..74957ed
--- /dev/null
+++ b/src/com/android/settings/ManageApplications.java
@@ -0,0 +1,1307 @@
+/*
+ * Copyright (C) 2006 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.settings.R;
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ListActivity;
+import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageStatsObserver;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageStats;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.text.format.Formatter;
+import android.util.Config;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.AdapterView.OnItemClickListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+/**
+ * Activity to pick an application that will be used to display installation information and
+ * options to uninstall/delete user data for system applications. This activity
+ * can be launched through Settings or via the ACTION_MANAGE_PACKAGE_STORAGE
+ * intent.
+ *  Initially a compute in progress message is displayed while the application retrieves
+ *  the list of application information from the PackageManager. The size information
+ *  for each package is refreshed to the screen. The resource(app description and
+ *  icon) information for each package is not available yet, so some default values for size
+ *  icon and descriptions are used initially. Later the resource information for each 
+ *  application is retrieved and dynamically updated on the screen.
+ *  A Broadcast receiver registers for package additions or deletions when the activity is
+ *  in focus. If the user installs or deletes packages when the activity has focus, the receiver
+ *  gets notified and proceeds to add/delete these packages from the list on the screen.
+ *  This is an unlikely scenario but could happen. The entire list gets created every time
+ *  the activity's onStart gets invoked. This is to avoid having the receiver for the entire
+ *  life cycle of the application.
+ *  The applications can be sorted either alphabetically or 
+ *  based on size(descending). If this activity gets launched under low memory
+ *  situations(A low memory notification dispatches intent 
+ *  ACTION_MANAGE_PACKAGE_STORAGE) the list is sorted per size.
+ *  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
+        OnItemClickListener, DialogInterface.OnCancelListener,
+        DialogInterface.OnClickListener {
+    // TAG for this activity
+    private static final String TAG = "ManageApplications";
+    
+    // Log information boolean
+    private boolean localLOGV = Config.LOGV || 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";
+    
+    // attribute name used in receiver for tagging names of added/deleted packages
+    private static final String ATTR_PKG_NAME="PackageName";
+    private static final String ATTR_APP_PKG_STATS="ApplicationPackageStats";
+    
+    // constant value that can be used to check return code from sub activity.
+    private static final int INSTALLED_APP_DETAILS = 1;
+    
+    // sort order that can be changed through the menu can be sorted alphabetically
+    // or size(descending)
+    private static final int MENU_OPTIONS_BASE = 0;
+    public static final int SORT_ORDER_ALPHA = MENU_OPTIONS_BASE + 0;
+    public static final int SORT_ORDER_SIZE = MENU_OPTIONS_BASE + 1;
+    // Filter options used for displayed list of applications
+    public static final int FILTER_APPS_ALL = MENU_OPTIONS_BASE + 2;
+    public static final int FILTER_APPS_THIRD_PARTY = MENU_OPTIONS_BASE + 3;
+    public static final int FILTER_APPS_RUNNING = MENU_OPTIONS_BASE + 4;
+    public static final int FILTER_OPTIONS = MENU_OPTIONS_BASE + 5;
+    // Alert Dialog presented to user to find out the filter option
+    AlertDialog mAlertDlg;
+    // sort order
+    private int mSortOrder = SORT_ORDER_ALPHA;
+    // Filter value
+    int mFilterApps = FILTER_APPS_ALL;
+    
+    // Custom Adapter used for managing items in the list
+    private AppInfoAdapter mAppInfoAdapter;
+    
+    // messages posted to the handler
+    private static final int HANDLER_MESSAGE_BASE = 0;
+    private static final int INIT_PKG_INFO = HANDLER_MESSAGE_BASE+1;
+    private static final int COMPUTE_PKG_SIZE_DONE = HANDLER_MESSAGE_BASE+2;
+    private static final int REMOVE_PKG = HANDLER_MESSAGE_BASE+3;
+    private static final int REORDER_LIST = HANDLER_MESSAGE_BASE+4;
+    private static final int ADD_PKG_START = HANDLER_MESSAGE_BASE+5;
+    private static final int ADD_PKG_DONE = HANDLER_MESSAGE_BASE+6;
+    private static final int REFRESH_ICONS = HANDLER_MESSAGE_BASE+7;
+    private static final int NEXT_LOAD_STEP = HANDLER_MESSAGE_BASE+8;
+    
+    // observer object used for computing pkg sizes
+    private PkgSizeObserver mObserver;
+    // local handle to PackageManager
+    private PackageManager mPm;
+    // Broadcast Receiver object that receives notifications for added/deleted
+    // packages
+    private PackageIntentReceiver mReceiver;
+    // atomic variable used to track if computing pkg sizes is in progress. should be volatile?
+    
+    private boolean mComputeSizes = false;
+    // default icon thats used when displaying applications initially before resource info is
+    // retrieved
+    private Drawable mDefaultAppIcon;
+    
+    // temporary dialog displayed while the application info loads
+    private static final int DLG_BASE = 0;
+    private static final int DLG_LOADING = DLG_BASE + 1;
+    
+    // compute index used to track the application size computations
+    private int mComputeIndex;
+    
+    // Size resource used for packages whose size computation failed for some reason
+    private CharSequence mInvalidSizeStr;
+    private CharSequence mComputingSizeStr;
+    
+    // map used to store list of added and removed packages. Immutable Boolean
+    // variables indicate if a package has been added or removed. If a package is
+    // added or deleted multiple times a single entry with the latest operation will
+    // be recorded in the map.
+    private Map<String, Boolean> mAddRemoveMap;
+    
+    // layout inflater object used to inflate views
+    private LayoutInflater mInflater;
+    
+    // invalid size value used initially and also when size retrieval through PackageManager
+    // fails for whatever reason
+    private static final int SIZE_INVALID = -1;
+    
+    // debug boolean variable to test delays from PackageManager API's
+    private boolean DEBUG_PKG_DELAY = false;
+    
+    // Thread to load resources
+    ResourceLoaderThread mResourceThread;
+    
+    String mCurrentPkgName;
+    
+    //TODO implement a cache system
+    private Map<String, AppInfo> mAppPropCache;
+    
+    // empty message displayed when list is empty
+    private TextView mEmptyView;
+    
+    // Boolean variables indicating state
+    private boolean mLoadLabels = false;
+    private boolean mSizesFirst = false;
+    // ListView used to display list
+    private ListView mListView;
+    // State variables used to figure out menu options and also
+    // initiate the first computation and loading of resources
+    private boolean mJustCreated = true;
+    private boolean mFirst = false;
+    
+    /*
+     * Handler class to handle messages for various operations
+     * Most of the operations that effect Application related data
+     * are posted as messages to the handler to avoid synchronization
+     * when accessing these structures.
+     * When the size retrieval gets kicked off for the first time, a COMPUTE_PKG_SIZE_START
+     * message is posted to the handler which invokes the getSizeInfo for the pkg at index 0
+     * When the PackageManager's asynchronous call back through
+     * PkgSizeObserver.onGetStatsCompleted gets invoked, the application resources like
+     * label, description, icon etc., is loaded in the same thread and these values are
+     * set on the observer. The observer then posts a COMPUTE_PKG_SIZE_DONE message
+     * to the handler. This information is updated on the AppInfoAdapter associated with
+     * the list view of this activity and size info retrieval is initiated for the next package as 
+     * indicated by mComputeIndex
+     * When a package gets added while the activity has focus, the PkgSizeObserver posts
+     * ADD_PKG_START message to the handler.  If the computation is not in progress, the size
+     * is retrieved for the newly added package through the observer object and the newly
+     * installed app info is updated on the screen. If the computation is still in progress
+     * the package is added to an internal structure and action deferred till the computation
+     * is done for all the packages. 
+     * When a package gets deleted, REMOVE_PKG is posted to the handler
+     *  if computation is not in progress(as indicated by
+     * mDoneIniting), the package is deleted from the displayed list of apps. If computation is
+     * still in progress the package is added to an internal structure and action deferred till
+     * the computation is done for all packages.
+     * When the sizes of all packages is computed, the newly
+     * added or removed packages are processed in order.
+     * If the user changes the order in  which these applications are viewed by hitting the
+     * menu key, REORDER_LIST message is posted to the handler. this sorts the list
+     * of items based on the sort order.
+     */
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            PackageStats ps;
+            ApplicationInfo info;
+            Bundle data;
+            String pkgName = null;
+            AppInfo appInfo;
+            data = msg.getData();
+            if(data != null) {
+                pkgName = data.getString(ATTR_PKG_NAME);
+            }
+            switch (msg.what) {
+            case INIT_PKG_INFO:
+                if(localLOGV) Log.i(TAG, "Message INIT_PKG_INFO");
+                // Retrieve the package list and init some structures
+                initAppList(mFilterApps);
+                mHandler.sendEmptyMessage(NEXT_LOAD_STEP);
+                break;
+            case COMPUTE_PKG_SIZE_DONE:
+                if(localLOGV) Log.i(TAG, "Message COMPUTE_PKG_SIZE_DONE");
+                if(pkgName == null) {
+                     Log.w(TAG, "Ignoring message");
+                     break;
+                }
+                ps = data.getParcelable(ATTR_APP_PKG_STATS);
+                if(ps == null) {
+                    Log.i(TAG, "Invalid package stats for package:"+pkgName);
+                } else {
+                    int pkgId = mAppInfoAdapter.getIndex(pkgName);
+                    if(mComputeIndex != pkgId) {
+                        //spurious call from stale observer
+                        Log.w(TAG, "Stale call back from PkgSizeObserver");
+                        break;
+                    }
+                    mAppInfoAdapter.updateAppSize(pkgName, ps);
+                }
+                mComputeIndex++;
+                if (mComputeIndex < mAppInfoAdapter.getCount()) {
+                    // initiate compute package size for next pkg in list
+                    mObserver.invokeGetSizeInfo(mAppInfoAdapter.getApplicationInfo(
+                            mComputeIndex), 
+                            COMPUTE_PKG_SIZE_DONE);
+                } else {
+                    // check for added/removed packages
+                    Set<String> keys =  mAddRemoveMap.keySet();
+                    Iterator<String> iter = keys.iterator();
+                    List<String> removeList = new ArrayList<String>();
+                    boolean added = false;
+                    boolean removed = false;
+                    while (iter.hasNext()) {
+                        String key = iter.next();
+                        if (mAddRemoveMap.get(key) == Boolean.TRUE) {
+                            // add
+                            try {
+                                info = mPm.getApplicationInfo(key, 0);
+                                mAppInfoAdapter.addApplicationInfo(info);
+                                added = true;
+                            } catch (NameNotFoundException e) {
+                                Log.w(TAG, "Invalid added package:"+key+" Ignoring entry");
+                            }   
+                        } else {
+                            // remove
+                            removeList.add(key);
+                            removed = true;
+                        }
+                    }
+                    // remove uninstalled packages from list
+                    if (removed) {
+                        mAppInfoAdapter.removeFromList(removeList);
+                    }
+                    // handle newly installed packages
+                    if (added) {
+                        mObserver.invokeGetSizeInfo(mAppInfoAdapter.getApplicationInfo(
+                                mComputeIndex), 
+                                COMPUTE_PKG_SIZE_DONE);
+                    } else {
+                        // end computation here
+                        mComputeSizes = true;
+                        mFirst = true;
+                        mAppInfoAdapter.sortList(mSortOrder);
+                        mHandler.sendEmptyMessage(NEXT_LOAD_STEP);
+                    }
+                }
+                break;
+            case REMOVE_PKG:
+                if(localLOGV) Log.i(TAG, "Message REMOVE_PKG");
+                if(pkgName == null) {
+                    Log.w(TAG, "Ignoring message:REMOVE_PKG for null pkgName");
+                    break;
+                }
+                if (!mComputeSizes) {
+                    Boolean currB = mAddRemoveMap.get(pkgName);
+                    if (currB == null || (currB.equals(Boolean.TRUE))) {
+                        mAddRemoveMap.put(pkgName, Boolean.FALSE);
+                    }
+                    break;
+                }
+                List<String> pkgList = new ArrayList<String>();
+                pkgList.add(pkgName);
+                mAppInfoAdapter.removeFromList(pkgList);
+                break;
+            case REORDER_LIST:
+                if(localLOGV) Log.i(TAG, "Message REORDER_LIST");
+                int menuOption = msg.arg1;
+                if((menuOption == SORT_ORDER_ALPHA) || 
+                        (menuOption == SORT_ORDER_SIZE)) {
+                    // Option to sort list
+                    if (menuOption != mSortOrder) {
+                        mSortOrder = menuOption;
+                        if (localLOGV) Log.i(TAG, "Changing sort order to "+mSortOrder);
+                        mAppInfoAdapter.sortList(mSortOrder);
+                    }
+                } else if(menuOption != mFilterApps) {
+                    // Option to filter list
+                    mFilterApps = menuOption;
+                    boolean ret = mAppInfoAdapter.resetAppList(mFilterApps, 
+                            getInstalledApps(mFilterApps));
+                    if(!ret) {
+                        // Reset cache
+                        mAppPropCache = null;
+                        mFilterApps = FILTER_APPS_ALL;
+                        mHandler.sendEmptyMessage(INIT_PKG_INFO);
+                        sendMessageToHandler(REORDER_LIST, menuOption);
+                    }
+                }
+                break;
+            case ADD_PKG_START:
+                if(localLOGV) Log.i(TAG, "Message ADD_PKG_START");
+                if(pkgName == null) {
+                    Log.w(TAG, "Ignoring message:ADD_PKG_START for null pkgName");
+                    break;
+                }
+                if (!mComputeSizes) {
+                    Boolean currB = mAddRemoveMap.get(pkgName);
+                    if (currB == null || (currB.equals(Boolean.FALSE))) {
+                        mAddRemoveMap.put(pkgName, Boolean.TRUE);
+                    }
+                    break;
+                }
+                try {
+                        info = mPm.getApplicationInfo(pkgName, 0);
+                    } catch (NameNotFoundException e) {
+                        Log.w(TAG, "Couldnt find application info for:"+pkgName);
+                        break;
+                    }
+                mObserver.invokeGetSizeInfo(info, ADD_PKG_DONE);
+                break;
+            case ADD_PKG_DONE:
+                if(localLOGV) Log.i(TAG, "Message COMPUTE_PKG_SIZE_DONE");
+                if(pkgName == null) {
+                    Log.w(TAG, "Ignoring message:ADD_PKG_START for null pkgName");
+                    break;
+                }
+                ps = data.getParcelable(ATTR_APP_PKG_STATS);
+                mAppInfoAdapter.addToList(pkgName, ps);
+                break;
+            case REFRESH_ICONS:
+                Map<String, AppInfo> iconMap = (Map<String, AppInfo>) msg.obj;
+                if(iconMap == null) {
+                    Log.w(TAG, "Error loading icons for applications");
+                } else {
+                    mAppInfoAdapter.updateAppsResourceInfo(iconMap);   
+                }
+                mLoadLabels = true;
+                mHandler.sendEmptyMessage(NEXT_LOAD_STEP);
+                break;
+            case NEXT_LOAD_STEP:
+                if (mComputeSizes && mLoadLabels) {
+                    doneLoadingData();
+                } else if (!mComputeSizes && !mLoadLabels) {
+                     // Either load the package labels or initiate get size info
+                    if (mSizesFirst) {
+                        initComputeSizes();
+                    } else {
+                        initResourceThread();
+                    }
+                } else {
+                    // Create list view from the adapter here. Wait till the sort order
+                    // of list is defined. its either by label or by size. so atleast one of the
+                    // first steps should be complete before filling the list
+                    if (mJustCreated) {
+                        // Set the adapter here.
+                        mJustCreated = false;
+                        mListView.setAdapter(mAppInfoAdapter);
+                        dismissLoadingMsg();
+                    }
+                    if (!mComputeSizes) {
+                        initComputeSizes();
+                    } else if (!mLoadLabels) {
+                        initResourceThread();
+                    }
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    };
+    
+    
+    
+    private void doneLoadingData() {
+        setProgressBarIndeterminateVisibility(false);
+    }
+    
+    List<ApplicationInfo> getInstalledApps(int filterOption) {
+        List<ApplicationInfo> installedAppList = mPm.getInstalledApplications(
+                PackageManager.GET_UNINSTALLED_PACKAGES);
+        if (installedAppList == null) {
+            return new ArrayList<ApplicationInfo> ();
+        }
+        if (filterOption == FILTER_APPS_THIRD_PARTY) {
+            List<ApplicationInfo> appList =new ArrayList<ApplicationInfo> ();
+            for (ApplicationInfo appInfo : installedAppList) {
+                boolean flag = false;
+                if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
+                    // Updated system app
+                    flag = true;
+                } else if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+                    // Non-system app
+                    flag = true;
+                }
+                if (flag) {
+                    appList.add(appInfo);
+                }
+            }
+            return appList;
+        } else if (filterOption == FILTER_APPS_RUNNING) {
+            List<ApplicationInfo> appList =new ArrayList<ApplicationInfo> ();
+            List<ActivityManager.RunningAppProcessInfo> procList = getRunningAppProcessesList();
+            if ((procList == null) || (procList.size() == 0)) {
+                return appList;
+            }
+            // Retrieve running processes from ActivityManager
+            for (ActivityManager.RunningAppProcessInfo appProcInfo : procList) {
+                if ((appProcInfo != null)  && (appProcInfo.pkgList != null)){
+                    int size = appProcInfo.pkgList.length;
+                    for (int i = 0; i < size; i++) {
+                        ApplicationInfo appInfo = null;
+                        try {
+                            appInfo = mPm.getApplicationInfo(appProcInfo.pkgList[i], 
+                                    PackageManager.GET_UNINSTALLED_PACKAGES);
+                        } catch (NameNotFoundException e) {
+                           Log.w(TAG, "Error retrieving ApplicationInfo for pkg:"+appProcInfo.pkgList[i]);
+                           continue;
+                        }
+                        if(appInfo != null) {
+                            appList.add(appInfo);
+                        }
+                    }
+                }
+            }
+            return appList;
+        } else {
+            return installedAppList;
+        }
+    }
+    
+    private List<ActivityManager.RunningAppProcessInfo> getRunningAppProcessesList() {
+        ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
+        return am.getRunningAppProcesses();
+    }
+    
+    // some initialization code used when kicking off the size computation
+    private void initAppList(int filterOption) {
+        setProgressBarIndeterminateVisibility(true);
+        mComputeIndex = 0;
+        mComputeSizes = false;
+        mLoadLabels = false;
+        // Initialize lists
+        List<ApplicationInfo> appList = getInstalledApps(filterOption);
+        mAddRemoveMap = new TreeMap<String, Boolean>();
+        mAppInfoAdapter.resetAppList(filterOption, appList);
+    }
+    
+    // Utility method to start a thread to read application labels and icons
+    private void initResourceThread() {
+        //load resources now
+        if(mResourceThread.isAlive()) {
+            mResourceThread.interrupt();
+        }
+        mResourceThread.loadAllResources(mAppInfoAdapter.getAppList());
+    }
+    
+    private void initComputeSizes() {
+         // initiate compute pkg sizes
+        if (localLOGV) Log.i(TAG, "Initiating compute sizes for first time");
+        if (mAppInfoAdapter.getCount() > 0) {
+            mObserver.invokeGetSizeInfo(mAppInfoAdapter.getApplicationInfo(0),
+                    COMPUTE_PKG_SIZE_DONE);
+        } else {
+            mComputeSizes = true;
+        }
+    }
+    
+    private void showEmptyViewIfListEmpty() {
+        if (localLOGV) Log.i(TAG, "Checking for empty view");
+        if (mAppInfoAdapter.getCount() > 0) {
+            mListView.setVisibility(View.VISIBLE);
+            mEmptyView.setVisibility(View.GONE);
+        } else {
+            mListView.setVisibility(View.GONE);
+            mEmptyView.setVisibility(View.VISIBLE);
+        }
+    }
+    
+    // internal structure used to track added and deleted packages when
+    // the activity has focus
+    class AddRemoveInfo {
+        String pkgName;
+        boolean add;
+        public AddRemoveInfo(String pPkgName, boolean pAdd) {
+            pkgName = pPkgName;
+            add = pAdd;
+        }
+    }
+    
+    class ResourceLoaderThread extends Thread {
+        List<ApplicationInfo> mAppList;
+        
+        void loadAllResources(List<ApplicationInfo> appList) {
+            mAppList = appList;
+            start();
+        }
+
+        public void run() {
+            Map<String, AppInfo> iconMap = new HashMap<String, AppInfo>();
+            if(mAppList == null || mAppList.size() <= 0) {
+                Log.w(TAG, "Empty or null application list");
+            } else {
+                for (ApplicationInfo appInfo : mAppList) {
+                    CharSequence appName = appInfo.loadLabel(mPm);
+                    Drawable appIcon = appInfo.loadIcon(mPm);
+                    iconMap.put(appInfo.packageName, 
+                            new AppInfo(appInfo.packageName, appName, appIcon));
+                }
+            }
+            Message msg = mHandler.obtainMessage(REFRESH_ICONS);
+            msg.obj = iconMap;
+            mHandler.sendMessage(msg);
+        }
+    }
+    
+    /* Internal class representing an application or packages displayable attributes
+     * 
+     */
+    class AppInfo {
+        public String pkgName;
+        int index;
+        public  CharSequence appName;
+        public  Drawable appIcon;
+        public CharSequence appSize;
+        public PackageStats appStats;
+        
+        public void refreshIcon(AppInfo pInfo) {
+            appName = pInfo.appName;
+            appIcon = pInfo.appIcon;
+        }
+
+        public AppInfo(String pName, CharSequence aName, Drawable aIcon) {
+            index = -1;
+            pkgName = pName;
+            appName = aName;
+            appIcon = aIcon;
+            appStats = null;
+            appSize = mComputingSizeStr;
+        }
+        
+        public AppInfo(String pName, int pIndex, CharSequence aName, Drawable aIcon, 
+                PackageStats ps) {
+            index = pIndex;
+            pkgName = pName;
+            appName = aName;
+            appIcon = aIcon;
+            if(ps == null) {
+                appSize = mComputingSizeStr;
+            } else {
+                appStats = ps;
+                appSize = getSizeStr();
+            }
+        }
+        public void setSize(PackageStats ps) {
+            appStats = ps;
+            if (ps != null) {
+                appSize = getSizeStr();
+            }
+        }
+        public long getTotalSize() {
+            PackageStats ps = appStats;
+            if (ps != null) {
+                return ps.cacheSize+ps.codeSize+ps.dataSize;
+            }
+            return SIZE_INVALID;
+        }
+        
+        private String getSizeStr() {
+            PackageStats ps = appStats;
+            String retStr = "";
+            // insert total size information into map to display in view
+            // at this point its guaranteed that ps is not null. but checking anyway
+            if (ps != null) {
+                long size = getTotalSize();
+                if (size == SIZE_INVALID) {
+                    return mInvalidSizeStr.toString();
+                }
+                return Formatter.formatFileSize(ManageApplications.this, size);
+            }
+            return retStr;
+        }
+    }
+    
+    // View Holder used when displaying views
+    static class AppViewHolder {
+        TextView appName;
+        ImageView appIcon;
+        TextView appSize;
+    }
+    
+    /* Custom adapter implementation for the ListView
+     * This adapter maintains a map for each displayed application and its properties
+     * An index value on each AppInfo object indicates the correct position or index
+     * in the list. If the list gets updated dynamically when the user is viewing the list of
+     * applications, we need to return the correct index of position. This is done by mapping
+     * the getId methods via the package name into the internal maps and indices.
+     * The order of applications in the list is mirrored in mAppLocalList
+     */
+    class AppInfoAdapter extends BaseAdapter {
+        private Map<String, AppInfo> mAppPropMap;
+        private List<ApplicationInfo> mAppLocalList;
+        ApplicationInfo.DisplayNameComparator mAlphaComparator;
+        AppInfoComparator mSizeComparator;
+        
+        private AppInfo getFromCache(String packageName) {
+            if(mAppPropCache == null) {
+                return null;
+            }
+            return mAppPropCache.get(packageName);
+        }
+        
+        public AppInfoAdapter(Context c, List<ApplicationInfo> appList) {
+            mAppLocalList = appList;
+            boolean useCache = false;
+            int sortOrder = SORT_ORDER_ALPHA;
+            int imax = mAppLocalList.size();
+            if(mAppPropCache != null) {
+                useCache = true;
+                // Activity has been resumed. can use the cache to populate values initially
+                mAppPropMap = mAppPropCache;
+                sortOrder = mSortOrder;
+            }
+            sortAppList(sortOrder);
+            // Recreate property map
+            mAppPropMap = new TreeMap<String, AppInfo>();
+            for (int i = 0; i < imax; i++) {
+                ApplicationInfo info = mAppLocalList.get(i);
+                AppInfo aInfo = getFromCache(info.packageName);
+                if(aInfo == null){
+                    aInfo = new AppInfo(info.packageName, i, 
+                            info.packageName, mDefaultAppIcon, null);   
+                } else {
+                    aInfo.index = i;
+                }
+                mAppPropMap.put(info.packageName, aInfo);
+            }
+        }
+        
+        public int getCount() {
+            return mAppLocalList.size();
+        }
+        
+        public Object getItem(int position) {
+            return mAppLocalList.get(position);
+        }
+        
+        /*
+         * This method returns the index of the package position in the application list
+         */
+        public int getIndex(String pkgName) {
+            if(pkgName == null) {
+                Log.w(TAG, "Getting index of null package in List Adapter");
+            }
+            int imax = mAppLocalList.size();
+            ApplicationInfo appInfo;
+            for(int i = 0; i < imax; i++) {
+                appInfo = mAppLocalList.get(i);
+                if(appInfo.packageName.equalsIgnoreCase(pkgName)) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+        
+        public ApplicationInfo getApplicationInfo(int position) {
+            int imax = mAppLocalList.size();
+            if( (position < 0) || (position >= imax)) {
+                Log.w(TAG, "Position out of bounds in List Adapter");
+                return null;
+            }
+            return mAppLocalList.get(position);
+        }
+        
+        public void addApplicationInfo(ApplicationInfo info) {
+            if(info == null) {
+                Log.w(TAG, "Ignoring null add in List Adapter");
+                return;
+            }
+            mAppLocalList.add(info);
+        }
+
+        public long getItemId(int position) {
+            int imax = mAppLocalList.size();
+            if( (position < 0) || (position >= imax)) {
+                Log.w(TAG, "Position out of bounds in List Adapter");
+                return -1;
+            }
+            return mAppPropMap.get(mAppLocalList.get(position).packageName).index;
+        }
+        
+        public List<ApplicationInfo> getAppList() {
+            return mAppLocalList;
+        }
+        
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (position >= mAppLocalList.size()) {
+                Log.w(TAG, "Invalid view position:"+position+", actual size is:"+mAppLocalList.size());
+                return null;
+            }
+            // A ViewHolder keeps references to children views to avoid unneccessary calls
+            // to findViewById() on each row.
+            AppViewHolder holder;
+
+            // When convertView is not null, we can reuse it directly, there is no need
+            // to reinflate it. We only inflate a new View when the convertView supplied
+            // by ListView is null.
+            if (convertView == null) {
+                convertView = mInflater.inflate(R.layout.manage_applications_item, null);
+
+                // Creates a ViewHolder and store references to the two children views
+                // we want to bind data to.
+                holder = new AppViewHolder();
+                holder.appName = (TextView) convertView.findViewById(R.id.app_name);
+                holder.appIcon = (ImageView) convertView.findViewById(R.id.app_icon);
+                holder.appSize = (TextView) convertView.findViewById(R.id.app_size);
+                convertView.setTag(holder);
+            } else {
+                // Get the ViewHolder back to get fast access to the TextView
+                // and the ImageView.
+                holder = (AppViewHolder) convertView.getTag();
+            }
+
+            // Bind the data efficiently with the holder
+            ApplicationInfo appInfo = mAppLocalList.get(position);
+            AppInfo mInfo = mAppPropMap.get(appInfo.packageName);
+            if(mInfo != null) {
+                if(mInfo.appName != null) {
+                    holder.appName.setText(mInfo.appName);
+                }
+                if(mInfo.appIcon != null) {
+                    holder.appIcon.setImageDrawable(mInfo.appIcon);
+                }
+                if (mInfo.appSize != null) {
+                    holder.appSize.setText(mInfo.appSize);
+                }
+            } else {
+                Log.w(TAG, "No info for package:"+appInfo.packageName+" in property map");
+            }
+            return convertView;
+        }
+        
+        private void adjustIndex() {
+            int imax = mAppLocalList.size();
+            ApplicationInfo info;
+            for (int i = 0; i < imax; i++) {
+                info = mAppLocalList.get(i);
+                mAppPropMap.get(info.packageName).index = i;
+            }
+        }
+        
+        public void sortAppList(int sortOrder) {
+            Collections.sort(mAppLocalList, getAppComparator(sortOrder));
+        }
+        
+        public void sortList(int sortOrder) {
+            sortAppList(sortOrder);
+            adjustIndex();
+            notifyDataSetChanged();
+        }
+        
+        public boolean resetAppList(int filterOption, List<ApplicationInfo> appList) {
+           // Create application list based on the filter value
+           mAppLocalList = appList;
+           // Check for all properties in map before sorting. Populate values from cache
+           for(ApplicationInfo applicationInfo : mAppLocalList) {
+               AppInfo appInfo = mAppPropMap.get(applicationInfo.packageName);
+               if(appInfo == null) {
+                   AppInfo rInfo = getFromCache(applicationInfo.packageName);
+                   if(rInfo == null) {
+                       // Need to load resources again. Inconsistency somewhere
+                       return false;
+                   }
+                   mAppPropMap.put(applicationInfo.packageName, rInfo);
+               }
+           }
+           if (mAppLocalList.size() > 0) {
+               sortList(mSortOrder);
+           } else {
+               notifyDataSetChanged();
+           }
+           showEmptyViewIfListEmpty();
+           return true;
+        }
+        
+        private Comparator<ApplicationInfo> getAppComparator(int sortOrder) {
+            if (sortOrder == SORT_ORDER_ALPHA) {
+                // Lazy initialization
+                if (mAlphaComparator == null) {
+                    mAlphaComparator = new ApplicationInfo.DisplayNameComparator(mPm);
+                }
+                return mAlphaComparator;
+            }
+            // Lazy initialization
+            if(mSizeComparator == null) {
+                mSizeComparator = new AppInfoComparator(mAppPropMap);
+            }
+            return mSizeComparator;
+        }
+        
+        public void updateAppsResourceInfo(Map<String, AppInfo> iconMap) {
+            if(iconMap == null) {
+                Log.w(TAG, "Null iconMap when refreshing icon in List Adapter");
+                return;
+            }
+            boolean changed = false;
+            for (ApplicationInfo info : mAppLocalList) {
+                AppInfo pInfo = iconMap.get(info.packageName);
+                if(pInfo != null) {
+                    AppInfo aInfo = mAppPropMap.get(info.packageName);
+                    if (aInfo != null) {
+                        aInfo.refreshIcon(pInfo);
+                    } else {
+                        mAppPropMap.put(info.packageName, pInfo);
+                    }
+                    changed = true;
+                }
+            }
+            if(changed) {
+                notifyDataSetChanged();
+            }
+        }
+        
+        public void addToList(String pkgName, PackageStats ps) {
+            if(pkgName == null) {
+                Log.w(TAG, "Adding null pkg to List Adapter");
+                return;
+            }
+            ApplicationInfo info;
+            try {
+                info = mPm.getApplicationInfo(pkgName, 0);
+            } catch (NameNotFoundException e) {
+                Log.w(TAG, "Ignoring non-existent package:"+pkgName);
+                return;
+            }
+            if(info == null) {
+                // Nothing to do log error message and return
+                Log.i(TAG, "Null ApplicationInfo for package:"+pkgName);
+                return;
+            }
+            // Binary search returns a negative index (ie --index) of the position where
+            // this might be inserted. 
+            int newIdx = Collections.binarySearch(mAppLocalList, info, 
+                    getAppComparator(mSortOrder));
+            if(newIdx >= 0) {
+                Log.i(TAG, "Strange. Package:"+pkgName+" is not new");
+                return;
+            }
+            // New entry
+            newIdx = -newIdx-1;
+            mAppLocalList.add(newIdx, info);
+            mAppPropMap.put(info.packageName, new AppInfo(pkgName, newIdx,
+                    info.loadLabel(mPm), info.loadIcon(mPm), ps));
+            adjustIndex();
+            notifyDataSetChanged();
+        }
+        
+        public void removeFromList(List<String> pkgNames) {
+            if(pkgNames == null) {
+                Log.w(TAG, "Removing null pkg list from List Adapter");
+                return;
+            }
+            int imax = mAppLocalList.size();
+            boolean found = false;
+            ApplicationInfo info;
+            int i, k;
+            String pkgName;
+            int kmax = pkgNames.size();
+            if(kmax  <= 0) {
+                Log.w(TAG, "Removing empty pkg list from List Adapter");
+                return;
+            }
+            int idxArr[] = new int[kmax];
+            for (k = 0; k < kmax; k++) {
+                idxArr[k] = -1;
+            }
+            for (i = 0; i < imax; i++) {
+                info = mAppLocalList.get(i);
+                for (k = 0; k < kmax; k++) {
+                    pkgName = pkgNames.get(k);
+                    if (info.packageName.equalsIgnoreCase(pkgName)) {
+                        idxArr[k] = i;
+                        found = true;
+                        break;
+                    }
+                }
+            }
+            // Sort idxArr
+            Arrays.sort(idxArr);
+            // remove the packages based on decending indices
+            for (k = kmax-1; k >= 0; k--) {
+                // Check if package has been found in the list of existing apps first
+                if(idxArr[k] == -1) {
+                    break;
+                }
+                info = mAppLocalList.get(idxArr[k]);
+                mAppLocalList.remove(idxArr[k]);
+                mAppPropMap.remove(info.packageName);
+                if (localLOGV) Log.i(TAG, "Removed pkg:"+info.packageName+ " list");
+            }
+            if (found) {
+                adjustIndex();
+                notifyDataSetChanged();
+            }
+        }   
+        
+        public void updateAppSize(String pkgName, PackageStats ps) {
+            if(pkgName == null) {
+                return;
+            }
+            AppInfo entry = mAppPropMap.get(pkgName);
+            if (entry == null) {
+                Log.w(TAG, "Entry for package:"+pkgName+"doesnt exist in map");
+                return;
+            }
+            // Copy the index into the newly updated entry
+            entry.setSize(ps);
+            notifyDataSetChanged();
+        }
+
+        public PackageStats getAppStats(String pkgName) {
+            if(pkgName == null) {
+                return null;
+            }
+            AppInfo entry = mAppPropMap.get(pkgName);
+            if (entry == null) {
+                return null;
+            }
+            return entry.appStats;
+        }
+    }
+    
+    /*
+     * Utility method to clear messages to Handler
+     * We need'nt synchronize on the Handler since posting messages is guaranteed
+     * to be thread safe. Even if the other thread that retrieves package sizes
+     * posts a message, we do a cursory check of validity on mAppInfoAdapter's applist
+     */
+    private void clearMessagesInHandler() {
+        mHandler.removeMessages(INIT_PKG_INFO);
+        mHandler.removeMessages(COMPUTE_PKG_SIZE_DONE);
+        mHandler.removeMessages(REMOVE_PKG);
+        mHandler.removeMessages(REORDER_LIST);
+        mHandler.removeMessages(ADD_PKG_START);
+        mHandler.removeMessages(ADD_PKG_DONE);
+    }
+    
+    private void sendMessageToHandler(int msgId, int arg1) {
+        Message msg = mHandler.obtainMessage(msgId);
+        msg.arg1 = arg1;
+        mHandler.sendMessage(msg);
+    }
+    
+    private void sendMessageToHandler(int msgId, Bundle data) {
+        Message msg = mHandler.obtainMessage(msgId);
+        msg.setData(data);
+        mHandler.sendMessage(msg);
+    }
+    
+    private void sendMessageToHandler(int msgId) {
+        mHandler.sendEmptyMessage(msgId);
+    }
+    
+    /*
+     * Stats Observer class used to compute package sizes and retrieve size information
+     * PkgSizeOberver is the call back thats used when invoking getPackageSizeInfo on
+     * PackageManager. The values in call back onGetStatsCompleted are validated
+     * and the specified message is passed to mHandler. The package name
+     * and the AppInfo object corresponding to the package name are set on the message
+     */
+    class PkgSizeObserver extends IPackageStatsObserver.Stub {
+        private ApplicationInfo mAppInfo;
+        private int mMsgId; 
+        public void onGetStatsCompleted(PackageStats pStats, boolean pSucceeded) {
+            if(DEBUG_PKG_DELAY) {
+                try {
+                    Thread.sleep(10*1000);
+                } catch (InterruptedException e) {
+                }
+            }
+            AppInfo appInfo = null;
+            Bundle data = new Bundle();
+            data.putString(ATTR_PKG_NAME, mAppInfo.packageName);
+            if(pSucceeded && pStats != null) {
+                if (localLOGV) Log.i(TAG, "onGetStatsCompleted::"+pStats.packageName+", ("+
+                        pStats.cacheSize+","+
+                        pStats.codeSize+", "+pStats.dataSize);
+                data.putParcelable(ATTR_APP_PKG_STATS, pStats);
+            } else {
+                Log.w(TAG, "Invalid package stats from PackageManager");
+            }
+            //post message to Handler
+            Message msg = mHandler.obtainMessage(mMsgId, data);
+            msg.setData(data);
+            mHandler.sendMessage(msg);
+        }
+
+        public void invokeGetSizeInfo(ApplicationInfo pAppInfo, int msgId) {
+            if(pAppInfo == null || pAppInfo.packageName == null) {
+                return;
+            }
+            if(localLOGV) Log.i(TAG, "Invoking getPackageSizeInfo for package:"+
+                    pAppInfo.packageName);
+            mMsgId = msgId;
+            mAppInfo = pAppInfo;
+            mPm.getPackageSizeInfo(pAppInfo.packageName, this);
+        }
+    }
+    
+    /**
+     * Receives notifications when applications are added/removed.
+     */
+    private class PackageIntentReceiver extends BroadcastReceiver {
+         void registerReceiver() {
+             IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+             filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+             filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+             filter.addDataScheme("package");
+             ManageApplications.this.registerReceiver(this, filter);
+         }
+        @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);
+        }
+    }
+    
+    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
+        if (Intent.ACTION_PACKAGE_ADDED.equalsIgnoreCase(actionStr)) {
+            Bundle data = new Bundle();
+            data.putString(ATTR_PKG_NAME, pkgName);
+            sendMessageToHandler(ADD_PKG_START, data);
+        } else if (Intent.ACTION_PACKAGE_REMOVED.equalsIgnoreCase(actionStr)) {
+            Bundle data = new Bundle();
+            data.putString(ATTR_PKG_NAME, pkgName);
+            sendMessageToHandler(REMOVE_PKG, data);
+        }
+    }
+    
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Intent lIntent = getIntent();
+        String action = lIntent.getAction();
+        if (action.equals(Intent.ACTION_MANAGE_PACKAGE_STORAGE)) {
+            mSortOrder = SORT_ORDER_SIZE;
+            mSizesFirst = true;
+        }
+        mPm = getPackageManager();
+        // initialize some window features
+        requestWindowFeature(Window.FEATURE_RIGHT_ICON);
+        requestWindowFeature(Window.FEATURE_PROGRESS);
+        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+        setContentView(R.layout.compute_sizes);
+        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);
+        mReceiver = new PackageIntentReceiver();
+        mEmptyView = (TextView) findViewById(R.id.empty_view);
+        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);
+        //lv.setAdapter(mAppInfoAdapter);
+        lv.setOnItemClickListener(this);
+        lv.setSaveEnabled(true);
+        lv.setItemsCanFocus(true);
+        lv.setOnItemClickListener(this);
+        mListView = lv;
+        showLoadingMsg();
+    }
+    
+    @Override
+    public Dialog onCreateDialog(int id) {
+        if (id == DLG_LOADING) {
+            ProgressDialog dlg = new ProgressDialog(this);
+            dlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+            dlg.setMessage(getText(R.string.loading));
+            dlg.setIndeterminate(true);        
+            dlg.setOnCancelListener(this);
+            return dlg;
+        }
+        return null;
+    }
+    
+    
+    private void showLoadingMsg() {
+        showDialog(DLG_LOADING);
+        if(localLOGV) Log.i(TAG, "Displaying Loading message");
+    }
+    
+    private void dismissLoadingMsg() {
+        if(localLOGV) Log.i(TAG, "Dismissing Loading message");
+        dismissDialog(DLG_LOADING);
+    }
+    
+    @Override
+    public void onStart() {
+        super.onStart();
+        // Create a thread to load resources
+        mResourceThread = new ResourceLoaderThread();
+        sendMessageToHandler(INIT_PKG_INFO);
+        // register receiver
+        mReceiver.registerReceiver();
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        // clear all messages related to application list
+        clearMessagesInHandler();
+        // register receiver here
+        unregisterReceiver(mReceiver);        
+        mAppPropCache = mAppInfoAdapter.mAppPropMap;
+    }
+    
+    // Avoid the restart and pause when orientation changes
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+    }
+    
+    /*
+     * comparator class used to sort AppInfo objects based on size
+     */
+    public static class AppInfoComparator implements Comparator<ApplicationInfo> {
+        public AppInfoComparator(Map<String, AppInfo> pAppPropMap) {
+            mAppPropMap= pAppPropMap;
+        }
+
+        public final int compare(ApplicationInfo a, ApplicationInfo b) {
+            AppInfo ainfo = mAppPropMap.get(a.packageName);
+            AppInfo binfo = mAppPropMap.get(b.packageName);
+            long atotal = ainfo.getTotalSize();
+            long btotal = binfo.getTotalSize();
+            long ret = atotal - btotal;
+            // negate result to sort in descending order
+            if (ret < 0) {
+                return 1;
+            }
+            if (ret == 0) {
+                return 0;
+            }
+            return -1;
+        }
+        private Map<String, AppInfo> mAppPropMap;
+    }
+     
+    // utility method used to start sub activity
+    private void startApplicationDetailsActivity() {
+        // Create intent to start new activity
+        Intent intent = new Intent(Intent.ACTION_VIEW);
+        intent.setClass(this, InstalledAppDetails.class);
+        intent.putExtra(APP_PKG_NAME, mCurrentPkgName);
+        // start new activity to display extended information
+        startActivityForResult(intent, INSTALLED_APP_DETAILS);
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, SORT_ORDER_ALPHA, 1, R.string.sort_order_alpha)
+                .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;
+    }
+    
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        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;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        int menuId = item.getItemId();
+        if ((menuId == SORT_ORDER_ALPHA) || (menuId == SORT_ORDER_SIZE)) {
+            sendMessageToHandler(REORDER_LIST, menuId);
+        } else if (menuId == FILTER_OPTIONS) {
+            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)},
+                                -1, this).
+                        create();
+            }
+            mAlertDlg.show();
+        }
+        return true;
+    }
+
+    public void onItemClick(AdapterView<?> parent, View view, int position,
+            long id) {
+        ApplicationInfo info = (ApplicationInfo)mAppInfoAdapter.getItem(position);
+        mCurrentPkgName = info.packageName;
+        startApplicationDetailsActivity();
+    }
+    
+    // Finish the activity if the user presses the back button to cancel the activity
+    public void onCancel(DialogInterface dialog) {
+        finish();
+    }
+
+    public void onClick(DialogInterface dialog, int which) {
+        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 0:
+            newOption = FILTER_APPS_ALL;
+            break;
+        case 1:
+            newOption = FILTER_APPS_RUNNING;
+            break;
+        case 2:
+            newOption = FILTER_APPS_THIRD_PARTY;
+            break;
+        default:
+            return;
+        }
+        mAlertDlg.dismiss();
+        sendMessageToHandler(REORDER_LIST, newOption);
+    }
+}
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
new file mode 100644
index 0000000..38ad608
--- /dev/null
+++ b/src/com/android/settings/MasterClear.java
@@ -0,0 +1,205 @@
+/*
+ * 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 com.android.internal.widget.LockPatternUtils;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.ICheckinService;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+
+/**
+ * Confirm and execute a reset of the device to a clean "just out of the box"
+ * state.  Multiple confirmations are required: first, a general "are you sure
+ * you want to do this?" prompt, followed by a keyguard pattern trace if the user
+ * has defined one, followed by a final strongly-worded "THIS WILL ERASE EVERYTHING
+ * ON THE PHONE" prompt.  If at any time the phone is allowed to go to sleep, is
+ * locked, et cetera, then the confirmation sequence is abandoned.
+ */
+public class MasterClear extends Activity {
+
+    private static final int KEYGUARD_REQUEST = 55;
+
+    private LayoutInflater mInflater;
+    private LockPatternUtils mLockUtils;
+
+    private View mInitialView;
+    private Button mInitiateButton;
+
+    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).
+     */
+    private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
+            public void onClick(View v) {
+                
+                // Those monkeys kept committing suicide, so we add this property
+                // to disable going through with the master clear
+                if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
+                    return;
+                }
+                
+                ICheckinService service = 
+                        ICheckinService.Stub.asInterface(ServiceManager.getService("checkin"));
+                if (service != null) {
+                    try {
+                        // This RPC should never return
+                        service.masterClear();
+                    } catch (android.os.RemoteException e) {
+                        // Intentionally blank - there's nothing we can do here
+                        Log.w("MasterClear", "Unable to invoke ICheckinService.masterClear()");
+                    }
+                } else {
+                    Log.w("MasterClear", "Unable to locate ICheckinService");
+                }
+
+                /* If we reach this point, the master clear didn't happen -- the
+                 * service might have been unregistered with the ServiceManager,
+                 * the RPC might have thrown an exception, or for some reason
+                 * the implementation of masterClear() may have returned instead
+                 * of resetting the device.
+                 */
+                new AlertDialog.Builder(MasterClear.this)
+                        .setMessage(getText(R.string.master_clear_failed))
+                        .setPositiveButton(getText(android.R.string.ok), null)
+                        .show();
+            }
+        };
+
+    /**
+     *  Keyguard validation is run using the standard {@link ConfirmLockPattern}
+     * component as a subactivity
+     */
+    private void runKeyguardConfirmation() {
+        final Intent intent = new Intent();
+        intent.setClassName("com.android.settings",
+                "com.android.settings.ConfirmLockPattern");
+        // supply header and footer text in the intent
+        intent.putExtra(ConfirmLockPattern.HEADER_TEXT,
+                getText(R.string.master_clear_gesture_prompt));
+        intent.putExtra(ConfirmLockPattern.FOOTER_TEXT,
+                getText(R.string.master_clear_gesture_explanation));
+        startActivityForResult(intent, KEYGUARD_REQUEST);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        if (requestCode != KEYGUARD_REQUEST) {
+            return;
+        }
+
+        // If the user entered a valid keyguard trace, present the final
+        // confirmation prompt; otherwise, go back to the initial state.
+        if (resultCode == Activity.RESULT_OK) {
+            establishFinalConfirmationState();
+        } else {
+            establishInitialState();
+        }
+    }
+
+    /**
+     * If the user clicks to begin the reset sequence, we next require a
+     * keyguard confirmation if the user has currently enabled one.  If there
+     * is no keyguard available, we simply go to the final confirmation prompt.
+     */
+    private Button.OnClickListener mInitiateListener = new Button.OnClickListener() {
+            public void onClick(View v) {
+                if (mLockUtils.isLockPatternEnabled()) {
+                    runKeyguardConfirmation();
+                } else {
+                    establishFinalConfirmationState();
+                }
+            }
+        };
+
+    /**
+     * Configure the UI for the final confirmation interaction
+     */
+    private void establishFinalConfirmationState() {
+        if (mFinalView == null) {
+            mFinalView = mInflater.inflate(R.layout.master_clear_final, null);
+            mFinalButton =
+                    (Button) mFinalView.findViewById(R.id.execute_master_clear);
+            mFinalButton.setOnClickListener(mFinalClickListener);
+        }
+
+        setContentView(mFinalView);
+    }
+
+    /**
+     * In its initial state, the activity presents a button for the user to
+     * 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
+     * time, then simply reuse the inflated views directly whenever we need
+     * to change contents.
+     */
+    private void establishInitialState() {
+        if (mInitialView == null) {
+            mInitialView = mInflater.inflate(R.layout.master_clear_primary, null);
+            mInitiateButton =
+                    (Button) mInitialView.findViewById(R.id.initiate_master_clear);
+            mInitiateButton.setOnClickListener(mInitiateListener);
+        }
+
+        setContentView(mInitialView);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+
+        mInitialView = null;
+        mFinalView = null;
+        mInflater = LayoutInflater.from(this);
+        mLockUtils = new LockPatternUtils(getContentResolver());
+
+        establishInitialState();
+    }
+
+    /** Abandon all progress through the confirmation sequence by returning
+     * to the initial view any time the activity is interrupted (e.g. by
+     * idle timeout).
+     */
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        establishInitialState();
+    }
+
+}
diff --git a/src/com/android/settings/MediaFormat.java b/src/com/android/settings/MediaFormat.java
new file mode 100644
index 0000000..3594572
--- /dev/null
+++ b/src/com/android/settings/MediaFormat.java
@@ -0,0 +1,193 @@
+/*
+ * 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 com.android.internal.widget.LockPatternUtils;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IMountService;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.os.Environment;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+
+/**
+ * Confirm and execute a format of the sdcard.
+ * Multiple confirmations are required: first, a general "are you sure
+ * you want to do this?" prompt, followed by a keyguard pattern trace if the user
+ * has defined one, followed by a final strongly-worded "THIS WILL ERASE EVERYTHING
+ * ON THE SD CARD" prompt.  If at any time the phone is allowed to go to sleep, is
+ * locked, et cetera, then the confirmation sequence is abandoned.
+ */
+public class MediaFormat extends Activity {
+
+    private static final int KEYGUARD_REQUEST = 55;
+
+    private LayoutInflater mInflater;
+    private LockPatternUtils mLockUtils;
+
+    private View mInitialView;
+    private Button mInitiateButton;
+
+    private View mFinalView;
+    private Button mFinalButton;
+
+    /** 
+     * The user has gone through the multiple confirmation, so now we go ahead
+     * and invoke the Mount Service to format the SD card.
+     */
+    private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
+            public void onClick(View v) {
+                
+                // Those monkeys kept committing suicide, so we add this property
+                // to disable going through with the format
+                if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
+                    return;
+                }
+                IMountService service =
+                        IMountService.Stub.asInterface(ServiceManager.getService("mount"));
+                if (service != null) {
+                    try {
+                        service.formatMedia(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()");
+                    }
+                } else {
+                    Log.w("MediaFormat", "Unable to locate IMountService");
+                }
+            finish();
+            }
+        };
+
+    /**
+     *  Keyguard validation is run using the standard {@link ConfirmLockPattern}
+     * component as a subactivity
+     */
+    private void runKeyguardConfirmation() {
+        final Intent intent = new Intent();
+        intent.setClassName("com.android.settings",
+                "com.android.settings.ConfirmLockPattern");
+        // supply header and footer text in the intent
+        intent.putExtra(ConfirmLockPattern.HEADER_TEXT,
+                getText(R.string.media_format_gesture_prompt));
+        intent.putExtra(ConfirmLockPattern.FOOTER_TEXT,
+                getText(R.string.media_format_gesture_explanation));
+        startActivityForResult(intent, KEYGUARD_REQUEST);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        if (requestCode != KEYGUARD_REQUEST) {
+            return;
+        }
+
+        // If the user entered a valid keyguard trace, present the final
+        // confirmation prompt; otherwise, go back to the initial state.
+        if (resultCode == Activity.RESULT_OK) {
+            establishFinalConfirmationState();
+        } else {
+            establishInitialState();
+        }
+    }
+
+    /**
+     * If the user clicks to begin the reset sequence, we next require a
+     * keyguard confirmation if the user has currently enabled one.  If there
+     * is no keyguard available, we simply go to the final confirmation prompt.
+     */
+    private Button.OnClickListener mInitiateListener = new Button.OnClickListener() {
+            public void onClick(View v) {
+                if (mLockUtils.isLockPatternEnabled()) {
+                    runKeyguardConfirmation();
+                } else {
+                    establishFinalConfirmationState();
+                }
+            }
+        };
+
+    /**
+     * Configure the UI for the final confirmation interaction
+     */
+    private void establishFinalConfirmationState() {
+        if (mFinalView == null) {
+            mFinalView = mInflater.inflate(R.layout.media_format_final, null);
+            mFinalButton =
+                    (Button) mFinalView.findViewById(R.id.execute_media_format);
+            mFinalButton.setOnClickListener(mFinalClickListener);
+        }
+
+        setContentView(mFinalView);
+    }
+
+    /**
+     * In its initial state, the activity presents a button for the user to
+     * 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
+     * time, then simply reuse the inflated views directly whenever we need
+     * to change contents.
+     */
+    private void establishInitialState() {
+        if (mInitialView == null) {
+            mInitialView = mInflater.inflate(R.layout.media_format_primary, null);
+            mInitiateButton =
+                    (Button) mInitialView.findViewById(R.id.initiate_media_format);
+            mInitiateButton.setOnClickListener(mInitiateListener);
+        }
+
+        setContentView(mInitialView);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+
+        mInitialView = null;
+        mFinalView = null;
+        mInflater = LayoutInflater.from(this);
+        mLockUtils = new LockPatternUtils(getContentResolver());
+
+        establishInitialState();
+    }
+
+    /** Abandon all progress through the confirmation sequence by returning
+     * to the initial view any time the activity is interrupted (e.g. by
+     * idle timeout).
+     */
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        establishInitialState();
+    }
+
+}
diff --git a/src/com/android/settings/ProgressCategory.java b/src/com/android/settings/ProgressCategory.java
new file mode 100644
index 0000000..15810b3
--- /dev/null
+++ b/src/com/android/settings/ProgressCategory.java
@@ -0,0 +1,55 @@
+/*
+ * 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.content.Context;
+import android.preference.PreferenceCategory;
+import android.util.AttributeSet;
+import android.view.View;
+
+import java.util.Map;
+
+public class ProgressCategory extends PreferenceCategory {
+
+    private boolean mProgress = false;
+    
+    public ProgressCategory(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setLayoutResource(R.layout.preference_progress_category);
+    }
+    
+    @Override
+    public void onBindView(View view) {
+        super.onBindView(view);
+        View textView = view.findViewById(R.id.scanning_text);
+        View progressBar = view.findViewById(R.id.scanning_progress);
+
+        int visibility = mProgress ? View.VISIBLE : View.INVISIBLE;
+        textView.setVisibility(visibility);
+        progressBar.setVisibility(visibility);
+    }
+    
+    /**
+     * Turn on/off the progress indicator and text on the right.
+     * @param progressOn whether or not the progress should be displayed 
+     */
+    public void setProgress(boolean progressOn) {
+        mProgress = progressOn;
+        notifyChanged();
+    }
+}
+
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
new file mode 100644
index 0000000..80fe3c9
--- /dev/null
+++ b/src/com/android/settings/ProxySelector.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2006 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.app.AlertDialog;
+import android.content.ContentResolver;
+import android.content.Intent;
+import android.net.Proxy;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.text.Selection;
+import android.text.Spannable;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * To start the Proxy Selector activity, create the following intent.
+ *
+ * <code>
+ *      Intent intent = new Intent();
+ *      intent.setClassName("com.android.browser.ProxySelector");
+ *      startActivity(intent);
+ * </code>
+ *
+ * you can add extra options to the intent by using
+ *
+ * <code>
+ *   intent.putExtra(key, value);
+ * </code>
+ *
+ * the extra options are:
+ *
+ * button-label: a string label to display for the okay button
+ * title:        the title of the window
+ * error-text:   If not null, will be used as the label of the error message.
+ */
+public class ProxySelector extends Activity
+{
+    private final static String LOGTAG = "Settings";
+
+    EditText    mHostnameField;
+    EditText    mPortField;
+    Button      mOKButton;
+
+    // Matches blank input, ips, and domain names
+    private static final String HOSTNAME_REGEXP = "^$|^[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*$";
+    private static final Pattern HOSTNAME_PATTERN;
+    static {
+        HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP);
+    }
+
+
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        if (android.util.Config.LOGV) Log.v(LOGTAG, "[ProxySelector] onStart");
+
+        setContentView(R.layout.proxy);
+        initView();
+        populateFields(false);
+    }
+
+    protected void showError(int error) {
+
+        new AlertDialog.Builder(this)
+                .setTitle(R.string.proxy_error)
+                .setMessage(error)
+                .setPositiveButton(R.string.proxy_error_dismiss, null)
+                .show();
+    }
+
+    void initView() {
+
+        mHostnameField = (EditText)findViewById(R.id.hostname);
+        mHostnameField.setOnFocusChangeListener(mOnFocusChangeHandler);
+
+        mPortField = (EditText)findViewById(R.id.port);
+        mPortField.setOnClickListener(mOKHandler);
+        mPortField.setOnFocusChangeListener(mOnFocusChangeHandler);
+
+        mOKButton = (Button)findViewById(R.id.action);
+        mOKButton.setOnClickListener(mOKHandler);
+
+        Button b = (Button)findViewById(R.id.clear);
+        b.setOnClickListener(mClearHandler);
+
+        b = (Button)findViewById(R.id.defaultView);
+        b.setOnClickListener(mDefaultHandler);
+    }
+
+    void populateFields(boolean useDefault) {
+        String hostname = null;
+        int port = -1;
+        if (useDefault) {
+            // Use the default proxy settings provided by the carrier
+            hostname = Proxy.getDefaultHost();
+            port = Proxy.getDefaultPort();
+        } else {
+            // Use the last setting given by the user
+            hostname = Proxy.getHost(this);
+            port = Proxy.getPort(this);
+        }
+
+        if (hostname == null) {
+            hostname = "";
+        }
+
+        mHostnameField.setText(hostname);
+
+        String portStr = port == -1 ? "" : Integer.toString(port);
+        mPortField.setText(portStr);
+
+        Intent intent = getIntent();
+
+        String buttonLabel = intent.getStringExtra("button-label");
+        if (!TextUtils.isEmpty(buttonLabel)) {
+            mOKButton.setText(buttonLabel);
+        }
+
+        String title = intent.getStringExtra("title");
+        if (!TextUtils.isEmpty(title)) {
+            setTitle(title);
+        }
+    }
+
+    /**
+     * validate syntax of hostname and port entries
+     * @return 0 on success, string resource ID on failure
+     */
+    int validate(String hostname, String port) {
+        Matcher match = HOSTNAME_PATTERN.matcher(hostname);
+
+        if (!match.matches()) return R.string.proxy_error_invalid_host;
+
+        if (hostname.length() > 0 && port.length() == 0) {
+            return R.string.proxy_error_empty_port;
+        }
+
+        if (port.length() > 0) {
+            if (hostname.length() == 0) {
+                return R.string.proxy_error_empty_host_set_port;
+            }
+            int portVal = -1;
+            try {
+                portVal = Integer.parseInt(port);
+            } catch (NumberFormatException ex) {
+                return R.string.proxy_error_invalid_port;
+            }
+            if (portVal <= 0 || portVal > 0xFFFF) {
+                return R.string.proxy_error_invalid_port;
+            }
+        }
+        return 0;
+    }
+
+    /**
+     * returns true on success, false if the user must correct something
+     */
+    boolean saveToDb() {
+
+        String hostname = mHostnameField.getText().toString().trim();
+        String portStr = mPortField.getText().toString().trim();
+        int port = -1;
+
+        int result = validate(hostname, portStr);
+        if (result > 0) {
+            showError(result);
+            return false;
+        }
+
+        if (portStr.length() > 0) {
+            try {
+                port = Integer.parseInt(portStr);
+            } catch (NumberFormatException ex) {
+                return false;
+            }
+        }
+
+        // FIXME: The best solution would be to make a better UI that would
+        // disable editing of the text boxes if the user chooses to use the
+        // default settings. i.e. checking a box to always use the default
+        // carrier. http:/b/issue?id=756480
+        // FIXME: This currently will not work if the default host is blank and
+        // the user has cleared the input boxes in order to not use a proxy.
+        // This is a UI problem and can be solved with some better form
+        // controls.
+        // FIXME: If the user types in a proxy that matches the default, should
+        // we keep that setting? Can be fixed with a new UI.
+        ContentResolver res = getContentResolver();
+        if (hostname.equals(Proxy.getDefaultHost())
+                && port == Proxy.getDefaultPort()) {
+            // If the user hit the default button and didn't change any of
+            // the input boxes, treat it as if the user has not specified a
+            // proxy.
+            hostname = null;
+        }
+
+        if (!TextUtils.isEmpty(hostname)) {
+            hostname += ':' + portStr;
+        }
+        Settings.Secure.putString(res, Settings.Secure.HTTP_PROXY, hostname);
+        sendBroadcast(new Intent(Proxy.PROXY_CHANGE_ACTION));
+
+        return true;
+    }
+
+    OnClickListener mOKHandler = new OnClickListener() {
+            public void onClick(View v) {
+                if (saveToDb()) {
+                    finish();
+                }
+            }
+        };
+
+    OnClickListener mClearHandler = new OnClickListener() {
+            public void onClick(View v) {
+                mHostnameField.setText("");
+                mPortField.setText("");
+            }
+        };
+
+    OnClickListener mDefaultHandler = new OnClickListener() {
+            public void onClick(View v) {
+                populateFields(true);
+            }
+        };
+
+    OnFocusChangeListener mOnFocusChangeHandler = new OnFocusChangeListener() {
+            public void onFocusChange(View v, boolean hasFocus) {
+                if (hasFocus) {
+                    TextView textView = (TextView) v;
+                    Selection.selectAll((Spannable) textView.getText());
+                }
+            }
+        };
+}
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
new file mode 100644
index 0000000..dbad45d
--- /dev/null
+++ b/src/com/android/settings/RadioInfo.java
@@ -0,0 +1,1184 @@
+/*
+ * Copyright (C) 2006 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.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.os.AsyncResult;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.INetStatService;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.preference.PreferenceManager;
+import android.telephony.CellLocation;
+import android.telephony.PhoneStateListener;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
+import android.telephony.NeighboringCellInfo;
+import android.telephony.gsm.GsmCellLocation;
+import android.text.format.DateUtils;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.EditText;
+
+import com.android.internal.telephony.Phone;
+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 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.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class RadioInfo extends Activity {
+    private final String TAG = "phone";
+    
+    private static final int EVENT_PHONE_STATE_CHANGED = 100;
+    private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
+    private static final int EVENT_SERVICE_STATE_CHANGED = 300;
+    private static final int EVENT_CFI_CHANGED = 302;
+
+    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;
+
+    private static final int MENU_ITEM_SELECT_BAND  = 0;
+    private static final int MENU_ITEM_VIEW_ADN     = 1;
+    private static final int MENU_ITEM_VIEW_FDN     = 2;
+    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;
+
+    private TextView mImei;
+    private TextView number;
+    private TextView callState;
+    private TextView operatorName;
+    private TextView roamingState;
+    private TextView gsmState;
+    private TextView gprsState;
+    private TextView network;
+    private TextView dBm;
+    private TextView mMwi;
+    private TextView mCfi;
+    private TextView mLocation;
+    private TextView mNeighboringCids;
+    private TextView resets;
+    private TextView attempts;
+    private TextView successes;
+    private TextView disconnects;
+    private TextView sentSinceReceived;
+    private TextView sent;
+    private TextView received;
+    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 Spinner preferredNetworkType;
+
+    private TelephonyManager mTelephonyManager;
+    private Phone phone = null;
+    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;
+    private boolean mMwiValue = false;
+    private boolean mCfiValue = false;
+
+    private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+        @Override
+        public void onDataConnectionStateChanged(int state) {
+            updateDataState();
+            updateDataStats();
+            updatePdpList();
+            updateNetworkType();
+        }
+
+        @Override
+        public void onDataActivity(int direction) {
+            updateDataStats2();
+        }
+
+        @Override
+        public void onCellLocationChanged(CellLocation location) {
+            updateLocation(location);
+        }
+
+        @Override
+        public void onMessageWaitingIndicatorChanged(boolean mwi) {
+            mMwiValue = mwi;
+            updateMessageWaiting();
+        }
+
+        @Override
+        public void onCallForwardingIndicatorChanged(boolean cfi) {
+            mCfiValue = cfi;
+            updateCallRedirect();
+        }
+    };
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            AsyncResult ar;
+            switch (msg.what) {
+                case EVENT_PHONE_STATE_CHANGED:
+                    updatePhoneState();
+                    break;
+
+                case EVENT_SIGNAL_STRENGTH_CHANGED:
+                    updateSignalStrength();
+                    break;
+
+                case EVENT_SERVICE_STATE_CHANGED:
+                    updateServiceState();
+                    updatePowerState();
+                    break;
+
+                case EVENT_QUERY_PREFERRED_TYPE_DONE:
+                    ar= (AsyncResult) msg.obj;
+                    if (ar.exception == null) {
+                        int type = ((int[])ar.result)[0];
+                        preferredNetworkType.setSelection(type, true);
+                    } else {
+                        preferredNetworkType.setSelection(3, true);
+                    }
+                    break;
+                case EVENT_SET_PREFERRED_TYPE_DONE:
+                    ar= (AsyncResult) msg.obj;
+                    if (ar.exception != null) {
+                        phone.getPreferredNetworkType(
+                                obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
+                    }
+                    break;
+                case EVENT_QUERY_NEIGHBORING_CIDS_DONE:
+                    ar= (AsyncResult) msg.obj;
+                    if (ar.exception == null) {
+                        updateNeighboringCids((ArrayList<NeighboringCellInfo>)ar.result);
+                    } else {
+                        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) {
+                        smsc.setText("refresh error");
+                    } else {
+                        byte[] buf = (byte[]) ar.result;
+                        smsc.setText(new String(buf));
+                    }
+                    break;
+                case EVENT_UPDATE_SMSC_DONE:
+                    updateSmscButton.setEnabled(true);
+                    ar= (AsyncResult) msg.obj;
+                    if (ar.exception != null) {
+                        smsc.setText("update error");
+                    }
+                    break;
+                default:
+                    break;
+
+            }
+        }
+    };
+
+    private class OemCommands {
+
+        public  final int OEM_QXDM_SDLOG_DEFAULT_FILE_SIZE = 32;
+        public  final int OEM_QXDM_SDLOG_DEFAULT_MASK = 0;
+        public  final int OEM_QXDM_SDLOG_DEFAULT_MAX_INDEX = 8;
+
+        final int SIZE_OF_INT = 4;
+        final int OEM_FEATURE_ENABLE = 1;
+        final int OEM_FEATURE_DISABLE = 0;
+        final int OEM_SIMPE_FEAUTURE_LEN = 1;
+
+        final int OEM_QXDM_SDLOG_FUNCTAG = 0x00010000;
+        final int OEM_QXDM_SDLOG_LEN = 4;
+        final int OEM_PS_AUTO_ATTACH_FUNCTAG = 0x00020000;
+        final int OEM_CIPHERING_FUNCTAG = 0x00020001;
+        final int OEM_SMSC_UPDATE_FUNCTAG = 0x00020002;
+        final int OEM_SMSC_QUERY_FUNCTAG = 0x00020003;
+        final int OEM_SMSC_QUERY_LEN = 0;
+        
+        /**
+         * 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[] getSmscQueryData() {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            DataOutputStream dos = new DataOutputStream(bos);
+            try {
+                writeIntLittleEndian(dos, OEM_SMSC_QUERY_FUNCTAG);
+                writeIntLittleEndian(dos, OEM_SMSC_QUERY_LEN * SIZE_OF_INT);
+            } catch (IOException e) {
+                return null;
+            }
+            return bos.toByteArray();
+        }
+
+        byte[] getSmscUpdateData(String smsc) {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            DataOutputStream dos = new DataOutputStream(bos);
+            try {
+                byte[] smsc_bytes = smsc.getBytes();
+                writeIntLittleEndian(dos, OEM_SMSC_UPDATE_FUNCTAG);
+                writeIntLittleEndian(dos, smsc_bytes.length);
+                dos.write(smsc_bytes);
+            } 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);
+
+        setContentView(R.layout.radio_info);
+
+        mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
+        phone = PhoneFactory.getDefaultPhone();
+
+        mImei = (TextView) findViewById(R.id.imei);
+        number = (TextView) findViewById(R.id.number);
+        callState = (TextView) findViewById(R.id.call);
+        operatorName = (TextView) findViewById(R.id.operator);
+        roamingState = (TextView) findViewById(R.id.roaming);
+        gsmState = (TextView) findViewById(R.id.gsm);
+        gprsState = (TextView) findViewById(R.id.gprs);
+        network = (TextView) findViewById(R.id.network);
+        dBm = (TextView) findViewById(R.id.dbm);
+        mMwi = (TextView) findViewById(R.id.mwi);
+        mCfi = (TextView) findViewById(R.id.cfi);
+        mLocation = (TextView) findViewById(R.id.location);
+        mNeighboringCids = (TextView) findViewById(R.id.neighboring);
+
+        resets = (TextView) findViewById(R.id.resets);
+        attempts = (TextView) findViewById(R.id.attempts);
+        successes = (TextView) findViewById(R.id.successes);
+        disconnects = (TextView) findViewById(R.id.disconnects);
+        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);
+
+        mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
+        mPingHostname = (TextView) findViewById(R.id.pingHostname);
+        mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
+
+        preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
+        ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
+                android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        
+        preferredNetworkType.setAdapter(adapter);
+        preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
+
+        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);
+        updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
+        refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
+        refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
+        dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
+        dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
+        
+        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(
+                mHandler.obtainMessage(EVENT_QUERY_NEIGHBORING_CIDS_DONE));
+
+        netstat = INetStatService.Stub.asInterface(ServiceManager.getService("netstat"));
+
+        CellLocation.requestLocationUpdate();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        updatePhoneState();
+        updateSignalStrength();
+        updateMessageWaiting();
+        updateCallRedirect();
+        updateServiceState();
+        updateLocation(mTelephonyManager.getCellLocation());
+        updateDataState();
+        updateDataStats();
+        updateDataStats2();
+        updatePowerState();
+        updateQxdmState(null);
+        updateProperties();
+        updateCiphState();
+        updateDnsCheckState();
+
+        Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
+
+        mPhoneStateReceiver.registerIntent();
+        mTelephonyManager.listen(mPhoneStateListener,
+                  PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
+                | PhoneStateListener.LISTEN_DATA_ACTIVITY
+                | PhoneStateListener.LISTEN_CELL_LOCATION
+                | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
+                | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
+
+        mPhoneStateReceiver.unregisterIntent();
+        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label).setOnMenuItemClickListener(mSelectBandCallback)
+                .setAlphabeticShortcut('b');
+        menu.add(1, MENU_ITEM_VIEW_ADN, 0,
+                R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
+        menu.add(1, MENU_ITEM_VIEW_FDN, 0,
+                R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
+        menu.add(1, MENU_ITEM_VIEW_SDN, 0,
+                R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
+        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);
+        return true;
+    }
+
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu)
+    {
+        // Get the TOGGLE DATA menu item in the right state.
+        MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
+        int state = mTelephonyManager.getDataState();
+        boolean visible = true;
+
+        switch (state) {
+            case TelephonyManager.DATA_CONNECTED:
+            case TelephonyManager.DATA_SUSPENDED:
+                item.setTitle(R.string.radioInfo_menu_disableData);
+                break;
+            case TelephonyManager.DATA_DISCONNECTED:
+                item.setTitle(R.string.radioInfo_menu_enableData);
+                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(this.getApplication());
+        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;
+    }
+
+    private boolean isRadioOn() {
+        return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
+    }
+    
+    private void updatePowerState() {
+    	//log("updatePowerState");
+        String buttonText = isRadioOn() ?
+                            getString(R.string.turn_off_radio) :
+                            getString(R.string.turn_on_radio);
+        radioPowerButton.setText(buttonText);    	
+    }
+
+    private void updateQxdmState(Boolean newQxdmStatus) {
+        SharedPreferences sp = 
+          PreferenceManager.getDefaultSharedPreferences(this.getApplication());
+        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(this.getApplication());
+        SharedPreferences.Editor editor = sp.edit();
+        editor.putBoolean(GSMPhone.CIPHERING_KEY, value);
+        editor.commit();
+    }
+
+    private boolean getCiphPref() {
+        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.getApplication());
+        boolean ret = sp.getBoolean(GSMPhone.CIPHERING_KEY, true);
+        return ret;
+    }
+
+    private void updateCiphState() {
+        cipherState.setText(getCiphPref() ? "Ciphering ON" : "Ciphering OFF");
+    }
+
+    private void updateDnsCheckState() {
+        GSMPhone gsmPhone = (GSMPhone) phone;
+        dnsCheckState.setText(gsmPhone.isDnsCheckDisabled() ?
+                "0.0.0.0 allowed" :"0.0.0.0 not allowed");
+    }
+    
+    private final void
+    updateSignalStrength() {
+        int state =
+                mPhoneStateReceiver.getServiceState().getState();
+        Resources r = getResources();
+
+        if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
+                (ServiceState.STATE_POWER_OFF == state)) {
+            dBm.setText("0");
+        }
+        
+        int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
+        
+        if (-1 == signalDbm) signalDbm = 0;
+
+        int signalAsu = mPhoneStateReceiver.getSignalStrength();
+
+        if (-1 == signalAsu) signalAsu = 0;
+
+        dBm.setText(String.valueOf(signalDbm) + " "
+            + r.getString(R.string.radioInfo_display_dbm) + "   "
+            + String.valueOf(signalAsu) + " "
+            + r.getString(R.string.radioInfo_display_asu));
+    }
+
+    private final void updateLocation(CellLocation location) {
+        GsmCellLocation loc = (GsmCellLocation)location;
+        Resources r = getResources();
+
+        int lac = loc.getLac();
+        int cid = loc.getCid();
+
+        mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
+                          + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
+                          + "   "
+                          + r.getString(R.string.radioInfo_cid) + " = "
+                + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
+    }
+
+    private final void updateNeighboringCids(ArrayList<NeighboringCellInfo> cids) {
+        String neighborings = "";
+        if (cids != null) {
+            if ( cids.isEmpty() ) {
+                neighborings = "no neighboring cells";
+            } else {
+                for (NeighboringCellInfo cell : cids) {
+                    neighborings += "{" + Integer.toHexString(cell.getCid()) 
+                    + "@" + cell.getRssi() + "} ";
+                }
+            }
+        } else {
+            neighborings = "unknown";
+        }
+        mNeighboringCids.setText(neighborings);
+    }
+
+    private final void
+    updateMessageWaiting() {
+        mMwi.setText(String.valueOf(mMwiValue));
+    }
+
+    private final void
+    updateCallRedirect() {
+        mCfi.setText(String.valueOf(mCfiValue));
+    }
+
+
+    private final void
+    updateServiceState() {
+        ServiceState serviceState = mPhoneStateReceiver.getServiceState();
+        int state = serviceState.getState();
+        Resources r = getResources();
+        String display = r.getString(R.string.radioInfo_unknown);
+        
+        switch (state) {
+            case ServiceState.STATE_IN_SERVICE:
+                display = r.getString(R.string.radioInfo_service_in);
+                break;
+            case ServiceState.STATE_OUT_OF_SERVICE:
+            case ServiceState.STATE_EMERGENCY_ONLY:
+                display = r.getString(R.string.radioInfo_service_emergency);
+                break;
+            case ServiceState.STATE_POWER_OFF:
+                display = r.getString(R.string.radioInfo_service_off);
+                break;
+        }
+        
+        gsmState.setText(display);
+        
+        if (serviceState.getRoaming()) {
+            roamingState.setText(R.string.radioInfo_roaming_in);
+        } else {
+            roamingState.setText(R.string.radioInfo_roaming_not);
+        }
+
+        operatorName.setText(serviceState.getOperatorAlphaLong());
+    }
+
+    private final void
+    updatePhoneState() {
+        Phone.State state = mPhoneStateReceiver.getPhoneState();
+        Resources r = getResources();
+        String display = r.getString(R.string.radioInfo_unknown);
+
+        switch (state) {
+            case IDLE:
+                display = r.getString(R.string.radioInfo_phone_idle);
+                break;
+            case RINGING:
+                display = r.getString(R.string.radioInfo_phone_ringing);
+                break;
+            case OFFHOOK:
+                display = r.getString(R.string.radioInfo_phone_offhook);
+                break;
+        }
+
+        callState.setText(display);
+    }
+
+    private final void
+    updateDataState() {
+        int state = mTelephonyManager.getDataState();
+        Resources r = getResources();
+        String display = r.getString(R.string.radioInfo_unknown);
+
+        switch (state) {
+            case TelephonyManager.DATA_CONNECTED:
+                display = r.getString(R.string.radioInfo_data_connected);
+                break;
+            case TelephonyManager.DATA_CONNECTING:
+                display = r.getString(R.string.radioInfo_data_connecting);
+                break;
+            case TelephonyManager.DATA_DISCONNECTED:
+                display = r.getString(R.string.radioInfo_data_disconnected);
+                break;
+            case TelephonyManager.DATA_SUSPENDED:
+                display = r.getString(R.string.radioInfo_data_suspended);
+                break;
+        }
+        
+        gprsState.setText(display);
+    }
+
+    private final void updateNetworkType() {
+        Resources r = getResources();
+        String display = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
+                r.getString(R.string.radioInfo_unknown));
+
+        network.setText(display);
+    }
+
+    private final void
+    updateProperties() {
+        String s;
+        Resources r = getResources();
+
+        s = phone.getDeviceId();
+        if (s == null) s = r.getString(R.string.radioInfo_unknown); 
+        mImei.setText(s);
+        
+        s = phone.getLine1Number();
+        if (s == null) s = r.getString(R.string.radioInfo_unknown); 
+        number.setText(s);
+    }
+
+    private final void updateDataStats() {
+        String s;
+
+        s = SystemProperties.get("net.gsm.radio-reset", "0");
+        resets.setText(s);
+
+        s = SystemProperties.get("net.gsm.attempt-gprs", "0");
+        attempts.setText(s);
+
+        s = SystemProperties.get("net.gsm.succeed-gprs", "0");
+        successes.setText(s);
+
+        //s = SystemProperties.get("net.gsm.disconnect", "0");
+        //disconnects.setText(s);
+
+        s = SystemProperties.get("net.ppp.reset-by-timeout", "0");
+        sentSinceReceived.setText(s);
+    }
+
+    private final void updateDataStats2() {
+        Resources r = getResources();
+
+        try {
+            long txPackets = netstat.getMobileTxPackets();
+            long rxPackets = netstat.getMobileRxPackets();
+            long txBytes   = netstat.getMobileTxBytes();
+            long rxBytes   = netstat.getMobileRxBytes();
+    
+            String packets = r.getString(R.string.radioInfo_display_packets);
+            String bytes   = r.getString(R.string.radioInfo_display_bytes);
+    
+            sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
+            received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Ping a IP address.
+     */
+    private final void pingIpAddr() {
+        try {
+            // This is hardcoded IP addr. This is for testing purposes.
+            // We would need to get rid of this before release.
+            String ipAddress = "74.125.47.104";
+            Process p = Runtime.getRuntime().exec("ping -c 1 " + 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";
+        }
+    }
+
+    /**
+     *  Ping a host name
+     */
+    private final void pingHostname() {
+        try {
+            Process p = Runtime.getRuntime().exec("ping -c 1 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";
+        }
+    }
+
+    /**
+     * This function checks for basic functionality of HTTP Client.
+     */
+    private void httpClientTest() {
+        HttpClient client = new DefaultHttpClient();
+        try {
+            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";
+        }
+    }
+
+    private void refreshSmsc() {
+        byte[] data = mOem.getSmscQueryData();
+        if (data == null) return;
+        phone.invokeOemRilRequestRaw(data,
+                mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
+    }
+
+    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 ipAddr = new Thread() {
+            @Override
+            public void run() {
+                pingIpAddr();
+                handler.post(updatePingResults);
+            }
+        };
+        ipAddr.start();
+
+        Thread hostname = new Thread() {
+            @Override
+            public void run() {
+                pingHostname();
+                handler.post(updatePingResults);
+            }
+        };
+        hostname.start();
+
+        Thread httpClient = new Thread() {
+            @Override
+            public void run() {
+                httpClientTest();
+                handler.post(updatePingResults);
+            }
+        };
+        httpClient.start();
+    }
+
+    private final void updatePdpList() {
+        StringBuilder sb = new StringBuilder("========DATA=======\n");
+
+        List<PdpConnection> pdps = phone.getCurrentPdpList();
+
+        for (PdpConnection pdp : pdps) {
+            sb.append("    State: ").append(pdp.getState().toString()).append("\n");
+            if (pdp.getState().isActive()) {
+                long timeElapsed =
+                    (System.currentTimeMillis() - pdp.getConnectionTime())/1000;
+                sb.append("    connected at ")
+                  .append(DateUtils.timeString(pdp.getConnectionTime()))
+                  .append(" and elapsed ")
+                  .append(DateUtils.formatElapsedTime(timeElapsed))
+                  .append("\n    to ")
+                  .append(pdp.getApn().toString())
+                  .append("\ninterface: ")
+                  .append(phone.getInterfaceName(phone.getActiveApnTypes()[0]))
+                  .append("\naddress: ")
+                  .append(phone.getIpAddress(phone.getActiveApnTypes()[0]))
+                  .append("\ngateway: ")
+                  .append(phone.getGateway(phone.getActiveApnTypes()[0]));
+                String[] dns = phone.getDnsServers(phone.getActiveApnTypes()[0]);
+                if (dns != null) {
+                    sb.append("\ndns: ").append(dns[0]).append(", ").append(dns[1]);
+                }
+            } else if (pdp.getState().isInactive()) {
+                sb.append("    disconnected with last try at ")
+                  .append(DateUtils.timeString(pdp.getLastFailTime()))
+                  .append("\n    fail because ")
+                  .append(pdp.getLastFailCause().toString());
+            } else {
+                sb.append("    is connecting to ")
+                  .append(pdp.getApn().toString());
+            }
+            sb.append("\n===================");
+        }
+
+
+        disconnects.setText(sb.toString());
+    }
+
+    private void displayQxdmEnableResult() {
+        String status = mQxdmLogEnabled ? "Start QXDM Log" : "Stop QXDM Log";
+
+        DialogInterface mProgressPanel = 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);
+            // XXX We need to specify the component here because if we don't
+            // the activity manager will try to resolve the type by calling
+            // the content provider, which causes it to be loaded in a process
+            // other than the Dialer process, which causes a lot of stuff to
+            // break.
+            intent.setClassName("com.android.phone",
+                    "com.android.phone.SimContacts");
+            startActivity(intent);
+            return true;
+        }
+    };
+
+    private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
+        public boolean onMenuItemClick(MenuItem item) {
+            Intent intent = new Intent(Intent.ACTION_VIEW);
+            // XXX We need to specify the component here because if we don't
+            // the activity manager will try to resolve the type by calling
+            // the content provider, which causes it to be loaded in a process
+            // other than the Dialer process, which causes a lot of stuff to
+            // break.
+            intent.setClassName("com.android.phone",
+                    "com.android.phone.FdnList");
+            startActivity(intent);
+            return true;
+        }
+    };
+
+    private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
+        public boolean onMenuItemClick(MenuItem item) {
+            Intent intent = new Intent(
+                Intent.ACTION_VIEW, Uri.parse("content://sim/sdn"));
+            // XXX We need to specify the component here because if we don't
+            // the activity manager will try to resolve the type by calling
+            // the content provider, which causes it to be loaded in a process
+            // other than the Dialer process, which causes a lot of stuff to
+            // break.
+            intent.setClassName("com.android.phone",
+                    "com.android.phone.ADNList");
+            startActivity(intent);
+            return true;
+        }
+    };
+
+    private void toggleDataDisabledOnBoot() {
+        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.getApplication());
+        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() {
+        public boolean onMenuItemClick(MenuItem item) {
+            toggleDataDisabledOnBoot();
+            return true;
+        }
+    };
+    
+    private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
+        public boolean onMenuItemClick(MenuItem item) {
+            int state = mTelephonyManager.getDataState();
+            switch (state) {
+                case TelephonyManager.DATA_CONNECTED:
+                    phone.disableDataConnectivity();
+                    break;
+                case TelephonyManager.DATA_DISCONNECTED:
+                    phone.enableDataConnectivity();
+                    break;
+                default:
+                    // do nothing
+                    break;
+            }
+            return true;
+        }
+    };
+
+    private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
+        public boolean onMenuItemClick(MenuItem item) {
+            phone.getPdpContextList(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"));
+            phone.setRadioPower(!isRadioOn());
+        }
+    };
+
+    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) {
+            GSMPhone gsmPhone = (GSMPhone) phone;
+            gsmPhone.disableDnsCheck(!gsmPhone.isDnsCheckDisabled());
+            updateDnsCheckState();
+        }
+    };
+    
+    OnClickListener mPingButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            updatePingState();
+        }
+    };
+
+    OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            updateSmscButton.setEnabled(false);
+            byte[] data = mOem.getSmscUpdateData(smsc.getText().toString());
+            if (data == null) return;
+            phone.invokeOemRilRequestRaw(data,
+                    mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
+        }
+    };
+
+    OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            refreshSmsc();
+        }
+    };
+
+    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) {
+            Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
+            if (pos>=0 && pos<=2) {
+                phone.setPreferredNetworkType(pos, msg);
+            }
+        }
+
+        public void onNothingSelected(AdapterView parent) {
+        }
+    };
+
+    private String[] mPreferredNetworkLabels = {
+            "WCDMA preferred", "GSM only", "WCDMA only", "Unknown"};
+}
diff --git a/src/com/android/settings/RingerVolumePreference.java b/src/com/android/settings/RingerVolumePreference.java
new file mode 100644
index 0000000..2d21ec6
--- /dev/null
+++ b/src/com/android/settings/RingerVolumePreference.java
@@ -0,0 +1,129 @@
+/*
+ * 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.content.Context;
+import android.media.AudioManager;
+import android.preference.VolumePreference;
+import android.preference.VolumePreference.SeekBarVolumizer;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+/**
+ * Special preference type that allows configuration of both the ring volume and
+ * notification volume.
+ */
+public class RingerVolumePreference extends VolumePreference implements
+        CheckBox.OnCheckedChangeListener {
+    private static final String TAG = "RingerVolumePreference";
+
+    private CheckBox mNotificationsUseRingVolumeCheckbox;
+    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);
+    }
+
+    @Override
+    protected void onBindDialogView(View view) {
+        super.onBindDialogView(view);
+     
+        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());
+    }
+
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        super.onDialogClosed(positiveResult);
+        
+        if (!positiveResult && mNotificationSeekBarVolumizer != null) {
+            mNotificationSeekBarVolumizer.revertVolume();
+        }
+        
+        cleanup();
+    }
+
+    @Override
+    public void onActivityStop() {
+        super.onActivityStop();
+        cleanup();
+    }
+    
+    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+        setNotificationVolumeVisibility(!isChecked);
+        
+        Settings.System.putInt(getContext().getContentResolver(),
+                Settings.System.NOTIFICATIONS_USE_RING_VOLUME, isChecked ? 1 : 0);
+        
+        if (isChecked) {
+            // The user wants the notification to be same as ring, so do a
+            // one-time sync right now
+            AudioManager audioManager = (AudioManager) getContext()
+                    .getSystemService(Context.AUDIO_SERVICE);
+            audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,
+                    audioManager.getStreamVolume(AudioManager.STREAM_RING), 0);
+        }
+    }
+
+    @Override
+    protected void onSampleStarting(SeekBarVolumizer volumizer) {
+        super.onSampleStarting(volumizer);
+        
+        if (mNotificationSeekBarVolumizer != null && volumizer != mNotificationSeekBarVolumizer) {
+            mNotificationSeekBarVolumizer.stopSample();
+        }
+    }
+
+    private void setNotificationVolumeVisibility(boolean visible) {
+        if (mNotificationSeekBarVolumizer != null) {
+            mNotificationSeekBarVolumizer.getSeekBar().setVisibility(
+                    visible ? View.VISIBLE : View.GONE);
+            mNotificationVolumeTitle.setVisibility(visible ? View.VISIBLE : View.GONE);
+        }
+    }
+    
+    private void cleanup() {
+        if (mNotificationSeekBarVolumizer != null) {
+            mNotificationSeekBarVolumizer.stop();
+            mNotificationSeekBarVolumizer = null;
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/SdCardIntentReceiver.java b/src/com/android/settings/SdCardIntentReceiver.java
new file mode 100644
index 0000000..9648ec1
--- /dev/null
+++ b/src/com/android/settings/SdCardIntentReceiver.java
@@ -0,0 +1,70 @@
+/*
+ * 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;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.BroadcastReceiver;
+import android.util.Config;
+import android.util.Log;
+
+/**
+ * 
+ */
+public class SdCardIntentReceiver extends BroadcastReceiver {
+
+    private static final int SDCARD_STATUS = 1;
+    private static final String TAG = "SdCardIntentReceiver";
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        NotificationManager nm = (NotificationManager) context
+                .getSystemService(Context.NOTIFICATION_SERVICE);
+        String action = intent.getAction();
+        if (Config.LOGD) Log.d(TAG, "onReceiveIntent " + action);
+
+        if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
+            nm.cancel(SDCARD_STATUS);
+
+            Intent statusIntent = new Intent(Intent.ACTION_MAIN, null);
+            statusIntent.setClass(context, SdCardSettings.class);
+            nm.notify(SDCARD_STATUS, new Notification(context,
+                    android.R.drawable.stat_notify_sdcard,
+                    null,
+                    System.currentTimeMillis(),
+                    context.getText(R.string.sdcard_setting),
+                    null,
+                    statusIntent));
+        } else if (action.equals(Intent.ACTION_MEDIA_REMOVED)) {
+            nm.cancel(SDCARD_STATUS);
+        } else if (action.equals(Intent.ACTION_MEDIA_SHARED)) {
+            nm.cancel(SDCARD_STATUS);
+
+            Intent statusIntent = new Intent(Intent.ACTION_MAIN, null);
+            statusIntent.setClass(context, SdCardSettings.class);
+            nm.notify(SDCARD_STATUS, new Notification(context,
+                    android.R.drawable.stat_notify_sdcard_usb,
+                    null,
+                    System.currentTimeMillis(),
+                    "SD Card",
+                    null,
+                    statusIntent));
+        }
+    }
+}
diff --git a/src/com/android/settings/SdCardSettings.java b/src/com/android/settings/SdCardSettings.java
new file mode 100644
index 0000000..b6935a2
--- /dev/null
+++ b/src/com/android/settings/SdCardSettings.java
@@ -0,0 +1,232 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.Environment;
+import android.os.IMountService;
+import android.os.ServiceManager;
+import android.os.StatFs;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.TextView;
+
+import java.io.File;
+
+
+public class SdCardSettings extends Activity
+{
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setContentView(R.layout.sdcard_settings_screen);
+
+        mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));
+
+        mRemovedLayout = findViewById(R.id.removed);
+        mMountedLayout = findViewById(R.id.mounted);
+        mUnmountedLayout = findViewById(R.id.unmounted);
+        mScanningLayout = findViewById(R.id.scanning);
+        mSharedLayout = findViewById(R.id.shared);
+        mBadRemovalLayout = findViewById(R.id.bad_removal);
+        mReadOnlyStatus = findViewById(R.id.read_only);
+
+        mMassStorage = (CheckBox)findViewById(R.id.mass_storage);
+        mMassStorage.setOnClickListener(mMassStorageListener);
+
+        Button unmountButton = (Button)findViewById(R.id.sdcard_unmount);
+        unmountButton.setOnClickListener(mUnmountButtonHandler);
+
+        Button formatButton = (Button)findViewById(R.id.sdcard_format);
+        formatButton.setOnClickListener(mFormatButtonHandler);
+
+        mTotalSize = (TextView)findViewById(R.id.total);
+        mUsedSize = (TextView)findViewById(R.id.used);
+        mAvailableSize = (TextView)findViewById(R.id.available);
+
+        // install an intent filter to receive SD card related events.
+        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_CHECKING);
+        intentFilter.addAction(Intent.ACTION_MEDIA_NOFS);
+        intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
+        intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
+        intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
+        intentFilter.addDataScheme("file");
+        registerReceiver(mReceiver, intentFilter);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        update();
+    }
+
+    private void setLayout(View layout) {
+        mRemovedLayout.setVisibility(layout == mRemovedLayout ? View.VISIBLE : View.GONE);
+        mMountedLayout.setVisibility(layout == mMountedLayout ? View.VISIBLE : View.GONE);
+        mUnmountedLayout.setVisibility(layout == mUnmountedLayout ? View.VISIBLE : View.GONE);
+        mScanningLayout.setVisibility(layout == mScanningLayout ? View.VISIBLE : View.GONE);
+        mSharedLayout.setVisibility(layout == mSharedLayout ? View.VISIBLE : View.GONE);
+        mBadRemovalLayout.setVisibility(layout == mBadRemovalLayout ? View.VISIBLE : View.GONE);
+    }
+
+    private void update() {
+        try {
+            mMassStorage.setChecked(mMountService.getMassStorageEnabled());
+        } catch (RemoteException ex) {
+        }
+
+        String scanVolume = null; // this no longer exists: SystemProperties.get(MediaScanner.CURRENT_VOLUME_PROPERTY, "");
+        boolean scanning = "external".equals(scanVolume);
+
+        if (scanning) {
+            setLayout(mScanningLayout);
+        } else {
+            String status = Environment.getExternalStorageState();
+            boolean readOnly = false;
+
+            if (status.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
+                status = Environment.MEDIA_MOUNTED;
+                readOnly = true;
+            }
+
+            if (status.equals(Environment.MEDIA_MOUNTED)) {
+                try {
+                    File path = Environment.getExternalStorageDirectory();
+                    StatFs stat = new StatFs(path.getPath());
+                    long blockSize = stat.getBlockSize();
+                    long totalBlocks = stat.getBlockCount();
+                    long availableBlocks = stat.getAvailableBlocks();
+
+                    mTotalSize.setText(formatSize(totalBlocks * blockSize));
+                    mUsedSize.setText(formatSize((totalBlocks - availableBlocks) * blockSize));
+                    mAvailableSize.setText(formatSize(availableBlocks * blockSize));
+                } catch (IllegalArgumentException e) {
+                    // this can occur if the SD card is removed, but we haven't received the
+                    // ACTION_MEDIA_REMOVED Intent yet.
+                    status = Environment.MEDIA_REMOVED;
+                }
+
+                mReadOnlyStatus.setVisibility(readOnly ? View.VISIBLE : View.GONE);
+                setLayout(mMountedLayout);
+            } else if (status.equals(Environment.MEDIA_UNMOUNTED)) {
+                setLayout(mUnmountedLayout);
+            } else if (status.equals(Environment.MEDIA_REMOVED)) {
+                setLayout(mRemovedLayout);
+            } else if (status.equals(Environment.MEDIA_SHARED)) {
+                setLayout(mSharedLayout);
+            } else if (status.equals(Environment.MEDIA_BAD_REMOVAL)) {
+                setLayout(mBadRemovalLayout);
+            }
+        }
+    }
+
+    private String formatSize(long size) {
+        String suffix = null;
+
+        // add K or M suffix if size is greater than 1K or 1M
+        if (size >= 1024) {
+            suffix = "K";
+            size /= 1024;
+            if (size >= 1024) {
+                suffix = "M";
+                size /= 1024;
+            }
+        }
+
+        StringBuilder resultBuffer = new StringBuilder(Long.toString(size));
+
+        int commaOffset = resultBuffer.length() - 3;
+        while (commaOffset > 0) {
+            resultBuffer.insert(commaOffset, ',');
+            commaOffset -= 3;
+        }
+
+        if (suffix != null)
+            resultBuffer.append(suffix);
+        return resultBuffer.toString();
+    }
+
+    OnClickListener mMassStorageListener = new OnClickListener() {
+        public void onClick(View v) {
+            try {
+                mMountService.setMassStorageEnabled(mMassStorage.isChecked());
+            } catch (RemoteException ex) {
+            }
+        }
+    };
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            update();
+        }
+    };
+
+    OnClickListener mUnmountButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            try {
+                mMountService.unmountMedia(Environment.getExternalStorageDirectory().toString());
+            } catch (RemoteException ex) {
+            }
+        }
+    };
+
+    OnClickListener mFormatButtonHandler = new OnClickListener() {
+        public void onClick(View v) {
+            try {
+                mMountService.formatMedia(Environment.getExternalStorageDirectory().toString());
+            } catch (RemoteException ex) {
+            }
+        }
+    };
+
+
+    private int         mStatus;
+    private IMountService   mMountService;
+
+    private CheckBox    mMassStorage;
+
+    private TextView    mTotalSize;
+    private TextView    mUsedSize;
+    private TextView    mAvailableSize;
+
+    private View        mRemovedLayout;
+    private View        mMountedLayout;
+    private View        mUnmountedLayout;
+    private View        mScanningLayout;
+    private View        mSharedLayout;
+    private View        mBadRemovalLayout;
+    private View        mReadOnlyStatus;
+}
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
new file mode 100644
index 0000000..cd26492
--- /dev/null
+++ b/src/com/android/settings/SecuritySettings.java
@@ -0,0 +1,304 @@
+/*
+ * 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;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.util.Config;
+import android.util.Log;
+
+import com.android.internal.widget.LockPatternUtils;
+
+/**
+ * Gesture lock pattern settings.
+ */
+public class SecuritySettings extends PreferenceActivity
+    implements SharedPreferences.OnSharedPreferenceChangeListener {
+
+    // Lock Settings
+    
+    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_REQUEST_CODE = 55;
+    private static final int CONFIRM_PATTERN_THEN_ENABLE_REQUEST_CODE = 56;
+
+    private LockPatternUtils mLockPatternUtils;
+    private CheckBoxPreference mLockEnabled;
+    private CheckBoxPreference mVisiblePattern;
+    private CheckBoxPreference mTactileFeedback;
+    private Preference mChoosePattern;
+
+    private CheckBoxPreference mShowPassword;
+    
+    // Location Settings
+    
+    private static final String LOCATION_NETWORK = "location_network";
+    private static final String LOCATION_GPS = "location_gps";
+
+    private CheckBoxPreference mNetwork;
+    private CheckBoxPreference mGps;
+    private LocationManager mLocationManager;
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.security_settings);
+
+        mLockPatternUtils = new LockPatternUtils(getContentResolver());
+
+        createPreferenceHierarchy();
+        
+        // Get the available location providers
+        mLocationManager = (LocationManager)
+            getSystemService(Context.LOCATION_SERVICE);
+
+        mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK);
+        mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS);
+        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+        updateToggles();
+    }
+
+    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);
+
+        // 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);
+
+        // visible pattern
+        mVisiblePattern = new CheckBoxPreference(this);
+        mVisiblePattern.setKey(KEY_VISIBLE_PATTERN);
+        mVisiblePattern.setTitle(R.string.lockpattern_settings_enable_visible_pattern_title);
+        inlinePrefCat.addPreference(mVisiblePattern);
+
+        // 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);
+
+        // 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);
+        
+        PreferenceScreen simLockPreferences = getPreferenceManager()
+                .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.SimLockSettings");
+        simLockPreferences.setIntent(intent);
+        
+        PreferenceCategory simLockCat = new PreferenceCategory(this);
+        simLockCat.setTitle(R.string.sim_lock_settings_title);
+        root.addPreference(simLockCat);
+        simLockCat.addPreference(simLockPreferences);
+
+        // Passwords
+        PreferenceCategory passwordsCat = new PreferenceCategory(this);
+        passwordsCat.setTitle(R.string.security_passwords_title);
+        root.addPreference(passwordsCat);
+        
+        CheckBoxPreference showPassword = mShowPassword = new CheckBoxPreference(this);
+        showPassword.setKey("show_password");
+        showPassword.setTitle(R.string.show_password);
+        showPassword.setSummary(R.string.show_password_summary);
+        showPassword.setPersistent(false);
+        passwordsCat.addPreference(showPassword);
+        
+        return root;
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        boolean patternExists = mLockPatternUtils.savedPatternExists();
+        mLockEnabled.setEnabled(patternExists);
+        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);
+        
+        mShowPassword
+                .setChecked(Settings.System.getInt(getContentResolver(),
+                Settings.System.TEXT_SHOW_PASSWORD, 1) != 0);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+            Preference preference) {
+        final String key = preference.getKey();
+
+        if (KEY_LOCK_ENABLED.equals(key)) {
+            mLockPatternUtils.setLockPatternEnabled(isToggled(preference));
+        } else if (KEY_VISIBLE_PATTERN.equals(key)) {
+            mLockPatternUtils.setVisiblePatternEnabled(isToggled(preference));
+        } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) {
+            mLockPatternUtils.setTactileFeedbackEnabled(isToggled(preference));
+        } else if (preference == mShowPassword) {
+            Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD,
+                    mShowPassword.isChecked() ? 1 : 0);
+        }
+        
+        return false;
+    }
+
+    /*
+     * Creates toggles for each available location provider
+     */
+    private void updateToggles() {
+        String providers = getAllowedProviders();
+        mNetwork.setChecked(providers.contains(LocationManager.NETWORK_PROVIDER));
+        mGps.setChecked(providers.contains(LocationManager.GPS_PROVIDER));
+    }
+
+    private void updateProviders() {
+        String preferredProviders = "";
+        if (mNetwork.isChecked()) {
+            preferredProviders += LocationManager.NETWORK_PROVIDER;
+        }
+        if (mGps.isChecked()) {
+            preferredProviders += "," + LocationManager.GPS_PROVIDER;
+        }
+        setProviders(preferredProviders);
+    }
+
+    private void setProviders(String providers) {
+        // Update the secure setting LOCATION_PROVIDERS_ALLOWED
+        Settings.Secure.putString(getContentResolver(),
+            Settings.Secure.LOCATION_PROVIDERS_ALLOWED, providers);
+        if (Config.LOGV) {
+            Log.v("Location Accuracy", "Setting LOCATION_PROVIDERS_ALLOWED = " + providers);
+        }
+        // Inform the location manager about the changes
+        mLocationManager.updateProviders();
+    }
+
+    /**
+     * @return string containing a list of providers that have been enabled for use
+     */
+    private String getAllowedProviders() {
+        String allowedProviders =
+            Settings.Secure.getString(getContentResolver(),
+                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
+        if (allowedProviders == null) {
+            allowedProviders = "";
+        }
+        return allowedProviders;
+    }
+
+    public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
+        if (LOCATION_NETWORK.equals(key) || LOCATION_GPS.equals(key)) {
+            updateProviders();
+        }
+    }
+
+    private boolean isToggled(Preference pref) {
+        return ((CheckBoxPreference) pref).isChecked();
+    }
+
+
+    /**
+     * 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()) {
+                if (isChecked()) {
+                    confirmPatternThenDisable();
+                } else {
+                    confirmPatternThenEnable();
+                }
+            } else {
+                super.onClick();
+            }
+        }
+    }
+
+    private void confirmPatternThenEnable() {
+        final Intent intent = new Intent();
+        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
+        startActivityForResult(intent, CONFIRM_PATTERN_THEN_ENABLE_REQUEST_CODE);
+    }
+
+    /**
+     * Launch screen to confirm the existing lock pattern.
+     * @see #onActivityResult(int, int, android.content.Intent)
+     */
+    private void confirmPatternThenDisable() {
+        final Intent intent = new Intent();
+        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
+        startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_REQUEST_CODE);
+    }
+
+    /**
+     * @see #confirmPatternThenDisable
+     */
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode,
+            Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        final boolean resultOk = resultCode == Activity.RESULT_OK;
+
+        if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_REQUEST_CODE) && resultOk) {
+            mLockPatternUtils.setLockPatternEnabled(false);
+        } else if ((requestCode == CONFIRM_PATTERN_THEN_ENABLE_REQUEST_CODE) && resultOk) {
+            mLockPatternUtils.setLockPatternEnabled(true);
+        }
+    }
+}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
new file mode 100644
index 0000000..0c4545e
--- /dev/null
+++ b/src/com/android/settings/Settings.java
@@ -0,0 +1,46 @@
+/*
+ * 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.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.provider.Settings.System;
+
+public class Settings extends PreferenceActivity {
+
+    private static final String KEY_PARENT = "parent";
+    private static final String KEY_CALL_SETTINGS = "call_settings";
+    private static final String KEY_SYNC_SETTINGS = "sync_settings";
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        addPreferencesFromResource(R.xml.settings);
+        
+        PreferenceGroup parent = (PreferenceGroup) findPreference(KEY_PARENT);
+        Utils.updatePreferenceToSpecificActivityOrRemove(this, parent, KEY_SYNC_SETTINGS, 0);
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        findPreference(KEY_CALL_SETTINGS).setEnabled(!AirplaneModeEnabler.isAirplaneModeOn(this));
+    }
+
+}
diff --git a/src/com/android/settings/SettingsLicenseActivity.java b/src/com/android/settings/SettingsLicenseActivity.java
new file mode 100644
index 0000000..0b809e1
--- /dev/null
+++ b/src/com/android/settings/SettingsLicenseActivity.java
@@ -0,0 +1,123 @@
+/*
+ * 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;
+
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.text.TextUtils;
+import android.util.Config;
+import android.util.Log;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Toast;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.zip.GZIPInputStream;
+
+import com.android.internal.app.AlertActivity;
+import com.android.internal.app.AlertController;
+
+/**
+ * The "dialog" that shows from "License" in the Settings app.
+ */
+public class SettingsLicenseActivity extends AlertActivity {
+
+    private static final String TAG = "SettingsLicenseActivity";
+    private static final boolean LOGV = false || Config.LOGV;
+
+    private static final String DEFAULT_LICENSE_PATH = "/system/etc/NOTICE.html.gz";
+    private static final String PROPERTY_LICENSE_PATH = "ro.config.license_path";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        String fileName = SystemProperties.get(PROPERTY_LICENSE_PATH, DEFAULT_LICENSE_PATH);
+        if (TextUtils.isEmpty(fileName)) {
+            Log.e(TAG, "The system property for the license file is empty.");
+            showErrorAndFinish();
+            return;
+        }
+
+        InputStreamReader inputReader = null;
+        StringBuilder data = null;
+        try {
+            data = new StringBuilder(2048);
+            char tmp[] = new char[2048];
+            int numRead;
+            if (fileName.endsWith(".gz")) {
+                inputReader = new InputStreamReader(
+                    new GZIPInputStream(new FileInputStream(fileName)));
+            } else {
+                inputReader = new FileReader(fileName);
+            }
+            while ((numRead = inputReader.read(tmp)) >= 0) {
+                data.append(tmp, 0, numRead);
+            }
+        } catch (FileNotFoundException e) {
+            Log.e(TAG, "License HTML file not found at " + fileName, e);
+            showErrorAndFinish();
+            return;
+        } catch (IOException e) {
+            Log.e(TAG, "Error reading license HTML file at " + fileName, e);
+            showErrorAndFinish();
+            return;
+        } finally {
+            try {
+                if (inputReader != null) {
+                    inputReader.close();
+                }
+            } catch (IOException e) {
+            }
+        }
+
+        if (TextUtils.isEmpty(data)) {
+            Log.e(TAG, "License HTML is empty (from " + fileName + ")");
+            showErrorAndFinish();
+            return;
+        }
+
+        WebView webView = new WebView(this);
+
+        // Begin the loading.  This will be done in a separate thread in WebView.
+        webView.loadDataWithBaseURL(null, data.toString(), "text/html", "utf-8", null);
+        webView.setWebViewClient(new WebViewClient() {
+            @Override
+            public void onPageFinished(WebView view, String url) {
+                // Change from 'Loading...' to the real title
+                mAlert.setTitle(getString(R.string.settings_license_activity_title));
+            }
+        });
+
+        final AlertController.AlertParams p = mAlertParams;
+        p.mTitle = getString(R.string.settings_license_activity_loading);
+        p.mView = webView;
+        p.mForceInverseBackground = true;
+        setupAlert();
+    }
+
+    private void showErrorAndFinish() {
+        Toast.makeText(this, R.string.settings_license_activity_unavailable, Toast.LENGTH_LONG)
+                .show();
+        finish();
+    }
+
+}
diff --git a/src/com/android/settings/SimLockSettings.java b/src/com/android/settings/SimLockSettings.java
new file mode 100644
index 0000000..286e3d6
--- /dev/null
+++ b/src/com/android/settings/SimLockSettings.java
@@ -0,0 +1,321 @@
+/*
+ * 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.content.Context;
+import android.content.res.Resources;
+import android.os.AsyncResult;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.CheckBoxPreference;
+import android.preference.PreferenceScreen;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
+import android.widget.Toast;
+
+/**
+ * Implements the preference screen to enable/disable SIM lock and
+ * also the dialogs to change the SIM PIN. In the former case, enabling/disabling
+ * the SIM lock will prompt the user for the current PIN.
+ * In the Change PIN case, it prompts the user for old pin, new pin and new pin
+ * again before attempting to change it. Calls the SimCard interface to execute
+ * these operations.
+ *
+ */
+public class SimLockSettings extends PreferenceActivity 
+        implements EditPinPreference.OnPinEnteredListener {
+
+    private static final int OFF_MODE = 0;
+    // State when enabling/disabling SIM lock
+    private static final int SIM_LOCK_MODE = 1;
+    // State when entering the old pin
+    private static final int SIM_OLD_MODE = 2;
+    // State when entering the new pin - first time
+    private static final int SIM_NEW_MODE = 3;
+    // State when entering the new pin - second time
+    private static final int SIM_REENTER_MODE = 4;
+    
+    // Keys in xml file
+    private static final String PIN_DIALOG = "sim_pin";
+    private static final String PIN_TOGGLE = "sim_toggle";
+    // Keys in icicle
+    private static final String DIALOG_STATE = "dialogState";
+    private static final String DIALOG_PIN = "dialogPin";
+    private static final String DIALOG_ERROR = "dialogError";
+    private static final String ENABLE_TO_STATE = "enableState";
+    
+    private static final int MIN_PIN_LENGTH = 4;
+    private static final int MAX_PIN_LENGTH = 8;
+    // Which dialog to show next when popped up
+    private int mDialogState = OFF_MODE;
+    
+    private String mPin;
+    private String mOldPin;
+    private String mNewPin;
+    private String mError;
+    // Are we trying to enable or disable SIM lock?
+    private boolean mToState;
+    
+    private Phone mPhone;
+    
+    private EditPinPreference mPinDialog;
+    private CheckBoxPreference mPinToggle;
+    
+    private Resources mRes;
+
+    // For async handler to identify request type
+    private static final int ENABLE_SIM_PIN_COMPLETE = 100;
+    private static final int CHANGE_SIM_PIN_COMPLETE = 101;
+
+    // For replies from SimCard interface
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            AsyncResult ar = (AsyncResult) msg.obj;
+            switch (msg.what) {
+                case ENABLE_SIM_PIN_COMPLETE:
+                    simLockChanged(ar.exception == null);
+                    break;
+                case CHANGE_SIM_PIN_COMPLETE:
+                    simPinChanged(ar.exception == null);
+                    break;
+            }
+
+            return;
+        }
+    };
+    
+    // For top-level settings screen to query
+    static boolean isSimLockEnabled() {
+        return PhoneFactory.getDefaultPhone().getSimCard().getSimLockEnabled();
+    }
+    
+    static String getSummary(Context context) {
+        Resources res = context.getResources();
+        String summary = isSimLockEnabled() 
+                ? res.getString(R.string.sim_lock_on) 
+                : res.getString(R.string.sim_lock_off);
+        return summary;
+    }
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    
+        addPreferencesFromResource(R.xml.sim_lock_settings);
+        
+        mPinDialog = (EditPinPreference) findPreference(PIN_DIALOG);
+        mPinToggle = (CheckBoxPreference) findPreference(PIN_TOGGLE);
+        if (savedInstanceState != null && savedInstanceState.containsKey(DIALOG_STATE)) {
+            mDialogState = savedInstanceState.getInt(DIALOG_STATE);
+            mPin = savedInstanceState.getString(DIALOG_PIN);
+            mError = savedInstanceState.getString(DIALOG_ERROR);
+            mToState = savedInstanceState.getBoolean(ENABLE_TO_STATE);
+        }
+
+        mPinDialog.setOnPinEnteredListener(this);
+        
+        // Don't need any changes to be remembered
+        getPreferenceScreen().setPersistent(false);
+        
+        mPhone = PhoneFactory.getDefaultPhone();
+        mRes = getResources();
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        
+        mPinToggle.setChecked(mPhone.getSimCard().getSimLockEnabled());
+        
+        if (mDialogState != OFF_MODE) {
+            showPinDialog();
+        } else {
+            // Prep for standard click on "Change PIN"
+            resetDialogState();
+        }
+    }
+    
+    @Override
+    protected void onSaveInstanceState(Bundle out) {
+        // Need to store this state for slider open/close
+        // There is one case where the dialog is popped up by the preference
+        // framework. In that case, let the preference framework store the
+        // dialog state. In other cases, where this activity manually launches
+        // the dialog, store the state of the dialog.
+        if (mPinDialog.isDialogOpen()) {
+            out.putInt(DIALOG_STATE, mDialogState);
+            out.putString(DIALOG_PIN, mPinDialog.getEditText().getText().toString());
+            out.putString(DIALOG_ERROR, mError);
+            out.putBoolean(ENABLE_TO_STATE, mToState);
+        } else {
+            super.onSaveInstanceState(out);
+        }
+    }
+
+    private void showPinDialog() {
+        if (mDialogState == OFF_MODE) {
+            return;
+        }
+        setDialogValues();
+        
+        mPinDialog.showPinDialog();
+    }
+    
+    private void setDialogValues() {
+        mPinDialog.setText(mPin);
+        String message = "";
+        switch (mDialogState) {
+            case SIM_LOCK_MODE:
+                message = mRes.getString(R.string.sim_enter_pin);
+                mPinDialog.setDialogTitle(mToState 
+                        ? mRes.getString(R.string.sim_enable_sim_lock)
+                        : mRes.getString(R.string.sim_disable_sim_lock));
+                break;
+            case SIM_OLD_MODE:
+                message = mRes.getString(R.string.sim_enter_old);
+                mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
+                break;
+            case SIM_NEW_MODE:
+                message = mRes.getString(R.string.sim_enter_new);
+                mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
+                break;
+            case SIM_REENTER_MODE:
+                message = mRes.getString(R.string.sim_reenter_new);
+                mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
+                break;
+        }
+        if (mError != null) {
+            message = mError + "\n" + message;
+            mError = null;
+        }
+        mPinDialog.setDialogMessage(message);
+    }
+
+    public void onPinEntered(EditPinPreference preference, boolean positiveResult) {
+        if (!positiveResult) {
+            resetDialogState();
+            return;
+        }
+        
+        mPin = preference.getText();
+        if (!reasonablePin(mPin)) {
+            // inject error message and display dialog again
+            mError = mRes.getString(R.string.sim_bad_pin);
+            showPinDialog();
+            return;
+        }
+        switch (mDialogState) {
+            case SIM_LOCK_MODE:
+                tryChangeSimLockState();
+                break;
+            case SIM_OLD_MODE:
+                mOldPin = mPin;
+                mDialogState = SIM_NEW_MODE;
+                mError = null;
+                mPin = null;
+                showPinDialog();
+                break;
+            case SIM_NEW_MODE:
+                mNewPin = mPin;
+                mDialogState = SIM_REENTER_MODE;
+                mPin = null;
+                showPinDialog();
+                break;
+            case SIM_REENTER_MODE:
+                if (!mPin.equals(mNewPin)) {
+                    mError = mRes.getString(R.string.sim_pins_dont_match);
+                    mDialogState = SIM_NEW_MODE;
+                    mPin = null;
+                    showPinDialog();
+                } else {
+                    mError = null;
+                    tryChangePin();
+                }
+                break;
+        }
+    }
+    
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (preference == mPinToggle) {
+            // Get the new, preferred state
+            mToState = mPinToggle.isChecked();
+            // Flip it back and pop up pin dialog  
+            mPinToggle.setChecked(!mToState);  
+            mDialogState = SIM_LOCK_MODE;
+            showPinDialog();
+        }
+        return true;
+    }
+    
+    private void tryChangeSimLockState() {
+        // Try to change sim lock. If it succeeds, toggle the lock state and 
+        // reset dialog state. Else inject error message and show dialog again.
+        Message callback = Message.obtain(mHandler, ENABLE_SIM_PIN_COMPLETE);
+        mPhone.getSimCard().setSimLockEnabled(mToState, mPin, callback);
+
+    }
+    
+    private void simLockChanged(boolean success) {
+        if (success) {
+            mPinToggle.setChecked(mToState);
+        } else {
+            // TODO: I18N
+            Toast.makeText(this, mRes.getString(R.string.sim_lock_failed), Toast.LENGTH_SHORT)
+                    .show();
+        }
+        resetDialogState();
+    }
+
+    private void simPinChanged(boolean success) {
+        if (!success) {
+         // TODO: I18N
+            Toast.makeText(this, mRes.getString(R.string.sim_change_failed), 
+                    Toast.LENGTH_SHORT)
+                    .show();
+        } else {
+            Toast.makeText(this, mRes.getString(R.string.sim_change_succeeded), 
+                    Toast.LENGTH_SHORT)
+                    .show();
+
+        }
+        resetDialogState();
+    }
+
+    private void tryChangePin() {
+        Message callback = Message.obtain(mHandler, CHANGE_SIM_PIN_COMPLETE);
+        mPhone.getSimCard().changeSimLockPassword(mOldPin,
+                mNewPin, callback);
+    }
+    
+    private boolean reasonablePin(String pin) {
+        if (pin == null || pin.length() < MIN_PIN_LENGTH || pin.length() > MAX_PIN_LENGTH) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+ 
+    private void resetDialogState() {
+        mError = null;
+        mDialogState = SIM_OLD_MODE; // Default for when Change PIN is clicked
+        mPin = "";
+        setDialogValues();
+    }
+}
diff --git a/src/com/android/settings/SoundAndDisplaySettings.java b/src/com/android/settings/SoundAndDisplaySettings.java
new file mode 100644
index 0000000..53912e3
--- /dev/null
+++ b/src/com/android/settings/SoundAndDisplaySettings.java
@@ -0,0 +1,245 @@
+/*
+ * 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;
+
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
+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.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.IWindowManager;
+
+public class SoundAndDisplaySettings extends PreferenceActivity implements
+        Preference.OnPreferenceChangeListener {
+    private static final String TAG = "SoundAndDisplaysSettings";
+
+    /** If there is no setting in the provider, use this. */
+    private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
+    
+    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_ANIMATIONS = "animations";
+    private static final String KEY_PLAY_MEDIA_NOTIFICATION_SOUNDS = "play_media_notification_sounds";
+    
+    private CheckBoxPreference mSilent;
+
+    private CheckBoxPreference mPlayMediaNotificationSounds;
+
+    private IMountService mMountService = null;
+
+    /*
+     * If we are currently in one of the silent modes (the ringer mode is set to either
+     * "silent mode" or "vibrate mode"), then toggling the "Phone vibrate"
+     * preference will switch between "silent mode" and "vibrate mode".
+     * Otherwise, it will adjust the normal ringer mode's ring or ring+vibrate
+     * setting.
+     */
+    private CheckBoxPreference mVibrate;
+    private CheckBoxPreference mDtmfTone;
+    private CheckBoxPreference mSoundEffects;
+    private CheckBoxPreference mAnimations;
+    private float[] mAnimationScales;
+    
+    private AudioManager mAudioManager;
+    
+    private IWindowManager mWindowManager;
+
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            updateState(false);
+        }
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        ContentResolver resolver = getContentResolver();
+        
+        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);
+        
+        mSilent = (CheckBoxPreference) findPreference(KEY_SILENT);
+        mPlayMediaNotificationSounds = (CheckBoxPreference) findPreference(KEY_PLAY_MEDIA_NOTIFICATION_SOUNDS);
+
+        mVibrate = (CheckBoxPreference) findPreference(KEY_VIBRATE);
+        mDtmfTone = (CheckBoxPreference) findPreference(KEY_DTMF_TONE);
+        mDtmfTone.setPersistent(false);
+        mDtmfTone.setChecked(Settings.System.getInt(resolver,
+                Settings.System.DTMF_TONE_WHEN_DIALING, 1) != 0);
+        mSoundEffects = (CheckBoxPreference) findPreference(KEY_SOUND_EFFECTS);
+        mSoundEffects.setPersistent(false);
+        mSoundEffects.setChecked(Settings.System.getInt(resolver,
+                Settings.System.SOUND_EFFECTS_ENABLED, 0) != 0);
+        mAnimations = (CheckBoxPreference) findPreference(KEY_ANIMATIONS);
+        mAnimations.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);
+        
+        IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
+        registerReceiver(mReceiver, filter);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        unregisterReceiver(mReceiver);
+    }
+
+    private void updateState(boolean force) {
+        final int ringerMode = mAudioManager.getRingerMode();
+        final boolean silentOrVibrateMode =
+                ringerMode != AudioManager.RINGER_MODE_NORMAL;
+        
+        if (silentOrVibrateMode != mSilent.isChecked() || force) {
+            mSilent.setChecked(silentOrVibrateMode);
+        }
+
+        try {
+            mPlayMediaNotificationSounds.setChecked(mMountService.getPlayNotificationSounds());
+        } catch (RemoteException e) {
+        }
+       
+        boolean vibrateSetting;
+        if (silentOrVibrateMode) {
+            vibrateSetting = ringerMode == AudioManager.RINGER_MODE_VIBRATE;
+        } else {
+            vibrateSetting = mAudioManager.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER)
+                    == AudioManager.VIBRATE_SETTING_ON;            
+        }
+        if (vibrateSetting != mVibrate.isChecked() || force) {
+            mVibrate.setChecked(vibrateSetting);
+        }
+        
+        boolean animations = true;
+        try {
+            mAnimationScales = mWindowManager.getAnimationScales();
+        } catch (RemoteException e) {
+        }
+        if (mAnimationScales != null) {
+            for (int i=0; i<mAnimationScales.length; i++) {
+                if (mAnimationScales[i] == 0) {
+                    animations = false;
+                    break;
+                }
+            }
+        }
+        if (animations != mAnimations.isChecked() || force) {
+            mAnimations.setChecked(animations);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+
+        if (preference == mSilent) {
+            final boolean silent = mSilent.isChecked();
+            mAudioManager.setRingerMode(silent ? AudioManager.RINGER_MODE_SILENT
+                    : AudioManager.RINGER_MODE_NORMAL);
+            updateState(false);
+            
+        } else if (preference == mPlayMediaNotificationSounds) {
+            try {
+                mMountService.setPlayNotificationSounds(mPlayMediaNotificationSounds.isChecked());
+            } catch (RemoteException e) {
+            }
+        } else if (preference == mVibrate) {
+            final boolean vibrate = mVibrate.isChecked();
+            final boolean silent = mSilent.isChecked();
+            
+            if (silent) {
+                mAudioManager.setRingerMode(vibrate ? AudioManager.RINGER_MODE_VIBRATE :
+                    AudioManager.RINGER_MODE_SILENT);                
+            } else {
+                mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
+                        vibrate ? AudioManager.VIBRATE_SETTING_ON
+                                : AudioManager.VIBRATE_SETTING_OFF);
+            }
+            
+        } else if (preference == mDtmfTone) {
+            Settings.System.putInt(getContentResolver(), Settings.System.DTMF_TONE_WHEN_DIALING,
+                    mDtmfTone.isChecked() ? 1 : 0);
+            
+        } else if (preference == mSoundEffects) {
+            if (mSoundEffects.isChecked()) {
+                mAudioManager.loadSoundEffects();
+            } else {
+                mAudioManager.unloadSoundEffects();
+            }
+            Settings.System.putInt(getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED,
+                    mSoundEffects.isChecked() ? 1 : 0);
+            
+        } else if (preference == mAnimations) {
+            for (int i=0; i<mAnimationScales.length; i++) {
+                mAnimationScales[i] = mAnimations.isChecked() ? 1 : 0;
+            }
+            try {
+                mWindowManager.setAnimationScales(mAnimationScales);
+            } catch (RemoteException e) {
+            }
+        }
+        return true;
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object objValue) {
+        if (KEY_SCREEN_TIMEOUT.equals(preference.getKey())) {
+            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/TestingSettings.java b/src/com/android/settings/TestingSettings.java
new file mode 100644
index 0000000..3994560
--- /dev/null
+++ b/src/com/android/settings/TestingSettings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.preference.PreferenceActivity;
+
+public class TestingSettings extends PreferenceActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        addPreferencesFromResource(R.xml.testing_settings);
+    }
+
+}
diff --git a/src/com/android/settings/TestingSettingsBroadcastReceiver.java b/src/com/android/settings/TestingSettingsBroadcastReceiver.java
new file mode 100644
index 0000000..c6cd7e1
--- /dev/null
+++ b/src/com/android/settings/TestingSettingsBroadcastReceiver.java
@@ -0,0 +1,28 @@
+package com.android.settings;
+
+import android.provider.Telephony;
+import static android.provider.Telephony.Intents.SECRET_CODE_ACTION;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.BroadcastReceiver;
+import android.util.Config;
+import android.util.Log;
+import android.view.KeyEvent;
+
+
+public class TestingSettingsBroadcastReceiver extends BroadcastReceiver {
+  
+    public TestingSettingsBroadcastReceiver() {
+    }
+    
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        if (intent.getAction().equals(SECRET_CODE_ACTION)) {
+            Intent i = new Intent(Intent.ACTION_MAIN);
+            i.setClass(context, TestingSettings.class);
+            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(i);
+        }
+    }
+}
diff --git a/src/com/android/settings/UsageStats.java b/src/com/android/settings/UsageStats.java
new file mode 100755
index 0000000..89caa54
--- /dev/null
+++ b/src/com/android/settings/UsageStats.java
@@ -0,0 +1,249 @@
+
+
+/**
+ * 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;
+
+import com.android.internal.app.IUsageStats;
+import com.android.settings.R;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import com.android.internal.os.PkgUsageStats;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.AdapterView.OnItemSelectedListener;
+
+/**
+ * Activity to display package usage statistics.
+ */
+public class UsageStats extends Activity implements OnItemSelectedListener {
+    private static final String TAG="UsageStatsActivity";
+    private static final boolean localLOGV = true;
+    private Spinner mTypeSpinner;
+    private ListView mListView;
+    private IUsageStats mUsageStatsService;
+    private LayoutInflater mInflater;
+    private UsageStatsAdapter mAdapter;
+    private PackageManager mPm;
+    
+    public static class AppNameComparator implements Comparator<PkgUsageStats> {
+        Map<String, CharSequence> mAppLabelList;
+        AppNameComparator(Map<String, CharSequence> appList) {
+            mAppLabelList = appList;
+        }
+        public final int compare(PkgUsageStats a, PkgUsageStats b) {
+            String alabel = mAppLabelList.get(a.packageName).toString();
+            String blabel = mAppLabelList.get(b.packageName).toString();
+            return alabel.compareTo(blabel);
+        }
+    }
+    
+    public static class LaunchCountComparator implements Comparator<PkgUsageStats> {
+        public final int compare(PkgUsageStats a, PkgUsageStats b) {
+            // return by descending order
+            return b.launchCount - a.launchCount;
+        }
+    }
+    
+    public static class UsageTimeComparator implements Comparator<PkgUsageStats> {
+        public final int compare(PkgUsageStats a, PkgUsageStats b) {
+            long ret = a.usageTime-b.usageTime;
+            if (ret == 0) {
+                return 0;
+            }
+            if (ret < 0) {
+                return 1;
+            }
+            return -1;
+        }
+    }
+    
+     // View Holder used when displaying views
+    static class AppViewHolder {
+        TextView pkgName;
+        TextView launchCount;
+        TextView usageTime;
+    }
+    
+    class UsageStatsAdapter extends BaseAdapter {
+         // Constants defining order for display order
+        private static final int _DISPLAY_ORDER_USAGE_TIME = 0;
+        private static final int _DISPLAY_ORDER_LAUNCH_COUNT = 1;
+        private static final int _DISPLAY_ORDER_APP_NAME = 2;
+        
+        private int mDisplayOrder = _DISPLAY_ORDER_USAGE_TIME;
+        private List<PkgUsageStats> mUsageStats;
+        private LaunchCountComparator mLaunchCountComparator;
+        private UsageTimeComparator mUsageTimeComparator;
+        private AppNameComparator mAppLabelComparator;
+        private HashMap<String, CharSequence> mAppLabelMap;
+        
+        UsageStatsAdapter() {
+            mUsageStats = new ArrayList<PkgUsageStats>();
+            mAppLabelMap = new HashMap<String, CharSequence>();
+            PkgUsageStats[] stats;
+            try {
+                stats = mUsageStatsService.getAllPkgUsageStats();
+            } catch (RemoteException e) {
+                Log.e(TAG, "Failed initializing usage stats service");
+                return;
+            }
+           if (stats == null) {
+               return;
+           }
+           for (PkgUsageStats ps : stats) {
+               mUsageStats.add(ps);
+               // load application labels for each application
+               CharSequence label;
+               try {
+                   ApplicationInfo appInfo = mPm.getApplicationInfo(ps.packageName, 0);
+                   label = appInfo.loadLabel(mPm);
+                } catch (NameNotFoundException e) {
+                    label = ps.packageName;
+                }
+                mAppLabelMap.put(ps.packageName, label);
+           }
+           // Sort list
+           mLaunchCountComparator = new LaunchCountComparator();
+           mUsageTimeComparator = new UsageTimeComparator();
+           mAppLabelComparator = new AppNameComparator(mAppLabelMap);
+           sortList();
+        }
+        public int getCount() {
+            return mUsageStats.size();
+        }
+
+        public Object getItem(int position) {
+            return mUsageStats.get(position);
+        }
+
+        public long getItemId(int position) {
+            return position;
+        }
+
+        public View getView(int position, View convertView, ViewGroup parent) {
+            // A ViewHolder keeps references to children views to avoid unneccessary calls
+            // to findViewById() on each row.
+            AppViewHolder holder;
+
+            // When convertView is not null, we can reuse it directly, there is no need
+            // to reinflate it. We only inflate a new View when the convertView supplied
+            // by ListView is null.
+            if (convertView == null) {
+                convertView = mInflater.inflate(R.layout.usage_stats_item, null);
+
+                // Creates a ViewHolder and store references to the two children views
+                // we want to bind data to.
+                holder = new AppViewHolder();
+                holder.pkgName = (TextView) convertView.findViewById(R.id.package_name);
+                holder.launchCount = (TextView) convertView.findViewById(R.id.launch_count);
+                holder.usageTime = (TextView) convertView.findViewById(R.id.usage_time);
+                convertView.setTag(holder);
+            } else {
+                // Get the ViewHolder back to get fast access to the TextView
+                // and the ImageView.
+                holder = (AppViewHolder) convertView.getTag();
+            }
+
+            // Bind the data efficiently with the holder
+            PkgUsageStats pkgStats = mUsageStats.get(position);
+            if (pkgStats != null) {
+                CharSequence label = mAppLabelMap.get(pkgStats.packageName);
+                holder.pkgName.setText(label);
+                holder.launchCount.setText(String.valueOf(pkgStats.launchCount));
+                holder.usageTime.setText(String.valueOf(pkgStats.usageTime)+" ms");
+            } else {
+                Log.w(TAG, "No usage stats info for package:"+pkgStats.packageName);
+            }
+            return convertView;
+        }
+        
+        void sortList(int sortOrder) {
+            if (mDisplayOrder == sortOrder) {
+                // do nothing
+                return;
+            }
+            mDisplayOrder= sortOrder;
+            sortList();
+        }
+        private void sortList() {
+            if (mDisplayOrder == _DISPLAY_ORDER_USAGE_TIME) {
+                if (localLOGV) Log.i(TAG, "Sorting by usage time");
+                Collections.sort(mUsageStats, mUsageTimeComparator);
+            } else if (mDisplayOrder == _DISPLAY_ORDER_LAUNCH_COUNT) {
+                if (localLOGV) Log.i(TAG, "Sorting launch count");
+                Collections.sort(mUsageStats, mLaunchCountComparator);
+            } else if (mDisplayOrder == _DISPLAY_ORDER_APP_NAME) {
+                if (localLOGV) Log.i(TAG, "Sorting by application name");
+                Collections.sort(mUsageStats, mAppLabelComparator);
+            }
+            notifyDataSetChanged();
+        }
+    }
+
+    /** Called when the activity is first created. */
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        mUsageStatsService = IUsageStats.Stub.asInterface(ServiceManager.getService("usagestats"));
+        if (mUsageStatsService == null) {
+            Log.e(TAG, "Failed to retrieve usagestats service");
+            return;
+        }
+        mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mPm = getPackageManager();
+        
+        setContentView(R.layout.usage_stats);
+        mTypeSpinner = (Spinner) findViewById(R.id.typeSpinner);
+        mTypeSpinner.setOnItemSelectedListener(this);
+        
+        mListView = (ListView) findViewById(R.id.pkg_list);
+        // Initialize the inflater
+        
+        mAdapter = new UsageStatsAdapter();
+        mListView.setAdapter(mAdapter);
+    }
+
+    public void onItemSelected(AdapterView<?> parent, View view, int position,
+            long id) {
+        mAdapter.sortList(position);
+    }
+
+    public void onNothingSelected(AdapterView<?> parent) {
+        // do nothing
+    }
+}
+
diff --git a/src/com/android/settings/UserDictionarySettings.java b/src/com/android/settings/UserDictionarySettings.java
new file mode 100644
index 0000000..aeddcf7
--- /dev/null
+++ b/src/com/android/settings/UserDictionarySettings.java
@@ -0,0 +1,271 @@
+/**
+ * Copyright (C) 2007 Google Inc.
+ *
+ * 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.AlertDialog;
+import android.app.Dialog;
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.provider.UserDictionary;
+import android.text.InputType;
+import android.view.ContextMenu;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.widget.AlphabetIndexer;
+import android.widget.EditText;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+import android.widget.SectionIndexer;
+import android.widget.SimpleCursorAdapter;
+import android.widget.TextView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
+
+import java.util.Locale;
+
+public class UserDictionarySettings extends ListActivity {
+
+    private static final String INSTANCE_KEY_DIALOG_EDITING_WORD = "DIALOG_EDITING_WORD";
+    private static final String INSTANCE_KEY_ADDED_WORD = "DIALOG_ADDED_WORD";
+
+    private static final String[] QUERY_PROJECTION = {
+        UserDictionary.Words._ID, UserDictionary.Words.WORD
+    };
+    
+    // Either the locale is empty (means the word is applicable to all locales)
+    // or the word equals our current locale
+    private static final String QUERY_SELECTION = UserDictionary.Words.LOCALE + "=? OR "
+            + UserDictionary.Words.LOCALE + " is null";
+
+    private static final String DELETE_SELECTION = UserDictionary.Words.WORD + "=?";
+
+    private static final String EXTRA_WORD = "word";
+    
+    private static final int CONTEXT_MENU_EDIT = Menu.FIRST;
+    private static final int CONTEXT_MENU_DELETE = Menu.FIRST + 1;
+    
+    private static final int OPTIONS_MENU_ADD = Menu.FIRST;
+
+    private static final int DIALOG_ADD_OR_EDIT = 0;
+    
+    /** The word being edited in the dialog (null means the user is adding a word). */
+    private String mDialogEditingWord;
+    
+    private Cursor mCursor;
+    
+    private boolean mAddedWordAlready;
+    private boolean mAutoReturn;
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.list_content_with_empty_view);
+        
+        mCursor = createCursor();
+        setListAdapter(createAdapter());
+        
+        TextView emptyView = (TextView) findViewById(R.id.empty);
+        emptyView.setText(R.string.user_dict_settings_empty_text);
+        
+        ListView listView = getListView();
+        listView.setFastScrollEnabled(true);
+        listView.setEmptyView(emptyView);
+
+        registerForContextMenu(listView);
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (!mAddedWordAlready 
+                && getIntent().getAction().equals("com.android.settings.USER_DICTIONARY_INSERT")) {
+            String word = getIntent().getStringExtra(EXTRA_WORD);
+            mAutoReturn = true;
+            if (word != null) {
+                showAddOrEditDialog(word);
+            }
+        }
+    }
+    @Override
+    protected void onRestoreInstanceState(Bundle state) {
+        super.onRestoreInstanceState(state);
+        mDialogEditingWord = state.getString(INSTANCE_KEY_DIALOG_EDITING_WORD);
+        mAddedWordAlready = state.getBoolean(INSTANCE_KEY_ADDED_WORD, false);
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putString(INSTANCE_KEY_DIALOG_EDITING_WORD, mDialogEditingWord);
+        outState.putBoolean(INSTANCE_KEY_ADDED_WORD, mAddedWordAlready);
+    }
+
+    private Cursor createCursor() {
+        String currentLocale = Locale.getDefault().toString();
+        // Case-insensitive sort
+        return managedQuery(UserDictionary.Words.CONTENT_URI, QUERY_PROJECTION,
+                QUERY_SELECTION, new String[] { currentLocale },
+                "UPPER(" + UserDictionary.Words.WORD + ")");
+    }
+
+    private ListAdapter createAdapter() {
+        return new MyAdapter(this,
+                android.R.layout.simple_list_item_1, mCursor,
+                new String[] { UserDictionary.Words.WORD },
+                new int[] { android.R.id.text1 });
+    }
+    
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        showAddOrEditDialog(getWord(position));
+    }
+
+    @Override
+    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
+        if (!(menuInfo instanceof AdapterContextMenuInfo)) return;
+        
+        AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
+        menu.setHeaderTitle(getWord(adapterMenuInfo.position));
+        menu.add(0, CONTEXT_MENU_EDIT, 0, R.string.user_dict_settings_context_menu_edit_title);
+        menu.add(0, CONTEXT_MENU_DELETE, 0, R.string.user_dict_settings_context_menu_delete_title);
+    }
+    
+    @Override
+    public boolean onContextItemSelected(MenuItem item) {
+        ContextMenuInfo menuInfo = item.getMenuInfo();
+        if (!(menuInfo instanceof AdapterContextMenuInfo)) return false;
+        
+        AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
+        String word = getWord(adapterMenuInfo.position);
+        
+        switch (item.getItemId()) {
+            case CONTEXT_MENU_DELETE:
+                deleteWord(word);
+                return true;
+                
+            case CONTEXT_MENU_EDIT:
+                showAddOrEditDialog(word);
+                return true;
+        }
+        
+        return false;
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, OPTIONS_MENU_ADD, 0, R.string.user_dict_settings_add_menu_title)
+                .setIcon(R.drawable.ic_menu_add);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        showAddOrEditDialog(null);
+        return true;
+    }
+
+    private void showAddOrEditDialog(String editingWord) {
+        mDialogEditingWord = editingWord;
+        showDialog(DIALOG_ADD_OR_EDIT);
+    }
+    
+    private String getWord(int position) {
+        mCursor.moveToPosition(position);
+        return mCursor.getString(
+                mCursor.getColumnIndexOrThrow(UserDictionary.Words.WORD));
+    }
+    
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        View content = getLayoutInflater().inflate(R.layout.dialog_edittext, null);
+        final EditText editText = (EditText) content.findViewById(R.id.edittext);
+        // No prediction in soft keyboard mode. TODO: Create a better way to disable prediction
+        editText.setInputType(InputType.TYPE_CLASS_TEXT 
+                | InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);
+        
+        return new AlertDialog.Builder(this)
+                .setTitle(R.string.user_dict_settings_add_dialog_title)
+                .setView(content)
+                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        onAddOrEditFinished(editText.getText().toString());
+                        if (mAutoReturn) finish();
+                    }})
+                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        if (mAutoReturn) finish();                        
+                    }})
+                .create();
+    }
+
+    @Override
+    protected void onPrepareDialog(int id, Dialog d) {
+        AlertDialog dialog = (AlertDialog) d;
+        EditText editText = (EditText) dialog.findViewById(R.id.edittext);
+        editText.setText(mDialogEditingWord);
+    }
+
+    private void onAddOrEditFinished(String word) {
+        if (mDialogEditingWord != null) {
+            // The user was editing a word, so do a delete/add
+            deleteWord(mDialogEditingWord);
+        }
+        
+        // Disallow duplicates
+        deleteWord(word);
+        
+        // TODO: present UI for picking whether to add word to all locales, or current.
+        UserDictionary.Words.addWord(this, word.toString(),
+                250, UserDictionary.Words.LOCALE_TYPE_ALL);
+        mCursor.requery();
+        mAddedWordAlready = true;
+    }
+
+    private void deleteWord(String word) {
+        getContentResolver().delete(UserDictionary.Words.CONTENT_URI, DELETE_SELECTION,
+                new String[] { word });
+    }
+    
+    private static class MyAdapter extends SimpleCursorAdapter implements SectionIndexer {
+        private AlphabetIndexer mIndexer;        
+        
+        public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
+            super(context, layout, c, from, to);
+
+            int wordColIndex = c.getColumnIndexOrThrow(UserDictionary.Words.WORD);
+            String alphabet = context.getString(com.android.internal.R.string.fast_scroll_alphabet);
+            mIndexer = new AlphabetIndexer(c, wordColIndex, alphabet); 
+        }
+
+        public int getPositionForSection(int section) {
+            return mIndexer.getPositionForSection(section);
+        }
+
+        public int getSectionForPosition(int position) {
+            return mIndexer.getSectionForPosition(position);
+        }
+
+        public Object[] getSections() {
+            return mIndexer.getSections();
+        }
+    }
+}
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
new file mode 100644
index 0000000..a23272b
--- /dev/null
+++ b/src/com/android/settings/Utils.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright (C) 2007 Google Inc.
+ *
+ * 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.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.preference.Preference;
+import android.preference.PreferenceGroup;
+
+import java.util.List;
+
+public class Utils {
+
+    /**
+     * Set the preference's title to the matching activity's label.
+     */
+    public static final int UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY = 1;
+
+    /**
+     * Finds a matching activity for a preference's intent. If a matching
+     * activity is not found, it will remove the preference.
+     * 
+     * @param context The context.
+     * @param parentPreferenceGroup The preference group that contains the
+     *            preference whose intent is being resolved.
+     * @param preferenceKey The key of the preference whose intent is being
+     *            resolved.
+     * @param flags 0 or one or more of
+     *            {@link #UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY}
+     *            .
+     * @return Whether an activity was found. If false, the preference was
+     *         removed.
+     */
+    public static boolean updatePreferenceToSpecificActivityOrRemove(Context context,
+            PreferenceGroup parentPreferenceGroup, String preferenceKey, int flags) {
+        
+        Preference preference = parentPreferenceGroup.findPreference(preferenceKey);
+        if (preference == null) {
+            return false;
+        }
+        
+        Intent intent = preference.getIntent();
+        if (intent != null) {
+            // Find the activity that is in the system image
+            PackageManager pm = context.getPackageManager();
+            List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);
+            int listSize = list.size();
+            for (int i = 0; i < listSize; i++) {
+                ResolveInfo resolveInfo = list.get(i);
+                if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)
+                        != 0) {
+                    
+                    // Replace the intent with this specific activity
+                    preference.setIntent(new Intent().setClassName(
+                            resolveInfo.activityInfo.packageName,
+                            resolveInfo.activityInfo.name));
+
+                    if ((flags & UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY) != 0) {
+                        // Set the preference title to the activity's label
+                        preference.setTitle(resolveInfo.loadLabel(pm));
+                    }
+                    
+                    return true;
+                }
+            }
+        }
+
+        // Did not find a matching activity, so remove the preference
+        parentPreferenceGroup.removePreference(preference);
+        
+        return true;
+    }
+    
+}
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
new file mode 100644
index 0000000..d112915
--- /dev/null
+++ b/src/com/android/settings/WirelessSettings.java
@@ -0,0 +1,80 @@
+/*
+ * 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;
+
+import com.android.settings.bluetooth.BluetoothEnabler;
+import com.android.settings.wifi.WifiEnabler;
+
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+import android.preference.CheckBoxPreference;
+
+public class WirelessSettings extends PreferenceActivity {
+
+    private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane";
+    private static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth";
+    private static final String KEY_TOGGLE_WIFI = "toggle_wifi";
+
+    private WifiEnabler mWifiEnabler;
+    private AirplaneModeEnabler mAirplaneModeEnabler;
+    private BluetoothEnabler mBtEnabler;
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        addPreferencesFromResource(R.xml.wireless_settings);
+
+        initToggles();
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        
+        mWifiEnabler.resume();
+        mAirplaneModeEnabler.resume();
+        mBtEnabler.resume();
+    }
+    
+    @Override
+    protected void onPause() {
+        super.onPause();
+        
+        mWifiEnabler.pause();
+        mAirplaneModeEnabler.pause();
+        mBtEnabler.pause();
+    }
+    
+    private void initToggles() {
+        
+        mWifiEnabler = new WifiEnabler(
+                this,
+                (WifiManager) getSystemService(WIFI_SERVICE),
+                (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI));
+        
+        mAirplaneModeEnabler = new AirplaneModeEnabler(
+                this,
+                (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE));
+        
+        mBtEnabler = new BluetoothEnabler(
+                this,
+                (CheckBoxPreference) findPreference(KEY_TOGGLE_BLUETOOTH));
+    }
+    
+}
diff --git a/src/com/android/settings/ZoneList.java b/src/com/android/settings/ZoneList.java
new file mode 100644
index 0000000..2877f00
--- /dev/null
+++ b/src/com/android/settings/ZoneList.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2006 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.AlarmManager;
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.res.XmlResourceParser;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+/**
+ * This activity displays a list of time zones that match a filter string
+ * such as "Africa", "Europe", etc. Choosing an item from the list will set
+ * the time zone. Pressing Back without choosing from the list will not 
+ * result in a change in the time zone setting.
+ */
+public class ZoneList extends ListActivity {
+    
+    private static final String TAG = "ZoneList";
+    private static final String KEY_ID = "id";
+    private static final String KEY_DISPLAYNAME = "name";
+    private static final String KEY_GMT = "gmt";
+    private static final String KEY_OFFSET = "offset";
+    private static final String XMLTAG_TIMEZONE = "timezone";
+
+    private static final int HOURS_1 = 60 * 60000;
+    private static final int HOURS_24 = 24 * HOURS_1;
+    private static final int HOURS_HALF = HOURS_1 / 2;
+    
+    private static final int MENU_TIMEZONE = Menu.FIRST+1;
+    private static final int MENU_ALPHABETICAL = Menu.FIRST;
+
+    // Initial focus position
+    private int mDefault;
+    
+    private boolean mSortedByTimezone;
+
+    private SimpleAdapter mTimezoneSortedAdapter;
+    private SimpleAdapter mAlphabeticalAdapter;
+    
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        String[] from = new String[] {KEY_DISPLAYNAME, KEY_GMT};
+        int[] to = new int[] {android.R.id.text1, android.R.id.text2};
+
+        MyComparator comparator = new MyComparator(KEY_OFFSET);
+        
+        List<HashMap> timezoneSortedList = getZones();
+        Collections.sort(timezoneSortedList, comparator);
+        mTimezoneSortedAdapter = new SimpleAdapter(this,
+                (List) timezoneSortedList,
+                android.R.layout.simple_list_item_2,
+                from,
+                to);
+
+        List<HashMap> alphabeticalList = new ArrayList<HashMap>(timezoneSortedList);
+        comparator.setSortingKey(KEY_DISPLAYNAME);
+        Collections.sort(alphabeticalList, comparator);
+        mAlphabeticalAdapter = new SimpleAdapter(this,
+                (List) alphabeticalList,
+                android.R.layout.simple_list_item_2,
+                from,
+                to);
+        
+        // Sets the adapter
+        setSorting(true);
+        
+        // If current timezone is in this list, move focus to it
+        setSelection(mDefault);
+        
+        // Assume user may press Back
+        setResult(RESULT_CANCELED);
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, MENU_ALPHABETICAL, 0, R.string.zone_list_menu_sort_alphabetically)
+            .setIcon(android.R.drawable.ic_menu_sort_alphabetically);
+        menu.add(0, MENU_TIMEZONE, 0, R.string.zone_list_menu_sort_by_timezone)
+            .setIcon(R.drawable.ic_menu_3d_globe);
+        
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+     
+        if (mSortedByTimezone) {
+            menu.findItem(MENU_TIMEZONE).setVisible(false);
+            menu.findItem(MENU_ALPHABETICAL).setVisible(true);
+        } else {
+            menu.findItem(MENU_TIMEZONE).setVisible(true);
+            menu.findItem(MENU_ALPHABETICAL).setVisible(false);
+        }
+
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+
+            case MENU_TIMEZONE:
+                setSorting(true);
+                return true;
+                
+            case MENU_ALPHABETICAL:
+                setSorting(false);
+                return true;
+                
+            default:
+                return false;
+        }
+    }
+
+    private void setSorting(boolean timezone) {
+        setListAdapter(timezone ? mTimezoneSortedAdapter : mAlphabeticalAdapter);
+        mSortedByTimezone = timezone;
+    }
+    
+    private List<HashMap> getZones() {
+        List<HashMap> myData = new ArrayList<HashMap>();
+        long date = Calendar.getInstance().getTimeInMillis();
+        try {
+            XmlResourceParser xrp = getResources().getXml(R.xml.timezones);
+            while (xrp.next() != XmlResourceParser.START_TAG)
+                ;
+            xrp.next();
+            while (xrp.getEventType() != XmlResourceParser.END_TAG) {
+                while (xrp.getEventType() != XmlResourceParser.START_TAG) {
+                    if (xrp.getEventType() == XmlResourceParser.END_DOCUMENT) {
+                        return myData;
+                    }
+                    xrp.next();
+                }
+                if (xrp.getName().equals(XMLTAG_TIMEZONE)) {
+                    String id = xrp.getAttributeValue(0);
+                    String displayName = xrp.nextText();
+                    addItem(myData, id, displayName, date);
+                }
+                while (xrp.getEventType() != XmlResourceParser.END_TAG) {
+                    xrp.next();
+                }
+                xrp.next();
+            }
+            xrp.close();
+        } catch (XmlPullParserException xppe) {
+            Log.e(TAG, "Ill-formatted timezones.xml file");
+        } catch (java.io.IOException ioe) {
+            Log.e(TAG, "Unable to read timezones.xml file");
+        }
+
+        return myData;
+    }
+
+    protected void addItem(List<HashMap> myData, String id, String displayName, 
+            long date) {
+        HashMap map = new HashMap();
+        map.put(KEY_ID, id);
+        map.put(KEY_DISPLAYNAME, displayName);
+        TimeZone tz = TimeZone.getTimeZone(id);
+        int offset = tz.getOffset(date);
+        int p = Math.abs(offset);
+        StringBuilder name = new StringBuilder();
+        name.append("GMT");
+        
+        if (offset < 0) {
+            name.append('-');
+        } else {
+            name.append('+');
+        }
+        
+        name.append(p / (HOURS_1));
+        name.append(':');
+
+        int min = p / 60000;
+        min %= 60;
+
+        if (min < 10) {
+            name.append('0');
+        }
+        name.append(min);
+        
+        map.put(KEY_GMT, name.toString());
+        map.put(KEY_OFFSET, offset);
+        
+        if (id.equals(TimeZone.getDefault().getID())) {
+            mDefault = myData.size();
+        }
+        
+        myData.add(map);
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        Map map = (Map) l.getItemAtPosition(position);
+        // Update the system timezone value
+        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
+        alarm.setTimeZone((String) map.get(KEY_ID));
+        setResult(RESULT_OK);
+        finish();
+    }
+    
+    private static class MyComparator implements Comparator<HashMap> {
+        private String mSortingKey; 
+        
+        public MyComparator(String sortingKey) {
+            mSortingKey = sortingKey;
+        }
+        
+        public void setSortingKey(String sortingKey) {
+            mSortingKey = sortingKey;
+        }
+        
+        public int compare(HashMap map1, HashMap map2) {
+            Object value1 = map1.get(mSortingKey);
+            Object value2 = map2.get(mSortingKey);
+
+            /* 
+             * This should never happen, but just in-case, put non-comparable
+             * items at the end.
+             */
+            if (!isComparable(value1)) {
+                return isComparable(value2) ? 1 : 0;
+            } else if (!isComparable(value2)) {
+                return -1;
+            }
+            
+            return ((Comparable) value1).compareTo(value2);
+        }
+        
+        private boolean isComparable(Object value) {
+            return (value != null) && (value instanceof Comparable); 
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java
new file mode 100644
index 0000000..def5036
--- /dev/null
+++ b/src/com/android/settings/ZonePicker.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2006 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.ListActivity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ZonePicker extends ListActivity {
+
+    private ArrayAdapter<CharSequence> mFilterAdapter;
+    
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        mFilterAdapter = ArrayAdapter.createFromResource(this,
+                R.array.timezone_filters, android.R.layout.simple_list_item_1);
+        setListAdapter(mFilterAdapter);
+    }
+    
+    protected void addItem(List<Map> data, String name, String zone) {
+        HashMap temp = new HashMap();
+        temp.put("title", name);
+        temp.put("zone", zone);
+        data.add(temp);
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        String filter = (String) mFilterAdapter.getItem(position);
+        // If All is chosen, reset the filter
+        if (filter.equals("All")) {
+            filter = null;
+        }
+        Intent zoneList = new Intent();
+        zoneList.setClass(this, ZoneList.class);
+        zoneList.putExtra("filter", filter);
+        
+        startActivityForResult(zoneList, 0);
+    }
+    
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        // If subactivity has resulted in a timezone selection, close this act.
+        if (resultCode == RESULT_OK) {
+            finish();
+        }
+    }    
+}
diff --git a/src/com/android/settings/battery_history/BatteryHistory.java b/src/com/android/settings/battery_history/BatteryHistory.java
new file mode 100644
index 0000000..dcf6cbf
--- /dev/null
+++ b/src/com/android/settings/battery_history/BatteryHistory.java
@@ -0,0 +1,861 @@
+/*
+ * Copyright (C) 2006 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.battery_history;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import com.android.internal.app.IBatteryStats;
+import com.android.settings.R;
+
+import android.app.Activity;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.BatteryStats;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.os.BatteryStats.Timer;
+import android.os.BatteryStats.Uid;
+import android.util.Log;
+import android.util.LogPrinter;
+import android.util.SparseArray;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.AdapterView.OnItemSelectedListener;
+
+public class BatteryHistory extends Activity implements OnClickListener, OnItemSelectedListener {
+    private static final String TAG = "BatteryHistory";
+
+    private static final int SECONDS_PER_MINUTE = 60;
+    private static final int SECONDS_PER_HOUR = 60 * 60;
+    private static final int SECONDS_PER_DAY = 24 * 60 * 60;
+    
+    // Must be in sync with the values in res/values/array.xml (id battery_history_type_spinner)
+    private static final int CPU_USAGE = 0;
+    private static final int NETWORK_USAGE = 1;
+    private static final int GPS_USAGE = 2;
+    private static final int SENSOR_USAGE = 3;
+    private static final int WAKELOCK_USAGE = 4;
+    private static final int MISC_USAGE = 5;
+
+    // Must be in sync with the values in res/values/array.xml (id battery_history_which_spinner)
+    private static final int UNPLUGGED = 0;
+    private static final int CURRENT = 1;
+    private static final int TOTAL = 2;
+    
+    private BatteryStats mStats;
+    private int mWhich = BatteryStats.STATS_UNPLUGGED;
+    private int mType = CPU_USAGE;
+    
+    private GraphableButton[] mButtons;
+    IBatteryStats mBatteryInfo;
+    
+    private List<CpuUsage> mCpuUsage = new ArrayList<CpuUsage>();
+    private List<NetworkUsage> mNetworkUsage = new ArrayList<NetworkUsage>();
+    private List<SensorUsage> mSensorUsage = new ArrayList<SensorUsage>();
+    private List<SensorUsage> mGpsUsage = new ArrayList<SensorUsage>();
+    private List<WakelockUsage> mWakelockUsage = new ArrayList<WakelockUsage>();
+    private List<MiscUsage> mMiscUsage = new ArrayList<MiscUsage>();
+    
+    private boolean mHaveCpuUsage, mHaveNetworkUsage, mHaveSensorUsage,
+            mHaveWakelockUsage, mHaveMiscUsage;
+    
+    private LinearLayout mGraphLayout;
+    private LinearLayout mTextLayout;
+    private TextView mMessageText;
+    private TextView mDetailsText;
+    private Button mDetailsBackButton;
+    private Spinner mTypeSpinner;
+    private Spinner mWhichSpinner;
+    
+    private boolean mDetailsShown = false;
+    
+    private static String getLabel(String packageName, PackageManager pm) {
+        try {
+            ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
+            CharSequence label = ai.loadLabel(pm);
+            if (label != null) {
+                return label.toString();
+            }
+        } catch (NameNotFoundException e) {
+            return packageName;
+        }
+        
+        return "";
+    }
+    
+    void formatTime(double millis, StringBuilder sb) {
+        int seconds = (int) Math.floor(millis / 1000);
+        
+        int days = 0, hours = 0, minutes = 0;
+        if (seconds > SECONDS_PER_DAY) {
+            days = seconds / SECONDS_PER_DAY;
+            seconds -= days * SECONDS_PER_DAY;
+        }
+        if (seconds > SECONDS_PER_HOUR) {
+            hours = seconds / SECONDS_PER_HOUR;
+            seconds -= hours * SECONDS_PER_HOUR;
+        }
+        if (seconds > SECONDS_PER_MINUTE) {
+            minutes = seconds / SECONDS_PER_MINUTE;
+            seconds -= minutes * SECONDS_PER_MINUTE;
+        }
+        if (days > 0) {
+            sb.append(getString(R.string.battery_history_days, days, hours, minutes, seconds));
+        } else if (hours > 0) {
+            sb.append(getString(R.string.battery_history_hours, hours, minutes, seconds));
+        } else if (minutes > 0) { 
+            sb.append(getString(R.string.battery_history_minutes, minutes, seconds));
+        } else {
+            sb.append(getString(R.string.battery_history_seconds, seconds));
+        }
+    }
+    
+    abstract class Graphable implements Comparable<Graphable> {        
+        protected String mName;
+        protected String mNamePackage;
+        protected boolean mUniqueName;
+        protected String[] mPackages;
+        protected String[] mPackageNames;
+        
+        public abstract String getLabel();
+        public abstract double getSortValue();
+        public abstract double[] getValues();
+        public abstract void getInfo(StringBuilder info);
+        
+        public double getMaxValue() {
+            return -Double.MAX_VALUE;            
+        }
+        
+        public int compareTo(Graphable o) {
+            double t = getSortValue();
+            double ot = o.getSortValue();
+            if (t < ot) {
+                // Largest first
+                return 1;
+            } else if (t > ot) {
+                return -1;
+            } else {
+                return 0;
+            }
+        }
+                
+        // Side effects: sets mName and mUniqueName
+        void getNameForUid(int uid) {
+            PackageManager pm = getPackageManager();
+            mPackages = pm.getPackagesForUid(uid);
+            if (mPackages == null) {
+                mName = Integer.toString(uid);
+                mNamePackage = null;
+                return;
+            }
+            
+            mPackageNames = new String[mPackages.length];
+            System.arraycopy(mPackages, 0, mPackageNames, 0, mPackages.length);
+            
+            // Convert package names to user-facing labels where possible
+            for (int i = 0; i < mPackageNames.length; i++) {
+                mPackageNames[i] = BatteryHistory.getLabel(mPackageNames[i], pm);
+            }
+
+            if (mPackageNames.length == 1) {
+                mNamePackage = mPackages[0];
+                mName = mPackageNames[0];
+                mUniqueName = true;
+            } else {
+                mName = getString(R.string.battery_history_uid, uid); // Default name
+                // Look for an official name for this UID.
+                for (String name : mPackages) {
+                    try {
+                        PackageInfo pi = pm.getPackageInfo(name, 0);
+                        if (pi.sharedUserLabel != 0) {
+                            CharSequence nm = pm.getText(name,
+                                    pi.sharedUserLabel, pi.applicationInfo);
+                            if (nm != null) {
+                                mName = nm.toString();
+                                break;
+                            }
+                        }
+                    } catch (PackageManager.NameNotFoundException e) {
+                    }
+                }
+            }
+        }
+    }
+
+    class CpuUsage extends Graphable {
+        String mProcess;
+        double[] mUsage;
+        double mTotalRuntime;
+        long mStarts;
+        
+        public CpuUsage(int uid, String process, long userTime, long systemTime,
+                long starts, long totalRuntime) {
+            getNameForUid(uid);
+            mProcess = process;
+            PackageManager pm = BatteryHistory.this.getPackageManager();
+            mName = BatteryHistory.getLabel(process, pm);
+            mUsage = new double[2];
+            
+            mUsage[0] = userTime;
+            mUsage[1] = userTime + systemTime;
+            mTotalRuntime = totalRuntime;
+            mStarts = starts;
+        }
+        
+        public String getLabel() {
+            return mName;
+        }
+        
+        public double getSortValue() {
+            return mUsage[1];
+        }
+        
+        public double[] getValues() {
+            return mUsage;
+        }
+        
+        public double getMaxValue() {
+            return mTotalRuntime;            
+        }
+        
+        public void getInfo(StringBuilder info) {
+            info.append(getString(R.string.battery_history_cpu_usage, mProcess));
+            info.append("\n\n");
+            info.append(getString(R.string.battery_history_user_time));
+            formatTime(mUsage[0] * 10, info);
+            info.append('\n');
+            info.append(getString(R.string.battery_history_system_time));
+            formatTime((mUsage[1] - mUsage[0]) * 10, info);
+            info.append('\n');
+            info.append(getString(R.string.battery_history_total_time));
+            formatTime((mUsage[1]) * 10, info);
+            info.append('\n');
+            info.append(getString(R.string.battery_history_starts, mStarts));
+        }
+    }
+    
+    class NetworkUsage extends Graphable {
+        double[] mUsage;
+        
+        public NetworkUsage(int uid, long received, long sent) {
+            getNameForUid(uid);
+            
+            mUsage = new double[2];
+            mUsage[0] = received;
+            mUsage[1] = received + sent;
+        }
+        
+        public String getLabel() {
+            return mName;
+        }
+        
+        public double getSortValue() {
+            return mUsage[1];
+        }
+        
+        public double[] getValues() {
+            return mUsage;
+        }
+        
+        public void getInfo(StringBuilder info) {
+            info.append(getString(R.string.battery_history_network_usage, mName));
+            info.append("\n\n");
+            info.append(getString(R.string.battery_history_bytes_received, (long) mUsage[0]));
+            info.append('\n');
+            info.append(getString(R.string.battery_history_bytes_sent,
+                    (long) mUsage[1] - (long) mUsage[0]));
+            info.append('\n');
+            info.append(getString(R.string.battery_history_bytes_total, (long) mUsage[1]));
+
+            if (!mUniqueName) {
+                info.append("\n\n");
+                info.append(getString(R.string.battery_history_packages_sharing_this_uid));
+                info.append('\n');
+
+                PackageManager pm = BatteryHistory.this.getPackageManager();
+                List<String> names = new ArrayList<String>();
+                for (String name : mPackageNames) {
+                    names.add(BatteryHistory.getLabel(name, pm));
+                }
+                Collections.sort(names);
+                for (String name : names) {
+                    info.append("    ");
+                    info.append(name);
+                    info.append('\n');
+                }
+            }
+        }
+    }
+    
+    class SensorUsage extends Graphable {
+        double[] mUsage;
+        double mTotalRealtime;
+        int mCount;
+        
+        public SensorUsage(int uid, long time, int count, long totalRealtime) {
+            getNameForUid(uid);
+            
+            mUsage = new double[1];
+            mUsage[0] = time;
+            mTotalRealtime = totalRealtime;
+            
+            mCount = count;
+        }
+        
+        public String getLabel() {
+            return mName;
+        }
+        
+        public double getSortValue() {
+            return mUsage[0];
+        }
+        
+        public double[] getValues() {
+            return mUsage;
+        }
+        
+        public double getMaxValue() {
+            return mTotalRealtime;            
+        }
+        
+        public void getInfo(StringBuilder info) {
+            info.append(getString(R.string.battery_history_sensor));
+            info.append(mName);
+            info.append("\n\n");
+            info.append(getString(R.string.battery_history_total_time));
+            formatTime(mUsage[0], info);
+            info.append("\n\n");
+        }
+    }
+    
+    
+    class WakelockUsage extends Graphable {
+        double[] mUsage;
+        double mTotalRealtime;
+        int mCount;
+        
+        public WakelockUsage(int uid, long time, int count, long totalRealtime) {
+            getNameForUid(uid);
+            
+            mUsage = new double[1];
+            mUsage[0] = time;
+            mTotalRealtime = totalRealtime;
+            
+            mCount = count;
+        }
+        
+        public String getLabel() {
+            return mName;
+        }
+        
+        public double getSortValue() {
+            return mUsage[0];
+        }
+        
+        public double[] getValues() {
+            return mUsage;
+        }
+        
+        public double getMaxValue() {
+            return mTotalRealtime;            
+        }
+        
+        public void getInfo(StringBuilder info) {
+            info.append(getString(R.string.battery_history_wakelock));
+            info.append(mName);
+            info.append("\n\n");
+            info.append(getString(R.string.battery_history_total_time));
+            formatTime(mUsage[0], info);
+            info.append("\n\n");
+        }
+    }
+    
+    class MiscUsage extends Graphable {
+        int mInfoLabelRes;
+        double[] mUsage;
+        double mTotalRealtime;
+        
+        public MiscUsage(String name, int infoLabelRes, long value,
+                long totalRealtime) {
+            mName = name;
+            
+            mInfoLabelRes = infoLabelRes;
+            
+            mUsage = new double[2];
+            mUsage[0] = value;
+            mTotalRealtime = totalRealtime;
+        }
+        
+        public String getLabel() {
+            return mName;
+        }
+        
+        public double getSortValue() {
+            return mUsage[1];
+        }
+        
+        public double[] getValues() {
+            return mUsage;
+        }
+        
+        public double getMaxValue() {
+            return mTotalRealtime;            
+        }
+        
+        public void getInfo(StringBuilder info) {
+            info.append(getString(mInfoLabelRes));
+            info.append(' ');
+            formatTime(mUsage[0], info);
+            info.append(" (");
+            info.append((mUsage[0]*100)/mTotalRealtime);
+            info.append("%)");
+        }
+    }
+    
+    private List<? extends Graphable> getGraphRecords() {
+        switch (mType) {
+            case CPU_USAGE: return mCpuUsage;
+            case NETWORK_USAGE : return mNetworkUsage;
+            case SENSOR_USAGE: return mSensorUsage;
+            case GPS_USAGE: return mGpsUsage;
+            case WAKELOCK_USAGE: return mWakelockUsage;
+            case MISC_USAGE: return mMiscUsage;
+            default:
+                return (List<? extends Graphable>) null; // TODO
+        }
+    }
+    
+    private void displayGraph() {
+        Log.i(TAG, "displayGraph");
+
+        collectStatistics();
+        
+        // Hide the UI and selectively enable it below
+        mMessageText.setVisibility(View.GONE);
+        for (int i = 0; i < mButtons.length; i++) {
+            mButtons[i].setVisibility(View.INVISIBLE);
+        }
+        
+        double maxValue = -Double.MAX_VALUE;
+        
+        List<? extends Graphable> records = getGraphRecords();
+        for (Graphable g : records) {
+            double[] values = g.getValues();
+            maxValue = Math.max(maxValue, values[values.length - 1]);
+            maxValue = Math.max(maxValue, g.getMaxValue());
+        }
+        
+        int[] colors = new int[2];
+        colors[0] = 0xff0000ff;
+        colors[1] = 0xffff0000;
+        
+        for (int i = 0; i < mButtons.length; i++) {
+            mButtons[i].setVisibility(View.INVISIBLE);
+        }
+        
+        int numRecords = Math.min(records.size(), mButtons.length);
+        if (numRecords == 0) {
+             mMessageText.setVisibility(View.VISIBLE);
+             mMessageText.setText(R.string.battery_history_no_data);
+        } else {
+            for (int i = 0; i < numRecords; i++) {
+                Graphable r = records.get(i);           
+
+                mButtons[i].setText(r.getLabel());
+                mButtons[i].setValues(r.getValues(), maxValue);
+                mButtons[i].setVisibility(View.VISIBLE);
+            }
+        }
+    }
+    
+    private void hideDetails() {
+        mTextLayout.setVisibility(View.GONE);
+        mGraphLayout.setVisibility(View.VISIBLE);
+        mDetailsShown = false;
+    }
+    
+    private void showDetails(int id) {
+        mGraphLayout.setVisibility(View.GONE);
+        mTextLayout.setVisibility(View.VISIBLE);
+            
+        StringBuilder info = new StringBuilder();
+        List<? extends Graphable> records = getGraphRecords();
+        if (id < records.size()) {
+            Graphable record = records.get(id);
+            record.getInfo(info);
+        } else {
+            info.append(getString(R.string.battery_history_details_for, id));
+        }
+        mDetailsText.setText(info.toString());
+        mDetailsShown = true;
+    }
+
+    private void processCpuUsage() {
+        mCpuUsage.clear();
+        
+        long uSecTime = SystemClock.uptimeMillis() * 1000;
+        final long uSecNow = mStats.computeBatteryUptime(uSecTime, mWhich) / 1000;
+        
+        SparseArray<? extends Uid> uidStats = mStats.getUidStats();
+        final int NU = uidStats.size();
+        for (int iu = 0; iu < NU; iu++) {
+            Uid u = uidStats.valueAt(iu);
+
+            Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats();
+            if (processStats.size() > 0) {
+                for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent
+                        : processStats.entrySet()) {
+
+                    Uid.Proc ps = ent.getValue();
+                    long userTime = ps.getUserTime(mWhich);
+                    long systemTime = ps.getSystemTime(mWhich);
+                    long starts = ps.getStarts(mWhich);
+
+                    if (userTime != 0 || systemTime != 0) {
+                        mCpuUsage.add(new CpuUsage(u.getUid(), ent.getKey(),
+                                userTime, systemTime, starts, uSecNow));
+                    }
+                }
+            }
+        }
+        Collections.sort(mCpuUsage);
+    }
+    
+    private void processNetworkUsage() {
+        mNetworkUsage.clear();
+        
+        SparseArray<? extends Uid> uidStats = mStats.getUidStats();
+        final int NU = uidStats.size();
+        for (int iu = 0; iu < NU; iu++) {
+            Uid u = uidStats.valueAt(iu);
+            
+            long received = u.getTcpBytesReceived(mWhich);
+            long sent = u.getTcpBytesSent(mWhich);
+            if (received + sent > 0) {
+                mNetworkUsage.add(new NetworkUsage(u.getUid(), received, sent));
+            }
+        }
+        Collections.sort(mNetworkUsage);
+    }
+    
+    private void processSensorUsage() {
+        mGpsUsage.clear();
+        mSensorUsage.clear();
+        
+        long uSecTime = SystemClock.elapsedRealtime() * 1000;
+        final long uSecNow = mStats.computeBatteryRealtime(uSecTime, mWhich) / 1000;
+        
+        SparseArray<? extends Uid> uidStats = mStats.getUidStats();
+        final int NU = uidStats.size();
+        for (int iu = 0; iu < NU; iu++) {
+            Uid u = uidStats.valueAt(iu);
+            int uid = u.getUid();
+            
+            Map<Integer, ? extends BatteryStats.Uid.Sensor> sensorStats = u.getSensorStats();
+            long timeGps = 0;
+            int countGps = 0;
+            long timeOther = 0;
+            int countOther = 0;
+            if (sensorStats.size() > 0) {
+                for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent
+                        : sensorStats.entrySet()) {
+
+                    Uid.Sensor se = ent.getValue();
+                    int handle = se.getHandle();
+                    Timer timer = se.getSensorTime();
+                    if (timer != null) {
+                        // Convert from microseconds to milliseconds with rounding
+                        long totalTime = (timer.getTotalTime(uSecNow, mWhich) + 500) / 1000;
+                        int count = timer.getCount(mWhich);
+                        if (handle == BatteryStats.Uid.Sensor.GPS) {
+                            timeGps += totalTime;
+                            countGps += count;
+                        } else {
+                            timeOther += totalTime;
+                            countOther += count;
+                        }
+                    }
+                }
+            }
+            
+            if (timeGps > 0) {
+                mGpsUsage.add(new SensorUsage(uid, timeGps, countGps, uSecNow));
+            }
+            if (timeOther > 0) {
+                mSensorUsage.add(new SensorUsage(uid, timeOther, countOther, uSecNow));
+            }
+        }
+        
+        Collections.sort(mGpsUsage);
+        Collections.sort(mSensorUsage);
+    }
+    
+    private void processWakelockUsage() {
+        mWakelockUsage.clear();
+        
+        long uSecTime = SystemClock.elapsedRealtime() * 1000;
+        final long uSecNow = mStats.computeBatteryRealtime(uSecTime, mWhich) / 1000;
+        
+        SparseArray<? extends Uid> uidStats = mStats.getUidStats();
+        final int NU = uidStats.size();
+        for (int iu = 0; iu < NU; iu++) {
+            Uid u = uidStats.valueAt(iu);
+            int uid = u.getUid();
+            
+            Map<String, ? extends BatteryStats.Uid.Wakelock> wakelockStats = u.getWakelockStats();
+            long time = 0;
+            int count = 0;
+            if (wakelockStats.size() > 0) {
+                for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent
+                        : wakelockStats.entrySet()) {
+
+                    Uid.Wakelock wl = ent.getValue();
+                    Timer timer = wl.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL);
+                    if (timer != null) {
+                        // Convert from microseconds to milliseconds with rounding
+                        time += (timer.getTotalTime(uSecNow, mWhich) + 500) / 1000;
+                        count += timer.getCount(mWhich);
+                    }
+                }
+            }
+            
+            if (time > 0) {
+                mWakelockUsage.add(new WakelockUsage(uid, time, count, uSecNow));
+            }
+        }
+        
+        Collections.sort(mWakelockUsage);
+    }
+    
+    private void processMiscUsage() {
+        mMiscUsage.clear();
+        
+        long rawRealtime = SystemClock.elapsedRealtime() * 1000;
+        final long batteryRealtime = mStats.getBatteryRealtime(rawRealtime);
+        final long whichRealtime = mStats.computeBatteryRealtime(rawRealtime, mWhich) / 1000;
+        
+        long time = mStats.computeBatteryUptime(SystemClock.uptimeMillis() * 1000, mWhich) / 1000;
+        if (time > 0) {
+            mMiscUsage.add(new MiscUsage(getString(
+                    R.string.battery_history_awake_label),
+                    R.string.battery_history_awake,
+                    time, whichRealtime)); 
+        }
+        
+        time = mStats.getScreenOnTime(batteryRealtime, mWhich) / 1000;
+        if (time > 0) {
+            mMiscUsage.add(new MiscUsage(getString(
+                    R.string.battery_history_screen_on_label),
+                    R.string.battery_history_screen_on,
+                    time, whichRealtime)); 
+        }
+        
+        time = mStats.getPhoneOnTime(batteryRealtime, mWhich) / 1000;
+        if (time > 0) {
+            mMiscUsage.add(new MiscUsage(getString(
+                    R.string.battery_history_phone_on_label),
+                    R.string.battery_history_phone_on,
+                    time, whichRealtime)); 
+        }
+        
+        Collections.sort(mMiscUsage);
+    }
+    
+    private void collectStatistics() {
+        if (mType == CPU_USAGE) {
+            if (!mHaveCpuUsage) {
+                mHaveCpuUsage = true;
+                processCpuUsage();
+            }
+        }
+        if (mType == NETWORK_USAGE) {
+            if (!mHaveNetworkUsage) {
+                mHaveNetworkUsage = true;
+                processNetworkUsage();
+            }
+        }
+        if (mType == GPS_USAGE || mType == SENSOR_USAGE) {
+            if (!mHaveSensorUsage) {
+                mHaveSensorUsage = true;
+                processSensorUsage();
+            }
+        }
+        if (mType == WAKELOCK_USAGE) {
+            if (!mHaveWakelockUsage) {
+                mHaveWakelockUsage = true;
+                processWakelockUsage();
+            }
+        }
+        if (mType == MISC_USAGE) {
+            if (!mHaveMiscUsage) {
+                mHaveMiscUsage = true;
+                processMiscUsage();
+            }
+        }
+    }
+    
+    private void load() {
+        try {
+            byte[] data = mBatteryInfo.getStatistics();
+            Parcel parcel = Parcel.obtain();
+            //Log.i(TAG, "Got data: " + data.length + " bytes");
+            parcel.unmarshall(data, 0, data.length);
+            parcel.setDataPosition(0);
+            mStats = com.android.internal.os.BatteryStatsImpl.CREATOR
+                    .createFromParcel(parcel);
+            //Log.i(TAG, "RECEIVED BATTERY INFO:");
+            //mStats.dumpLocked(new LogPrinter(Log.INFO, TAG));
+            
+            mHaveCpuUsage =  mHaveNetworkUsage =  mHaveSensorUsage
+                    = mHaveWakelockUsage = mHaveMiscUsage = false;
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException:", e);
+        }
+    }
+    
+    public void onClick(View v) {
+        if (v == mDetailsBackButton) {
+            hideDetails();
+            return;
+        }
+        
+        int id = ((Integer) v.getTag()).intValue();
+        showDetails(id);
+    }
+    
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK && mDetailsShown) {
+            hideDetails();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+        int oldWhich = mWhich;
+        
+        if (parent.equals(mTypeSpinner)) {
+            mType = position;
+        } else if (parent.equals(mWhichSpinner)) {
+            switch (position) {
+                case UNPLUGGED:
+                    mWhich = BatteryStats.STATS_UNPLUGGED;
+                    break;
+                case CURRENT:
+                    mWhich = BatteryStats.STATS_CURRENT;
+                    break;
+                case TOTAL:
+                    mWhich = BatteryStats.STATS_TOTAL;
+                    break;
+            }
+        }
+        
+        if (oldWhich != mWhich) {
+            mHaveCpuUsage =  mHaveNetworkUsage =  mHaveSensorUsage
+                    = mHaveWakelockUsage = mHaveMiscUsage = false;
+        }
+        
+        displayGraph();
+    }
+
+    public void onNothingSelected(AdapterView<?> parent) {
+        // Do nothing
+    }
+    
+    @Override
+    public Object onRetainNonConfigurationInstance() {
+        BatteryStats stats = mStats;
+        mStats = null;
+        return stats;
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        if (mStats != null) {
+            outState.putParcelable("stats", mStats);
+        }
+        outState.putInt("type", mType);
+        outState.putInt("which", mWhich);
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        Log.i(TAG, "onCreate");
+        
+        setContentView(R.layout.battery_history);
+        
+        mGraphLayout = (LinearLayout) findViewById(R.id.graphLayout);
+        mTextLayout = (LinearLayout) findViewById(R.id.textLayout);
+        mDetailsText = (TextView) findViewById(R.id.detailsText);
+        mMessageText = (TextView) findViewById(R.id.messageText);
+        
+        mTypeSpinner = (Spinner) findViewById(R.id.typeSpinner);
+        mTypeSpinner.setOnItemSelectedListener(this);
+        
+        mWhichSpinner = (Spinner) findViewById(R.id.whichSpinner);
+        mWhichSpinner.setOnItemSelectedListener(this);
+        mWhichSpinner.setEnabled(true);
+        
+        mButtons = new GraphableButton[8];
+        mButtons[0] = (GraphableButton) findViewById(R.id.button0);
+        mButtons[1] = (GraphableButton) findViewById(R.id.button1);
+        mButtons[2] = (GraphableButton) findViewById(R.id.button2);
+        mButtons[3] = (GraphableButton) findViewById(R.id.button3);
+        mButtons[4] = (GraphableButton) findViewById(R.id.button4);
+        mButtons[5] = (GraphableButton) findViewById(R.id.button5);
+        mButtons[6] = (GraphableButton) findViewById(R.id.button6);
+        mButtons[7] = (GraphableButton) findViewById(R.id.button7);
+        
+        for (int i = 0; i < mButtons.length; i++) {
+            mButtons[i].setTag(i);
+            mButtons[i].setOnClickListener(this);
+        }
+        
+        mBatteryInfo = IBatteryStats.Stub.asInterface(
+                ServiceManager.getService("batteryinfo"));
+        
+        mStats = (BatteryStats)getLastNonConfigurationInstance();
+        if (icicle != null) {
+            if (mStats == null) {
+                mStats = (BatteryStats)icicle.getParcelable("stats");
+            }
+            mType = icicle.getInt("type");
+            mWhich = icicle.getInt("which");
+        }
+        if (mStats == null) {
+            load();
+        }
+        displayGraph();
+    }
+}
diff --git a/src/com/android/settings/battery_history/GraphableButton.java b/src/com/android/settings/battery_history/GraphableButton.java
new file mode 100644
index 0000000..39028d0
--- /dev/null
+++ b/src/com/android/settings/battery_history/GraphableButton.java
@@ -0,0 +1,55 @@
+package com.android.settings.battery_history;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.widget.Button;
+
+public class GraphableButton extends Button {
+    private static final String TAG = "GraphableButton";
+
+    static Paint[] sPaint = new Paint[2];
+    static {
+        sPaint[0] = new Paint();
+        sPaint[0].setStyle(Paint.Style.FILL);
+        sPaint[0].setColor(Color.BLUE);
+        
+        sPaint[1] = new Paint();
+        sPaint[1].setStyle(Paint.Style.FILL);
+        sPaint[1].setColor(Color.RED);
+    }
+    
+    double[] mValues;
+    
+    public GraphableButton(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+    
+    public void setValues(double[] values, double maxValue) {
+        mValues = values.clone();
+        for (int i = 0; i < values.length; i++) {
+            mValues[i] /= maxValue;
+        }
+    }
+    
+    @Override
+    public void onDraw(Canvas canvas) {
+        Log.i(TAG, "onDraw: w = " + getWidth() + ", h = " + getHeight());
+        
+        int xmin = getPaddingLeft();
+        int xmax = getWidth() - getPaddingRight();
+        int ymin = getPaddingTop();
+        int ymax = getHeight() - getPaddingBottom();
+        
+        int startx = xmin;
+        for (int i = 0; i < mValues.length; i++) {
+            int endx = xmin + (int) (mValues[i] * (xmax - xmin));
+            canvas.drawRect(startx, ymin, endx, ymax, sPaint[i]);
+            startx = endx;
+        }
+        super.onDraw(canvas);
+    }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
new file mode 100644
index 0000000..f0a8189
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -0,0 +1,122 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.ImageView;
+
+/**
+ * BluetoothDevicePreference is the preference type used to display each remote
+ * Bluetooth device in the Bluetooth Settings screen.
+ */
+public class BluetoothDevicePreference extends Preference implements LocalBluetoothDevice.Callback {
+    private static final String TAG = "BluetoothDevicePreference";
+
+    private static int sDimAlpha = Integer.MIN_VALUE;
+    
+    private LocalBluetoothDevice mLocalDevice;
+    
+    /**
+     * Cached local copy of whether the device is busy. This is only updated
+     * from {@link #onDeviceAttributesChanged(LocalBluetoothDevice)}.
+     */ 
+    private boolean mIsBusy;
+    
+    public BluetoothDevicePreference(Context context, LocalBluetoothDevice localDevice) {
+        super(context);
+
+        if (sDimAlpha == Integer.MIN_VALUE) {
+            TypedValue outValue = new TypedValue();
+            context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, outValue, true);
+            sDimAlpha = (int) (outValue.getFloat() * 255);
+        }
+            
+        mLocalDevice = localDevice;
+        
+        setLayoutResource(R.layout.preference_bluetooth);
+        
+        localDevice.registerCallback(this);
+        
+        onDeviceAttributesChanged(localDevice);
+    }
+    
+    public LocalBluetoothDevice getDevice() {
+        return mLocalDevice;
+    }
+
+    @Override
+    protected void onPrepareForRemoval() {
+        super.onPrepareForRemoval();
+        mLocalDevice.unregisterCallback(this);
+    }
+
+    public void onDeviceAttributesChanged(LocalBluetoothDevice device) {
+
+        /*
+         * The preference framework takes care of making sure the value has
+         * changed before proceeding.
+         */
+        
+        setTitle(mLocalDevice.getName());
+        
+        /*
+         * TODO: Showed "Paired" even though it was "Connected". This may be
+         * related to BluetoothHeadset not bound to the actual
+         * BluetoothHeadsetService when we got here.
+         */
+        setSummary(mLocalDevice.getSummary());
+
+        // Used to gray out the item
+        mIsBusy = mLocalDevice.isBusy();
+        
+        // Data has changed
+        notifyChanged();
+        
+        // This could affect ordering, so notify that also
+        notifyHierarchyChanged();
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return super.isEnabled() && !mIsBusy;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+
+        ImageView btClass = (ImageView) view.findViewById(R.id.btClass);
+        btClass.setImageResource(mLocalDevice.getBtClassDrawable());
+        btClass.setAlpha(isEnabled() ? 255 : sDimAlpha);        
+    }
+
+    @Override
+    public int compareTo(Preference another) {
+        if (!(another instanceof BluetoothDevicePreference)) {
+            // Put other preference types above us
+            return 1;
+        }
+        
+        return mLocalDevice.compareTo(((BluetoothDevicePreference) another).mLocalDevice);
+    }
+ 
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
new file mode 100644
index 0000000..a51f9b5e
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
@@ -0,0 +1,198 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothError;
+import android.bluetooth.BluetoothIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.os.Handler;
+import android.os.SystemProperties;
+import android.preference.Preference;
+import android.preference.CheckBoxPreference;
+import android.util.Log;
+
+/**
+ * BluetoothDiscoverableEnabler is a helper to manage the "Discoverable"
+ * checkbox. It sets/unsets discoverability and keeps track of how much time
+ * until the the discoverability is automatically turned off.
+ */
+public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChangeListener {
+    private static final String TAG = "BluetoothDiscoverableEnabler";
+    private static final boolean V = LocalBluetoothManager.V;
+    
+    private static final String SYSTEM_PROPERTY_DISCOVERABLE_TIMEOUT =
+            "debug.bt.discoverable_time";
+    private static final int DISCOVERABLE_TIMEOUT = 120; 
+
+    private static final String SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP =
+            "discoverable_end_timestamp";
+    
+    private final Context mContext;
+    private final Handler mUiHandler;
+    private final CheckBoxPreference mCheckBoxPreference;
+    
+    private final LocalBluetoothManager mLocalManager;
+    
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (BluetoothIntent.SCAN_MODE_CHANGED_ACTION.equals(intent.getAction())) {
+                int mode = intent.getIntExtra(BluetoothIntent.SCAN_MODE, BluetoothError.ERROR);
+                if (mode != BluetoothError.ERROR) {
+                    handleModeChanged(mode);
+                }
+            }
+        }
+    };
+
+    private final Runnable mUpdateCountdownSummaryRunnable = new Runnable() {
+        public void run() {
+            updateCountdownSummary();        
+        } 
+    };
+
+    public BluetoothDiscoverableEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+        mContext = context;
+        mUiHandler = new Handler();
+        mCheckBoxPreference = checkBoxPreference;
+        
+        checkBoxPreference.setPersistent(false);
+        
+        mLocalManager = LocalBluetoothManager.getInstance(context);
+        if (mLocalManager == null) {
+            // Bluetooth not supported
+            checkBoxPreference.setEnabled(false);
+        }
+    }
+
+    public void resume() {
+        if (mLocalManager == null) {
+            return;
+        }
+
+        IntentFilter filter = new IntentFilter(BluetoothIntent.SCAN_MODE_CHANGED_ACTION);
+        filter.addAction(BluetoothIntent.DISABLED_ACTION);
+        mContext.registerReceiver(mReceiver, filter);
+        mCheckBoxPreference.setOnPreferenceChangeListener(this);
+        
+        handleModeChanged(mLocalManager.getBluetoothManager().getScanMode());
+    }
+    
+    public void pause() {
+        if (mLocalManager == null) {
+            return;
+        }
+        
+        mUiHandler.removeCallbacks(mUpdateCountdownSummaryRunnable);
+        mCheckBoxPreference.setOnPreferenceChangeListener(null);
+        mContext.unregisterReceiver(mReceiver);
+    }
+    
+    public boolean onPreferenceChange(Preference preference, Object value) {
+        if (V) {
+            Log.v(TAG, "Preference changed to " + value);
+        }
+        
+        // Turn on/off BT discoverability
+        setEnabled((Boolean) value);
+        
+        return true;
+    }
+    
+    private void setEnabled(final boolean enable) {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+        
+        if (enable) {
+
+            int timeout = getDiscoverableTimeout();
+            manager.setDiscoverableTimeout(timeout);
+            
+            long endTimestamp = System.currentTimeMillis() + timeout * 1000;
+            persistDiscoverableEndTimestamp(endTimestamp);
+            
+            manager.setScanMode(BluetoothDevice.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
+        } else {
+            manager.setScanMode(BluetoothDevice.SCAN_MODE_CONNECTABLE);
+        }
+    }
+
+    private int getDiscoverableTimeout() {
+        int timeout = SystemProperties.getInt(SYSTEM_PROPERTY_DISCOVERABLE_TIMEOUT, -1);
+        if (timeout <= 0) {
+            timeout = DISCOVERABLE_TIMEOUT;
+        }
+        
+        return timeout;
+    }
+
+    private void persistDiscoverableEndTimestamp(long endTimestamp) {
+        SharedPreferences.Editor editor = mLocalManager.getSharedPreferences().edit();
+        editor.putLong(SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, endTimestamp);
+        editor.commit();
+    }
+    
+    private void handleModeChanged(int mode) {
+        if (V) {
+            Log.v(TAG, "Got mode changed: " + mode);
+        }
+        
+        if (mode == BluetoothDevice.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
+            mCheckBoxPreference.setChecked(true);
+            updateCountdownSummary();
+            
+        } else {
+            mCheckBoxPreference.setChecked(false);
+        }
+    }
+    
+    private void updateCountdownSummary() {
+        int mode = mLocalManager.getBluetoothManager().getScanMode();
+        if (mode != BluetoothDevice.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
+            return;
+        }
+            
+        long currentTimestamp = System.currentTimeMillis();
+        long endTimestamp = mLocalManager.getSharedPreferences().getLong(
+                SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0);
+            
+        if (currentTimestamp > endTimestamp) {
+            // We're still in discoverable mode, but maybe there isn't a timeout.
+            mCheckBoxPreference.setSummaryOn(null);
+            return;
+        }
+        
+        String formattedTimeLeft = String.valueOf((endTimestamp - currentTimestamp) / 1000);
+        
+        mCheckBoxPreference.setSummaryOn(
+                mContext.getResources().getString(R.string.bluetooth_is_discoverable,
+                        formattedTimeLeft));
+        
+        synchronized (this) {
+            mUiHandler.removeCallbacks(mUpdateCountdownSummaryRunnable);
+            mUiHandler.postDelayed(mUpdateCountdownSummaryRunnable, 1000);
+        }
+    }
+    
+        
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
new file mode 100644
index 0000000..661700f
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -0,0 +1,149 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+import com.android.settings.bluetooth.LocalBluetoothManager.ExtendedBluetoothState;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.preference.Preference;
+import android.preference.CheckBoxPreference;
+import android.text.TextUtils;
+import android.util.Config;
+
+/**
+ * BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
+ * preference. It is turns on/off Bluetooth and ensures the summary of the
+ * 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 CharSequence mOriginalSummary;
+    
+    private final LocalBluetoothManager mLocalManager;
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            handleStateChanged(mLocalManager.getBluetoothState());
+        }
+    };
+
+    public BluetoothEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+        mContext = context;
+        mCheckBoxPreference = checkBoxPreference;
+        
+        mOriginalSummary = checkBoxPreference.getSummary();
+        checkBoxPreference.setPersistent(false);
+        
+        mLocalManager = LocalBluetoothManager.getInstance(context);
+        if (mLocalManager == null) {
+            // Bluetooth not supported
+            checkBoxPreference.setEnabled(false);
+        }
+    }
+
+    public void resume() {
+        if (mLocalManager == null) {
+            return;
+        }
+        
+        ExtendedBluetoothState state = mLocalManager.getBluetoothState();
+        // This is the widget enabled state, not the preference toggled state
+        mCheckBoxPreference.setEnabled(state == ExtendedBluetoothState.ENABLED ||
+                state == ExtendedBluetoothState.DISABLED);
+        // BT state is not a sticky broadcast, so set it manually
+        handleStateChanged(state);
+        
+        mContext.registerReceiver(mReceiver, 
+                new IntentFilter(LocalBluetoothManager.EXTENDED_BLUETOOTH_STATE_CHANGED_ACTION));
+        mCheckBoxPreference.setOnPreferenceChangeListener(this);
+    }
+    
+    public void pause() {
+        if (mLocalManager == null) {
+            return;
+        }
+        
+        mContext.unregisterReceiver(mReceiver);
+        mCheckBoxPreference.setOnPreferenceChangeListener(null);
+    }
+    
+    public boolean onPreferenceChange(Preference preference, Object value) {
+        // Turn on/off BT
+        setEnabled((Boolean) value);
+        
+        // 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(ExtendedBluetoothState state) {
+
+        if (state == ExtendedBluetoothState.DISABLED || state == ExtendedBluetoothState.ENABLED) {
+            mCheckBoxPreference.setChecked(state == ExtendedBluetoothState.ENABLED);
+            mCheckBoxPreference
+                    .setSummary(state == ExtendedBluetoothState.DISABLED ? mOriginalSummary : null);
+            
+            mCheckBoxPreference.setEnabled(isEnabledByDependency());
+            
+        } else if (state == ExtendedBluetoothState.ENABLING ||
+                state == ExtendedBluetoothState.DISABLING) {
+            mCheckBoxPreference.setSummary(state == ExtendedBluetoothState.ENABLING
+                    ? R.string.wifi_starting
+                    : R.string.wifi_stopping);
+            
+        } else if (state == ExtendedBluetoothState.UNKNOWN) {
+            mCheckBoxPreference.setChecked(false);
+            mCheckBoxPreference.setSummary(R.string.wifi_error);
+            mCheckBoxPreference.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/BluetoothEventRedirector.java b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java
new file mode 100644
index 0000000..2ad5726
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java
@@ -0,0 +1,147 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.bluetooth.LocalBluetoothManager.ExtendedBluetoothState;
+
+import android.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothHeadset;
+import android.bluetooth.BluetoothError;
+import android.bluetooth.BluetoothIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.util.Log;
+
+/**
+ * BluetoothEventRedirector receives broadcasts and callbacks from the Bluetooth
+ * API and dispatches the event on the UI thread to the right class in the
+ * Settings.
+ */
+public class BluetoothEventRedirector {
+    private static final String TAG = "BluetoothEventRedirector";
+    private static final boolean V = LocalBluetoothManager.V;
+    
+    private LocalBluetoothManager mManager;
+    
+    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (V) {
+                Log.v(TAG, "Received " + intent.getAction());
+            }
+            
+            String action = intent.getAction();
+            String address = intent.getStringExtra(BluetoothIntent.ADDRESS);
+                
+            if (action.equals(BluetoothIntent.ENABLED_ACTION)) {
+                mManager.setBluetoothStateInt(ExtendedBluetoothState.ENABLED);
+                
+            } else if (action.equals(BluetoothIntent.DISABLED_ACTION)) {
+                mManager.setBluetoothStateInt(ExtendedBluetoothState.DISABLED);
+                    
+            } else if (action.equals(BluetoothIntent.DISCOVERY_STARTED_ACTION)) {
+                mManager.onScanningStateChanged(true);
+                
+            } else if (action.equals(BluetoothIntent.DISCOVERY_COMPLETED_ACTION)) {
+                mManager.onScanningStateChanged(false);
+                    
+            } else if (action.equals(BluetoothIntent.REMOTE_DEVICE_FOUND_ACTION)) {
+                short rssi = intent.getShortExtra(BluetoothIntent.RSSI, Short.MIN_VALUE);
+                mManager.getLocalDeviceManager().onDeviceAppeared(address, rssi);
+                
+            } else if (action.equals(BluetoothIntent.REMOTE_DEVICE_DISAPPEARED_ACTION)) {
+                mManager.getLocalDeviceManager().onDeviceDisappeared(address);
+                
+            } else if (action.equals(BluetoothIntent.REMOTE_NAME_UPDATED_ACTION)) {
+                mManager.getLocalDeviceManager().onDeviceNameUpdated(address);
+                
+            } else if (action.equals(BluetoothIntent.BOND_STATE_CHANGED_ACTION)) {
+                int bondState = intent.getIntExtra(BluetoothIntent.BOND_STATE,
+                                                   BluetoothError.ERROR);
+                mManager.getLocalDeviceManager().onBondingStateChanged(address, bondState);
+                if (bondState == BluetoothDevice.BOND_NOT_BONDED) {
+                    int reason = intent.getIntExtra(BluetoothIntent.REASON, BluetoothError.ERROR);
+                    if (reason == BluetoothDevice.UNBOND_REASON_AUTH_FAILED ||
+                            reason == BluetoothDevice.UNBOND_REASON_AUTH_REJECTED ||
+                            reason == BluetoothDevice.UNBOND_REASON_REMOTE_DEVICE_DOWN) {
+                        mManager.getLocalDeviceManager().onBondingError(address, reason);
+                    }
+                }
+                
+            } else if (action.equals(BluetoothIntent.HEADSET_STATE_CHANGED_ACTION)) {
+                mManager.getLocalDeviceManager().onProfileStateChanged(address);
+
+                int newState = intent.getIntExtra(BluetoothIntent.HEADSET_STATE, 0);
+                int oldState = intent.getIntExtra(BluetoothIntent.HEADSET_PREVIOUS_STATE, 0);
+                if (newState == BluetoothHeadset.STATE_DISCONNECTED &&
+                        oldState == BluetoothHeadset.STATE_CONNECTING) {
+                    Log.i(TAG, "Failed to connect BT headset");
+                }
+                
+            } else if (action.equals(BluetoothA2dp.SINK_STATE_CHANGED_ACTION)) {
+                mManager.getLocalDeviceManager().onProfileStateChanged(address);
+
+                int newState = intent.getIntExtra(BluetoothA2dp.SINK_STATE, 0);
+                int oldState = intent.getIntExtra(BluetoothA2dp.SINK_PREVIOUS_STATE, 0);
+                if (newState == BluetoothA2dp.STATE_DISCONNECTED &&
+                        oldState == BluetoothA2dp.STATE_CONNECTING) {
+                    Log.i(TAG, "Failed to connect BT A2DP");
+                }
+                
+            } else if (action.equals(BluetoothIntent.REMOTE_DEVICE_CLASS_UPDATED_ACTION)) {
+                mManager.getLocalDeviceManager().onBtClassChanged(address);
+                
+            }
+        }
+    };
+
+    public BluetoothEventRedirector(LocalBluetoothManager localBluetoothManager) {
+        mManager = localBluetoothManager;
+    }
+
+    public void start() {
+        IntentFilter filter = new IntentFilter();
+        
+        // Bluetooth on/off broadcasts
+        filter.addAction(BluetoothIntent.ENABLED_ACTION);
+        filter.addAction(BluetoothIntent.DISABLED_ACTION);
+        
+        // Discovery broadcasts
+        filter.addAction(BluetoothIntent.DISCOVERY_STARTED_ACTION);
+        filter.addAction(BluetoothIntent.DISCOVERY_COMPLETED_ACTION);
+        filter.addAction(BluetoothIntent.REMOTE_DEVICE_DISAPPEARED_ACTION);
+        filter.addAction(BluetoothIntent.REMOTE_DEVICE_FOUND_ACTION);
+        filter.addAction(BluetoothIntent.REMOTE_NAME_UPDATED_ACTION);
+        
+        // Pairing broadcasts
+        filter.addAction(BluetoothIntent.BOND_STATE_CHANGED_ACTION);
+        
+        // Fine-grained state broadcasts
+        filter.addAction(BluetoothA2dp.SINK_STATE_CHANGED_ACTION);
+        filter.addAction(BluetoothIntent.HEADSET_STATE_CHANGED_ACTION);
+        filter.addAction(BluetoothIntent.REMOTE_DEVICE_CLASS_UPDATED_ACTION);
+        
+        mManager.getContext().registerReceiver(mBroadcastReceiver, filter);
+    }
+    
+    public void stop() {
+        mManager.getContext().unregisterReceiver(mBroadcastReceiver);   
+    }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothNamePreference.java b/src/com/android/settings/bluetooth/BluetoothNamePreference.java
new file mode 100644
index 0000000..3065b26
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothNamePreference.java
@@ -0,0 +1,79 @@
+/*
+ * 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.bluetooth;
+
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.preference.EditTextPreference;
+import android.preference.PreferenceManager;
+import android.util.AttributeSet;
+
+/**
+ * BluetoothNamePreference is the preference type for editing the device's
+ * Bluetooth name. It asks the user for a name, and persists it via the
+ * Bluetooth API.
+ */
+public class BluetoothNamePreference extends EditTextPreference {
+    private static final String TAG = "BluetoothNamePreference";
+
+    private LocalBluetoothManager mLocalManager;
+    
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            setSummaryToName();
+        }
+    };
+    
+    public BluetoothNamePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        
+        mLocalManager = LocalBluetoothManager.getInstance(context);
+        
+        setSummaryToName();        
+    }
+
+    public void resume() {
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(BluetoothIntent.ENABLED_ACTION);
+        filter.addAction(BluetoothIntent.NAME_CHANGED_ACTION);
+        getContext().registerReceiver(mReceiver, filter);
+    }
+    
+    public void pause() {
+        getContext().unregisterReceiver(mReceiver);
+    }
+    
+    private void setSummaryToName() {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+        if (manager.isEnabled()) {
+            setSummary(manager.getName());
+        }
+    }
+
+    @Override
+    protected boolean persistString(String value) {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+        manager.setName(value);
+        return true;        
+    }
+    
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothPinDialog.java b/src/com/android/settings/bluetooth/BluetoothPinDialog.java
new file mode 100644
index 0000000..5e289f7
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothPinDialog.java
@@ -0,0 +1,202 @@
+/*
+ * 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.bluetooth;
+
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.InputFilter;
+import android.text.TextWatcher;
+import android.text.InputFilter.LengthFilter;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.android.internal.app.AlertActivity;
+import com.android.internal.app.AlertController;
+import com.android.settings.R;
+
+/**
+ * BluetoothPinDialog asks the user to enter a PIN for pairing with a remote
+ * Bluetooth device. It is an activity that appears as a dialog.
+ */
+public class BluetoothPinDialog extends AlertActivity implements DialogInterface.OnClickListener,
+        TextWatcher {
+    private static final String TAG = "BluetoothPinDialog";
+
+    private LocalBluetoothManager mLocalManager;
+    private String mAddress;
+    private EditText mPinView;
+    private Button mOkButton;
+
+    private static final String INSTANCE_KEY_PAIRING_CANCELED = "received_pairing_canceled";
+    private boolean mReceivedPairingCanceled;
+    
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (!BluetoothIntent.PAIRING_CANCEL_ACTION.equals(intent.getAction())) {
+                return;
+            }
+            
+            String address = intent.getStringExtra(BluetoothIntent.ADDRESS);
+            if (address == null || address.equals(mAddress)) {
+                onReceivedPairingCanceled();
+            }
+        }
+    };
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        Intent intent = getIntent();
+        if (!intent.getAction().equals(BluetoothIntent.PAIRING_REQUEST_ACTION))
+        {
+            Log.e(TAG,
+                  "Error: this activity may be started only with intent " +
+                  BluetoothIntent.PAIRING_REQUEST_ACTION);
+            finish();
+        }
+        
+        mLocalManager = LocalBluetoothManager.getInstance(this);
+        mAddress = intent.getStringExtra(BluetoothIntent.ADDRESS);
+        
+        // Set up the "dialog"
+        final AlertController.AlertParams p = mAlertParams;
+        p.mIconId = android.R.drawable.ic_dialog_info;
+        p.mTitle = getString(R.string.bluetooth_pin_entry);
+        p.mView = createView();
+        p.mPositiveButtonText = getString(android.R.string.ok);
+        p.mPositiveButtonListener = this;
+        p.mNegativeButtonText = getString(android.R.string.cancel);
+        p.mNegativeButtonListener = this;
+        setupAlert();
+        
+        mOkButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
+        mOkButton.setEnabled(false);
+
+        /*
+         * Leave this registered through pause/resume since we still want to
+         * finish the activity in the background if pairing is canceled.
+         */
+        registerReceiver(mReceiver, new IntentFilter(BluetoothIntent.PAIRING_CANCEL_ACTION));
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Bundle savedInstanceState) {
+        super.onRestoreInstanceState(savedInstanceState);
+        
+        mReceivedPairingCanceled = savedInstanceState.getBoolean(INSTANCE_KEY_PAIRING_CANCELED);
+        if (mReceivedPairingCanceled) {
+            onReceivedPairingCanceled();
+        }
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        
+        outState.putBoolean(INSTANCE_KEY_PAIRING_CANCELED, mReceivedPairingCanceled);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        
+        unregisterReceiver(mReceiver);
+    }
+
+    private View createView() {
+        View view = getLayoutInflater().inflate(R.layout.bluetooth_pin_entry, null);
+        
+        String name = mLocalManager.getLocalDeviceManager().getName(mAddress);
+        TextView messageView = (TextView) view.findViewById(R.id.message);
+        messageView.setText(getString(R.string.bluetooth_enter_pin_msg, name));
+        
+        mPinView = (EditText) view.findViewById(R.id.text);
+        mPinView.addTextChangedListener(this);
+        // Maximum of 10 characters in a PIN
+        mPinView.setFilters(new InputFilter[] { new LengthFilter(10) });
+        
+        return view;
+    }
+
+    public void afterTextChanged(Editable s) {
+        if (s.length() > 0) {
+            mOkButton.setEnabled(true);
+        }
+    }
+
+    private void onReceivedPairingCanceled() {
+        mReceivedPairingCanceled = true;
+        
+        TextView messageView = (TextView) findViewById(R.id.message);
+        messageView.setText(getString(R.string.bluetooth_pairing_error_message,
+                mLocalManager.getLocalDeviceManager().getName(mAddress)));
+        
+        mPinView.setVisibility(View.GONE);
+        mPinView.clearFocus();
+        mPinView.removeTextChangedListener(this);
+
+        mOkButton.setEnabled(true);
+        mAlert.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE);
+    }
+    
+    private void onPair(String pin) {
+        byte[] pinBytes = BluetoothDevice.convertPinToBytes(pin);
+        
+        if (pinBytes == null) {
+            return;
+        }
+        
+        mLocalManager.getBluetoothManager().setPin(mAddress, pinBytes);
+    }
+
+    private void onCancel() {
+        mLocalManager.getBluetoothManager().cancelBondProcess(mAddress);
+    }
+    
+    public void onClick(DialogInterface dialog, int which) {
+        switch (which) {
+            case DialogInterface.BUTTON_POSITIVE:
+                onPair(mPinView.getText().toString());
+                break;
+                
+            case DialogInterface.BUTTON_NEGATIVE:
+                onCancel();
+                break;
+        }
+    }
+
+    /* Not used */
+    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+    }
+
+    /* Not used */
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+    }
+
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothPinRequest.java b/src/com/android/settings/bluetooth/BluetoothPinRequest.java
new file mode 100644
index 0000000..619052d
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothPinRequest.java
@@ -0,0 +1,96 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.text.TextUtils;
+
+/**
+ * BluetoothPinRequest is a receiver for any Bluetooth pairing PIN request. It
+ * checks if the Bluetooth Settings is currently visible and brings up the PIN
+ * entry dialog. Otherwise it puts a Notification in the status bar, which can
+ * be clicked to bring up the PIN entry dialog.
+ */
+public class BluetoothPinRequest extends BroadcastReceiver {
+
+    public static final int NOTIFICATION_ID = android.R.drawable.stat_sys_data_bluetooth;
+    
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction();
+        if (action.equals(BluetoothIntent.PAIRING_REQUEST_ACTION)) {
+
+            LocalBluetoothManager localManager = LocalBluetoothManager.getInstance(context);        
+        
+            String address = intent.getStringExtra(BluetoothIntent.ADDRESS);
+            Intent pinIntent = new Intent();
+            pinIntent.setClass(context, BluetoothPinDialog.class);
+            pinIntent.putExtra(BluetoothIntent.ADDRESS, address); 
+            pinIntent.setAction(BluetoothIntent.PAIRING_REQUEST_ACTION);
+            pinIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            
+            if (localManager.getForegroundActivity() != null) {
+                // Since the BT-related activity is in the foreground, just open the dialog
+                context.startActivity(pinIntent);
+                
+            } else {
+                
+                // Put up a notification that leads to the dialog
+                Resources res = context.getResources();
+                Notification notification = new Notification(
+                        android.R.drawable.stat_sys_data_bluetooth,
+                        res.getString(R.string.bluetooth_notif_ticker),
+                        System.currentTimeMillis());
+
+                PendingIntent pending = PendingIntent.getActivity(context, 0, 
+                        pinIntent, PendingIntent.FLAG_ONE_SHOT);
+                
+                String name = intent.getStringExtra(BluetoothIntent.NAME);
+                if (TextUtils.isEmpty(name)) {
+                    name = localManager.getLocalDeviceManager().getName(address);
+                }
+                
+                notification.setLatestEventInfo(context, 
+                        res.getString(R.string.bluetooth_notif_title), 
+                        res.getString(R.string.bluetooth_notif_message) + name, 
+                        pending);
+                notification.flags |= Notification.FLAG_AUTO_CANCEL;
+                
+                NotificationManager manager = (NotificationManager) 
+                        context.getSystemService(Context.NOTIFICATION_SERVICE);
+                manager.notify(NOTIFICATION_ID, notification);
+            }
+            
+        } else if (action.equals(BluetoothIntent.PAIRING_CANCEL_ACTION)) {
+            
+            // Remove the notification
+            NotificationManager manager = (NotificationManager) context
+                    .getSystemService(Context.NOTIFICATION_SERVICE);
+            manager.cancel(NOTIFICATION_ID);
+        }
+    }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
new file mode 100644
index 0000000..5adada3
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -0,0 +1,260 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.ProgressCategory;
+import com.android.settings.R;
+import com.android.settings.bluetooth.LocalBluetoothManager.ExtendedBluetoothState;
+
+import java.util.List;
+import java.util.WeakHashMap;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.view.ContextMenu;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.widget.AdapterView.AdapterContextMenuInfo;
+
+/**
+ * BluetoothSettings is the Settings screen for Bluetooth configuration and
+ * connection management.
+ */
+public class BluetoothSettings extends PreferenceActivity
+        implements LocalBluetoothManager.Callback {
+
+    private static final String TAG = "BluetoothSettings";
+
+    private static final int MENU_SCAN = Menu.FIRST;
+    
+    private static final String KEY_BT_CHECKBOX = "bt_checkbox";
+    private static final String KEY_BT_DISCOVERABLE = "bt_discoverable";
+    private static final String KEY_BT_DEVICE_LIST = "bt_device_list";
+    private static final String KEY_BT_NAME = "bt_name";
+    private static final String KEY_BT_SCAN = "bt_scan";
+    
+    private LocalBluetoothManager mLocalManager;
+    
+    private BluetoothEnabler mEnabler;
+    private BluetoothDiscoverableEnabler mDiscoverableEnabler;
+    
+    private BluetoothNamePreference mNamePreference;
+    
+    private ProgressCategory mDeviceList;
+    
+    private WeakHashMap<LocalBluetoothDevice, BluetoothDevicePreference> mDevicePreferenceMap =
+            new WeakHashMap<LocalBluetoothDevice, BluetoothDevicePreference>();
+    
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            // TODO: put this in callback instead of receiving
+            onBluetoothStateChanged(mLocalManager.getBluetoothState());
+        }
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        mLocalManager = LocalBluetoothManager.getInstance(this);
+        if (mLocalManager == null) finish();        
+        
+        addPreferencesFromResource(R.xml.bluetooth_settings);
+        
+        mEnabler = new BluetoothEnabler(
+                this,
+                (CheckBoxPreference) findPreference(KEY_BT_CHECKBOX));
+        
+        mDiscoverableEnabler = new BluetoothDiscoverableEnabler(
+                this,
+                (CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE));
+    
+        mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME);
+        
+        mDeviceList = (ProgressCategory) findPreference(KEY_BT_DEVICE_LIST);
+        
+        registerForContextMenu(getListView());
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        
+        // Repopulate (which isn't too bad since it's cached in the settings
+        // bluetooth manager
+        mDevicePreferenceMap.clear();
+        mDeviceList.removeAll();
+        addDevices();
+
+        mEnabler.resume();
+        mDiscoverableEnabler.resume();
+        mNamePreference.resume();
+        mLocalManager.registerCallback(this);
+        
+        mLocalManager.startScanning(false);
+
+        registerReceiver(mReceiver, 
+                new IntentFilter(LocalBluetoothManager.EXTENDED_BLUETOOTH_STATE_CHANGED_ACTION));
+        
+        mLocalManager.setForegroundActivity(this);
+    }
+    
+    @Override
+    protected void onPause() {
+        super.onPause();
+
+        mLocalManager.setForegroundActivity(null);
+        
+        unregisterReceiver(mReceiver);
+        
+        mLocalManager.unregisterCallback(this);
+        mNamePreference.pause();
+        mDiscoverableEnabler.pause();
+        mEnabler.pause();
+    }
+
+    private void addDevices() {
+        List<LocalBluetoothDevice> devices = mLocalManager.getLocalDeviceManager().getDevicesCopy();
+        for (LocalBluetoothDevice device : devices) {
+            onDeviceAdded(device);
+        }
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, MENU_SCAN, 0, R.string.bluetooth_scan_for_devices)
+                .setIcon(com.android.internal.R.drawable.ic_menu_refresh)
+                .setAlphabeticShortcut('r');
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        menu.findItem(MENU_SCAN).setEnabled(mLocalManager.getBluetoothManager().isEnabled());
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+        
+            case MENU_SCAN:
+                mLocalManager.startScanning(true);
+                return true;
+                
+            default:
+                return false;
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+            Preference preference) {
+
+        if (KEY_BT_SCAN.equals(preference.getKey())) {
+            mLocalManager.startScanning(true);
+            return true;
+        }
+        
+        if (preference instanceof BluetoothDevicePreference) {
+            BluetoothDevicePreference btPreference = (BluetoothDevicePreference) preference;
+            btPreference.getDevice().onClicked();
+            return true;
+        }
+        
+        return super.onPreferenceTreeClick(preferenceScreen, preference);
+    }
+    
+    @Override
+    public void onCreateContextMenu(ContextMenu menu, View v,
+            ContextMenuInfo menuInfo) {
+        LocalBluetoothDevice device = getDeviceFromMenuInfo(menuInfo);
+        if (device == null) return;
+        
+        device.onCreateContextMenu(menu);
+    }
+
+    @Override
+    public boolean onContextItemSelected(MenuItem item) {
+        LocalBluetoothDevice device = getDeviceFromMenuInfo(item.getMenuInfo());
+        if (device == null) return false;
+        
+        device.onContextItemSelected(item);
+        return true;
+    }
+
+    private LocalBluetoothDevice getDeviceFromMenuInfo(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 BluetoothDevicePreference)) {
+            return null;
+        }
+
+        return ((BluetoothDevicePreference) pref).getDevice();
+    }
+    
+    public void onDeviceAdded(LocalBluetoothDevice device) {
+
+        if (mDevicePreferenceMap.get(device) != null) {
+            throw new IllegalStateException("Got onDeviceAdded, but device already exists");
+        }
+        
+        createDevicePreference(device);            
+    }
+
+    private void createDevicePreference(LocalBluetoothDevice device) {
+        BluetoothDevicePreference preference = new BluetoothDevicePreference(this, device);
+        mDeviceList.addPreference(preference);
+        mDevicePreferenceMap.put(device, preference);
+    }
+    
+    public void onDeviceDeleted(LocalBluetoothDevice device) {
+        BluetoothDevicePreference preference = mDevicePreferenceMap.remove(device);
+        if (preference != null) {
+            mDeviceList.removePreference(preference);
+        }
+    }
+
+    public void onScanningStateChanged(boolean started) {
+        mDeviceList.setProgress(started);
+    }
+    
+    private void onBluetoothStateChanged(ExtendedBluetoothState bluetoothState) {
+        // When bluetooth is enabled (and we are in the activity, which we are),
+        // we should start a scan
+        if (bluetoothState == ExtendedBluetoothState.ENABLED) {
+            mLocalManager.startScanning(false);
+        } else if (bluetoothState == ExtendedBluetoothState.DISABLED) {
+            mDeviceList.setProgress(false);
+        }
+    }
+}
diff --git a/src/com/android/settings/bluetooth/ConnectSpecificProfilesActivity.java b/src/com/android/settings/bluetooth/ConnectSpecificProfilesActivity.java
new file mode 100644
index 0000000..7dd1b70
--- /dev/null
+++ b/src/com/android/settings/bluetooth/ConnectSpecificProfilesActivity.java
@@ -0,0 +1,298 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.text.TextUtils;
+import android.util.Log;
+
+/**
+ * ConnectSpecificProfilesActivity presents the user with all of the profiles
+ * for a particular device, and allows him to choose which should be connected
+ * (or disconnected).
+ */
+public class ConnectSpecificProfilesActivity extends PreferenceActivity
+        implements LocalBluetoothDevice.Callback, Preference.OnPreferenceChangeListener {
+    private static final String TAG = "ConnectSpecificProfilesActivity";
+
+    private static final String KEY_ONLINE_MODE = "online_mode";
+    private static final String KEY_TITLE = "title";
+    private static final String KEY_PROFILE_CONTAINER = "profile_container";
+
+    public static final String EXTRA_ADDRESS = "address";
+    
+    private LocalBluetoothManager mManager;
+    private LocalBluetoothDevice mDevice;
+    
+    private PreferenceGroup mProfileContainer;
+    private CheckBoxPreference mOnlineModePreference;
+
+    /**
+     * The current mode of this activity and its checkboxes (either online mode
+     * or offline mode). In online mode, user interactions with the profile
+     * checkboxes will also toggle the profile's connectivity. In offline mode,
+     * they will not, and only the preferred state will be saved for the
+     * profile.
+     */
+    private boolean mOnlineMode;
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        String address;
+        if (savedInstanceState != null) {
+            address = savedInstanceState.getString(EXTRA_ADDRESS);
+        } else {
+            Intent intent = getIntent();
+            address = intent.getStringExtra(EXTRA_ADDRESS);
+        }
+
+        if (TextUtils.isEmpty(address)) {
+            Log.w(TAG, "Activity started without address");
+            finish();
+        }
+        
+        mManager = LocalBluetoothManager.getInstance(this);
+        mDevice = mManager.getLocalDeviceManager().findDevice(address);
+        if (mDevice == null) {
+            Log.w(TAG, "Device not found, cannot connect to it");
+            finish();
+        }
+
+        addPreferencesFromResource(R.xml.bluetooth_device_advanced);
+        mProfileContainer = (PreferenceGroup) findPreference(KEY_PROFILE_CONTAINER);
+        
+        // Set the title of the screen
+        findPreference(KEY_TITLE).setTitle(
+                getString(R.string.bluetooth_device_advanced_title, mDevice.getName()));
+
+        // Listen for check/uncheck of the online mode checkbox
+        mOnlineModePreference = (CheckBoxPreference) findPreference(KEY_ONLINE_MODE);
+        mOnlineModePreference.setOnPreferenceChangeListener(this);
+        
+        // Add a preference for each profile
+        addPreferencesForProfiles();
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        
+        outState.putString(EXTRA_ADDRESS, mDevice.getAddress());
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        
+        mManager.setForegroundActivity(this);
+        mDevice.registerCallback(this);
+
+        refresh();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        
+        mDevice.unregisterCallback(this);
+        mManager.setForegroundActivity(null);
+    }
+
+    private void addPreferencesForProfiles() {
+        for (Profile profile : mDevice.getProfiles()) {
+            Preference pref = createProfilePreference(profile);
+            mProfileContainer.addPreference(pref);
+        }
+    }
+
+    /**
+     * Creates a checkbox preference for the particular profile. The key will be
+     * the profile's name.
+     * 
+     * @param profile The profile for which the preference controls.
+     * @return A preference that allows the user to choose whether this profile
+     *         will be connected to.
+     */
+    private CheckBoxPreference createProfilePreference(Profile profile) {
+        CheckBoxPreference pref = new CheckBoxPreference(this);
+        pref.setKey(profile.toString());
+        pref.setTitle(profile.localizedString);
+        pref.setPersistent(false);
+        pref.setOnPreferenceChangeListener(this);
+
+        refreshProfilePreference(pref, profile);
+        
+        return pref;
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        String key = preference.getKey();
+        if (TextUtils.isEmpty(key) || newValue == null) return true;
+        
+        if (key.equals(KEY_ONLINE_MODE)) {
+            onOnlineModeCheckedStateChanged((Boolean) newValue);
+            
+        } else {
+            Profile profile = getProfileOf(preference);
+            if (profile == null) return false;
+            onProfileCheckedStateChanged(profile, (Boolean) newValue);
+        }
+
+        return true;
+    }
+
+    private void onOnlineModeCheckedStateChanged(boolean checked) {
+        setOnlineMode(checked, true);
+    }
+    
+    private void onProfileCheckedStateChanged(Profile profile, boolean checked) {
+        if (mOnlineMode) {
+            if (checked) {
+                mDevice.connect(profile);
+            } else {
+                mDevice.disconnect(profile);
+            }
+        }
+        
+        LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
+                .getProfileManager(mManager, profile);
+        profileManager.setPreferred(mDevice.getAddress(), checked);
+    }
+    
+    public void onDeviceAttributesChanged(LocalBluetoothDevice device) {
+        refresh();
+    }
+
+    private void refresh() {
+        // We are in 'online mode' if we are connected, connecting, or disconnecting
+        setOnlineMode(mDevice.isConnected() || mDevice.isBusy(), false);
+        refreshProfiles();
+    }
+
+    /**
+     * Switches between online/offline mode.
+     * 
+     * @param onlineMode Whether to be in online mode, or offline mode.
+     * @param takeAction Whether to take action (i.e., connect or disconnect)
+     *            based on the new online mode.
+     */
+    private void setOnlineMode(boolean onlineMode, boolean takeAction) {
+        mOnlineMode = onlineMode;
+            
+        if (takeAction) {
+            if (onlineMode) {
+                mDevice.connect();
+            } else {
+                mDevice.disconnect();
+            }
+        }
+            
+        refreshOnlineModePreference();
+    }
+    
+    private void refreshOnlineModePreference() {
+        mOnlineModePreference.setChecked(mOnlineMode);
+
+        /* Gray out checkbox while connecting and disconnecting */
+        mOnlineModePreference.setEnabled(!mDevice.isBusy());
+
+        /**
+         * If the device is online, show status. Otherwise, show a summary that
+         * describes what the checkbox does.
+         */
+        mOnlineModePreference.setSummary(mOnlineMode ? mDevice.getSummary()
+                : R.string.bluetooth_device_advanced_online_mode_summary);
+    }
+    
+    private void refreshProfiles() {
+        for (Profile profile : mDevice.getProfiles()) {
+            CheckBoxPreference profilePref =
+                    (CheckBoxPreference) findPreference(profile.toString());
+            if (profilePref == null) {
+                profilePref = createProfilePreference(profile);
+                mProfileContainer.addPreference(profilePref);
+            } else {
+                refreshProfilePreference(profilePref, profile);
+            }
+        }
+    }
+    
+    private void refreshProfilePreference(CheckBoxPreference profilePref, Profile profile) {
+        String address = mDevice.getAddress();
+        LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
+                .getProfileManager(mManager, profile);
+        
+        int connectionStatus = profileManager.getConnectionStatus(address);
+
+        /* Gray out checkbox while connecting and disconnecting */
+        profilePref.setEnabled(!mDevice.isBusy());
+
+        profilePref.setSummary(getProfileSummary(profileManager, profile, address,
+                connectionStatus, mOnlineMode));
+        
+        profilePref.setChecked(profileManager.isPreferred(address));
+    }
+
+    private Profile getProfileOf(Preference pref) {
+        if (!(pref instanceof CheckBoxPreference)) return null;
+        String key = pref.getKey();
+        if (TextUtils.isEmpty(key)) return null;
+        
+        try {
+            return Profile.valueOf(pref.getKey());
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+
+    private static int getProfileSummary(LocalBluetoothProfileManager profileManager,
+            Profile profile, String address, int connectionStatus, boolean onlineMode) {
+        if (!onlineMode || connectionStatus == SettingsBtStatus.CONNECTION_STATUS_DISCONNECTED) {
+            return getProfileSummaryForSettingPreference(profile);
+        } else {
+            return profileManager.getSummary(address);
+        }
+    }
+    
+    /**
+     * Gets the summary that describes when checked, it will become a preferred profile.
+     * 
+     * @param profile The profile to get the summary for.
+     * @return The summary.
+     */
+    private static final int getProfileSummaryForSettingPreference(Profile profile) {
+        switch (profile) {
+            case A2DP:
+                return R.string.bluetooth_a2dp_profile_summary_use_for;
+            case HEADSET:
+                return R.string.bluetooth_headset_profile_summary_use_for;
+            default:
+                return 0;
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothDevice.java b/src/com/android/settings/bluetooth/LocalBluetoothDevice.java
new file mode 100644
index 0000000..a488540
--- /dev/null
+++ b/src/com/android/settings/bluetooth/LocalBluetoothDevice.java
@@ -0,0 +1,576 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
+
+import android.app.AlertDialog;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothClass;
+import android.bluetooth.IBluetoothDeviceCallback;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * LocalBluetoothDevice represents a remote Bluetooth device. It contains
+ * attributes of the device (such as the address, name, RSSI, etc.) and
+ * functionality that can be performed on the device (connect, pair, disconnect,
+ * etc.).
+ */
+public class LocalBluetoothDevice implements Comparable<LocalBluetoothDevice> {
+    private static final String TAG = "LocalBluetoothDevice";
+
+    private static final int CONTEXT_ITEM_CONNECT = Menu.FIRST + 1;
+    private static final int CONTEXT_ITEM_DISCONNECT = Menu.FIRST + 2;
+    private static final int CONTEXT_ITEM_UNPAIR = Menu.FIRST + 3;
+    private static final int CONTEXT_ITEM_CONNECT_ADVANCED = Menu.FIRST + 4;
+
+    private final String mAddress;
+    private String mName;
+    private short mRssi;
+    private int mBtClass = BluetoothClass.ERROR;
+
+    private List<Profile> mProfiles = new ArrayList<Profile>();
+
+    private boolean mVisible;
+
+    private final LocalBluetoothManager mLocalManager;
+
+    private List<Callback> mCallbacks = new ArrayList<Callback>();
+
+    /**
+     * When we connect to multiple profiles, we only want to display a single
+     * error even if they all fail. This tracks that state.
+     */
+    private boolean mIsConnectingErrorPossible;
+
+    LocalBluetoothDevice(Context context, String address) {
+        mLocalManager = LocalBluetoothManager.getInstance(context);
+        if (mLocalManager == null) {
+            throw new IllegalStateException(
+                    "Cannot use LocalBluetoothDevice without Bluetooth hardware");
+        }
+
+        mAddress = address;
+
+        fillData();
+    }
+
+    public void onClicked() {
+        int bondState = getBondState();
+
+        if (isConnected()) {
+            askDisconnect();
+        } else if (bondState == BluetoothDevice.BOND_BONDED) {
+            connect();
+        } else if (bondState == BluetoothDevice.BOND_NOT_BONDED) {
+            pair();
+        }
+    }
+
+    public void disconnect() {
+        for (Profile profile : mProfiles) {
+            disconnect(profile);
+        }
+    }
+
+    public void disconnect(Profile profile) {
+        LocalBluetoothProfileManager profileManager =
+                LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile);
+        int status = profileManager.getConnectionStatus(mAddress);
+        if (SettingsBtStatus.isConnectionStatusConnected(status)) {
+            profileManager.disconnect(mAddress);
+        }
+    }
+
+    public void askDisconnect() {
+        Context context = mLocalManager.getForegroundActivity();
+        if (context == null) {
+            // Cannot ask, since we need an activity context
+            disconnect();
+            return;
+        }
+
+        Resources res = context.getResources();
+
+        String name = getName();
+        if (TextUtils.isEmpty(name)) {
+            name = res.getString(R.string.bluetooth_device);
+        }
+        String message = res.getString(R.string.bluetooth_disconnect_blank, name);
+
+        DialogInterface.OnClickListener disconnectListener = new DialogInterface.OnClickListener() {
+            public void onClick(DialogInterface dialog, int which) {
+                disconnect();
+            }
+        };
+
+        AlertDialog ad = new AlertDialog.Builder(context)
+                .setTitle(getName())
+                .setMessage(message)
+                .setPositiveButton(android.R.string.ok, disconnectListener)
+                .setNegativeButton(android.R.string.cancel, null)
+                .show();
+    }
+
+    public void connect() {
+        if (!ensurePaired()) return;
+
+        // Reset the only-show-one-error-dialog tracking variable
+        mIsConnectingErrorPossible = true;
+
+        Context context = mLocalManager.getContext();
+        boolean hasAtLeastOnePreferredProfile = false;
+        for (Profile profile : mProfiles) {
+            LocalBluetoothProfileManager profileManager =
+                    LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile);
+            if (profileManager.isPreferred(mAddress)) {
+                hasAtLeastOnePreferredProfile = true;
+                connectInt(profile);
+            }
+        }
+
+        if (!hasAtLeastOnePreferredProfile) {
+            connectAndPreferAllProfiles();
+        }
+    }
+
+    private void connectAndPreferAllProfiles() {
+        if (!ensurePaired()) return;
+
+        // Reset the only-show-one-error-dialog tracking variable
+        mIsConnectingErrorPossible = true;
+
+        Context context = mLocalManager.getContext();
+        for (Profile profile : mProfiles) {
+            LocalBluetoothProfileManager profileManager =
+                    LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile);
+            profileManager.setPreferred(mAddress, true);
+            connectInt(profile);
+        }
+    }
+
+    public void connect(Profile profile) {
+        // Reset the only-show-one-error-dialog tracking variable
+        mIsConnectingErrorPossible = true;
+        connectInt(profile);
+    }
+
+    public void connectInt(Profile profile) {
+        if (!ensurePaired()) return;
+
+        LocalBluetoothProfileManager profileManager =
+                LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile);
+        int status = profileManager.getConnectionStatus(mAddress);
+        if (!SettingsBtStatus.isConnectionStatusConnected(status)) {
+            if (profileManager.connect(mAddress) != BluetoothDevice.RESULT_SUCCESS) {
+                Log.i(TAG, "Failed to connect " + profile.toString() + " to " + mName);
+            }
+        }
+    }
+
+    public void showConnectingError() {
+        if (!mIsConnectingErrorPossible) return;
+        mIsConnectingErrorPossible = false;
+
+        mLocalManager.showError(mAddress, R.string.bluetooth_error_title,
+                R.string.bluetooth_connecting_error_message);
+    }
+
+    private boolean ensurePaired() {
+        if (getBondState() == BluetoothDevice.BOND_NOT_BONDED) {
+            pair();
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    public void pair() {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+
+        // Pairing is unreliable while scanning, so cancel discovery
+        if (manager.isDiscovering()) {
+            manager.cancelDiscovery();
+        }
+
+        if (!mLocalManager.getBluetoothManager().createBond(mAddress)) {
+            mLocalManager.showError(mAddress, R.string.bluetooth_error_title,
+                    R.string.bluetooth_pairing_error_message);
+        }
+    }
+
+    public void unpair() {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+
+        switch (getBondState()) {
+        case BluetoothDevice.BOND_BONDED:
+            manager.removeBond(mAddress);
+            break;
+
+        case BluetoothDevice.BOND_BONDING:
+            manager.cancelBondProcess(mAddress);
+            break;
+        }
+    }
+
+    private void fillData() {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+
+        fetchName();
+        fetchBtClass();
+
+        mVisible = false;
+
+        dispatchAttributesChanged();
+    }
+
+    public String getAddress() {
+        return mAddress;
+    }
+
+    public String getName() {
+        return mName;
+    }
+
+    public void refreshName() {
+        fetchName();
+        dispatchAttributesChanged();
+    }
+
+    private void fetchName() {
+        mName = mLocalManager.getBluetoothManager().getRemoteName(mAddress);
+
+        if (TextUtils.isEmpty(mName)) {
+            mName = mAddress;
+        }
+    }
+
+    public void refresh() {
+        dispatchAttributesChanged();
+    }
+
+    public boolean isVisible() {
+        return mVisible;
+    }
+
+    void setVisible(boolean visible) {
+        if (mVisible != visible) {
+            mVisible = visible;
+            dispatchAttributesChanged();
+        }
+    }
+
+    public int getBondState() {
+        return mLocalManager.getBluetoothManager().getBondState(mAddress);
+    }
+
+    void setRssi(short rssi) {
+        if (mRssi != rssi) {
+            mRssi = rssi;
+            dispatchAttributesChanged();
+        }
+    }
+
+    /**
+     * Checks whether we are connected to this device (any profile counts).
+     *
+     * @return Whether it is connected.
+     */
+    public boolean isConnected() {
+        for (Profile profile : mProfiles) {
+            int status = LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile)
+                    .getConnectionStatus(mAddress);
+            if (SettingsBtStatus.isConnectionStatusConnected(status)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public boolean isBusy() {
+        for (Profile profile : mProfiles) {
+            int status = LocalBluetoothProfileManager.getProfileManager(mLocalManager, profile)
+                    .getConnectionStatus(mAddress);
+            if (SettingsBtStatus.isConnectionStatusBusy(status)) {
+                return true;
+            }
+        }
+
+        if (getBondState() == BluetoothDevice.BOND_BONDING) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public int getBtClassDrawable() {
+
+        // First try looking at profiles
+        if (mProfiles.contains(Profile.A2DP)) {
+            return R.drawable.ic_bt_headphones_a2dp;
+        } else if (mProfiles.contains(Profile.HEADSET)) {
+            return R.drawable.ic_bt_headset_hfp;
+        }
+
+        // Fallback on class
+        switch (BluetoothClass.Device.Major.getDeviceMajor(mBtClass)) {
+        case BluetoothClass.Device.Major.COMPUTER:
+            return R.drawable.ic_bt_laptop;
+
+        case BluetoothClass.Device.Major.PHONE:
+            return R.drawable.ic_bt_cellphone;
+
+        default:
+            return 0;
+        }
+    }
+
+    /**
+     * Fetches a new value for the cached BT class.
+     */
+    private void fetchBtClass() {
+        mBtClass = mLocalManager.getBluetoothManager().getRemoteClass(mAddress);
+        mProfiles.clear();
+        LocalBluetoothProfileManager.fill(mBtClass, mProfiles);
+    }
+
+    /**
+     * Refreshes the UI for the BT class, including fetching the latest value
+     * for the class.
+     */
+    public void refreshBtClass() {
+        fetchBtClass();
+        dispatchAttributesChanged();
+    }
+
+    public int getSummary() {
+        // TODO: clean up
+        int oneOffSummary = getOneOffSummary();
+        if (oneOffSummary != 0) {
+            return oneOffSummary;
+        }
+
+        for (Profile profile : mProfiles) {
+            LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
+                    .getProfileManager(mLocalManager, profile);
+            int connectionStatus = profileManager.getConnectionStatus(mAddress);
+
+            if (SettingsBtStatus.isConnectionStatusConnected(connectionStatus) ||
+                    connectionStatus == SettingsBtStatus.CONNECTION_STATUS_CONNECTING ||
+                    connectionStatus == SettingsBtStatus.CONNECTION_STATUS_DISCONNECTING) {
+                return SettingsBtStatus.getConnectionStatusSummary(connectionStatus);
+            }
+        }
+
+        return SettingsBtStatus.getPairingStatusSummary(getBondState());
+    }
+
+    /**
+     * We have special summaries when particular profiles are connected. This
+     * checks for those states and returns an applicable summary.
+     *
+     * @return A one-off summary that is applicable for the current state, or 0.
+     */
+    private int getOneOffSummary() {
+        boolean isA2dpConnected = false, isHeadsetConnected = false, isConnecting = false;
+
+        if (mProfiles.contains(Profile.A2DP)) {
+            LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
+                    .getProfileManager(mLocalManager, Profile.A2DP);
+            isConnecting = profileManager.getConnectionStatus(mAddress) ==
+                    SettingsBtStatus.CONNECTION_STATUS_CONNECTING;
+            isA2dpConnected = profileManager.isConnected(mAddress);
+        }
+
+        if (mProfiles.contains(Profile.HEADSET)) {
+            LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
+                    .getProfileManager(mLocalManager, Profile.HEADSET);
+            isConnecting |= profileManager.getConnectionStatus(mAddress) ==
+                    SettingsBtStatus.CONNECTION_STATUS_CONNECTING;
+            isHeadsetConnected = profileManager.isConnected(mAddress);
+        }
+
+        if (isConnecting) {
+            // If any of these important profiles is connecting, prefer that
+            return SettingsBtStatus.getConnectionStatusSummary(
+                    SettingsBtStatus.CONNECTION_STATUS_CONNECTING);
+        } else if (isA2dpConnected && isHeadsetConnected) {
+            return R.string.bluetooth_summary_connected_to_a2dp_headset;
+        } else if (isA2dpConnected) {
+            return R.string.bluetooth_summary_connected_to_a2dp;
+        } else if (isHeadsetConnected) {
+            return R.string.bluetooth_summary_connected_to_headset;
+        } else {
+            return 0;
+        }
+    }
+
+    public List<Profile> getProfiles() {
+        return new ArrayList<Profile>(mProfiles);
+    }
+
+    public void onCreateContextMenu(ContextMenu menu) {
+        // No context menu if it is busy (none of these items are applicable if busy)
+        if (isBusy()) return;
+
+        int bondState = getBondState();
+        boolean isConnected = isConnected();
+        boolean hasProfiles = mProfiles.size() > 0;
+
+        menu.setHeaderTitle(getName());
+
+        if (isConnected) {
+            menu.add(0, CONTEXT_ITEM_DISCONNECT, 0, R.string.bluetooth_device_context_disconnect);
+        } else if (hasProfiles) {
+            // For connection action, show either "Connect" or "Pair & connect"
+            int connectString = (bondState == BluetoothDevice.BOND_NOT_BONDED)
+                    ? R.string.bluetooth_device_context_pair_connect
+                    : R.string.bluetooth_device_context_connect;
+            menu.add(0, CONTEXT_ITEM_CONNECT, 0, connectString);
+        }
+
+        if (bondState == BluetoothDevice.BOND_BONDED) {
+            // For unpair action, show either "Unpair" or "Disconnect & unpair"
+            int unpairString = isConnected
+                    ? R.string.bluetooth_device_context_disconnect_unpair
+                    : R.string.bluetooth_device_context_unpair;
+            menu.add(0, CONTEXT_ITEM_UNPAIR, 0, unpairString);
+
+            // Show the connection options item
+            menu.add(0, CONTEXT_ITEM_CONNECT_ADVANCED, 0,
+                    R.string.bluetooth_device_context_connect_advanced);
+        }
+    }
+
+    /**
+     * Called when a context menu item is clicked.
+     *
+     * @param item The item that was clicked.
+     */
+    public void onContextItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case CONTEXT_ITEM_DISCONNECT:
+                disconnect();
+                break;
+
+            case CONTEXT_ITEM_CONNECT:
+                connect();
+                break;
+
+            case CONTEXT_ITEM_UNPAIR:
+                mLocalManager.getBluetoothManager().disconnectRemoteDeviceAcl(mAddress);
+                unpair();
+                break;
+
+            case CONTEXT_ITEM_CONNECT_ADVANCED:
+                Intent intent = new Intent();
+                // Need an activity context to open this in our task
+                Context context = mLocalManager.getForegroundActivity();
+                if (context == null) {
+                    // Fallback on application context, and open in a new task
+                    context = mLocalManager.getContext();
+                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                }
+                intent.setClass(context, ConnectSpecificProfilesActivity.class);
+                intent.putExtra(ConnectSpecificProfilesActivity.EXTRA_ADDRESS, mAddress);
+                context.startActivity(intent);
+                break;
+        }
+    }
+
+    public void registerCallback(Callback callback) {
+        synchronized (mCallbacks) {
+            mCallbacks.add(callback);
+        }
+    }
+
+    public void unregisterCallback(Callback callback) {
+        synchronized (mCallbacks) {
+            mCallbacks.remove(callback);
+        }
+    }
+
+    private void dispatchAttributesChanged() {
+        synchronized (mCallbacks) {
+            for (Callback callback : mCallbacks) {
+                callback.onDeviceAttributesChanged(this);
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        return mAddress;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if ((o == null) || !(o instanceof LocalBluetoothDevice)) {
+            throw new ClassCastException();
+        }
+
+        return mAddress.equals(((LocalBluetoothDevice) o).mAddress);
+    }
+
+    @Override
+    public int hashCode() {
+        return mAddress.hashCode();
+    }
+
+    public int compareTo(LocalBluetoothDevice another) {
+        int comparison;
+
+        // Connected above not connected
+        comparison = (another.isConnected() ? 1 : 0) - (isConnected() ? 1 : 0);
+        if (comparison != 0) return comparison;
+
+        // Paired above not paired
+        comparison = (another.getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0) -
+            (getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0);
+        if (comparison != 0) return comparison;
+
+        // Visible above not visible
+        comparison = (another.mVisible ? 1 : 0) - (mVisible ? 1 : 0);
+        if (comparison != 0) return comparison;
+
+        // Stronger signal above weaker signal
+        comparison = another.mRssi - mRssi;
+        if (comparison != 0) return comparison;
+
+        // Fallback on name
+        return getName().compareTo(another.getName());
+    }
+
+    public interface Callback {
+        void onDeviceAttributesChanged(LocalBluetoothDevice device);
+    }
+}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothDeviceManager.java b/src/com/android/settings/bluetooth/LocalBluetoothDeviceManager.java
new file mode 100644
index 0000000..6bb2b4a
--- /dev/null
+++ b/src/com/android/settings/bluetooth/LocalBluetoothDeviceManager.java
@@ -0,0 +1,229 @@
+/*
+ * 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.bluetooth;
+
+import android.app.AlertDialog;
+import android.bluetooth.BluetoothDevice;
+import android.util.Log;
+import android.widget.Toast;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.bluetooth.LocalBluetoothManager.Callback;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * LocalBluetoothDeviceManager manages the set of remote Bluetooth devices.
+ */
+public class LocalBluetoothDeviceManager {
+    private static final String TAG = "LocalBluetoothDeviceManager";
+
+    final LocalBluetoothManager mLocalManager;
+    final List<Callback> mCallbacks;
+    
+    final List<LocalBluetoothDevice> mDevices = new ArrayList<LocalBluetoothDevice>();
+
+    public LocalBluetoothDeviceManager(LocalBluetoothManager localManager) {
+        mLocalManager = localManager;
+        mCallbacks = localManager.getCallbacks();
+        readPairedDevices();
+    }
+
+    private synchronized boolean readPairedDevices() {
+        BluetoothDevice manager = mLocalManager.getBluetoothManager();
+        String[] bondedAddresses = manager.listBonds();
+        if (bondedAddresses == null) return false;
+        
+        boolean deviceAdded = false;
+        for (String address : bondedAddresses) {
+            LocalBluetoothDevice device = findDevice(address);
+            if (device == null) {
+                device = new LocalBluetoothDevice(mLocalManager.getContext(), address);
+                mDevices.add(device);
+                dispatchDeviceAdded(device);
+                deviceAdded = true;
+            }
+        }
+        
+        return deviceAdded;
+    }
+    
+    public synchronized List<LocalBluetoothDevice> getDevicesCopy() {
+        return new ArrayList<LocalBluetoothDevice>(mDevices);
+    }
+    
+    void onBluetoothStateChanged(boolean enabled) {
+        if (enabled) {
+            readPairedDevices();
+        }
+    }
+
+    public synchronized void onDeviceAppeared(String address, short rssi) {
+        boolean deviceAdded = false;
+        
+        LocalBluetoothDevice device = findDevice(address);
+        if (device == null) {
+            device = new LocalBluetoothDevice(mLocalManager.getContext(), address);
+            mDevices.add(device);
+            deviceAdded = true;
+        }
+        
+        device.setRssi(rssi);
+        device.setVisible(true);
+        
+        if (deviceAdded) {
+            dispatchDeviceAdded(device);
+        }
+    }
+    
+    public synchronized void onDeviceDisappeared(String address) {
+        LocalBluetoothDevice device = findDevice(address);
+        if (device == null) return;
+        
+        device.setVisible(false);
+        checkForDeviceRemoval(device);
+    }
+    
+    private void checkForDeviceRemoval(LocalBluetoothDevice device) {
+        if (device.getBondState() == BluetoothDevice.BOND_NOT_BONDED &&
+                !device.isVisible()) {
+            // If device isn't paired, remove it altogether
+            mDevices.remove(device);
+            dispatchDeviceDeleted(device);
+        }            
+    }
+    
+    public synchronized void onDeviceNameUpdated(String address) {
+        LocalBluetoothDevice device = findDevice(address);
+        if (device != null) {
+            device.refreshName();
+        }
+    }
+
+    public synchronized LocalBluetoothDevice findDevice(String address) {
+        
+        for (int i = mDevices.size() - 1; i >= 0; i--) {
+            LocalBluetoothDevice device = mDevices.get(i);
+            
+            if (device.getAddress().equals(address)) {
+                return device;
+            }
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Attempts to get the name of a remote device, otherwise returns the address.
+     * 
+     * @param address The address.
+     * @return The name, or if unavailable, the address.
+     */
+    public String getName(String address) {
+        LocalBluetoothDevice device = findDevice(address);
+        return device != null ? device.getName() : address;
+    }
+    
+    private void dispatchDeviceAdded(LocalBluetoothDevice device) {
+        synchronized (mCallbacks) {
+            for (Callback callback : mCallbacks) {
+                callback.onDeviceAdded(device);
+            }
+        }
+        
+        // TODO: divider between prev paired/connected and scanned
+    }
+    
+    private void dispatchDeviceDeleted(LocalBluetoothDevice device) {
+        synchronized (mCallbacks) {
+            for (Callback callback : mCallbacks) {
+                callback.onDeviceDeleted(device);
+            }
+        }
+    }
+
+    public synchronized void onBondingStateChanged(String address, int bondState) {
+        LocalBluetoothDevice device = findDevice(address);
+        if (device == null) {
+            if (!readPairedDevices()) {
+                Log.e(TAG, "Got bonding state changed for " + address +
+                        ", but we have no record of that device.");
+            }
+            return;
+        }
+
+        device.refresh();
+
+        if (bondState == BluetoothDevice.BOND_BONDED) {
+            // Auto-connect after pairing
+            device.connect();
+        }
+    }
+
+    /**
+     * Called when there is a bonding error.
+     * 
+     * @param address The address of the remote device.
+     * @param reason The reason, one of the error reasons from
+     *            BluetoothDevice.UNBOND_REASON_*
+     */
+    public synchronized void onBondingError(String address, int reason) {
+        mLocalManager.showError(address, R.string.bluetooth_error_title,
+                (reason == BluetoothDevice.UNBOND_REASON_AUTH_FAILED) ?
+                        R.string.bluetooth_pairing_pin_error_message :
+                        R.string.bluetooth_pairing_error_message);
+    }
+    
+    public synchronized void onProfileStateChanged(String address) {
+        LocalBluetoothDevice device = findDevice(address);
+        if (device == null) return;
+        
+        device.refresh();
+    }
+    
+    public synchronized void onConnectingError(String address) {
+        LocalBluetoothDevice device = findDevice(address);
+        if (device == null) return;
+        
+        /*
+         * Go through the device's delegate so we don't spam the user with
+         * errors connecting to different profiles, and instead make sure the
+         * user sees a single error for his single 'connect' action.
+         */
+        device.showConnectingError();
+    }
+    
+    public synchronized void onScanningStateChanged(boolean started) {
+        if (!started) return;
+        
+        // If starting a new scan, clear old visibility
+        for (int i = mDevices.size() - 1; i >= 0; i--) {
+            LocalBluetoothDevice device = mDevices.get(i);
+            device.setVisible(false);
+            checkForDeviceRemoval(device);
+        }
+    }
+    
+    public synchronized void onBtClassChanged(String address) {
+        LocalBluetoothDevice device = findDevice(address);
+        if (device != null) {
+            device.refreshBtClass();
+        }
+    }
+}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothManager.java b/src/com/android/settings/bluetooth/LocalBluetoothManager.java
new file mode 100644
index 0000000..4671fac
--- /dev/null
+++ b/src/com/android/settings/bluetooth/LocalBluetoothManager.java
@@ -0,0 +1,279 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.util.Log;
+import android.widget.Toast;
+
+// TODO: have some notion of shutting down.  Maybe a minute after they leave BT settings?
+/**
+ * LocalBluetoothManager provides a simplified interface on top of a subset of
+ * the Bluetooth API.
+ */
+public class LocalBluetoothManager {
+    private static final String TAG = "LocalBluetoothManager";
+    static final boolean V = true;
+    
+    public static final String EXTENDED_BLUETOOTH_STATE_CHANGED_ACTION =
+        "com.android.settings.bluetooth.intent.action.EXTENDED_BLUETOOTH_STATE_CHANGED";
+    private static final String SHARED_PREFERENCES_NAME = "bluetooth_settings";
+    
+    private static LocalBluetoothManager INSTANCE;
+    /** Used when obtaining a reference to the singleton instance. */
+    private static Object INSTANCE_LOCK = new Object();
+    private boolean mInitialized;
+    
+    private Context mContext;
+    /** If a BT-related activity is in the foreground, this will be it. */
+    private Activity mForegroundActivity;
+    private AlertDialog mErrorDialog = null;
+
+    private BluetoothDevice mManager;
+
+    private LocalBluetoothDeviceManager mLocalDeviceManager;
+    private BluetoothEventRedirector mEventRedirector;
+    private BluetoothA2dp mBluetoothA2dp;
+    
+    public static enum ExtendedBluetoothState { ENABLED, ENABLING, DISABLED, DISABLING, UNKNOWN }
+    private ExtendedBluetoothState mState = ExtendedBluetoothState.UNKNOWN;
+
+    private List<Callback> mCallbacks = new ArrayList<Callback>();
+    
+    private static final int SCAN_EXPIRATION_MS = 5 * 60 * 1000; // 5 mins
+    private long mLastScan;
+    
+    public static LocalBluetoothManager getInstance(Context context) {
+        synchronized (INSTANCE_LOCK) {
+            if (INSTANCE == null) {
+                INSTANCE = new LocalBluetoothManager();
+            }
+            
+            if (!INSTANCE.init(context)) {
+                return null;
+            }
+            
+            return INSTANCE;
+        }
+    }
+
+    private boolean init(Context context) {
+        if (mInitialized) return true;
+        mInitialized = true;
+        
+        // This will be around as long as this process is
+        mContext = context.getApplicationContext();
+        
+        mManager = (BluetoothDevice) context.getSystemService(Context.BLUETOOTH_SERVICE);
+        if (mManager == null) {
+            return false;
+        }
+        
+        mLocalDeviceManager = new LocalBluetoothDeviceManager(this);
+
+        mEventRedirector = new BluetoothEventRedirector(this);
+        mEventRedirector.start();
+
+        mBluetoothA2dp = new BluetoothA2dp(context);
+
+        return true;
+    }
+    
+    public BluetoothDevice getBluetoothManager() {
+        return mManager;
+    }
+    
+    public Context getContext() {
+        return mContext;
+    }
+
+    public Activity getForegroundActivity() {
+        return mForegroundActivity;
+    }
+    
+    public void setForegroundActivity(Activity activity) {
+        if (mErrorDialog != null) {
+            mErrorDialog.dismiss();
+            mErrorDialog = null;
+        }
+        mForegroundActivity = activity;
+    }
+    
+    public SharedPreferences getSharedPreferences() {
+        return mContext.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
+    }
+    
+    public LocalBluetoothDeviceManager getLocalDeviceManager() {
+        return mLocalDeviceManager;
+    }
+    
+    List<Callback> getCallbacks() {
+        return mCallbacks;
+    }
+    
+    public void registerCallback(Callback callback) {
+        synchronized (mCallbacks) {
+            mCallbacks.add(callback);
+        }
+    }
+    
+    public void unregisterCallback(Callback callback) {
+        synchronized (mCallbacks) {
+            mCallbacks.remove(callback);
+        }
+    }
+    
+    public void startScanning(boolean force) {
+        if (mManager.isDiscovering()) {
+            /*
+             * Already discovering, but give the callback that information.
+             * Note: we only call the callbacks, not the same path as if the
+             * scanning state had really changed (in that case the device
+             * manager would clear its list of unpaired scanned devices).
+             */ 
+            dispatchScanningStateChanged(true);
+        } else {
+            if (!force) {
+                // Don't scan more than frequently than SCAN_EXPIRATION_MS,
+                // unless forced
+                if (mLastScan + SCAN_EXPIRATION_MS > System.currentTimeMillis()) {
+                    return;
+                }
+
+                // If we are playing music, don't scan unless forced.
+                List<String> sinks = mBluetoothA2dp.listConnectedSinks();
+                if (sinks != null) {
+                    for (String address : sinks) {
+                        if (mBluetoothA2dp.getSinkState(address) == BluetoothA2dp.STATE_PLAYING) {
+                            return;
+                        }
+                    }
+                }
+            }
+            
+            if (mManager.startDiscovery(true)) {
+                mLastScan = System.currentTimeMillis();
+            }
+        }
+    }
+    
+    public ExtendedBluetoothState getBluetoothState() {
+        
+        if (mState == ExtendedBluetoothState.UNKNOWN) {
+            syncBluetoothState();
+        }
+            
+        return mState;
+    }
+    
+    void setBluetoothStateInt(ExtendedBluetoothState state) {
+        mState = state;
+        
+        /*
+         * TODO: change to callback method. originally it was broadcast to
+         * parallel the framework's method, but it just complicates things here.
+         */
+        // If this were a real API, I'd add as an extra
+        mContext.sendBroadcast(new Intent(EXTENDED_BLUETOOTH_STATE_CHANGED_ACTION));
+        
+        if (state == ExtendedBluetoothState.ENABLED || state == ExtendedBluetoothState.DISABLED) {
+            mLocalDeviceManager.onBluetoothStateChanged(state == ExtendedBluetoothState.ENABLED);
+        }
+    }
+    
+    private void syncBluetoothState() {
+        setBluetoothStateInt(mManager.isEnabled()
+                ? ExtendedBluetoothState.ENABLED
+                : ExtendedBluetoothState.DISABLED);
+    }
+
+    public void setBluetoothEnabled(boolean enabled) {
+        boolean wasSetStateSuccessful = enabled
+                ? mManager.enable()
+                : mManager.disable();
+                
+        if (wasSetStateSuccessful) {
+            setBluetoothStateInt(enabled
+                    ? ExtendedBluetoothState.ENABLING
+                    : ExtendedBluetoothState.DISABLING);
+        } else {
+            if (V) {
+                Log.v(TAG,
+                        "setBluetoothEnabled call, manager didn't return success for enabled: "
+                                + enabled);
+            }
+            
+            syncBluetoothState();
+        }
+    }
+    
+    /**
+     * @param started True if scanning started, false if scanning finished.
+     */
+    void onScanningStateChanged(boolean started) {
+        // TODO: have it be a callback (once we switch bluetooth state changed to callback)
+        mLocalDeviceManager.onScanningStateChanged(started);
+        dispatchScanningStateChanged(started);
+    }
+    
+    private void dispatchScanningStateChanged(boolean started) {
+        synchronized (mCallbacks) {
+            for (Callback callback : mCallbacks) {
+                callback.onScanningStateChanged(started);
+            }
+        }
+    }
+
+    public void showError(String address, int titleResId, int messageResId) {
+        LocalBluetoothDevice device = mLocalDeviceManager.findDevice(address);
+        if (device == null) return;
+
+        String name = device.getName();
+        String message = mContext.getString(messageResId, name);
+
+        if (mForegroundActivity != null) {
+            // Need an activity context to show a dialog
+            mErrorDialog = new AlertDialog.Builder(mForegroundActivity)
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setTitle(titleResId)
+                .setMessage(message)
+                .setPositiveButton(android.R.string.ok, null)
+                .show();
+        } else {
+            // Fallback on a toast 
+            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    public interface Callback {
+        void onScanningStateChanged(boolean started);
+        void onDeviceAdded(LocalBluetoothDevice device);
+        void onDeviceDeleted(LocalBluetoothDevice device);
+    }
+    
+}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
new file mode 100644
index 0000000..a1a2af6
--- /dev/null
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -0,0 +1,280 @@
+/*
+ * 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.bluetooth;
+
+import com.android.settings.R;
+
+import android.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothError;
+import android.bluetooth.BluetoothHeadset;
+import android.bluetooth.BluetoothClass;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Handler;
+import android.text.TextUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * LocalBluetoothProfileManager is an abstract class defining the basic
+ * functionality related to a profile.
+ */
+public abstract class LocalBluetoothProfileManager {
+
+    // TODO: close profiles when we're shutting down
+    private static Map<Profile, LocalBluetoothProfileManager> sProfileMap =
+            new HashMap<Profile, LocalBluetoothProfileManager>(); 
+    
+    protected LocalBluetoothManager mLocalManager;
+    
+    public static LocalBluetoothProfileManager getProfileManager(LocalBluetoothManager localManager,
+            Profile profile) {
+        
+        LocalBluetoothProfileManager profileManager;
+        
+        synchronized (sProfileMap) {
+            profileManager = sProfileMap.get(profile);
+            
+            if (profileManager == null) {
+                switch (profile) {
+                case A2DP:
+                    profileManager = new A2dpProfileManager(localManager);
+                    break;
+                    
+                case HEADSET:
+                    profileManager = new HeadsetProfileManager(localManager);
+                    break;
+                }
+                
+                sProfileMap.put(profile, profileManager);    
+            }
+        }
+        
+        return profileManager;
+    }
+
+    /**
+     * Temporary method to fill profiles based on a device's class.
+     * 
+     * @param btClass The class
+     * @param profiles The list of profiles to fill
+     */
+    public static void fill(int btClass, List<Profile> profiles) {
+        profiles.clear();
+
+        if (BluetoothA2dp.doesClassMatchSink(btClass)) {
+            profiles.add(Profile.A2DP);
+        }
+        
+        if (BluetoothHeadset.doesClassMatch(btClass)) {
+            profiles.add(Profile.HEADSET);
+        }
+    }
+
+    protected LocalBluetoothProfileManager(LocalBluetoothManager localManager) {
+        mLocalManager = localManager;
+    }
+    
+    public abstract int connect(String address);
+    
+    public abstract int disconnect(String address);
+    
+    public abstract int getConnectionStatus(String address);
+
+    public abstract int getSummary(String address);
+
+    public abstract boolean isPreferred(String address);
+
+    public abstract void setPreferred(String address, boolean preferred);
+
+    public boolean isConnected(String address) {
+        return SettingsBtStatus.isConnectionStatusConnected(getConnectionStatus(address));
+    }
+    
+    // TODO: int instead of enum
+    public enum Profile {
+        HEADSET(R.string.bluetooth_profile_headset),
+        A2DP(R.string.bluetooth_profile_a2dp);
+        
+        public final int localizedString;
+        
+        private Profile(int localizedString) {
+            this.localizedString = localizedString;
+        }
+    }
+
+    /**
+     * A2dpProfileManager is an abstraction for the {@link BluetoothA2dp} service. 
+     */
+    private static class A2dpProfileManager extends LocalBluetoothProfileManager {
+        private BluetoothA2dp mService;
+        
+        public A2dpProfileManager(LocalBluetoothManager localManager) {
+            super(localManager);
+            mService = new BluetoothA2dp(localManager.getContext());
+        }
+
+        @Override
+        public int connect(String address) {
+            return mService.connectSink(address);
+        }
+
+        @Override
+        public int disconnect(String address) {
+            return mService.disconnectSink(address);
+        }
+        
+        @Override
+        public int getConnectionStatus(String address) {
+            return convertState(mService.getSinkState(address));
+        }
+        
+        @Override
+        public int getSummary(String address) {
+            int connectionStatus = getConnectionStatus(address);
+
+            if (SettingsBtStatus.isConnectionStatusConnected(connectionStatus)) {
+                return R.string.bluetooth_a2dp_profile_summary_connected;
+            } else {
+                return SettingsBtStatus.getConnectionStatusSummary(connectionStatus);
+            }
+        }
+
+        @Override
+        public boolean isPreferred(String address) {
+            return mService.getSinkPriority(address) > BluetoothA2dp.PRIORITY_OFF;
+        }
+
+        @Override
+        public void setPreferred(String address, boolean preferred) {
+            mService.setSinkPriority(address,
+                    preferred ? BluetoothA2dp.PRIORITY_AUTO : BluetoothA2dp.PRIORITY_OFF);
+        }
+
+        private static int convertState(int a2dpState) {
+            switch (a2dpState) {
+            case BluetoothA2dp.STATE_CONNECTED:
+                return SettingsBtStatus.CONNECTION_STATUS_CONNECTED;
+            case BluetoothA2dp.STATE_CONNECTING:
+                return SettingsBtStatus.CONNECTION_STATUS_CONNECTING;
+            case BluetoothA2dp.STATE_DISCONNECTED:
+                return SettingsBtStatus.CONNECTION_STATUS_DISCONNECTED;
+            case BluetoothA2dp.STATE_DISCONNECTING:
+                return SettingsBtStatus.CONNECTION_STATUS_DISCONNECTING;
+            case BluetoothA2dp.STATE_PLAYING:
+                return SettingsBtStatus.CONNECTION_STATUS_ACTIVE;
+            default:
+                return SettingsBtStatus.CONNECTION_STATUS_UNKNOWN;
+            }
+        }
+    }
+    
+    /**
+     * HeadsetProfileManager is an abstraction for the {@link BluetoothHeadset} service. 
+     */
+    private static class HeadsetProfileManager extends LocalBluetoothProfileManager
+            implements BluetoothHeadset.ServiceListener {
+        private BluetoothHeadset mService;
+        private Handler mUiHandler = new Handler();
+        
+        public HeadsetProfileManager(LocalBluetoothManager localManager) {
+            super(localManager);
+            mService = new BluetoothHeadset(localManager.getContext(), this);
+        }
+
+        public void onServiceConnected() {
+            // This could be called on a non-UI thread, funnel to UI thread.
+            mUiHandler.post(new Runnable() {
+                public void run() {
+                    /*
+                     * We just bound to the service, so refresh the UI of the
+                     * headset device.
+                     */
+                    String address = mService.getHeadsetAddress();
+                    if (TextUtils.isEmpty(address)) return;
+                    mLocalManager.getLocalDeviceManager().onProfileStateChanged(address);
+                }
+            });
+        }
+
+        public void onServiceDisconnected() {
+        }
+
+        @Override
+        public int connect(String address) {
+            // Since connectHeadset fails if already connected to a headset, we
+            // disconnect from any headset first
+            mService.disconnectHeadset();
+            return mService.connectHeadset(address)
+                    ? BluetoothError.SUCCESS : BluetoothError.ERROR;
+        }
+
+        @Override
+        public int disconnect(String address) {
+            if (mService.getHeadsetAddress().equals(address)) {
+                return mService.disconnectHeadset() ? BluetoothError.SUCCESS : BluetoothError.ERROR;
+            } else {
+                return BluetoothError.SUCCESS;
+            }
+        }
+        
+        @Override
+        public int getConnectionStatus(String address) {
+            String headsetAddress = mService.getHeadsetAddress();
+            return headsetAddress != null && headsetAddress.equals(address)
+                    ? convertState(mService.getState())
+                    : SettingsBtStatus.CONNECTION_STATUS_DISCONNECTED;
+        }
+        
+        @Override
+        public int getSummary(String address) {
+            int connectionStatus = getConnectionStatus(address);
+            
+            if (SettingsBtStatus.isConnectionStatusConnected(connectionStatus)) {
+                return R.string.bluetooth_headset_profile_summary_connected;
+            } else {
+                return SettingsBtStatus.getConnectionStatusSummary(connectionStatus);
+            }
+        }
+
+        @Override
+        public boolean isPreferred(String address) {
+            return mService.getPriority(address) > BluetoothHeadset.PRIORITY_OFF;
+        }
+
+        @Override
+        public void setPreferred(String address, boolean preferred) {
+            mService.setPriority(address,
+                    preferred ? BluetoothHeadset.PRIORITY_AUTO : BluetoothHeadset.PRIORITY_OFF);
+        }
+
+        private static int convertState(int headsetState) {
+            switch (headsetState) {
+            case BluetoothHeadset.STATE_CONNECTED:
+                return SettingsBtStatus.CONNECTION_STATUS_CONNECTED;
+            case BluetoothHeadset.STATE_CONNECTING:
+                return SettingsBtStatus.CONNECTION_STATUS_CONNECTING;
+            case BluetoothHeadset.STATE_DISCONNECTED:
+                return SettingsBtStatus.CONNECTION_STATUS_DISCONNECTED;
+            default:
+                return SettingsBtStatus.CONNECTION_STATUS_UNKNOWN;
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/bluetooth/SettingsBtStatus.java b/src/com/android/settings/bluetooth/SettingsBtStatus.java
new file mode 100644
index 0000000..d2cbef5
--- /dev/null
+++ b/src/com/android/settings/bluetooth/SettingsBtStatus.java
@@ -0,0 +1,81 @@
+/*
+ * 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.bluetooth;
+
+import android.bluetooth.BluetoothDevice;
+
+import com.android.settings.R;
+
+/**
+ * SettingsBtStatus is a helper class that contains constants for various status
+ * codes.
+ */
+public class SettingsBtStatus {
+    private static final String TAG = "SettingsBtStatus";
+   
+    // Connection status
+    
+    public static final int CONNECTION_STATUS_UNKNOWN = 0;
+    public static final int CONNECTION_STATUS_ACTIVE = 1;
+    /** Use {@link #isConnected} to check for the connected state */
+    public static final int CONNECTION_STATUS_CONNECTED = 2;
+    public static final int CONNECTION_STATUS_CONNECTING = 3;
+    public static final int CONNECTION_STATUS_DISCONNECTED = 4;
+    public static final int CONNECTION_STATUS_DISCONNECTING = 5;
+
+    public static final int getConnectionStatusSummary(int connectionStatus) {
+        switch (connectionStatus) {
+        case CONNECTION_STATUS_ACTIVE:
+            return R.string.bluetooth_connected;
+        case CONNECTION_STATUS_CONNECTED:
+            return R.string.bluetooth_connected;
+        case CONNECTION_STATUS_CONNECTING:
+            return R.string.bluetooth_connecting;
+        case CONNECTION_STATUS_DISCONNECTED:
+            return R.string.bluetooth_disconnected;
+        case CONNECTION_STATUS_DISCONNECTING:
+            return R.string.bluetooth_disconnecting;
+        case CONNECTION_STATUS_UNKNOWN:
+            return R.string.bluetooth_unknown;
+        default:
+            return 0;
+        }
+    }
+    
+    public static final boolean isConnectionStatusConnected(int connectionStatus) {
+        return connectionStatus == CONNECTION_STATUS_ACTIVE
+                || connectionStatus == CONNECTION_STATUS_CONNECTED;
+    }
+    
+    public static final boolean isConnectionStatusBusy(int connectionStatus) {
+        return connectionStatus == CONNECTION_STATUS_CONNECTING
+                || connectionStatus == CONNECTION_STATUS_DISCONNECTING;
+    }
+    
+    public static final int getPairingStatusSummary(int bondState) {
+        switch (bondState) {
+        case BluetoothDevice.BOND_BONDED:
+            return R.string.bluetooth_paired;
+        case BluetoothDevice.BOND_BONDING:
+            return R.string.bluetooth_pairing;
+        case BluetoothDevice.BOND_NOT_BONDED:
+            return R.string.bluetooth_not_connected;
+        default:
+            return 0;
+        }
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
new file mode 100644
index 0000000..75a84b7
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -0,0 +1,218 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.Environment;
+import android.os.IMountService;
+import android.os.ServiceManager;
+import android.os.StatFs;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+
+import com.android.settings.R;
+
+import java.io.File;
+import java.text.DecimalFormat;
+
+public class Memory extends PreferenceActivity {
+    
+    private static final String TAG = "Memory";
+
+    private static final String MEMORY_SD_SIZE = "memory_sd_size";
+
+    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_FORMAT = "memory_sd_format";
+    private Resources mRes;
+
+    private Preference mSdSize;
+    private Preference mSdAvail;
+    private Preference mSdUnmount;
+    private Preference mSdFormat;
+    
+    // Access using getMountService()
+    private IMountService mMountService = null;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        
+        addPreferencesFromResource(R.xml.device_info_memory);
+        
+        mRes = getResources();
+        mSdSize = findPreference(MEMORY_SD_SIZE);
+        mSdAvail = findPreference(MEMORY_SD_AVAIL);
+        mSdUnmount = findPreference(MEMORY_SD_UNMOUNT);
+        mSdFormat = findPreference(MEMORY_SD_FORMAT);
+    }
+    
+    @Override
+    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.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
+        intentFilter.addDataScheme("file");
+        registerReceiver(mReceiver, intentFilter);
+
+        updateMemoryStatus();
+    }
+    
+    @Override
+    protected void onPause() {
+        super.onPause();
+        unregisterReceiver(mReceiver);
+    }
+    
+    private synchronized IMountService getMountService() {
+       if (mMountService == null) {
+           IBinder service = ServiceManager.getService("mount");
+           if (service != null) {
+               mMountService = IMountService.Stub.asInterface(service);
+           } else {
+               Log.e(TAG, "Can't get mount service");
+           }
+       }
+       return mMountService;
+    }
+    
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (preference == mSdUnmount) {
+            unmount();
+            return true;
+        } else if (preference == mSdFormat) {
+            Intent intent = new Intent(Intent.ACTION_VIEW);
+            intent.setClass(this, com.android.settings.MediaFormat.class);
+            startActivity(intent);
+            return true;
+        }
+        
+        return false;
+    }
+     
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            updateMemoryStatus();
+        }
+    };
+
+    private void unmount() {
+        IMountService mountService = getMountService();
+        try {
+            if (mountService != null) {
+                mountService.unmountMedia(Environment.getExternalStorageDirectory().toString());
+            } else {
+                Log.e(TAG, "Mount service is null, can't unmount");
+            }
+        } catch (RemoteException ex) {
+            // Failed for some reason, try to update UI to actual state
+            updateMemoryStatus();
+        }
+    }
+
+    private void updateMemoryStatus() {
+        String status = Environment.getExternalStorageState();
+        String readOnly = "";
+        if (status.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
+            status = Environment.MEDIA_MOUNTED;
+            readOnly = mRes.getString(R.string.read_only);
+        }
+ 
+        mSdFormat.setEnabled(false);
+
+        if (status.equals(Environment.MEDIA_MOUNTED)) {
+            try {
+                File path = Environment.getExternalStorageDirectory();
+                StatFs stat = new StatFs(path.getPath());
+                long blockSize = stat.getBlockSize();
+                long totalBlocks = stat.getBlockCount();
+                long availableBlocks = stat.getAvailableBlocks();
+                
+                mSdSize.setSummary(formatSize(totalBlocks * blockSize));
+                mSdAvail.setSummary(formatSize(availableBlocks * blockSize) + readOnly);
+                mSdUnmount.setEnabled(true);
+            } catch (IllegalArgumentException e) {
+                // this can occur if the SD card is removed, but we haven't received the 
+                // ACTION_MEDIA_REMOVED Intent yet.
+                status = Environment.MEDIA_REMOVED;
+            }
+            
+        } 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);
+            }
+
+            
+        }
+
+        File path = Environment.getDataDirectory();
+        StatFs stat = new StatFs(path.getPath());
+        long blockSize = stat.getBlockSize();
+        long availableBlocks = stat.getAvailableBlocks();
+        findPreference("memory_internal_avail").setSummary(formatSize(availableBlocks * blockSize));
+    }
+    
+    private String formatSize(long size) {
+        String suffix = null;
+        
+        // add KB or MB suffix if size is greater than 1K or 1M
+        if (size >= 1024) {
+            suffix = " KB";
+            size /= 1024;
+            if (size >= 1024) {
+                suffix = " MB";
+                size /= 1024;
+            }
+        }
+        
+        DecimalFormat formatter = new DecimalFormat();
+        formatter.setGroupingSize(3);
+        String result = formatter.format(size);
+                
+        if (suffix != null)
+            result = result + suffix;
+        return result;
+    }
+    
+}
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
new file mode 100644
index 0000000..4132ed5
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -0,0 +1,392 @@
+/*
+ * 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.deviceinfo;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.BatteryManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemClock;
+import android.os.SystemProperties;
+import android.os.NetStat;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.telephony.PhoneStateListener;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.PhoneStateIntentReceiver;
+import com.android.internal.telephony.TelephonyProperties;
+import com.android.settings.R;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Display the following information
+ * # Phone Number
+ * # Network
+ * # Roaming
+ * # IMEI
+ * # Network type
+ * # Signal Strength
+ * # Battery Strength  : TODO
+ * # Uptime
+ * # Awake Time
+ * # XMPP/buzz/tickle status : TODO
+ *
+ */
+public class Status extends PreferenceActivity {
+
+    private static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address";
+    private static final String KEY_BT_ADDRESS = "bt_address";
+    private static final String KEY_NETWORK_TRAFFIC_STATS = "network_traffic_stats";
+    private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
+    private static final int EVENT_SERVICE_STATE_CHANGED = 300;
+
+    private static final int EVENT_UPDATE_STATS = 500;
+
+    private TelephonyManager mTelephonyManager;
+    private Phone mPhone = null;
+    private PhoneStateIntentReceiver mPhoneStateReceiver;
+    private Resources mRes;
+    private Preference mSignalStrength;
+    private Preference mUptime;
+    private Preference mAwakeTime;
+
+    private static String sUnknown;
+    
+    private Preference mBatteryStatus;
+    private Preference mBatteryLevel;
+
+    private Handler mHandler;
+
+    private static class MyHandler extends Handler {
+        private WeakReference<Status> mStatus;
+
+        public MyHandler(Status activity) {
+            mStatus = new WeakReference<Status>(activity);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            Status status = mStatus.get();
+            if (status == null) {
+                return;
+            }
+
+            switch (msg.what) {
+                case EVENT_SIGNAL_STRENGTH_CHANGED:
+                    status.updateSignalStrength();
+                    break;
+
+                case EVENT_SERVICE_STATE_CHANGED:
+                    ServiceState serviceState = status.mPhoneStateReceiver.getServiceState();
+                    status.updateServiceState(serviceState);
+                    break;
+
+                case EVENT_UPDATE_STATS:
+                    status.updateTimes();
+                    status.setNetworkTrafficStats();
+                    sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
+                    break;
+            }
+        }
+    }
+
+    private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
+        
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
+
+                int level = intent.getIntExtra("level", 0);
+                int scale = intent.getIntExtra("scale", 100);
+                
+                mBatteryLevel.setSummary(String.valueOf(level * 100 / scale) + "%");
+                
+                int plugType = intent.getIntExtra("plugged", 0);
+                int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
+                String statusString;
+                if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
+                    statusString = getString(R.string.battery_info_status_charging);
+                    if (plugType > 0) {
+                        statusString = statusString + " " + getString(
+                                (plugType == BatteryManager.BATTERY_PLUGGED_AC)
+                                        ? R.string.battery_info_status_charging_ac
+                                        : R.string.battery_info_status_charging_usb);
+                    }
+                } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
+                    statusString = getString(R.string.battery_info_status_discharging);
+                } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
+                    statusString = getString(R.string.battery_info_status_not_charging);
+                } else if (status == BatteryManager.BATTERY_STATUS_FULL) {
+                    statusString = getString(R.string.battery_info_status_full);
+                } else {
+                    statusString = getString(R.string.battery_info_status_unknown);
+                }
+                mBatteryStatus.setSummary(statusString);
+            }
+        }
+    };
+
+    private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+        @Override
+        public void onDataConnectionStateChanged(int state) {
+            updateDataState();
+            updateNetworkType();
+        }
+    };
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        mHandler = new MyHandler(this);
+        
+        mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
+
+        addPreferencesFromResource(R.xml.device_info_status);
+        mBatteryLevel = findPreference("battery_level");
+        mBatteryStatus = findPreference("battery_status");
+        
+        mRes = getResources();
+        if (sUnknown == null) {
+            sUnknown = mRes.getString(R.string.device_info_default);
+        }
+        
+        mPhone = PhoneFactory.getDefaultPhone();
+        mSignalStrength = findPreference("signal_strength");
+        mUptime = findPreference("up_time");
+        mAwakeTime = findPreference("awake_time");
+        
+        setSummaryText("imei", mPhone.getDeviceId());
+        setSummaryText("imei_sv",
+                ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
+                        .getDeviceSoftwareVersion());
+        setSummaryText("number", mPhone.getLine1Number());
+
+        mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
+        mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
+        mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
+        
+        setWifiStatus();
+        setBtStatus();
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        mPhoneStateReceiver.registerIntent();
+        registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        
+        updateSignalStrength();
+        updateServiceState(mPhone.getServiceState());
+        updateDataState();
+        
+        mTelephonyManager.listen(mPhoneStateListener,
+                  PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
+
+        mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
+    }
+    
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        mPhoneStateReceiver.unregisterIntent();
+        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+        unregisterReceiver(mBatteryInfoReceiver);
+        mHandler.removeMessages(EVENT_UPDATE_STATS);
+    }
+
+    /**
+     * @param preference The key for the Preference item
+     * @param property The system property to fetch
+     * @param alt The default value, if the property doesn't exist
+     */
+    private void setSummary(String preference, String property, String alt) {
+        try {
+            findPreference(preference).setSummary(
+                    SystemProperties.get(property, alt));
+        } catch (RuntimeException e) {
+            
+        }
+    }
+
+    private void setSummaryText(String preference, String text) {
+        if (TextUtils.isEmpty(text)) {
+            text = sUnknown;
+        }
+        
+        findPreference(preference).setSummary(text);
+    }
+    
+    private void updateNetworkType() {
+        // Whether EDGE, UMTS, etc...
+        setSummary("network_type", TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, sUnknown);
+    }
+    
+    private void updateDataState() {
+        int state = mTelephonyManager.getDataState();
+        String display = mRes.getString(R.string.radioInfo_unknown);
+
+        switch (state) {
+            case TelephonyManager.DATA_CONNECTED:
+                display = mRes.getString(R.string.radioInfo_data_connected);
+                break;
+            case TelephonyManager.DATA_SUSPENDED:
+                display = mRes.getString(R.string.radioInfo_data_suspended);
+                break;
+            case TelephonyManager.DATA_CONNECTING:
+                display = mRes.getString(R.string.radioInfo_data_connecting);
+                break;
+            case TelephonyManager.DATA_DISCONNECTED:
+                display = mRes.getString(R.string.radioInfo_data_disconnected);
+                break;
+        }
+        
+        setSummaryText("data_state", display);
+    }
+
+    private void updateServiceState(ServiceState serviceState) {
+        int state = serviceState.getState();
+        String display = mRes.getString(R.string.radioInfo_unknown);
+        
+        switch (state) {
+            case ServiceState.STATE_IN_SERVICE:
+                display = mRes.getString(R.string.radioInfo_service_in);
+                break;
+            case ServiceState.STATE_OUT_OF_SERVICE:
+            case ServiceState.STATE_EMERGENCY_ONLY:
+                display = mRes.getString(R.string.radioInfo_service_out);
+                break;
+            case ServiceState.STATE_POWER_OFF:
+                display = mRes.getString(R.string.radioInfo_service_off);
+                break;
+        }
+        
+        setSummaryText("service_state", display);
+        
+        if (serviceState.getRoaming()) {
+            setSummaryText("roaming_state", mRes.getString(R.string.radioInfo_roaming_in));
+        } else {
+            setSummaryText("roaming_state", mRes.getString(R.string.radioInfo_roaming_not));
+        }
+        setSummaryText("operator_name", serviceState.getOperatorAlphaLong());
+    }
+    
+    void updateSignalStrength() {
+        int state =
+                mPhoneStateReceiver.getServiceState().getState();
+        Resources r = getResources();
+
+        if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
+                (ServiceState.STATE_POWER_OFF == state)) {
+            mSignalStrength.setSummary("0");
+        }
+        
+        int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
+        
+        if (-1 == signalDbm) signalDbm = 0;
+
+        int signalAsu = mPhoneStateReceiver.getSignalStrength();
+
+        if (-1 == signalAsu) signalAsu = 0;
+
+        mSignalStrength.setSummary(String.valueOf(signalDbm) + " "
+                    + r.getString(R.string.radioInfo_display_dbm) + "   "
+                    + String.valueOf(signalAsu) + " "
+                    + r.getString(R.string.radioInfo_display_asu));
+    }
+    
+    private void setWifiStatus() {
+        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+
+        Preference wifiMacAddressPref = findPreference(KEY_WIFI_MAC_ADDRESS);
+        String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
+        wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress 
+                : getString(R.string.status_unavailable));
+    }
+
+    private void setBtStatus() {
+        BluetoothDevice bluetooth = (BluetoothDevice) getSystemService(BLUETOOTH_SERVICE);
+        Preference btAddressPref = findPreference(KEY_BT_ADDRESS);
+
+        if (bluetooth == null) {
+            // device not BT capable
+            getPreferenceScreen().removePreference(btAddressPref);
+        } else {
+            String address = bluetooth.isEnabled() ? bluetooth.getAddress() : null;
+            btAddressPref.setSummary(!TextUtils.isEmpty(address) ? address
+                    : getString(R.string.status_unavailable));
+        }
+    }
+
+    private void setNetworkTrafficStats() {
+        long txPkts = NetStat.getTotalTxPkts();
+        long txBytes = NetStat.getTotalTxBytes();
+        long rxPkts = NetStat.getTotalRxPkts();
+        long rxBytes = NetStat.getTotalRxBytes();
+
+        Preference netStatsPref = findPreference(KEY_NETWORK_TRAFFIC_STATS);
+        netStatsPref.setSummary(getString(R.string.status_network_traffic_summary,
+                txPkts, txBytes, rxPkts, rxBytes));
+    }
+
+    void updateTimes() {
+        long at = SystemClock.uptimeMillis() / 1000;
+        long ut = SystemClock.elapsedRealtime() / 1000;
+        long st = ut - at;
+
+        if (ut == 0) {
+            ut = 1;
+        }
+
+        mUptime.setSummary(convert(ut));
+        mAwakeTime.setSummary(convert(at) + " (" + (((1000 * at / ut) + 5) / 10) + "%)");
+    }
+    
+    private String pad(int n) {
+        if (n >= 10) {
+            return String.valueOf(n);
+        } else {
+            return "0" + String.valueOf(n);
+        }
+    }
+
+    private String convert(long t) {
+        int s = (int)(t % 60);
+        int m = (int)((t / 60) % 60);
+        int h = (int)((t / 3600));
+
+        return h + ":" + pad(m) + ":" + pad(s);
+    }
+}
diff --git a/src/com/android/settings/quicklaunch/BookmarkPicker.java b/src/com/android/settings/quicklaunch/BookmarkPicker.java
new file mode 100644
index 0000000..7152abb
--- /dev/null
+++ b/src/com/android/settings/quicklaunch/BookmarkPicker.java
@@ -0,0 +1,331 @@
+/*
+ * 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.quicklaunch;
+
+import com.android.settings.R;
+
+import android.app.ListActivity;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Activity to pick a bookmark that will be returned to the caller.
+ * <p>
+ * Currently, bookmarks are either:
+ * <li> Activities that are in the launcher
+ * <li> Activities that are within an app that is capable of being launched with
+ * the {@link Intent#ACTION_CREATE_SHORTCUT}.
+ */
+public class BookmarkPicker extends ListActivity implements SimpleAdapter.ViewBinder {
+
+    private static final String TAG = "BookmarkPicker";
+
+    /** Extra in the returned intent from this activity. */
+    public static final String EXTRA_TITLE = "com.android.settings.quicklaunch.TITLE";
+    
+    /** Extra that should be provided, and will be returned. */
+    public static final String EXTRA_SHORTCUT = "com.android.settings.quicklaunch.SHORTCUT";
+
+    /**
+     * The request code for the screen to create a bookmark that is WITHIN an
+     * application. For example, Gmail can return a bookmark for the inbox
+     * folder.
+     */
+    private static final int REQUEST_CREATE_SHORTCUT = 1;
+
+    /** Intent used to get all the activities that are launch-able */
+    private static Intent sLaunchIntent;
+    /** Intent used to get all the activities that are {@link #REQUEST_CREATE_SHORTCUT}-able */
+    private static Intent sShortcutIntent;
+    
+    /**
+     * List of ResolveInfo for activities that we can bookmark (either directly
+     * to the activity, or by launching the activity and it returning a bookmark
+     * WITHIN that application).
+     */
+    private List<ResolveInfo> mResolveList;
+    
+    // List adapter stuff
+    private static final String KEY_TITLE = "TITLE";
+    private static final String KEY_RESOLVE_INFO = "RESOLVE_INFO";
+    private static final String sKeys[] = new String[] { KEY_TITLE, KEY_RESOLVE_INFO };
+    private static final int sResourceIds[] = new int[] { R.id.title, R.id.icon };
+    private SimpleAdapter mMyAdapter;
+
+    /** Display those activities that are launch-able */
+    private static final int DISPLAY_MODE_LAUNCH = 0;
+    /** Display those activities that are able to have bookmarks WITHIN the application */
+    private static final int DISPLAY_MODE_SHORTCUT = 1;
+    private int mDisplayMode = DISPLAY_MODE_LAUNCH;
+    
+    private Handler mUiHandler = new Handler();
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        updateListAndAdapter();
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        menu.add(0, DISPLAY_MODE_LAUNCH, 0, R.string.quick_launch_display_mode_applications)
+                .setIcon(com.android.internal.R.drawable.ic_menu_archive);
+        menu.add(0, DISPLAY_MODE_SHORTCUT, 0, R.string.quick_launch_display_mode_shortcuts)
+                .setIcon(com.android.internal.R.drawable.ic_menu_goto);
+        return true;
+    }
+    
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        menu.findItem(DISPLAY_MODE_LAUNCH).setVisible(mDisplayMode != DISPLAY_MODE_LAUNCH);
+        menu.findItem(DISPLAY_MODE_SHORTCUT).setVisible(mDisplayMode != DISPLAY_MODE_SHORTCUT);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        
+        switch (item.getItemId()) {
+
+            case DISPLAY_MODE_LAUNCH: 
+                mDisplayMode = DISPLAY_MODE_LAUNCH;
+                break;
+            
+            case DISPLAY_MODE_SHORTCUT:
+                mDisplayMode = DISPLAY_MODE_SHORTCUT;
+                break;
+            
+            default:
+                return false;
+        }
+        
+        updateListAndAdapter();
+        return true;
+    }
+
+    private void ensureIntents() {
+        if (sLaunchIntent == null) {
+            sLaunchIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
+            sShortcutIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
+        }
+    }
+
+    /**
+     * This should be called from the UI thread.
+     */
+    private void updateListAndAdapter() {
+        // Get the activities in a separate thread
+        new Thread("data updater") {
+            @Override
+            public void run() {
+                synchronized (BookmarkPicker.this) {
+                    /*
+                     * Don't touch any of the lists that are being used by the
+                     * adapter in this thread!
+                     */
+                    ArrayList<ResolveInfo> newResolveList = new ArrayList<ResolveInfo>();
+                    ArrayList<Map<String, ?>> newAdapterList = new ArrayList<Map<String, ?>>();
+
+                    fillResolveList(newResolveList);
+                    Collections.sort(newResolveList,
+                            new ResolveInfo.DisplayNameComparator(getPackageManager()));
+                    
+                    fillAdapterList(newAdapterList, newResolveList);
+                    
+                    updateAdapterToUseNewLists(newAdapterList, newResolveList);
+                }
+            }
+        }.start();  
+    }
+    
+    private void updateAdapterToUseNewLists(final ArrayList<Map<String, ?>> newAdapterList,
+            final ArrayList<ResolveInfo> newResolveList) {
+        // Post this back on the UI thread
+        mUiHandler.post(new Runnable() {
+            public void run() {
+                /*
+                 * SimpleAdapter does not support changing the lists after it
+                 * has been created. We just create a new instance.
+                 */
+                mMyAdapter = createResolveAdapter(newAdapterList);
+                mResolveList = newResolveList;
+                setListAdapter(mMyAdapter);
+            }
+        });
+    }
+    
+    /**
+     * Gets all activities matching our current display mode.
+     * 
+     * @param list The list to fill.
+     */
+    private void fillResolveList(List<ResolveInfo> list) {
+        ensureIntents();
+        PackageManager pm = getPackageManager();
+        list.clear();
+        
+        if (mDisplayMode == DISPLAY_MODE_LAUNCH) {
+            list.addAll(pm.queryIntentActivities(sLaunchIntent, 0));
+        } else if (mDisplayMode == DISPLAY_MODE_SHORTCUT) {
+            list.addAll(pm.queryIntentActivities(sShortcutIntent, 0)); 
+        }
+    }
+    
+    private SimpleAdapter createResolveAdapter(List<Map<String, ?>> list) {
+        SimpleAdapter adapter = new SimpleAdapter(this, list,
+                R.layout.bookmark_picker_item, sKeys, sResourceIds);
+        adapter.setViewBinder(this);
+        return adapter;
+    }
+
+    private void fillAdapterList(List<Map<String, ?>> list,
+            List<ResolveInfo> resolveList) {
+        list.clear();
+        int resolveListSize = resolveList.size();
+        for (int i = 0; i < resolveListSize; i++) {
+            ResolveInfo info = resolveList.get(i);
+            /*
+             * Simple adapter craziness. For each item, we need to create a map
+             * from a key to its value (the value can be any object--the view
+             * binder will take care of filling the View with a representation
+             * of that object).
+             */
+            Map<String, Object> map = new TreeMap<String, Object>();
+            map.put(KEY_TITLE, getResolveInfoTitle(info));
+            map.put(KEY_RESOLVE_INFO, info);
+            list.add(map);
+        }
+    }
+
+    /** Get the title for a resolve info. */
+    private String getResolveInfoTitle(ResolveInfo info) {
+        CharSequence label = info.loadLabel(getPackageManager());
+        if (label == null) label = info.activityInfo.name;
+        return label != null ? label.toString() : null;
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        if (position >= mResolveList.size()) return;
+
+        ResolveInfo info = mResolveList.get(position);
+        
+        switch (mDisplayMode) {
+
+            case DISPLAY_MODE_LAUNCH: 
+                // We can go ahead and return the clicked info's intent
+                Intent intent = getIntentForResolveInfo(info, Intent.ACTION_MAIN);
+                intent.addCategory(Intent.CATEGORY_LAUNCHER);
+                finish(intent, getResolveInfoTitle(info));
+                break;
+
+            case DISPLAY_MODE_SHORTCUT:
+                // Start the shortcut activity so the user can pick the actual intent
+                // (example: Gmail's shortcut activity shows a list of mailboxes)
+                startShortcutActivity(info);
+                break;
+        }
+        
+    }
+    
+    private static Intent getIntentForResolveInfo(ResolveInfo info, String action) {
+        Intent intent = new Intent(action);
+        ActivityInfo ai = info.activityInfo;
+        intent.setClassName(ai.packageName, ai.name);
+        return intent;
+    }
+
+    /**
+     * Starts an activity to get a shortcut.
+     * <p>
+     * For example, Gmail has an activity that lists the available labels. It
+     * returns a shortcut intent for going directly to this label.
+     */
+    private void startShortcutActivity(ResolveInfo info) {
+        Intent intent = getIntentForResolveInfo(info, Intent.ACTION_CREATE_SHORTCUT);
+        startActivityForResult(intent, REQUEST_CREATE_SHORTCUT);
+        
+        // Will get a callback to onActivityResult
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (resultCode != RESULT_OK) {
+            return;
+        }
+        
+        switch (requestCode) {
+            
+            case REQUEST_CREATE_SHORTCUT:
+                if (data != null) {
+                    finish((Intent) data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT),
+                            data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME));
+                }
+                break;
+                
+            default:
+                super.onActivityResult(requestCode, resultCode, data);
+                break;
+        }
+    }
+    
+    /**
+     * Finishes the activity and returns the given data.
+     */
+    private void finish(Intent intent, String title) {
+        // Give back what was given to us (it will have the shortcut, for example)
+        intent.putExtras(getIntent());
+        // Put our information
+        intent.putExtra(EXTRA_TITLE, title);
+        setResult(RESULT_OK, intent);
+        finish();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean setViewValue(View view, Object data, String textRepresentation) {
+        if (view.getId() == R.id.icon) {
+            Drawable icon = ((ResolveInfo) data).loadIcon(getPackageManager());
+            if (icon != null) {
+                ((ImageView) view).setImageDrawable(icon);
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
new file mode 100644
index 0000000..4d44524
--- /dev/null
+++ b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
@@ -0,0 +1,347 @@
+/*
+ * 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.quicklaunch;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
+import android.provider.Settings.Bookmarks;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.AdapterView;
+
+import com.android.settings.R;
+
+/**
+ * Settings activity for quick launch.
+ * <p>
+ * Shows a list of possible shortcuts, the current application each is bound to,
+ * and allows choosing a new bookmark for a shortcut.
+ */
+public class QuickLaunchSettings extends PreferenceActivity implements
+        AdapterView.OnItemLongClickListener, DialogInterface.OnClickListener {
+
+    private static final String TAG = "QuickLaunchSettings";
+
+    private static final String KEY_SHORTCUT_CATEGORY = "shortcut_category";
+
+    private static final int DIALOG_CLEAR_SHORTCUT = 0;
+
+    private static final int REQUEST_PICK_BOOKMARK = 1;
+
+    private static final int COLUMN_SHORTCUT = 0;
+    private static final int COLUMN_TITLE = 1;
+    private static final int COLUMN_INTENT = 2;
+    private static final String[] sProjection = new String[] {
+            Bookmarks.SHORTCUT, Bookmarks.TITLE, Bookmarks.INTENT
+    };
+    private static final String sShortcutSelection = Bookmarks.SHORTCUT + "=?";
+    
+    private Handler mUiHandler = new Handler();
+    
+    private static final String DEFAULT_BOOKMARK_FOLDER = "@quicklaunch";
+    /** Cursor for Bookmarks provider. */
+    private Cursor mBookmarksCursor;
+    /** Listens for changes to Bookmarks provider. */
+    private BookmarksObserver mBookmarksObserver;
+    /** Used to keep track of which shortcuts have bookmarks. */
+    private SparseBooleanArray mBookmarkedShortcuts;
+    
+    /** Preference category to hold the shortcut preferences. */
+    private PreferenceGroup mShortcutGroup;
+    /** Mapping of a shortcut to its preference. */
+    private SparseArray<ShortcutPreference> mShortcutToPreference;
+
+    /** The bookmark title of the shortcut that is being cleared. */
+    private CharSequence mClearDialogBookmarkTitle;
+    private static final String CLEAR_DIALOG_BOOKMARK_TITLE = "CLEAR_DIALOG_BOOKMARK_TITLE";
+    /** The shortcut that is being cleared. */
+    private char mClearDialogShortcut;
+    private static final String CLEAR_DIALOG_SHORTCUT = "CLEAR_DIALOG_SHORTCUT";
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        addPreferencesFromResource(R.xml.quick_launch_settings);
+        
+        mShortcutGroup = (PreferenceGroup) findPreference(KEY_SHORTCUT_CATEGORY);
+        mShortcutToPreference = new SparseArray<ShortcutPreference>();
+        mBookmarksObserver = new BookmarksObserver(mUiHandler);
+        initShortcutPreferences();
+        mBookmarksCursor = managedQuery(Bookmarks.CONTENT_URI, sProjection, null, null);
+        getListView().setOnItemLongClickListener(this);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        getContentResolver().registerContentObserver(Bookmarks.CONTENT_URI, true,
+                mBookmarksObserver);
+        refreshShortcuts();
+    }
+    
+    @Override
+    protected void onPause() {
+        super.onPause();
+        getContentResolver().unregisterContentObserver(mBookmarksObserver);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Bundle state) {
+        super.onRestoreInstanceState(state);
+        
+        // Restore the clear dialog's info
+        mClearDialogBookmarkTitle = state.getString(CLEAR_DIALOG_BOOKMARK_TITLE);
+        mClearDialogShortcut = (char) state.getInt(CLEAR_DIALOG_SHORTCUT, 0);
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        
+        // Save the clear dialog's info
+        outState.putCharSequence(CLEAR_DIALOG_BOOKMARK_TITLE, mClearDialogBookmarkTitle);
+        outState.putInt(CLEAR_DIALOG_SHORTCUT, mClearDialogShortcut);
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        switch (id) {
+            
+            case DIALOG_CLEAR_SHORTCUT: {
+                // Create the dialog for clearing a shortcut
+                return new AlertDialog.Builder(this)
+                        .setTitle(getString(R.string.quick_launch_clear_dialog_title))
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(getString(R.string.quick_launch_clear_dialog_message,
+                                mClearDialogShortcut, mClearDialogBookmarkTitle))
+                        .setPositiveButton(R.string.quick_launch_clear_ok_button, this)
+                        .setNegativeButton(R.string.quick_launch_clear_cancel_button, this)
+                        .create();
+            }
+        }
+        
+        return super.onCreateDialog(id);
+    }
+    
+    @Override
+    protected void onPrepareDialog(int id, Dialog dialog) {
+        switch (id) {
+            
+            case DIALOG_CLEAR_SHORTCUT: {
+                AlertDialog alertDialog = (AlertDialog) dialog;
+                alertDialog.setMessage(getString(R.string.quick_launch_clear_dialog_message,
+                        mClearDialogShortcut, mClearDialogBookmarkTitle));
+            }
+        }
+    }
+
+    private void showClearDialog(ShortcutPreference pref) {
+
+        if (!pref.hasBookmark()) return;
+        
+        mClearDialogBookmarkTitle = pref.getTitle();
+        mClearDialogShortcut = pref.getShortcut();
+        showDialog(DIALOG_CLEAR_SHORTCUT);
+    }
+    
+    public void onClick(DialogInterface dialog, int which) {
+        if (mClearDialogShortcut > 0 && which == AlertDialog.BUTTON1) {
+            // Clear the shortcut
+            clearShortcut(mClearDialogShortcut);
+        }
+        mClearDialogBookmarkTitle = null;
+        mClearDialogShortcut = 0;
+    }
+
+    private void clearShortcut(char shortcut) {
+        getContentResolver().delete(Bookmarks.CONTENT_URI, sShortcutSelection,
+                new String[] { String.valueOf((int) shortcut) });
+    }
+    
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (!(preference instanceof ShortcutPreference)) return false;
+
+        // Open the screen to pick a bookmark for this shortcut
+        ShortcutPreference pref = (ShortcutPreference) preference;
+        Intent intent = new Intent(this, BookmarkPicker.class);
+        intent.putExtra(BookmarkPicker.EXTRA_SHORTCUT, pref.getShortcut());
+        startActivityForResult(intent, REQUEST_PICK_BOOKMARK);
+        
+        return true;
+    }
+
+    public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
+        
+        // Open the clear shortcut dialog
+        Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem(position);
+        if (!(pref instanceof ShortcutPreference)) return false;
+        showClearDialog((ShortcutPreference) pref);
+        return true;
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (resultCode != RESULT_OK) {
+            return;
+        }
+
+        if (requestCode == REQUEST_PICK_BOOKMARK) {
+            
+            // Returned from the 'pick bookmark for this shortcut' screen
+            if (data == null) {
+                Log.w(TAG, "Result from bookmark picker does not have an intent.");
+                return;
+            }
+            
+            String title = data.getStringExtra(BookmarkPicker.EXTRA_TITLE);
+            char shortcut = data.getCharExtra(BookmarkPicker.EXTRA_SHORTCUT, (char) 0);
+            updateShortcut(shortcut, data);
+            
+        } else {
+            super.onActivityResult(requestCode, resultCode, data);
+        }
+    }
+
+    private void updateShortcut(char shortcut, Intent intent) {
+        // Update the bookmark for a shortcut
+        // Pass an empty title so it gets resolved each time this bookmark is
+        // displayed (since the locale could change after we insert into the provider).
+        Bookmarks.add(getContentResolver(), intent, "", DEFAULT_BOOKMARK_FOLDER, shortcut, 0);
+    }
+    
+    private ShortcutPreference getOrCreatePreference(char shortcut) {
+        ShortcutPreference pref = mShortcutToPreference.get(shortcut);
+        if (pref != null) {
+            return pref;
+        } else {
+            Log.w(TAG, "Unknown shortcut '" + shortcut + "', creating preference anyway");
+            return createPreference(shortcut);
+        }
+    }
+    
+    private ShortcutPreference createPreference(char shortcut) {
+        ShortcutPreference pref = new ShortcutPreference(QuickLaunchSettings.this, shortcut);
+        mShortcutGroup.addPreference(pref);
+        mShortcutToPreference.put(shortcut, pref);
+        return pref;
+    }
+
+    private void initShortcutPreferences() {
+        
+        /** Whether the shortcut has been seen already.  The array index is the shortcut. */
+        SparseBooleanArray shortcutSeen = new SparseBooleanArray();
+        KeyCharacterMap keyMap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD);
+
+        // Go through all the key codes and create a preference for the appropriate keys
+        for (int keyCode = KeyEvent.getMaxKeyCode() - 1; keyCode >= 0; keyCode--) {
+            // Get the label for the primary char on the key that produces this key code
+            char shortcut = (char) Character.toLowerCase(keyMap.getDisplayLabel(keyCode));
+            if (shortcut == 0 || shortcutSeen.get(shortcut, false)) continue;
+            // TODO: need a to tell if the current keyboard can produce this key code, for now
+            // only allow the letter or digits
+            if (!Character.isLetterOrDigit(shortcut)) continue;
+            shortcutSeen.put(shortcut, true);
+            
+            createPreference(shortcut);
+        }
+    }
+    
+    private synchronized void refreshShortcuts() {
+        Cursor c = mBookmarksCursor;
+        if (c == null) {
+            // Haven't finished querying yet
+            return;
+        }
+        
+        if (!c.requery()) {
+            Log.e(TAG, "Could not requery cursor when refreshing shortcuts.");
+            return;
+        }
+        
+        /**
+         * We use the previous bookmarked shortcuts array to filter out those
+         * shortcuts that had bookmarks before this method call, and don't after
+         * (so we can set the preferences to be without bookmarks).
+         */
+        SparseBooleanArray noLongerBookmarkedShortcuts = mBookmarkedShortcuts;
+        SparseBooleanArray newBookmarkedShortcuts = new SparseBooleanArray(); 
+        while (c.moveToNext()) {
+            char shortcut = Character.toLowerCase((char) c.getInt(COLUMN_SHORTCUT));
+            if (shortcut == 0) continue;
+            
+            ShortcutPreference pref = getOrCreatePreference(shortcut);
+            pref.setTitle(Bookmarks.getTitle(this, c));
+            pref.setSummary(getString(R.string.quick_launch_shortcut,
+                    String.valueOf(shortcut)));
+            pref.setHasBookmark(true);
+            
+            newBookmarkedShortcuts.put(shortcut, true);
+            if (noLongerBookmarkedShortcuts != null) {
+                // After this loop, the shortcuts with value true in this array
+                // will no longer have bookmarks
+                noLongerBookmarkedShortcuts.put(shortcut, false);
+            }
+        }
+        
+        if (noLongerBookmarkedShortcuts != null) {
+            for (int i = noLongerBookmarkedShortcuts.size() - 1; i >= 0; i--) {
+                if (noLongerBookmarkedShortcuts.valueAt(i)) {
+                    // True, so there is no longer a bookmark for this shortcut
+                    char shortcut = (char) noLongerBookmarkedShortcuts.keyAt(i);
+                    ShortcutPreference pref = mShortcutToPreference.get(shortcut);
+                    if (pref != null) {
+                        pref.setHasBookmark(false);
+                    }
+                }
+            }
+        }
+        
+        mBookmarkedShortcuts = newBookmarkedShortcuts;
+        
+        c.deactivate();
+    }
+
+    private class BookmarksObserver extends ContentObserver {
+
+        public BookmarksObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            super.onChange(selfChange);
+            
+            refreshShortcuts();
+        }
+    }
+}
diff --git a/src/com/android/settings/quicklaunch/ShortcutPreference.java b/src/com/android/settings/quicklaunch/ShortcutPreference.java
new file mode 100644
index 0000000..92efdeb
--- /dev/null
+++ b/src/com/android/settings/quicklaunch/ShortcutPreference.java
@@ -0,0 +1,151 @@
+/*
+ * 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.quicklaunch;
+
+import com.android.settings.R;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.preference.Preference;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.TextView;
+
+/**
+ * Preference type for a shortcut in {@link QuickLaunchSettings}.
+ */
+public class ShortcutPreference extends Preference implements Comparable<Preference> {
+
+    private static Object sStaticVarsLock = new Object();
+    
+    // These static fields are used across all instances of ShortcutPreference.
+    // There will be many ShortcutPreference instances (~36 for US).
+    private static String STRING_ASSIGN_APPLICATION;
+    private static String STRING_NO_SHORTCUT;
+
+    private static int sDimAlpha;
+    private static ColorStateList sRegularTitleColor;
+    private static ColorStateList sDimTitleColor;
+    private static ColorStateList sRegularSummaryColor;
+    private static ColorStateList sDimSummaryColor;
+    
+    private char mShortcut;
+    private boolean mHasBookmark;
+    
+    public ShortcutPreference(Context context, char shortcut) {
+        super(context);
+
+        synchronized (sStaticVarsLock) {
+            // Init statics. This should only happen for the first ShortcutPreference created,
+            // the rest will already have them initialized.
+            if (STRING_ASSIGN_APPLICATION == null) {
+                STRING_ASSIGN_APPLICATION = context.getString(R.string.quick_launch_assign_application);
+                STRING_NO_SHORTCUT = context.getString(R.string.quick_launch_no_shortcut);
+    
+                TypedValue outValue = new TypedValue();
+                context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, outValue, true);
+                sDimAlpha = (int) (outValue.getFloat() * 255);
+            }
+        }
+        
+        mShortcut = shortcut;
+
+        setWidgetLayoutResource(R.layout.preference_widget_shortcut);
+    }
+
+    public char getShortcut() {
+        return mShortcut;
+    }
+
+    public void setShortcut(char shortcut) {
+        if (shortcut != mShortcut) {
+            mShortcut = shortcut;
+            notifyChanged();
+        }
+    }
+
+    public boolean hasBookmark() {
+        return mHasBookmark;
+    }
+
+    public void setHasBookmark(boolean hasBookmark) {
+        if (hasBookmark != mHasBookmark) {
+            mHasBookmark = hasBookmark;
+            notifyChanged();
+        }
+    }
+
+    @Override
+    public CharSequence getTitle() {
+        return mHasBookmark ? super.getTitle() : STRING_ASSIGN_APPLICATION;
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        return mHasBookmark ? super.getSummary() : STRING_NO_SHORTCUT;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        
+        TextView shortcutView = (TextView) view.findViewById(R.id.shortcut);
+        if (shortcutView != null) {
+            shortcutView.setText(String.valueOf(mShortcut));
+        }
+    
+        TextView titleView = (TextView) view.findViewById(android.R.id.title);
+
+        synchronized (sStaticVarsLock) {
+            if (sRegularTitleColor == null) {
+                sRegularTitleColor = titleView.getTextColors();
+                sDimTitleColor = sRegularTitleColor.withAlpha(sDimAlpha);
+            }
+        }
+        
+        ColorStateList color = mHasBookmark ? sRegularTitleColor : sDimTitleColor;
+        if (color != null) {
+            titleView.setTextColor(color);
+        }
+        
+        TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
+
+        synchronized (sStaticVarsLock) {
+            if (sRegularSummaryColor == null) {
+                sRegularSummaryColor = summaryView.getTextColors();
+                sDimSummaryColor = sRegularSummaryColor.withAlpha(sDimAlpha);
+            }
+        }
+        
+        color = mHasBookmark ? sRegularSummaryColor : sDimSummaryColor;
+        if (color != null) {
+            summaryView.setTextColor(color);
+        }
+        
+    }
+
+    public int compareTo(Preference another) {
+        if (!(another instanceof ShortcutPreference)) return super.compareTo(another);
+
+        // Letters before digits
+        char other = ((ShortcutPreference) another).mShortcut;
+        if (Character.isDigit(mShortcut) && Character.isLetter(other)) return 1;
+        else if (Character.isDigit(other) && Character.isLetter(mShortcut)) return -1;
+        else return mShortcut - other;
+    }
+    
+}
diff --git a/src/com/android/settings/wifi/AccessPointDialog.java b/src/com/android/settings/wifi/AccessPointDialog.java
new file mode 100644
index 0000000..917ed96
--- /dev/null
+++ b/src/com/android/settings/wifi/AccessPointDialog.java
@@ -0,0 +1,600 @@
+/*
+ * 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.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+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_WPA_PERSONAL = 3;
+    private static final int SECURITY_WPA2_PERSONAL = 4;
+
+    private static final int[] WEP_TYPE_VALUES = {
+            AccessPointState.WEP_PASSWORD_AUTO, AccessPointState.WEP_PASSWORD_ASCII,
+            AccessPointState.WEP_PASSWORD_HEX
+    };
+    
+    // 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 TextView mPasswordText;
+    private EditText mPasswordEdit;
+    private CheckBox mShowPasswordCheckBox;
+    
+    // Info-specific views
+    private ViewGroup mTable;
+    
+    // Configure-specific views
+    private EditText mSsidEdit;
+    private Spinner mSecuritySpinner;
+    private Spinner mWepTypeSpinner;
+    
+    public AccessPointDialog(Context context, WifiLayer wifiLayer) {
+        super(context);
+
+        mWifiLayer = wifiLayer;
+    }
+
+    @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));
+    }
+
+    /** 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;
+            
+        } else if (mMode == MODE_INFO) {
+            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);
+        
+        mShowPasswordCheckBox = (CheckBox) view.findViewById(R.id.show_password_checkbox);
+        if (mShowPasswordCheckBox != null) {
+            mShowPasswordCheckBox.setOnClickListener(this);
+        }
+        
+        if (mMode == MODE_CONFIGURE) {
+            mSsidEdit = (EditText) view.findViewById(R.id.ssid_edit);
+            mSecuritySpinner = (Spinner) view.findViewById(R.id.security_spinner);
+            mSecuritySpinner.setOnItemSelectedListener(this);
+            setSecuritySpinnerAdapter();
+            mWepTypeSpinner = (Spinner) view.findViewById(R.id.wep_type_spinner);
+            
+        } else if (mMode == MODE_INFO) {
+            mTable = (ViewGroup) view.findViewById(R.id.table);
+        }
+        
+    }
+    
+    private void setSecuritySpinnerAdapter() {
+        Context context = getContext();
+        int arrayResId = mAutoSecurityAllowed ? R.array.wifi_security_entries
+                : R.array.wifi_security_without_auto_entries;         
+
+        ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(context,
+                android.R.layout.simple_spinner_item,
+                context.getResources().getStringArray(arrayResId));
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        mSecuritySpinner.setAdapter(adapter);
+    }
+    
+    /** 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);
+            }
+            
+            mPasswordEdit.setHint(R.string.wifi_password_unchanged);
+        }
+
+        updatePasswordCaption(mState.security);
+    }
+
+    private void updatePasswordCaption(String security) {
+        
+        if (mPasswordText != null && 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 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).
+         */
+        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)) {
+            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);
+        }
+        
+        mWifiLayer.connectToNetwork(mState);            
+    }
+    
+    private void handleSave() {
+        replaceStateWithWifiLayerInstance();
+
+        String ssid = mSsidEdit.getText().toString();
+        String password = mPasswordEdit.getText().toString();
+        
+        mState.setSsid(ssid);
+        
+        int securityType = getSecurityTypeFromSpinner();
+        
+        if (!TextUtils.isEmpty(password)) {
+            switch (securityType) {
+             
+                case SECURITY_WPA_PERSONAL: {
+                    mState.setSecurity(AccessPointState.WPA);
+                    mState.setPassword(password);
+                    break;
+                }
+                    
+                case SECURITY_WPA2_PERSONAL: {
+                    mState.setSecurity(AccessPointState.WPA2);
+                    mState.setPassword(password);
+                    break;
+                }
+                
+                case SECURITY_AUTO: {
+                    mState.setPassword(password);
+                    break;
+                }
+                    
+                case SECURITY_WEP: {
+                    mState.setSecurity(AccessPointState.WEP);
+                    mState.setPassword(password,
+                            WEP_TYPE_VALUES[mWepTypeSpinner.getSelectedItemPosition()]);
+                    break;
+                }
+                
+            }
+        } else {
+            mState.setSecurity(AccessPointState.OPEN);
+        }
+        
+        if (securityType == SECURITY_NONE) {
+            mState.setSecurity(AccessPointState.OPEN);
+        }
+            
+        if (!mWifiLayer.saveNetwork(mState)) {
+            return;
+        }
+        
+        // Connect right away if they've touched it
+        if (!mWifiLayer.connectToNetwork(mState)) {
+            return;
+        }
+        
+    }
+    
+    /**
+     * 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);
+    }
+    
+    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) {
+        
+        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.WPA);
+                break;
+            }
+            
+            case SECURITY_WPA_PERSONAL:
+            case SECURITY_WPA2_PERSONAL: {
+                setWepVisible(false);
+                setGenericPasswordVisible(true);
+                // Both WPA and WPA2 show the same caption, so either is ok
+                updatePasswordCaption(AccessPointState.WPA);
+                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) {
+            // Toggle password
+            mPasswordEdit.setTransformationMethod(
+                    showPassword ?
+                            null :
+                            PasswordTransformationMethod.getInstance());
+        }
+    }
+    
+}
diff --git a/src/com/android/settings/wifi/AccessPointPreference.java b/src/com/android/settings/wifi/AccessPointPreference.java
new file mode 100644
index 0000000..10e0947
--- /dev/null
+++ b/src/com/android/settings/wifi/AccessPointPreference.java
@@ -0,0 +1,108 @@
+/*
+ * 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 WifiSettings mWifiSettings;
+    
+    private AccessPointState mState;
+
+    public AccessPointPreference(WifiSettings wifiSettings, AccessPointState state) {
+        super(wifiSettings, null);
+        
+        mWifiSettings = wifiSettings;
+        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
new file mode 100644
index 0000000..c224954
--- /dev/null
+++ b/src/com/android/settings/wifi/AccessPointState.java
@@ -0,0 +1,879 @@
+/*
+ * 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 WPA2 = "WPA2";
+    public static final String WPA = "WPA";
+    public static final String WEP = "WEP";
+    public static final String OPEN = "Open";
+
+    /** 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-";
+    
+    // Localized strings for different security types
+    private static String LOCALIZED_WPA2;
+    private static String LOCALIZED_WPA;
+    private static String LOCALIZED_WEP;
+    private static String LOCALIZED_OPEN;
+    private static String LOCALIZED_UNKNOWN;
+    private static String LOCALIZED_VERBOSE_WPA2;
+    private static String LOCALIZED_VERBOSE_WPA;
+    private static String LOCALIZED_VERBOSE_WEP;
+    private static String LOCALIZED_VERBOSE_OPEN;
+
+    
+    // Localized strings for various messages
+    private static String SUMMARY_NOT_IN_RANGE;
+    private static String SUMMARY_REMEMBERED;
+    private static String SUMMARY_CONNECTION_FAILED;
+    
+    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;
+    
+    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;
+        setStrings();
+    }
+
+    private void setStrings() {
+        final Context c = mContext;
+
+        if (SUMMARY_NOT_IN_RANGE == null && c != null) {
+            SUMMARY_NOT_IN_RANGE = c.getString(R.string.summary_not_in_range);
+            SUMMARY_REMEMBERED = c.getString(R.string.summary_remembered);
+            SUMMARY_CONNECTION_FAILED = c.getString(R.string.summary_connection_failed);
+            
+            LOCALIZED_OPEN = c.getString(R.string.wifi_security_open);
+            LOCALIZED_WEP = c.getString(R.string.wifi_security_wep);
+            LOCALIZED_WPA = c.getString(R.string.wifi_security_wpa);
+            LOCALIZED_WPA2 = c.getString(R.string.wifi_security_wpa2);
+
+            LOCALIZED_VERBOSE_OPEN = c.getString(R.string.wifi_security_verbose_open);
+            LOCALIZED_VERBOSE_WEP = c.getString(R.string.wifi_security_verbose_wep);
+            LOCALIZED_VERBOSE_WPA = c.getString(R.string.wifi_security_verbose_wpa);
+            LOCALIZED_VERBOSE_WPA2 = c.getString(R.string.wifi_security_verbose_wpa2);
+
+            LOCALIZED_UNKNOWN = c.getString(R.string.wifi_security_unknown);
+        }
+    }
+    
+    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 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 LOCALIZED_OPEN;
+        else if (security.equals(WEP)) return LOCALIZED_WEP;
+        else if (security.equals(WPA)) return LOCALIZED_WPA;
+        else if (security.equals(WPA2)) return LOCALIZED_WPA2;
+        
+        return LOCALIZED_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, WPA, WPA2 }; 
+        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;
+    }
+    
+    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 (wifiConfig.allowedKeyManagement.get(KeyMgmt.NONE)) {
+            // If we never set group ciphers, wpa_supplicant puts all of them.
+            // For open, we don't set group ciphers.
+            // For WEP, we specifically only set WEP40 and WEP104, so CCMP
+            // and TKIP should not be there.
+            if (!wifiConfig.allowedGroupCiphers.get(GroupCipher.CCMP)
+                    && (wifiConfig.allowedGroupCiphers.get(GroupCipher.WEP40)
+                            || wifiConfig.allowedGroupCiphers.get(GroupCipher.WEP104))) {
+                return WEP;
+            } else {
+                return OPEN;
+            }
+        } else if (wifiConfig.allowedProtocols.get(Protocol.RSN)) {
+            return WPA2;
+        } else if (wifiConfig.allowedProtocols.get(Protocol.WPA)) {
+            return WPA;
+        } else {
+            Log.w(TAG, "Unknown security type from WifiConfiguration, falling back on open.");
+            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);
+        
+        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.wepTxKeyIndex = 0;
+            
+            config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
+            config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
+
+            config.allowedKeyManagement.set(KeyMgmt.NONE);
+            
+            config.allowedGroupCiphers.set(GroupCipher.WEP40);
+            config.allowedGroupCiphers.set(GroupCipher.WEP104);
+            
+        } else if (security.equals(WPA) || security.equals(WPA2)){
+            config.allowedGroupCiphers.set(GroupCipher.TKIP);
+            config.allowedGroupCiphers.set(GroupCipher.CCMP);
+            
+            config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
+            
+            config.allowedPairwiseCiphers.set(PairwiseCipher.CCMP);
+            config.allowedPairwiseCiphers.set(PairwiseCipher.TKIP);
+
+            config.allowedProtocols.set(security.equals(WPA2) ? Protocol.RSN : Protocol.WPA);
+            
+            // 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(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, SUMMARY_NOT_IN_RANGE, true);
+
+            // Remembered comes second in this case
+            if (!primary && configured) {
+                buildSummary(sb, SUMMARY_REMEMBERED, true);
+            }
+            
+        } else {
+            if (configured && disabled) {
+                // The connection failure overrides all in this case
+                return SUMMARY_CONNECTION_FAILED;
+            }
+
+            // Remembered comes first in this case
+            if (!primary && configured) {
+                buildSummary(sb, 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 LOCALIZED_VERBOSE_WEP;
+        } else if (WPA.equals(security)) {
+            return LOCALIZED_VERBOSE_WPA;
+        } else if (WPA2.equals(security)) {
+            return LOCALIZED_VERBOSE_WPA2;
+        } else if (OPEN.equals(security)) {
+            return LOCALIZED_VERBOSE_OPEN;
+        } else {
+            return null;
+        }
+    }
+    
+    private void buildSummary(StringBuilder sb, String string, boolean autoLowerCaseFirstLetter) {
+        if (sb.length() == 0) {
+            sb.append(string);
+        } else {
+            sb.append(", ");
+            if (autoLowerCaseFirstLetter) {
+                // Convert first letter to lowercase
+                sb.append(Character.toLowerCase(string.charAt(0))).append(string, 1,
+                        string.length());
+            } else {
+                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
new file mode 100644
index 0000000..323d5c7
--- /dev/null
+++ b/src/com/android/settings/wifi/AdvancedSettings.java
@@ -0,0 +1,274 @@
+/*
+ * 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.ContentResolver;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.provider.Settings;
+import android.provider.Settings.System;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+public class AdvancedSettings extends PreferenceActivity
+        implements Preference.OnPreferenceChangeListener {
+
+    private static final String KEY_MAC_ADDRESS = "mac_address";
+    private static final String KEY_USE_STATIC_IP = "use_static_ip";
+    private static final String KEY_NUM_CHANNELS = "num_channels";
+    private static final String KEY_SLEEP_POLICY = "sleep_policy";
+    
+    private String[] mSettingNames = {
+            System.WIFI_STATIC_IP, System.WIFI_STATIC_GATEWAY, System.WIFI_STATIC_NETMASK,
+            System.WIFI_STATIC_DNS1, System.WIFI_STATIC_DNS2
+    };
+    
+    private String[] mPreferenceKeys = {
+            "ip_address", "gateway", "netmask", "dns1", "dns2"
+    };
+    
+    private CheckBoxPreference mUseStaticIpCheckBox;
+    
+    private static final int MENU_ITEM_SAVE = Menu.FIRST;
+    private static final int MENU_ITEM_CANCEL = Menu.FIRST + 1;
+    
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        addPreferencesFromResource(R.xml.wifi_advanced_settings);
+        
+        mUseStaticIpCheckBox = (CheckBoxPreference) findPreference(KEY_USE_STATIC_IP);
+
+        for (int i = 0; i < mPreferenceKeys.length; i++) {
+            Preference preference = findPreference(mPreferenceKeys[i]);
+            preference.setOnPreferenceChangeListener(this);
+        }
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        
+        updateUi();
+        initNumChannelsPreference();
+        initSleepPolicyPreference();
+        refreshMacAddress();
+    }
+
+    private void initNumChannelsPreference() {
+        ListPreference pref = (ListPreference) findPreference(KEY_NUM_CHANNELS);
+        pref.setOnPreferenceChangeListener(this);
+
+        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+        /*
+         * Generate the list of valid channel counts to show in the ListPreference.
+         * The values are numerical, so the only text to be localized is the
+         * "channel_word" resource.
+         */
+        int[] validChannelCounts = wifiManager.getValidChannelCounts();
+        if (validChannelCounts == null) {
+            Toast.makeText(this, R.string.wifi_setting_num_channels_error,
+                           Toast.LENGTH_SHORT).show();
+            pref.setEnabled(false);
+            return;
+        }
+        String[] entries = new String[validChannelCounts.length];
+        String[] entryValues = new String[validChannelCounts.length];
+
+        for (int i = 0; i < validChannelCounts.length; i++) {
+            entryValues[i] = String.valueOf(validChannelCounts[i]);
+            entries[i] = getString(R.string.wifi_setting_num_channels_channel_phrase,
+                                   validChannelCounts[i]);
+        }
+        pref.setEntries(entries);
+        pref.setEntryValues(entryValues);
+        pref.setEnabled(true);
+        int numChannels = wifiManager.getNumAllowedChannels();
+        if (numChannels >= 0) {
+            pref.setValue(String.valueOf(numChannels));
+        }
+    }
+    
+    private void initSleepPolicyPreference() {
+        ListPreference pref = (ListPreference) findPreference(KEY_SLEEP_POLICY);
+        pref.setOnPreferenceChangeListener(this);
+        int value = Settings.System.getInt(getContentResolver(),
+                Settings.System.WIFI_SLEEP_POLICY,Settings. System.WIFI_SLEEP_POLICY_DEFAULT);
+        pref.setValue(String.valueOf(value));
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+    
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            updateSettingsProvider();
+        }
+    
+        return super.onKeyDown(keyCode, event);
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        String key = preference.getKey();
+        if (key == null) return true;
+
+        if (key.equals(KEY_NUM_CHANNELS)) {
+            try {
+                int numChannels = Integer.parseInt((String) newValue);
+                WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+                if (!wifiManager.setNumAllowedChannels(numChannels)) {
+                    Toast.makeText(this, R.string.wifi_setting_num_channels_error,
+                            Toast.LENGTH_SHORT).show();
+                }
+            } catch (NumberFormatException e) {
+                Toast.makeText(this, R.string.wifi_setting_num_channels_error,
+                        Toast.LENGTH_SHORT).show();
+                return false;
+            }
+            
+        } else if (key.equals(KEY_SLEEP_POLICY)) {
+            try {
+                Settings.System.putInt(getContentResolver(),
+                        Settings.System.WIFI_SLEEP_POLICY, Integer.parseInt(((String) newValue)));
+            } catch (NumberFormatException e) {
+                Toast.makeText(this, R.string.wifi_setting_sleep_policy_error,
+                        Toast.LENGTH_SHORT).show();
+                return false;
+            }
+                
+        } else {
+            String value = (String) newValue;
+            
+            if (!isIpAddress(value)) {
+                Toast.makeText(this, R.string.wifi_ip_settings_invalid_ip, Toast.LENGTH_LONG).show();
+                return false;
+            }
+            
+            preference.setSummary(value);
+        }
+        
+        return true;
+    }
+
+    private boolean isIpAddress(String value) {
+        
+        int start = 0;
+        int end = value.indexOf('.');
+        int numBlocks = 0;
+        
+        while (start < value.length()) {
+            
+            if (end == -1) {
+                end = value.length();
+            }
+
+            try {
+                int block = Integer.parseInt(value.substring(start, end));
+                if ((block > 255) || (block < 0)) {
+                    return false;
+                }
+            } catch (NumberFormatException e) {
+                return false;
+            }
+            
+            numBlocks++;
+            
+            start = end + 1;
+            end = value.indexOf('.', start);
+        }
+        
+        return numBlocks == 4;
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        
+        menu.add(0, MENU_ITEM_SAVE, 0, R.string.wifi_ip_settings_menu_save)
+                .setIcon(android.R.drawable.ic_menu_save);
+
+        menu.add(0, MENU_ITEM_CANCEL, 0, R.string.wifi_ip_settings_menu_cancel)
+                .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+
+        switch (item.getItemId()) {
+        
+            case MENU_ITEM_SAVE:
+                updateSettingsProvider();
+                finish();
+                return true;
+                
+            case MENU_ITEM_CANCEL:
+                finish();
+                return true;
+        }
+        
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void updateUi() {
+        ContentResolver contentResolver = getContentResolver();
+        
+        mUseStaticIpCheckBox.setChecked(System.getInt(contentResolver,
+                System.WIFI_USE_STATIC_IP, 0) != 0);
+        
+        for (int i = 0; i < mSettingNames.length; i++) {
+            EditTextPreference preference = (EditTextPreference) findPreference(mPreferenceKeys[i]);
+            String settingValue = System.getString(contentResolver, mSettingNames[i]);
+            preference.setText(settingValue);
+            preference.setSummary(settingValue);
+        }
+    }
+    
+    private void updateSettingsProvider() {
+        ContentResolver contentResolver = getContentResolver();
+
+        System.putInt(contentResolver, System.WIFI_USE_STATIC_IP,
+                mUseStaticIpCheckBox.isChecked() ? 1 : 0);
+        
+        for (int i = 0; i < mSettingNames.length; i++) {
+            EditTextPreference preference = (EditTextPreference) findPreference(mPreferenceKeys[i]);
+            System.putString(contentResolver, mSettingNames[i], preference.getText());
+        }
+    }
+    
+    private void refreshMacAddress() {
+        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+
+        Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS);
+        String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
+        wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress 
+                : getString(R.string.status_unavailable));
+    }
+    
+}
diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java
new file mode 100644
index 0000000..88cfe06
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiEnabler.java
@@ -0,0 +1,188 @@
+/*
+ * 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_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 android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiManager;
+import android.preference.Preference;
+import android.preference.CheckBoxPreference;
+import android.text.TextUtils;
+import android.util.Config;
+import android.util.Log;
+
+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 CharSequence mOriginalSummary;
+    
+    private final IntentFilter mWifiStateFilter;
+    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, 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));
+            }
+        }
+    };
+    
+    public WifiEnabler(Context context, WifiManager wifiManager,
+            CheckBoxPreference wifiCheckBoxPreference) {
+        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);
+    }
+
+    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);
+    }
+    
+    public void pause() {
+        mContext.unregisterReceiver(mWifiStateReceiver);
+        mWifiCheckBoxPref.setOnPreferenceChangeListener(null);
+    }
+    
+    public boolean onPreferenceChange(Preference preference, Object value) {
+        // Turn on/off Wi-Fi
+        setWifiEnabled((Boolean) value);
+        
+        // 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(isEnabledByDependency());
+            
+        } 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 boolean isEnabledByDependency() {
+        Preference dep = getDependencyPreference();
+        if (dep == null) {
+            return true;
+        }
+        
+        return !dep.shouldDisableDependents();
+    }
+    
+    private Preference getDependencyPreference() {
+        String depKey = mWifiCheckBoxPref.getDependency();
+        if (TextUtils.isEmpty(depKey)) {
+            return null;
+        }
+        
+        return mWifiCheckBoxPref.getPreferenceManager().findPreference(depKey);
+    }
+    
+    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";
+            default:
+                return "Some other state!";    
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/WifiLayer.java b/src/com/android/settings/wifi/WifiLayer.java
new file mode 100644
index 0000000..b0857d2
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiLayer.java
@@ -0,0 +1,1302 @@
+/*
+ * 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;
+        }
+        
+        /*
+         * 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.startScan()) {
+            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.
+             */
+            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.
+             */
+            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)
+                            || AccessPointState.isEnterprise(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
new file mode 100644
index 0000000..d2683c0
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -0,0 +1,438 @@
+/*
+ * 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.ProgressCategory;
+import com.android.settings.R;
+
+import android.app.Dialog;
+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.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.ContextMenu;
+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 java.util.Set;
+import java.util.WeakHashMap;
+
+/**
+ * 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_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;
+
+    private static final int MENU_ID_SCAN = Menu.FIRST; 
+    private static final int MENU_ID_ADVANCED = Menu.FIRST + 1; 
+    
+    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 ProgressCategory mApCategory;
+    private CheckBoxPreference mWifiEnabled;
+    private WifiEnabler mWifiEnabler;
+    private CheckBoxPreference mOpenNetworkNotificationsEnabled; 
+    private Preference mAddOtherNetwork;
+    
+    private WeakHashMap<AccessPointState, AccessPointPreference> mAps;
+    
+    //============================
+    // Wifi member variables
+    //============================
+    
+    private WifiLayer mWifiLayer;
+        
+    //============================
+    // Activity lifecycle
+    //============================
+    
+    public WifiSettings() {
+        mAps = new WeakHashMap<AccessPointState, AccessPointPreference>();
+        mWifiLayer = new WifiLayer(this, this);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        onCreatePreferences();
+        mWifiLayer.onCreate();
+
+        onCreatedWifi();
+        mWifiLayer.onCreatedCallback();
+    }
+    
+    /**
+     * Shouldn't have any dependency on the wifi layer.
+     */
+    private void onCreatePreferences() {
+        addPreferencesFromResource(R.xml.wifi_settings);
+        
+        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);
+        
+        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);        
+        
+        mAddOtherNetwork = preferenceScreen.findPreference(KEY_ADD_OTHER_NETWORK);
+        
+        registerForContextMenu(getListView());
+    }
+
+    private void onCreatedWifi() {
+    }
+    
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mWifiLayer.onResume();
+        mWifiEnabler.resume();
+    }
+    
+    @Override
+    protected void onPause() {
+        super.onPause();
+        mWifiLayer.onPause();
+        mWifiEnabler.pause();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        
+        if (mDialog != null) {
+            mDialog.dismiss();
+        }
+    }
+
+    @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);
+        
+        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;
+        }
+    }
+
+    @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);
+            }
+        }
+    }
+
+    @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);
+        showDialog(dialog);
+    }
+    
+    public void showAccessPointDialog(AccessPointState state, int mode) {
+        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
+        if (mDialog != null) {
+            mDialog.dismiss();
+        }
+        
+        mDialog = dialog;
+        dialog.setOnDismissListener(this);
+        if (dialog != null) {
+            dialog.show();
+        }
+    }
+    
+    //============================
+    // Wifi callbacks
+    //============================
+
+    public void onError(int messageResId) {
+        Toast.makeText(this, messageResId, Toast.LENGTH_LONG).show();
+    }
+
+    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
+            return;
+        }
+        
+        showAccessPointDialog(ap, AccessPointDialog.MODE_RETRY_PASSWORD);
+    }
+    
+}
diff --git a/src/com/android/settings/wifi/WifiStatus.java b/src/com/android/settings/wifi/WifiStatus.java
new file mode 100644
index 0000000..d4b6431
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiStatus.java
@@ -0,0 +1,152 @@
+/*
+ * 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.WifiInfo;
+import android.text.TextUtils;
+
+public class WifiStatus {
+
+    // e.g., "Connecting"
+    public static String sScanning;
+    public static String sConnecting;
+    public static String sAuthenticating;
+    public static String sObtainingIp;
+    public static String sConnected;
+    public static String sDisconnecting;
+    public static String sDisconnected;
+    public static String sFailed;    
+
+    // e.g., "Connecting to %1$s"
+    public static String sScanningFragment;
+    public static String sConnectingFragment;
+    public static String sAuthenticatingFragment;
+    public static String sObtainingIpFragment;
+    public static String sConnectedFragment;
+    public static String sDisconnectingFragment;
+    public static String sDisconnectedFragment;
+    public static String sFailedFragment;    
+
+    private static void fillStrings(Context context) {
+        sScanning = context.getString(R.string.status_scanning);
+        sConnecting = context.getString(R.string.status_connecting);
+        sAuthenticating = context.getString(R.string.status_authenticating);
+        sObtainingIp = context.getString(R.string.status_obtaining_ip);
+        sConnected = context.getString(R.string.status_connected);
+        sDisconnecting = context.getString(R.string.status_disconnecting);
+        sDisconnected = context.getString(R.string.status_disconnected);
+        sFailed = context.getString(R.string.status_failed);
+
+        sScanningFragment = context.getString(R.string.fragment_status_scanning);
+        sConnectingFragment = context.getString(R.string.fragment_status_connecting);
+        sAuthenticatingFragment = context.getString(R.string.fragment_status_authenticating);
+        sObtainingIpFragment = context.getString(R.string.fragment_status_obtaining_ip);
+        sConnectedFragment = context.getString(R.string.fragment_status_connected);
+        sDisconnectingFragment = context.getString(R.string.fragment_status_disconnecting);
+        sDisconnectedFragment = context.getString(R.string.fragment_status_disconnected);
+        sFailedFragment = context.getString(R.string.fragment_status_failed);
+    }
+    
+    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) {
+        
+        if (sScanning == null) {
+            fillStrings(context);
+        }
+        
+        switch (detailedState) {
+            case AUTHENTICATING:
+                return sAuthenticating;
+            case CONNECTED:
+                return sConnected;
+            case CONNECTING:
+                return sConnecting;
+            case DISCONNECTED:
+                return sDisconnected;
+            case DISCONNECTING:
+                return sDisconnecting;
+            case FAILED:
+                return sFailed;
+            case OBTAINING_IPADDR:
+                return sObtainingIp;
+            case SCANNING:
+                return sScanning;
+            default:
+                return null;
+        }
+    }
+    
+    public static String getPrintableFragment(Context context,
+            NetworkInfo.DetailedState detailedState, String apName) {
+        
+        if (sScanningFragment == null) {
+            fillStrings(context);
+        }
+
+        String fragment = null;
+        switch (detailedState) {
+            case AUTHENTICATING:
+                fragment = sAuthenticatingFragment;
+                break;
+            case CONNECTED:
+                fragment = sConnectedFragment;
+                break;
+            case CONNECTING:
+                fragment = sConnectingFragment;
+                break;
+            case DISCONNECTED:
+                fragment = sDisconnectedFragment;
+                break;
+            case DISCONNECTING:
+                fragment = sDisconnectingFragment;
+                break;
+            case FAILED:
+                fragment = sFailedFragment;
+                break;
+            case OBTAINING_IPADDR:
+                fragment = sObtainingIpFragment;
+                break;
+            case SCANNING:
+                fragment = sScanningFragment;
+                break;
+        }
+        
+        return String.format(fragment, apName);
+    }
+    
+}
diff --git a/tests/Android.mk b/tests/Android.mk
new file mode 100644
index 0000000..f54aeee
--- /dev/null
+++ b/tests/Android.mk
@@ -0,0 +1,17 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+LOCAL_CERTIFICATE := platform
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := SettingsTests
+
+LOCAL_INSTRUMENTATION_FOR := Settings
+
+include $(BUILD_PACKAGE)
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
new file mode 100644
index 0000000..cf2e03c
--- /dev/null
+++ b/tests/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.settings.tests">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="SettingsLaunchPerformance"
+        android:targetPackage="com.android.settings"
+        android:label="Settings Launch Performance">
+    </instrumentation>
+
+</manifest> 
diff --git a/tests/src/com/android/settings/SettingsLaunchPerformance.java b/tests/src/com/android/settings/SettingsLaunchPerformance.java
new file mode 100644
index 0000000..05154e2
--- /dev/null
+++ b/tests/src/com/android/settings/SettingsLaunchPerformance.java
@@ -0,0 +1,53 @@
+/*
+ * 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.tests;
+
+import android.app.Activity;
+import android.test.LaunchPerformanceBase;
+import android.os.Bundle;
+
+import java.util.Map;
+
+/**
+ * Instrumentation class for Settings launch performance testing.
+ */
+public class SettingsLaunchPerformance extends LaunchPerformanceBase {
+ 
+    public static final String LOG_TAG = "SettingsLaunchPerformance";
+
+    public SettingsLaunchPerformance() {
+        super();
+    }
+
+    @Override
+    public void onCreate(Bundle arguments) {
+        super.onCreate(arguments);
+
+        mIntent.setClassName(getTargetContext(), "com.android.settings.Settings");
+        start();
+    }
+
+    /**
+     * Calls LaunchApp and finish.
+     */
+    @Override
+    public void onStart() {
+        super.onStart();
+        LaunchApp();
+        finish(Activity.RESULT_OK, mResults);
+    }
+}
