Merge "Add tablet pattern layout to avoid outsize patterns"
diff --git a/Android.mk b/Android.mk
index 8b6532c..023e0c0 100644
--- a/Android.mk
+++ b/Android.mk
@@ -21,4 +21,6 @@
 include $(BUILD_PACKAGE)
 
 # Use the folloing include to make our test apk.
+ifeq (,$(ONE_SHOT_MAKEFILE))
 include $(call all-makefiles-under,$(LOCAL_PATH))
+endif
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2794d9d..b40cfb2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1665,16 +1665,6 @@
             </intent-filter>
         </activity>
 
-       <activity android:name=".PairNfcDevice"
-                android:taskAffinity="com.android.settings"
-                android:parentActivityName="Settings$SecuritySettingsActivity"
-                android:launchMode="singleTask">
-            <intent-filter>
-                <action android:name="android.settings.PAIR_NFC_DEVICE" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
         <activity android:name="Settings$NotificationAccessSettingsActivity"
                   android:label="@string/manage_notification_access"
                   android:taskAffinity=""
@@ -1722,6 +1712,53 @@
                 android:resource="@id/notification_settings" />
         </activity>
 
+        <activity android:name="Settings$NotificationDisplaySettingsActivity"
+                android:label="@string/notification_display_settings"
+                android:exported="true"
+                android:taskAffinity=""
+                android:excludeFromRecents="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.ACTION_NOTIFICATION_DISPLAY_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.notification.NotificationDisplaySettings" />
+            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
+                android:resource="@id/notification_settings" />
+        </activity>
+
+        <activity android:name="Settings$TouchSoundSettingsActivity"
+                android:label="@string/touch_sound_settings"
+                android:exported="true"
+                android:taskAffinity=""
+                android:excludeFromRecents="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.ACTION_TOUCH_SOUND_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.notification.TouchSoundSettings" />
+            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
+                android:resource="@id/notification_settings" />
+        </activity>
+
+        <activity android:name="Settings$AppNotificationSettingsActivity"
+                android:label="@string/app_notifications_title"
+                android:exported="true"
+                android:taskAffinity=""
+                android:excludeFromRecents="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.ACTION_APP_NOTIFICATION_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.notification.AppNotificationSettings" />
+            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
+                android:resource="@id/notification_settings" />
+        </activity>
 
         <!-- Show regulatory info (from settings item or dialing "*#07#") -->
         <activity android:name="RegulatoryInfoDisplayActivity"
diff --git a/proguard.flags b/proguard.flags
index 211a5a4..694ab29 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -12,8 +12,8 @@
 -keep class com.android.settings.accounts.*
 -keep class com.android.settings.fuelgauge.*
 -keep class com.android.settings.users.*
--keep class com.android.settings.NotificationStation
 -keep class com.android.settings.nfc.*
+-keep class com.android.settings.notification.*
 
 # Keep click responders
 -keepclassmembers class com.android.settings.inputmethod.UserDictionaryAddWordActivity {
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png
index a8fde41..1fa510f 100644
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ b/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png
index c5ea9b6..21f60f4 100644
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png
+++ b/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png
index 3927f1b..24719b1 100644
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png
+++ b/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png
index 649bb2a..cf9eb4f 100644
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png
+++ b/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png
index c77db7b..333ca53 100644
--- a/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png
+++ b/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png
index dc0e6c1..1f0c444 100644
--- a/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png
+++ b/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_cellphone.png b/res/drawable-hdpi/ic_bt_cellphone.png
index a6a6448..6e29d23 100644
--- a/res/drawable-hdpi/ic_bt_cellphone.png
+++ b/res/drawable-hdpi/ic_bt_cellphone.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_config.png b/res/drawable-hdpi/ic_bt_config.png
index 47b4ba2..939a14d 100644
--- a/res/drawable-hdpi/ic_bt_config.png
+++ b/res/drawable-hdpi/ic_bt_config.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_headphones_a2dp.png b/res/drawable-hdpi/ic_bt_headphones_a2dp.png
index 7e0f73b..6110e9e 100644
--- a/res/drawable-hdpi/ic_bt_headphones_a2dp.png
+++ b/res/drawable-hdpi/ic_bt_headphones_a2dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_headset_hfp.png b/res/drawable-hdpi/ic_bt_headset_hfp.png
index a32379e..6cca225 100644
--- a/res/drawable-hdpi/ic_bt_headset_hfp.png
+++ b/res/drawable-hdpi/ic_bt_headset_hfp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_imaging.png b/res/drawable-hdpi/ic_bt_imaging.png
index 66d7538..62624ee 100644
--- a/res/drawable-hdpi/ic_bt_imaging.png
+++ b/res/drawable-hdpi/ic_bt_imaging.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_laptop.png b/res/drawable-hdpi/ic_bt_laptop.png
index 1f9a1e8..42c3dc5 100644
--- a/res/drawable-hdpi/ic_bt_laptop.png
+++ b/res/drawable-hdpi/ic_bt_laptop.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_misc_hid.png b/res/drawable-hdpi/ic_bt_misc_hid.png
index 1d75d6c..6445f2a 100644
--- a/res/drawable-hdpi/ic_bt_misc_hid.png
+++ b/res/drawable-hdpi/ic_bt_misc_hid.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_pointing_hid.png b/res/drawable-hdpi/ic_bt_pointing_hid.png
index 4755d22..2fcc3b0 100644
--- a/res/drawable-hdpi/ic_bt_pointing_hid.png
+++ b/res/drawable-hdpi/ic_bt_pointing_hid.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_lockscreen_ime.png b/res/drawable-hdpi/ic_lockscreen_ime.png
index 29a7989..70d35bf 100644
--- a/res/drawable-hdpi/ic_lockscreen_ime.png
+++ b/res/drawable-hdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_add_dark.png b/res/drawable-hdpi/ic_menu_add_dark.png
index b45001e..40a26b1 100644
--- a/res/drawable-hdpi/ic_menu_add_dark.png
+++ b/res/drawable-hdpi/ic_menu_add_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_delete_holo_dark.png b/res/drawable-hdpi/ic_menu_delete_holo_dark.png
index 92c0954..e25b44f 100644
--- a/res/drawable-hdpi/ic_menu_delete_holo_dark.png
+++ b/res/drawable-hdpi/ic_menu_delete_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_network_signal_4.png b/res/drawable-hdpi/ic_network_signal_4.png
index f04616d..0588950 100644
--- a/res/drawable-hdpi/ic_network_signal_4.png
+++ b/res/drawable-hdpi/ic_network_signal_4.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_about.png b/res/drawable-hdpi/ic_settings_about.png
old mode 100755
new mode 100644
index ace754b..f4596ed
--- a/res/drawable-hdpi/ic_settings_about.png
+++ b/res/drawable-hdpi/ic_settings_about.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_accessibility.png b/res/drawable-hdpi/ic_settings_accessibility.png
old mode 100755
new mode 100644
index 849c19c..202ec9d
--- a/res/drawable-hdpi/ic_settings_accessibility.png
+++ b/res/drawable-hdpi/ic_settings_accessibility.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_applications.png b/res/drawable-hdpi/ic_settings_applications.png
index 4d3f128..627b7cb 100644
--- a/res/drawable-hdpi/ic_settings_applications.png
+++ b/res/drawable-hdpi/ic_settings_applications.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_backup.png b/res/drawable-hdpi/ic_settings_backup.png
index ef764c7..c0662da 100644
--- a/res/drawable-hdpi/ic_settings_backup.png
+++ b/res/drawable-hdpi/ic_settings_backup.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_battery.png b/res/drawable-hdpi/ic_settings_battery.png
index fe57826..d7f3d18 100644
--- a/res/drawable-hdpi/ic_settings_battery.png
+++ b/res/drawable-hdpi/ic_settings_battery.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_bluetooth2.png b/res/drawable-hdpi/ic_settings_bluetooth2.png
index 454b552..9afe435 100644
--- a/res/drawable-hdpi/ic_settings_bluetooth2.png
+++ b/res/drawable-hdpi/ic_settings_bluetooth2.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_date_time.png b/res/drawable-hdpi/ic_settings_date_time.png
index 2b61b22..5a84c33 100644
--- a/res/drawable-hdpi/ic_settings_date_time.png
+++ b/res/drawable-hdpi/ic_settings_date_time.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_dock.png b/res/drawable-hdpi/ic_settings_dock.png
index 97b1694..bdeaee7 100644
--- a/res/drawable-hdpi/ic_settings_dock.png
+++ b/res/drawable-hdpi/ic_settings_dock.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_home.png b/res/drawable-hdpi/ic_settings_home.png
index 1333b3a..6a0564a 100644
--- a/res/drawable-hdpi/ic_settings_home.png
+++ b/res/drawable-hdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_language.png b/res/drawable-hdpi/ic_settings_language.png
index 5332469..bf641aa 100644
--- a/res/drawable-hdpi/ic_settings_language.png
+++ b/res/drawable-hdpi/ic_settings_language.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_location.png b/res/drawable-hdpi/ic_settings_location.png
index 98cfb86..968253c 100644
--- a/res/drawable-hdpi/ic_settings_location.png
+++ b/res/drawable-hdpi/ic_settings_location.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_multiuser.png b/res/drawable-hdpi/ic_settings_multiuser.png
index ae48c4d..c1a6e63 100644
--- a/res/drawable-hdpi/ic_settings_multiuser.png
+++ b/res/drawable-hdpi/ic_settings_multiuser.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_notifications.png b/res/drawable-hdpi/ic_settings_notifications.png
index c064620..6dd91bb 100644
--- a/res/drawable-hdpi/ic_settings_notifications.png
+++ b/res/drawable-hdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_security.png b/res/drawable-hdpi/ic_settings_security.png
index c779437..abbf3fa 100644
--- a/res/drawable-hdpi/ic_settings_security.png
+++ b/res/drawable-hdpi/ic_settings_security.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_sound.png b/res/drawable-hdpi/ic_settings_sound.png
index 8400123..dec290a 100644
--- a/res/drawable-hdpi/ic_settings_sound.png
+++ b/res/drawable-hdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_storage.png b/res/drawable-hdpi/ic_settings_storage.png
index 59c7042..5444eeb 100644
--- a/res/drawable-hdpi/ic_settings_storage.png
+++ b/res/drawable-hdpi/ic_settings_storage.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_sync.png b/res/drawable-hdpi/ic_settings_sync.png
index 333ca53..96254d6 100644
--- a/res/drawable-hdpi/ic_settings_sync.png
+++ b/res/drawable-hdpi/ic_settings_sync.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_settings_wireless.png b/res/drawable-hdpi/ic_settings_wireless.png
index 1f0c444..8a6c8de 100644
--- a/res/drawable-hdpi/ic_settings_wireless.png
+++ b/res/drawable-hdpi/ic_settings_wireless.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_sysbar_quicksettings.png b/res/drawable-hdpi/ic_sysbar_quicksettings.png
index 939a14d..a204936 100644
--- a/res/drawable-hdpi/ic_sysbar_quicksettings.png
+++ b/res/drawable-hdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_unselected_download.png b/res/drawable-hdpi/ic_tab_unselected_download.png
index 39d2938..1e71efb 100644
--- a/res/drawable-hdpi/ic_tab_unselected_download.png
+++ b/res/drawable-hdpi/ic_tab_unselected_download.png
Binary files differ
diff --git a/res/drawable-hdpi/no_ring_detected.png b/res/drawable-hdpi/no_ring_detected.png
deleted file mode 100644
index 2adb7bf..0000000
--- a/res/drawable-hdpi/no_ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ring_detected.png b/res/drawable-hdpi/ring_detected.png
deleted file mode 100644
index 5b1836b..0000000
--- a/res/drawable-hdpi/ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ring_paired.png b/res/drawable-hdpi/ring_paired.png
deleted file mode 100644
index 065e752..0000000
--- a/res/drawable-hdpi/ring_paired.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_settings_applications.png b/res/drawable-ldrtl-hdpi/ic_settings_applications.png
deleted file mode 100644
index 1cb9c8d..0000000
--- a/res/drawable-ldrtl-hdpi/ic_settings_applications.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_settings_language.png b/res/drawable-ldrtl-hdpi/ic_settings_language.png
deleted file mode 100755
index bbd2c1e..0000000
--- a/res/drawable-ldrtl-hdpi/ic_settings_language.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_settings_multiuser.png b/res/drawable-ldrtl-hdpi/ic_settings_multiuser.png
deleted file mode 100644
index 7d6eff9..0000000
--- a/res/drawable-ldrtl-hdpi/ic_settings_multiuser.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_settings_applications.png b/res/drawable-ldrtl-mdpi/ic_settings_applications.png
deleted file mode 100644
index 740e709..0000000
--- a/res/drawable-ldrtl-mdpi/ic_settings_applications.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_settings_language.png b/res/drawable-ldrtl-mdpi/ic_settings_language.png
deleted file mode 100644
index bb97a45..0000000
--- a/res/drawable-ldrtl-mdpi/ic_settings_language.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_settings_multiuser.png b/res/drawable-ldrtl-mdpi/ic_settings_multiuser.png
deleted file mode 100644
index f538805..0000000
--- a/res/drawable-ldrtl-mdpi/ic_settings_multiuser.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_settings_applications.png b/res/drawable-ldrtl-xhdpi/ic_settings_applications.png
deleted file mode 100644
index fcd6ab1..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_settings_applications.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_settings_language.png b/res/drawable-ldrtl-xhdpi/ic_settings_language.png
deleted file mode 100644
index 3e0f3df..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_settings_language.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_settings_multiuser.png b/res/drawable-ldrtl-xhdpi/ic_settings_multiuser.png
deleted file mode 100644
index a3c797c..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_settings_multiuser.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png
index 8fe0ac4..cee898b 100644
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ b/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png
index bb98273..d35af9a 100644
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png
+++ b/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png
index 5ccec31..c794f76 100644
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png
+++ b/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png
index 72b62e7..cc847ad 100644
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png
+++ b/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png
index 35f4558..5570bad 100644
--- a/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png
+++ b/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png
index a008f8a..7acea3a 100644
--- a/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png
+++ b/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_cellphone.png b/res/drawable-mdpi/ic_bt_cellphone.png
index 2286bb4..1fa0a3d 100644
--- a/res/drawable-mdpi/ic_bt_cellphone.png
+++ b/res/drawable-mdpi/ic_bt_cellphone.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_config.png b/res/drawable-mdpi/ic_bt_config.png
index 7928104..c2d7876 100644
--- a/res/drawable-mdpi/ic_bt_config.png
+++ b/res/drawable-mdpi/ic_bt_config.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_headphones_a2dp.png b/res/drawable-mdpi/ic_bt_headphones_a2dp.png
index 09a811e..175bd78 100644
--- a/res/drawable-mdpi/ic_bt_headphones_a2dp.png
+++ b/res/drawable-mdpi/ic_bt_headphones_a2dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_headset_hfp.png b/res/drawable-mdpi/ic_bt_headset_hfp.png
index 95d776a..05b27e8 100644
--- a/res/drawable-mdpi/ic_bt_headset_hfp.png
+++ b/res/drawable-mdpi/ic_bt_headset_hfp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_imaging.png b/res/drawable-mdpi/ic_bt_imaging.png
index 64bc9f1..76234a6 100644
--- a/res/drawable-mdpi/ic_bt_imaging.png
+++ b/res/drawable-mdpi/ic_bt_imaging.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_laptop.png b/res/drawable-mdpi/ic_bt_laptop.png
index b07a7d0..792e8df 100644
--- a/res/drawable-mdpi/ic_bt_laptop.png
+++ b/res/drawable-mdpi/ic_bt_laptop.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_misc_hid.png b/res/drawable-mdpi/ic_bt_misc_hid.png
index d4a9eda..6e9f8ae 100644
--- a/res/drawable-mdpi/ic_bt_misc_hid.png
+++ b/res/drawable-mdpi/ic_bt_misc_hid.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_pointing_hid.png b/res/drawable-mdpi/ic_bt_pointing_hid.png
index cdbb182..539d77f 100644
--- a/res/drawable-mdpi/ic_bt_pointing_hid.png
+++ b/res/drawable-mdpi/ic_bt_pointing_hid.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_lockscreen_ime.png b/res/drawable-mdpi/ic_lockscreen_ime.png
index b27e059..3216776 100644
--- a/res/drawable-mdpi/ic_lockscreen_ime.png
+++ b/res/drawable-mdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_add_dark.png b/res/drawable-mdpi/ic_menu_add_dark.png
index e6add2b..d7aa774 100644
--- a/res/drawable-mdpi/ic_menu_add_dark.png
+++ b/res/drawable-mdpi/ic_menu_add_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_delete_holo_dark.png b/res/drawable-mdpi/ic_menu_delete_holo_dark.png
index db5e868..b0517ad 100644
--- a/res/drawable-mdpi/ic_menu_delete_holo_dark.png
+++ b/res/drawable-mdpi/ic_menu_delete_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_network_signal_4.png b/res/drawable-mdpi/ic_network_signal_4.png
index a7d0d8b..43cdf26 100644
--- a/res/drawable-mdpi/ic_network_signal_4.png
+++ b/res/drawable-mdpi/ic_network_signal_4.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_about.png b/res/drawable-mdpi/ic_settings_about.png
index b3b61fb..8c5206e 100644
--- a/res/drawable-mdpi/ic_settings_about.png
+++ b/res/drawable-mdpi/ic_settings_about.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_accessibility.png b/res/drawable-mdpi/ic_settings_accessibility.png
old mode 100755
new mode 100644
index ba86d3d..d0229f6
--- a/res/drawable-mdpi/ic_settings_accessibility.png
+++ b/res/drawable-mdpi/ic_settings_accessibility.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_applications.png b/res/drawable-mdpi/ic_settings_applications.png
index 33e23b3..60ebf38 100644
--- a/res/drawable-mdpi/ic_settings_applications.png
+++ b/res/drawable-mdpi/ic_settings_applications.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_backup.png b/res/drawable-mdpi/ic_settings_backup.png
index b012d97..756ccae 100644
--- a/res/drawable-mdpi/ic_settings_backup.png
+++ b/res/drawable-mdpi/ic_settings_backup.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_battery.png b/res/drawable-mdpi/ic_settings_battery.png
index 6c71cc4..cca14ff 100644
--- a/res/drawable-mdpi/ic_settings_battery.png
+++ b/res/drawable-mdpi/ic_settings_battery.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_bluetooth2.png b/res/drawable-mdpi/ic_settings_bluetooth2.png
index b05656f..f556bb4 100644
--- a/res/drawable-mdpi/ic_settings_bluetooth2.png
+++ b/res/drawable-mdpi/ic_settings_bluetooth2.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_date_time.png b/res/drawable-mdpi/ic_settings_date_time.png
index 0833699..80be678 100644
--- a/res/drawable-mdpi/ic_settings_date_time.png
+++ b/res/drawable-mdpi/ic_settings_date_time.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_dock.png b/res/drawable-mdpi/ic_settings_dock.png
index 4120f20..62ccb3c 100644
--- a/res/drawable-mdpi/ic_settings_dock.png
+++ b/res/drawable-mdpi/ic_settings_dock.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_home.png b/res/drawable-mdpi/ic_settings_home.png
index 06d96d9..b18ca3e 100644
--- a/res/drawable-mdpi/ic_settings_home.png
+++ b/res/drawable-mdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_language.png b/res/drawable-mdpi/ic_settings_language.png
index af42f4a..a6dba3c 100644
--- a/res/drawable-mdpi/ic_settings_language.png
+++ b/res/drawable-mdpi/ic_settings_language.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_location.png b/res/drawable-mdpi/ic_settings_location.png
index 2853c7f..de70e6f 100644
--- a/res/drawable-mdpi/ic_settings_location.png
+++ b/res/drawable-mdpi/ic_settings_location.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_multiuser.png b/res/drawable-mdpi/ic_settings_multiuser.png
index e1ff083..d6f8501 100644
--- a/res/drawable-mdpi/ic_settings_multiuser.png
+++ b/res/drawable-mdpi/ic_settings_multiuser.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_notifications.png b/res/drawable-mdpi/ic_settings_notifications.png
index 35e23e3..407ec8c 100644
--- a/res/drawable-mdpi/ic_settings_notifications.png
+++ b/res/drawable-mdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_security.png b/res/drawable-mdpi/ic_settings_security.png
index 98ba690..cd65dd2 100644
--- a/res/drawable-mdpi/ic_settings_security.png
+++ b/res/drawable-mdpi/ic_settings_security.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_sound.png b/res/drawable-mdpi/ic_settings_sound.png
index 2db9413..17b2cc4 100644
--- a/res/drawable-mdpi/ic_settings_sound.png
+++ b/res/drawable-mdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_storage.png b/res/drawable-mdpi/ic_settings_storage.png
index d44f91a..ff6af99 100644
--- a/res/drawable-mdpi/ic_settings_storage.png
+++ b/res/drawable-mdpi/ic_settings_storage.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_sync.png b/res/drawable-mdpi/ic_settings_sync.png
index 5570bad..fbd03ba 100644
--- a/res/drawable-mdpi/ic_settings_sync.png
+++ b/res/drawable-mdpi/ic_settings_sync.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_wireless.png b/res/drawable-mdpi/ic_settings_wireless.png
index 7acea3a..8ddaa6a 100644
--- a/res/drawable-mdpi/ic_settings_wireless.png
+++ b/res/drawable-mdpi/ic_settings_wireless.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sysbar_quicksettings.png b/res/drawable-mdpi/ic_sysbar_quicksettings.png
index c2d7876..d266b39 100644
--- a/res/drawable-mdpi/ic_sysbar_quicksettings.png
+++ b/res/drawable-mdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_unselected_download.png b/res/drawable-mdpi/ic_tab_unselected_download.png
index 6d9faf1..59930fe 100644
--- a/res/drawable-mdpi/ic_tab_unselected_download.png
+++ b/res/drawable-mdpi/ic_tab_unselected_download.png
Binary files differ
diff --git a/res/drawable-mdpi/no_ring_detected.png b/res/drawable-mdpi/no_ring_detected.png
deleted file mode 100644
index 6d53477..0000000
--- a/res/drawable-mdpi/no_ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ring_detected.png b/res/drawable-mdpi/ring_detected.png
deleted file mode 100644
index 9dc0e9f..0000000
--- a/res/drawable-mdpi/ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ring_paired.png b/res/drawable-mdpi/ring_paired.png
deleted file mode 100644
index 70c8541..0000000
--- a/res/drawable-mdpi/ring_paired.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png
index 16d8fe3..d03e040 100644
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ b/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png
index f4dee45..9265a76 100644
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png
+++ b/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png
index cec10f7..be367f3 100644
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png
+++ b/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png
index 64117df..3682c67 100644
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png
+++ b/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png
index 9a7ea50..28cb714 100644
--- a/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png
+++ b/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png
index 9651f2b..dded3fd 100644
--- a/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png
+++ b/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_cellphone.png b/res/drawable-xhdpi/ic_bt_cellphone.png
index cd9ff60..4f381ba 100644
--- a/res/drawable-xhdpi/ic_bt_cellphone.png
+++ b/res/drawable-xhdpi/ic_bt_cellphone.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_config.png b/res/drawable-xhdpi/ic_bt_config.png
index 6754469..6fec792 100644
--- a/res/drawable-xhdpi/ic_bt_config.png
+++ b/res/drawable-xhdpi/ic_bt_config.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_headphones_a2dp.png b/res/drawable-xhdpi/ic_bt_headphones_a2dp.png
index 82fdf72..c67127d 100644
--- a/res/drawable-xhdpi/ic_bt_headphones_a2dp.png
+++ b/res/drawable-xhdpi/ic_bt_headphones_a2dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_headset_hfp.png b/res/drawable-xhdpi/ic_bt_headset_hfp.png
index 8793a31..d3b356b 100644
--- a/res/drawable-xhdpi/ic_bt_headset_hfp.png
+++ b/res/drawable-xhdpi/ic_bt_headset_hfp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_imaging.png b/res/drawable-xhdpi/ic_bt_imaging.png
index 5b0da65..9ea3b85 100644
--- a/res/drawable-xhdpi/ic_bt_imaging.png
+++ b/res/drawable-xhdpi/ic_bt_imaging.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_laptop.png b/res/drawable-xhdpi/ic_bt_laptop.png
index 25124bf..1c053c8 100644
--- a/res/drawable-xhdpi/ic_bt_laptop.png
+++ b/res/drawable-xhdpi/ic_bt_laptop.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_misc_hid.png b/res/drawable-xhdpi/ic_bt_misc_hid.png
index 06dfe48..2d38129 100644
--- a/res/drawable-xhdpi/ic_bt_misc_hid.png
+++ b/res/drawable-xhdpi/ic_bt_misc_hid.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_pointing_hid.png b/res/drawable-xhdpi/ic_bt_pointing_hid.png
index 7a724b0..d8b68eb 100644
--- a/res/drawable-xhdpi/ic_bt_pointing_hid.png
+++ b/res/drawable-xhdpi/ic_bt_pointing_hid.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_lockscreen_ime.png b/res/drawable-xhdpi/ic_lockscreen_ime.png
index a40ddeb..02cc3af 100644
--- a/res/drawable-xhdpi/ic_lockscreen_ime.png
+++ b/res/drawable-xhdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_add_dark.png b/res/drawable-xhdpi/ic_menu_add_dark.png
index 6e2e18a..2f00b96 100644
--- a/res/drawable-xhdpi/ic_menu_add_dark.png
+++ b/res/drawable-xhdpi/ic_menu_add_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_delete_holo_dark.png b/res/drawable-xhdpi/ic_menu_delete_holo_dark.png
index 9c31231..33010c6 100644
--- a/res/drawable-xhdpi/ic_menu_delete_holo_dark.png
+++ b/res/drawable-xhdpi/ic_menu_delete_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_network_signal_4.png b/res/drawable-xhdpi/ic_network_signal_4.png
index 5e2b009..304108f 100644
--- a/res/drawable-xhdpi/ic_network_signal_4.png
+++ b/res/drawable-xhdpi/ic_network_signal_4.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_about.png b/res/drawable-xhdpi/ic_settings_about.png
index 84c3cd1..188b362 100644
--- a/res/drawable-xhdpi/ic_settings_about.png
+++ b/res/drawable-xhdpi/ic_settings_about.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_accessibility.png b/res/drawable-xhdpi/ic_settings_accessibility.png
index 2fec7a3..297a08b 100644
--- a/res/drawable-xhdpi/ic_settings_accessibility.png
+++ b/res/drawable-xhdpi/ic_settings_accessibility.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_applications.png b/res/drawable-xhdpi/ic_settings_applications.png
index 8eda83f..f8122ba 100644
--- a/res/drawable-xhdpi/ic_settings_applications.png
+++ b/res/drawable-xhdpi/ic_settings_applications.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_backup.png b/res/drawable-xhdpi/ic_settings_backup.png
index 5ebb9fc..2a5b0d4 100644
--- a/res/drawable-xhdpi/ic_settings_backup.png
+++ b/res/drawable-xhdpi/ic_settings_backup.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_battery.png b/res/drawable-xhdpi/ic_settings_battery.png
index f7aa7a4..78f8a3f 100644
--- a/res/drawable-xhdpi/ic_settings_battery.png
+++ b/res/drawable-xhdpi/ic_settings_battery.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_bluetooth2.png b/res/drawable-xhdpi/ic_settings_bluetooth2.png
index 80a94ac..3767382 100644
--- a/res/drawable-xhdpi/ic_settings_bluetooth2.png
+++ b/res/drawable-xhdpi/ic_settings_bluetooth2.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_date_time.png b/res/drawable-xhdpi/ic_settings_date_time.png
index a8ddced..8a40de8 100644
--- a/res/drawable-xhdpi/ic_settings_date_time.png
+++ b/res/drawable-xhdpi/ic_settings_date_time.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_dock.png b/res/drawable-xhdpi/ic_settings_dock.png
index 578c81f..e7eb120 100644
--- a/res/drawable-xhdpi/ic_settings_dock.png
+++ b/res/drawable-xhdpi/ic_settings_dock.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_home.png b/res/drawable-xhdpi/ic_settings_home.png
index 837ec65..3cb118d 100644
--- a/res/drawable-xhdpi/ic_settings_home.png
+++ b/res/drawable-xhdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_language.png b/res/drawable-xhdpi/ic_settings_language.png
index cdc1e1e..24a1d3c 100644
--- a/res/drawable-xhdpi/ic_settings_language.png
+++ b/res/drawable-xhdpi/ic_settings_language.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_location.png b/res/drawable-xhdpi/ic_settings_location.png
index 5059c3f..cd2e7b5 100644
--- a/res/drawable-xhdpi/ic_settings_location.png
+++ b/res/drawable-xhdpi/ic_settings_location.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_multiuser.png b/res/drawable-xhdpi/ic_settings_multiuser.png
index b85ddf3..e1b3932 100644
--- a/res/drawable-xhdpi/ic_settings_multiuser.png
+++ b/res/drawable-xhdpi/ic_settings_multiuser.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_notifications.png b/res/drawable-xhdpi/ic_settings_notifications.png
index da0d626..a67930e 100644
--- a/res/drawable-xhdpi/ic_settings_notifications.png
+++ b/res/drawable-xhdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_security.png b/res/drawable-xhdpi/ic_settings_security.png
index 61947ea..5ead24e 100644
--- a/res/drawable-xhdpi/ic_settings_security.png
+++ b/res/drawable-xhdpi/ic_settings_security.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_sound.png b/res/drawable-xhdpi/ic_settings_sound.png
index 29cd34c..644e593 100644
--- a/res/drawable-xhdpi/ic_settings_sound.png
+++ b/res/drawable-xhdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_storage.png b/res/drawable-xhdpi/ic_settings_storage.png
index 0807c9f..51ded7e 100644
--- a/res/drawable-xhdpi/ic_settings_storage.png
+++ b/res/drawable-xhdpi/ic_settings_storage.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_sync.png b/res/drawable-xhdpi/ic_settings_sync.png
index 28cb714..50f3bf8 100644
--- a/res/drawable-xhdpi/ic_settings_sync.png
+++ b/res/drawable-xhdpi/ic_settings_sync.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_wireless.png b/res/drawable-xhdpi/ic_settings_wireless.png
index dded3fd..cc0fe15 100644
--- a/res/drawable-xhdpi/ic_settings_wireless.png
+++ b/res/drawable-xhdpi/ic_settings_wireless.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sysbar_quicksettings.png b/res/drawable-xhdpi/ic_sysbar_quicksettings.png
index 6fec792..46077be 100644
--- a/res/drawable-xhdpi/ic_sysbar_quicksettings.png
+++ b/res/drawable-xhdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_unselected_download.png b/res/drawable-xhdpi/ic_tab_unselected_download.png
index 8e76bbb..e8084c2 100644
--- a/res/drawable-xhdpi/ic_tab_unselected_download.png
+++ b/res/drawable-xhdpi/ic_tab_unselected_download.png
Binary files differ
diff --git a/res/drawable-xhdpi/no_ring_detected.png b/res/drawable-xhdpi/no_ring_detected.png
deleted file mode 100644
index a657afa..0000000
--- a/res/drawable-xhdpi/no_ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ring_detected.png b/res/drawable-xhdpi/ring_detected.png
deleted file mode 100644
index a6180b2..0000000
--- a/res/drawable-xhdpi/ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ring_paired.png b/res/drawable-xhdpi/ring_paired.png
deleted file mode 100644
index df77918..0000000
--- a/res/drawable-xhdpi/ring_paired.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png
index bb352cd..54eba96 100644
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png
index e5ab2a0..8f739aa 100644
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png
+++ b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png
index 0965b13..a16ee17 100644
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png
+++ b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png
index cb7c88a..e546f31 100644
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png
+++ b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png
index 88eb54b..498d9ad 100644
--- a/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png
+++ b/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png
index a8b4772..0f8d454 100644
--- a/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png
+++ b/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_cellphone.png b/res/drawable-xxhdpi/ic_bt_cellphone.png
index 3c546e5..7805b7a 100644
--- a/res/drawable-xxhdpi/ic_bt_cellphone.png
+++ b/res/drawable-xxhdpi/ic_bt_cellphone.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_config.png b/res/drawable-xxhdpi/ic_bt_config.png
new file mode 100644
index 0000000..fc3600e
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_bt_config.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png b/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png
index a9edd47..8127774 100644
--- a/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png
+++ b/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_headset_hfp.png b/res/drawable-xxhdpi/ic_bt_headset_hfp.png
index a4c98e7..84b8085 100644
--- a/res/drawable-xxhdpi/ic_bt_headset_hfp.png
+++ b/res/drawable-xxhdpi/ic_bt_headset_hfp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_imaging.png b/res/drawable-xxhdpi/ic_bt_imaging.png
index 9470510..a0058dc 100644
--- a/res/drawable-xxhdpi/ic_bt_imaging.png
+++ b/res/drawable-xxhdpi/ic_bt_imaging.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_laptop.png b/res/drawable-xxhdpi/ic_bt_laptop.png
index 04c3995..bca7145 100644
--- a/res/drawable-xxhdpi/ic_bt_laptop.png
+++ b/res/drawable-xxhdpi/ic_bt_laptop.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_misc_hid.png b/res/drawable-xxhdpi/ic_bt_misc_hid.png
index c78ca2b..289d6ac 100644
--- a/res/drawable-xxhdpi/ic_bt_misc_hid.png
+++ b/res/drawable-xxhdpi/ic_bt_misc_hid.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_pointing_hid.png b/res/drawable-xxhdpi/ic_bt_pointing_hid.png
index 49f14d0..e31ce2b 100644
--- a/res/drawable-xxhdpi/ic_bt_pointing_hid.png
+++ b/res/drawable-xxhdpi/ic_bt_pointing_hid.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_lockscreen_ime.png b/res/drawable-xxhdpi/ic_lockscreen_ime.png
new file mode 100644
index 0000000..f23b0e7
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_add_dark.png b/res/drawable-xxhdpi/ic_menu_add_dark.png
index 5b4923f..0ab6a40 100644
--- a/res/drawable-xxhdpi/ic_menu_add_dark.png
+++ b/res/drawable-xxhdpi/ic_menu_add_dark.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_delete_holo_dark.png b/res/drawable-xxhdpi/ic_menu_delete_holo_dark.png
new file mode 100644
index 0000000..6171b5a
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_menu_delete_holo_dark.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_network_signal_4.png b/res/drawable-xxhdpi/ic_network_signal_4.png
new file mode 100644
index 0000000..dafe7c4
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_network_signal_4.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_about.png b/res/drawable-xxhdpi/ic_settings_about.png
index 924d962..ae91bad 100644
--- a/res/drawable-xxhdpi/ic_settings_about.png
+++ b/res/drawable-xxhdpi/ic_settings_about.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_accessibility.png b/res/drawable-xxhdpi/ic_settings_accessibility.png
new file mode 100644
index 0000000..08ee9c4
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_accessibility.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_applications.png b/res/drawable-xxhdpi/ic_settings_applications.png
new file mode 100644
index 0000000..db8c9c4
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_applications.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_backup.png b/res/drawable-xxhdpi/ic_settings_backup.png
new file mode 100644
index 0000000..2edc43c
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_backup.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_battery.png b/res/drawable-xxhdpi/ic_settings_battery.png
new file mode 100644
index 0000000..0396687
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_battery.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_bluetooth2.png b/res/drawable-xxhdpi/ic_settings_bluetooth2.png
new file mode 100644
index 0000000..ad5e802
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_bluetooth2.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_date_time.png b/res/drawable-xxhdpi/ic_settings_date_time.png
index 4808605..dd13084 100644
--- a/res/drawable-xxhdpi/ic_settings_date_time.png
+++ b/res/drawable-xxhdpi/ic_settings_date_time.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_dock.png b/res/drawable-xxhdpi/ic_settings_dock.png
index 9151116..24f2351 100644
--- a/res/drawable-xxhdpi/ic_settings_dock.png
+++ b/res/drawable-xxhdpi/ic_settings_dock.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_home.png b/res/drawable-xxhdpi/ic_settings_home.png
index 1a01637..5a7e813 100644
--- a/res/drawable-xxhdpi/ic_settings_home.png
+++ b/res/drawable-xxhdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_language.png b/res/drawable-xxhdpi/ic_settings_language.png
index 787be2a..2303abe 100644
--- a/res/drawable-xxhdpi/ic_settings_language.png
+++ b/res/drawable-xxhdpi/ic_settings_language.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_location.png b/res/drawable-xxhdpi/ic_settings_location.png
index ed455b4..3fe4b9d 100644
--- a/res/drawable-xxhdpi/ic_settings_location.png
+++ b/res/drawable-xxhdpi/ic_settings_location.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_multiuser.png b/res/drawable-xxhdpi/ic_settings_multiuser.png
index 32d55c3..b5155d7 100644
--- a/res/drawable-xxhdpi/ic_settings_multiuser.png
+++ b/res/drawable-xxhdpi/ic_settings_multiuser.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_notifications.png b/res/drawable-xxhdpi/ic_settings_notifications.png
index 10a129c..3f0e063 100644
--- a/res/drawable-xxhdpi/ic_settings_notifications.png
+++ b/res/drawable-xxhdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_security.png b/res/drawable-xxhdpi/ic_settings_security.png
index 0b563b1..0c317aa 100644
--- a/res/drawable-xxhdpi/ic_settings_security.png
+++ b/res/drawable-xxhdpi/ic_settings_security.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_sound.png b/res/drawable-xxhdpi/ic_settings_sound.png
index 8748833..5283caf 100644
--- a/res/drawable-xxhdpi/ic_settings_sound.png
+++ b/res/drawable-xxhdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_storage.png b/res/drawable-xxhdpi/ic_settings_storage.png
new file mode 100644
index 0000000..45c42a7
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_storage.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_sync.png b/res/drawable-xxhdpi/ic_settings_sync.png
index 498d9ad..2a09495 100644
--- a/res/drawable-xxhdpi/ic_settings_sync.png
+++ b/res/drawable-xxhdpi/ic_settings_sync.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_wireless.png b/res/drawable-xxhdpi/ic_settings_wireless.png
index 0f8d454..f225145 100644
--- a/res/drawable-xxhdpi/ic_settings_wireless.png
+++ b/res/drawable-xxhdpi/ic_settings_wireless.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sysbar_quicksettings.png b/res/drawable-xxhdpi/ic_sysbar_quicksettings.png
index fc3600e..ad964b4 100644
--- a/res/drawable-xxhdpi/ic_sysbar_quicksettings.png
+++ b/res/drawable-xxhdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_tab_unselected_download.png b/res/drawable-xxhdpi/ic_tab_unselected_download.png
new file mode 100644
index 0000000..7030f3e
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_tab_unselected_download.png
Binary files differ
diff --git a/res/drawable-xxhdpi/no_ring_detected.png b/res/drawable-xxhdpi/no_ring_detected.png
deleted file mode 100644
index a56d6b7..0000000
--- a/res/drawable-xxhdpi/no_ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ring_detected.png b/res/drawable-xxhdpi/ring_detected.png
deleted file mode 100644
index b225740..0000000
--- a/res/drawable-xxhdpi/ring_detected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ring_paired.png b/res/drawable-xxhdpi/ring_paired.png
deleted file mode 100644
index c90233b..0000000
--- a/res/drawable-xxhdpi/ring_paired.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_auto_holo.png
new file mode 100644
index 0000000..5e0d7f8
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_auto_holo.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_full_holo.png
new file mode 100644
index 0000000..bcbd4cf
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_full_holo.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_half_holo.png
new file mode 100644
index 0000000..4f6933d
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_half_holo.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_off_holo.png
new file mode 100644
index 0000000..35dc60a
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_off_holo.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_sync_on_holo.png
new file mode 100644
index 0000000..ab90906
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_appwidget_settings_sync_on_holo.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_on_holo.png
new file mode 100644
index 0000000..71ca89b
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_on_holo.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_cellphone.png b/res/drawable-xxxhdpi/ic_bt_cellphone.png
new file mode 100644
index 0000000..1e12f96
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_cellphone.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_config.png b/res/drawable-xxxhdpi/ic_bt_config.png
new file mode 100644
index 0000000..bbefb4a
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_config.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png b/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png
new file mode 100644
index 0000000..8b547d9
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_headset_hfp.png b/res/drawable-xxxhdpi/ic_bt_headset_hfp.png
new file mode 100644
index 0000000..03c5033
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_headset_hfp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_imaging.png b/res/drawable-xxxhdpi/ic_bt_imaging.png
new file mode 100644
index 0000000..f0ffb52
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_imaging.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_laptop.png b/res/drawable-xxxhdpi/ic_bt_laptop.png
new file mode 100644
index 0000000..2d758bd
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_laptop.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_misc_hid.png b/res/drawable-xxxhdpi/ic_bt_misc_hid.png
new file mode 100644
index 0000000..b9a9923
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_misc_hid.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_network_pan.png b/res/drawable-xxxhdpi/ic_bt_network_pan.png
new file mode 100644
index 0000000..989e1ab
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_network_pan.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_pointing_hid.png b/res/drawable-xxxhdpi/ic_bt_pointing_hid.png
new file mode 100644
index 0000000..de8c389
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_bt_pointing_hid.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_item_delete.png b/res/drawable-xxxhdpi/ic_item_delete.png
new file mode 100644
index 0000000..00d9b71
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_item_delete.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_lockscreen_ime.png b/res/drawable-xxxhdpi/ic_lockscreen_ime.png
new file mode 100644
index 0000000..2eb8a92
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_add_dark.png b/res/drawable-xxxhdpi/ic_menu_add_dark.png
new file mode 100644
index 0000000..01f53fe
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_menu_add_dark.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_delete_holo_dark.png b/res/drawable-xxxhdpi/ic_menu_delete_holo_dark.png
new file mode 100644
index 0000000..e380101
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_menu_delete_holo_dark.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_network_signal_4.png b/res/drawable-xxxhdpi/ic_network_signal_4.png
new file mode 100644
index 0000000..622cc4c
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_network_signal_4.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_about.png b/res/drawable-xxxhdpi/ic_settings_about.png
new file mode 100644
index 0000000..b39842f
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_about.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_accessibility.png b/res/drawable-xxxhdpi/ic_settings_accessibility.png
new file mode 100644
index 0000000..d289f02
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_accessibility.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_applications.png b/res/drawable-xxxhdpi/ic_settings_applications.png
new file mode 100644
index 0000000..07f5785
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_applications.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_backup.png b/res/drawable-xxxhdpi/ic_settings_backup.png
new file mode 100644
index 0000000..f3ab021
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_backup.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_battery.png b/res/drawable-xxxhdpi/ic_settings_battery.png
new file mode 100644
index 0000000..06edb91
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_battery.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_bluetooth2.png b/res/drawable-xxxhdpi/ic_settings_bluetooth2.png
new file mode 100644
index 0000000..d354eb6
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_bluetooth2.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_data_usage.png b/res/drawable-xxxhdpi/ic_settings_data_usage.png
new file mode 100644
index 0000000..45922f9
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_data_usage.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_date_time.png b/res/drawable-xxxhdpi/ic_settings_date_time.png
new file mode 100644
index 0000000..736bb3f
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_date_time.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_display.png b/res/drawable-xxxhdpi/ic_settings_display.png
new file mode 100644
index 0000000..169c94f
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_display.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_dock.png b/res/drawable-xxxhdpi/ic_settings_dock.png
new file mode 100644
index 0000000..56aac4b
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_dock.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_home.png b/res/drawable-xxxhdpi/ic_settings_home.png
new file mode 100644
index 0000000..5d37a94
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_language.png b/res/drawable-xxxhdpi/ic_settings_language.png
new file mode 100644
index 0000000..04f0f8d
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_language.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_location.png b/res/drawable-xxxhdpi/ic_settings_location.png
new file mode 100644
index 0000000..67f5bad
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_location.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_multiuser.png b/res/drawable-xxxhdpi/ic_settings_multiuser.png
new file mode 100644
index 0000000..aad5c64
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_multiuser.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_notifications.png b/res/drawable-xxxhdpi/ic_settings_notifications.png
new file mode 100644
index 0000000..1619240
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_security.png b/res/drawable-xxxhdpi/ic_settings_security.png
new file mode 100644
index 0000000..9a3959b
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_security.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_sound.png b/res/drawable-xxxhdpi/ic_settings_sound.png
new file mode 100644
index 0000000..15352de
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_sound.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_storage.png b/res/drawable-xxxhdpi/ic_settings_storage.png
new file mode 100644
index 0000000..be02ffb
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_storage.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_sync.png b/res/drawable-xxxhdpi/ic_settings_sync.png
new file mode 100644
index 0000000..7a741a7
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_sync.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_settings_wireless.png b/res/drawable-xxxhdpi/ic_settings_wireless.png
new file mode 100644
index 0000000..9f137be
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_settings_wireless.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_sysbar_quicksettings.png b/res/drawable-xxxhdpi/ic_sysbar_quicksettings.png
new file mode 100644
index 0000000..e89d484
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_tab_selected_download.png b/res/drawable-xxxhdpi/ic_tab_selected_download.png
new file mode 100644
index 0000000..a024704
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_tab_selected_download.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_tab_selected_running.png b/res/drawable-xxxhdpi/ic_tab_selected_running.png
new file mode 100644
index 0000000..f7a329f
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_tab_selected_running.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_tab_unselected_download.png b/res/drawable-xxxhdpi/ic_tab_unselected_download.png
new file mode 100644
index 0000000..1aa5f2e
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_tab_unselected_download.png
Binary files differ
diff --git a/res/drawable/dashboard_tile_background.xml b/res/drawable/dashboard_tile_background.xml
index 55cb4c9..92b6f42 100644
--- a/res/drawable/dashboard_tile_background.xml
+++ b/res/drawable/dashboard_tile_background.xml
@@ -14,10 +14,10 @@
      limitations under the License.
 -->
 
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
                 android:tint="?android:attr/colorButtonPressed">
     <item>
         <color android:color="@android:color/white" />
     </item>
-</touch-feedback>
+</ripple>
 
diff --git a/res/drawable/preference_highlight.xml b/res/drawable/preference_highlight.xml
index 0b704f7..615a360 100644
--- a/res/drawable/preference_highlight.xml
+++ b/res/drawable/preference_highlight.xml
@@ -14,10 +14,10 @@
      limitations under the License.
 -->
 
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
                 android:tint="?android:attr/colorButtonPressed"
                 android:pinned="true">
     <item android:id="@android:id/mask"
           android:drawable="@android:color/white" />
-</touch-feedback>
+</ripple>
 
diff --git a/res/layout-land/crypt_keeper_pattern_entry.xml b/res/layout-land/crypt_keeper_pattern_entry.xml
new file mode 100644
index 0000000..d3d987d
--- /dev/null
+++ b/res/layout-land/crypt_keeper_pattern_entry.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+>
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:orientation="horizontal"
+        android:gravity="center_vertical"
+    >
+        <include layout="@layout/crypt_keeper_status" />
+
+        <!-- Emergency call button.
+             Text and icon are set by CryptKeeper.updateEmergencyCallButtonState() -->
+        <Button android:id="@+id/emergencyCallButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:layout_marginTop="16dip"
+            style="@*android:style/Widget.Button.Transparent"
+            android:textSize="14sp"
+            android:drawablePadding="6dip"
+        />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:layout_marginStart="8dip"
+        android:layout_marginEnd="8dip"
+        android:orientation="horizontal"
+    >
+        <include layout="@layout/crypt_keeper_pattern_field" />
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/activity_nfc_pairing.xml b/res/layout/activity_nfc_pairing.xml
deleted file mode 100644
index c753fd0..0000000
--- a/res/layout/activity_nfc_pairing.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- Copyright (C) 2013 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"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_vertical">
-
-     <ImageView
-        android:id="@+id/status_image"
-        android:src="@drawable/no_ring_detected"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="bottom"
-        android:scaleType="center"/>
-
-     <TextView
-        android:id="@+id/status_text"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="top"
-        android:textSize="24sp"
-        android:textAlignment="center"
-        android:paddingTop="16dp"
-        android:paddingLeft="20dp"
-        android:paddingRight="20dp"/>
-
-</LinearLayout>
diff --git a/res/layout/dashboard.xml b/res/layout/dashboard.xml
index 116580a..c6c7292 100644
--- a/res/layout/dashboard.xml
+++ b/res/layout/dashboard.xml
@@ -18,8 +18,8 @@
     android:id="@+id/dashboard"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:paddingStart="12dp"
-    android:paddingEnd="12dp"
+    android:paddingStart="@*android:dimen/preference_fragment_padding_side"
+    android:paddingEnd="@*android:dimen/preference_fragment_padding_side"
     android:scrollbarStyle="outsideOverlay"
     android:background="@color/dashboard_background_color">
 
@@ -27,6 +27,7 @@
                 android:id="@+id/dashboard_container"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:paddingBottom="12dp"
                 android:layout_gravity="center_horizontal"
                 android:orientation="vertical"
                 />
diff --git a/res/layout/dashboard_category.xml b/res/layout/dashboard_category.xml
index 8abbee2..1099dda 100644
--- a/res/layout/dashboard_category.xml
+++ b/res/layout/dashboard_category.xml
@@ -22,10 +22,11 @@
 
     <TextView android:id="@+id/category_title"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:layout_height="@dimen/dashboard_category_title_height"
             android:singleLine="true"
             android:ellipsize="marquee"
-            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:gravity="center_vertical"
+            android:textAppearance="@style/TextAppearance.Small"
             android:textAlignment="viewStart"
             />
 
diff --git a/res/layout/dashboard_tile.xml b/res/layout/dashboard_tile.xml
index 7b61d17..2a811b2 100644
--- a/res/layout/dashboard_tile.xml
+++ b/res/layout/dashboard_tile.xml
@@ -39,7 +39,7 @@
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:singleLine="true"
-                  android:textAppearance="?android:attr/textAppearanceMedium"
+                  android:textAppearance="@style/TextAppearance.Medium"
                   android:ellipsize="marquee"
                   android:fadingEdge="horizontal" />
 
@@ -48,7 +48,7 @@
                   android:layout_height="wrap_content"
                   android:layout_below="@android:id/title"
                   android:layout_alignStart="@android:id/title"
-                  android:textAppearance="?android:attr/textAppearanceSmall"
+                  android:textAppearance="@style/TextAppearance.Small"
                   android:textColor="?android:attr/textColorSecondary"
                   />
 
diff --git a/res/layout/nfc_payment_option.xml b/res/layout/nfc_payment_option.xml
index 04fdc07..76fea4f 100644
--- a/res/layout/nfc_payment_option.xml
+++ b/res/layout/nfc_payment_option.xml
@@ -19,7 +19,7 @@
     android:layout_weight="1"
     android:id="@+id/nfc_payment_pref"
     android:focusable="true"
-    android:clickable="true"
+    android:clickable="false"
     android:gravity="center_vertical"
     android:paddingTop="10dp"
     android:paddingBottom="10dp"
@@ -37,6 +37,7 @@
             android:layout_width="wrap_content"
             android:layout_height="96dp"
             android:scaleType="centerInside"
+            android:clickable="true"
                 />
     </FrameLayout>
     <RadioButton
@@ -46,6 +47,6 @@
         android:layout_alignParentEnd="true"
         android:layout_centerVertical="true"
         android:duplicateParentState="true"
-        android:clickable="false"
+        android:clickable="true"
         android:focusable="false" />
 </RelativeLayout>
diff --git a/res/layout/notification_app.xml b/res/layout/notification_app.xml
index 414165a..8f5f8e6 100644
--- a/res/layout/notification_app.xml
+++ b/res/layout/notification_app.xml
@@ -31,27 +31,7 @@
             android:layout_height="@dimen/notification_app_icon_size"
             android:layout_centerVertical="true"
             android:contentDescription="@null"
-            android:scaleType="center" />
-
-        <ImageView
-            android:id="@android:id/icon1"
-            android:layout_width="@dimen/notification_app_icon_badge_size"
-            android:layout_height="@dimen/notification_app_icon_badge_size"
-            android:layout_marginLeft="@dimen/notification_app_icon_badge_margin"
-            android:layout_marginTop="@dimen/notification_app_icon_badge_margin"
-            android:background="#bb8b0000"
-            android:contentDescription="@null" />
-
-        <ImageView
-            android:id="@android:id/icon2"
-            android:layout_width="@dimen/notification_app_icon_badge_size"
-            android:layout_height="@dimen/notification_app_icon_badge_size"
-            android:layout_alignBottom="@android:id/icon"
-            android:layout_alignEnd="@android:id/icon"
-            android:layout_marginBottom="@dimen/notification_app_icon_badge_margin"
-            android:layout_marginEnd="@dimen/notification_app_icon_badge_margin"
-            android:background="#bb006400"
-            android:contentDescription="@null" />
+            android:padding="8dp" />
 
         <TextView
             android:id="@android:id/title"
@@ -63,6 +43,18 @@
             android:singleLine="true"
             android:textAlignment="viewStart"
             android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <TextView
+            android:id="@android:id/text1"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/notification_app_icon_size"
+            android:layout_toEndOf="@android:id/icon"
+            android:gravity="bottom"
+            android:ellipsize="end"
+            android:singleLine="true"
+            android:textAlignment="viewStart"
+            android:textColor="#888"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
     </RelativeLayout>
 
     <View
diff --git a/res/layout/notification_app_dialog.xml b/res/layout/notification_app_dialog.xml
index a8f7880..bbd4846 100644
--- a/res/layout/notification_app_dialog.xml
+++ b/res/layout/notification_app_dialog.xml
@@ -19,10 +19,10 @@
 
     <ImageView
         android:id="@android:id/icon"
+        android:padding="8dp"
         android:layout_width="@dimen/notification_app_icon_size"
         android:layout_height="@dimen/notification_app_icon_size"
-        android:contentDescription="@null"
-        android:scaleType="center" />
+        android:contentDescription="@null" />
 
     <TextView
         android:id="@android:id/title"
@@ -44,4 +44,22 @@
         android:text="@string/app_notifications_dialog_show"
         android:textAppearance="?android:attr/textAppearanceListItem" />
 
+    <CheckBox
+        android:id="@android:id/button2"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/notification_app_icon_size"
+        android:layout_below="@android:id/button1"
+        android:layout_marginStart="@dimen/content_margin_left"
+        android:text="@string/app_notifications_dialog_priority"
+        android:textAppearance="?android:attr/textAppearanceListItem" />
+
+    <CheckBox
+        android:id="@android:id/button3"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/notification_app_icon_size"
+        android:layout_below="@android:id/button2"
+        android:layout_marginStart="@dimen/content_margin_left"
+        android:text="@string/app_notifications_dialog_visibility"
+        android:textAppearance="?android:attr/textAppearanceListItem" />
+
 </RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/search_panel.xml b/res/layout/search_panel.xml
index 22f2b52..8837bc9 100644
--- a/res/layout/search_panel.xml
+++ b/res/layout/search_panel.xml
@@ -17,7 +17,10 @@
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/dashboard"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"
+        android:paddingStart="@*android:dimen/preference_fragment_padding_side"
+        android:paddingEnd="@*android:dimen/preference_fragment_padding_side"
+        android:background="@color/dashboard_background_color">
 
     <LinearLayout android:layout_width="match_parent"
             android:layout_height="match_parent"
@@ -31,23 +34,19 @@
                 android:orientation="vertical">
 
             <TextView android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
+                      android:layout_height="@dimen/dashboard_category_title_height"
                       android:singleLine="true"
                       android:ellipsize="marquee"
-                      android:fadingEdge="horizontal"
+                      android:gravity="center_vertical"
                       android:textAppearance="?android:attr/textAppearanceMedium"
-                      android:text="@string/search_recents_queries_label"/>
+                      android:textAlignment="viewStart"
+                      android:text="@string/search_recents_queries_label"
+                    />
 
             <ListView android:id="@+id/list_suggestions"
                     android:layout_width="match_parent"
-                    android:layout_height="match_parent" />
-
-            <ImageView android:src="?android:attr/dividerHorizontal"
-                       android:layout_width="fill_parent"
-                       android:layout_height="wrap_content"
-                       android:scaleType="fitXY"
-                       android:paddingBottom="2dp"
-                       android:paddingTop="2dp" />
+                    android:layout_height="match_parent"
+                    />
 
         </LinearLayout>
 
@@ -56,15 +55,17 @@
                 android:layout_height="match_parent"
                 android:layout_gravity="center"
                 android:orientation="vertical"
-                android:layout_weight="1" >
+                android:layout_weight="1">
 
             <TextView android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
+                      android:layout_height="@dimen/dashboard_category_title_height"
                       android:singleLine="true"
                       android:ellipsize="marquee"
-                      android:fadingEdge="horizontal"
+                      android:gravity="center_vertical"
                       android:textAppearance="?android:attr/textAppearanceMedium"
-                      android:text="@string/search_results_label"/>
+                      android:textAlignment="viewStart"
+                      android:text="@string/search_results_label"
+                    />
 
             <ListView android:id="@+id/list_results"
                     android:layout_width="match_parent"
diff --git a/res/layout/search_suggestion_item.xml b/res/layout/search_suggestion_item.xml
index c099892..49df3ca 100644
--- a/res/layout/search_suggestion_item.xml
+++ b/res/layout/search_suggestion_item.xml
@@ -22,41 +22,14 @@
               android:paddingStart="@*android:dimen/preference_item_padding_side"
               android:paddingEnd="?android:attr/scrollbarSize">
 
-    <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:gravity="center"
-            android:minWidth="@*android:dimen/preference_icon_minWidth"
-            android:orientation="horizontal">
-
-        <ImageView
-                android:id="@+id/icon"
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:layout_gravity="center"
-                android:minWidth="48dp"
-                android:scaleType="centerInside"
-                android:layout_marginEnd="@*android:dimen/preference_item_padding_inner"
-                />
-
-    </LinearLayout>
-
-    <RelativeLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:paddingEnd="@*android:dimen/preference_item_padding_inner"
-            android:paddingTop="6dip"
-            android:paddingBottom="6dip">
-
-        <TextView android:id="@+id/title"
-                  android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:singleLine="true"
-                  android:textAppearance="?android:attr/textAppearanceMedium"
-                  android:ellipsize="marquee"
-                  android:fadingEdge="horizontal" />
-
-    </RelativeLayout>
+    <TextView android:id="@+id/title"
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:paddingStart="@*android:dimen/preference_item_padding_inner"
+              android:paddingEnd="@*android:dimen/preference_item_padding_inner"
+              android:singleLine="true"
+              android:textAppearance="?android:attr/textAppearanceMedium"
+              android:ellipsize="marquee"
+              android:fadingEdge="horizontal" />
 
 </LinearLayout>
diff --git a/res/layout/settings_main.xml b/res/layout/settings_main.xml
index b4be3bf..740932d 100644
--- a/res/layout/settings_main.xml
+++ b/res/layout/settings_main.xml
@@ -24,8 +24,9 @@
 
     <LinearLayout
             android:orientation="vertical"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent">
+            android:layout_height="0px"
+            android:layout_width="match_parent"
+            android:layout_weight="1">
 
         <com.android.settings.widget.SwitchBar android:id="@+id/switch_bar"
                   android:layout_height="?android:attr/actionBarSize"
@@ -37,7 +38,6 @@
                 android:id="@+id/prefs"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:layout_weight="1"
                 />
 
     </LinearLayout>
diff --git a/res/layout/switch_bar.xml b/res/layout/switch_bar.xml
index f9a887f..51914c9 100644
--- a/res/layout/switch_bar.xml
+++ b/res/layout/switch_bar.xml
@@ -23,15 +23,15 @@
               android:layout_height="wrap_content"
               android:layout_width="0dp"
               android:layout_weight="1"
-              android:paddingStart="32dp"
+              android:paddingStart="@dimen/switchbar_padding_start"
               android:layout_gravity="center_vertical"
               android:textAppearance="@style/TextAppearance.Switch"
               android:textAlignment="viewStart" />
 
-    <Switch android:id="@+id/switch_widget"
+    <com.android.settings.widget.ToggleSwitch android:id="@+id/switch_widget"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical"
-            android:paddingEnd="32dp" />
+            android:paddingEnd="@dimen/switchbar_padding_end" />
 </merge>
 
diff --git a/res/layout/write_wifi_config_to_nfc.xml b/res/layout/write_wifi_config_to_nfc.xml
index 416c1ae..f132bdb 100644
--- a/res/layout/write_wifi_config_to_nfc.xml
+++ b/res/layout/write_wifi_config_to_nfc.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             style="@style/wifi_section">
diff --git a/res/layout/zen_mode_section_first.xml b/res/layout/zen_mode_section_first.xml
new file mode 100644
index 0000000..6054be4
--- /dev/null
+++ b/res/layout/zen_mode_section_first.xml
@@ -0,0 +1,28 @@
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <TextView
+        android:id="@android:id/title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textAllCaps="true"
+        android:textStyle="bold" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 154b34f..0cef851 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -42,4 +42,7 @@
     <!-- Dashboard padding between each tiles within the layout -->
     <dimen name="dashboard_cell_gap">8dp</dimen>
 
+    <!-- SwitchBar padding start -->
+    <dimen name="switchbar_padding_start">80dp</dimen>
+
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 562dd80..93d9833 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -88,4 +88,12 @@
     <!-- Dashboard padding between each tiles within the layout -->
     <dimen name="dashboard_cell_gap">4dp</dimen>
 
+    <!-- Dashboard category title layout height -->
+    <dimen name="dashboard_category_title_height">48dp</dimen>
+
+    <!-- SwitchBar padding start -->
+    <dimen name="switchbar_padding_start">72dp</dimen>
+    <!-- SwitchBar padding emd -->
+    <dimen name="switchbar_padding_end">@*android:dimen/preference_fragment_padding_side</dimen>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 350798d..945dd3d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -44,13 +44,13 @@
 
     <!-- Category headings in left-pane header menu --> <skip />
     <!-- Settings main menu category heading. Wireless and networks (Wi-Fi, Bluetooth, data usage...). [CHAR LIMIT=40] -->
-    <string name="header_category_wireless_networks">WIRELESS &amp; NETWORKS</string>
+    <string name="header_category_wireless_networks">Wireless &amp; Networks</string>
     <!-- Settings main menu category heading. Device (Sound, display, battery, applications...). [CHAR LIMIT=40] -->
-    <string name="header_category_device">DEVICE</string>
+    <string name="header_category_device">Device</string>
     <!-- Settings main menu category heading. Personal (Accounts, security, language, backup...). [CHAR LIMIT=40] -->
-    <string name="header_category_personal">PERSONAL</string>
+    <string name="header_category_personal">Personal</string>
     <!-- Settings main menu category heading. System (Updates, data, accessibility, about phone). [CHAR LIMIT=40] -->
-    <string name="header_category_system">SYSTEM</string>
+    <string name="header_category_system">System</string>
 
     <!-- Phone info -->
     <!-- Phone Info screen. Button label to turn on the radio . Only shown in diagnostic screen, so precise translation is not needed. -->
@@ -702,10 +702,6 @@
     <string name="security_enable_widgets_title">Enable widgets</string>
     <!-- Summary for settings checkbox to disable widgets when the setting has been disabled by an installed device admin [CHAR LIMIT=50] -->
     <string name="security_enable_widgets_disabled_summary">Disabled by administrator</string>
-    <!-- Text shown for title of settings to setup/change NFC unlock [CHAR LIMIT=20]-->
-    <string name="nfc_unlock_title">NFC unlock</string>
-
-
     <!-- Text shown for summary of owner info setting [CHAR LIMIT=40]-->
     <string name="owner_info_settings_summary"></string>
     <!-- Hint text shown in owner info edit text [CHAR LIMIT=50] -->
@@ -737,35 +733,27 @@
     <!-- Title of the preferences item to control encryption -->
     <string name="crypt_keeper_encrypt_title" product="default">Encrypt phone</string>
 
-    <!-- Summary of the preferences item to control encryption, when encryption is inactive -->
-    <string name="crypt_keeper_encrypt_summary" product="tablet">
-    Require a numeric PIN or password to decrypt your tablet each time you
-    power it on</string>
-    <!-- Summary of the preferences item to control encryption, when encryption is inactive -->
-    <string name="crypt_keeper_encrypt_summary" product="default">
-    Require a numeric PIN or password to decrypt your phone each time you
-    power it on</string>
     <!-- Summary of the preferences item to control encryption, when encryption is active -->
     <string name="crypt_keeper_encrypted_summary">Encrypted</string>
 
     <!-- Informational text in the first confirmation screen before starting device encryption -->
     <string name="crypt_keeper_desc" product="tablet">
     You can encrypt your accounts, settings, downloaded apps and their data,
-    media, and other files. Once you encrypt your tablet, you need to type a numeric PIN
-    or password to decrypt it each time you power it on. You can\'t decrypt your tablet
-    except by performing a factory data reset, erasing all your data.\n\nEncryption takes
-    an hour or more. You must start with a charged battery and keep your tablet plugged in
-    until encryption is complete. If you interrupt the encryption process, you will lose
-    some or all of your data.</string>
+    media, and other files. After you encrypt your tablet, assuming you\’ve set up a screen lock
+    (that is, a pattern or numeric PIN or password), you\'ll need to unlock the screen to decrypt
+    the tablet every time you power it on. The only other way to decrypt is to perform a factory
+    data reset, erasing all your data.\n\nEncryption takes an hour or more. You must start with
+    a charged battery and keep your tablet plugged in throughout the process. If you interrupt,
+    you\’ll lose some or all of your data</string>
     <!-- Informational text in the first confirmation screen before starting device encryption -->
     <string name="crypt_keeper_desc" product="default">
     You can encrypt your accounts, settings, downloaded apps and their data,
-    media, and other files. Once you encrypt your phone, you need to type a numeric PIN or
-    password to decrypt it each time you power it on. You can\'t decrypt your phone
-    except by performing a factory data reset, erasing all your data.\n\nEncryption takes
-    an hour or more. You must start with a charged battery and keep your phone plugged in
-    until encryption is complete. If you interrupt the encryption process, you will lose
-    some or all of your data.</string>
+    media, and other files. After you encrypt your phone, assuming you’ve set up a screen lock
+    (that is, a pattern or numeric PIN or password), you\'ll need to unlock the screen to decrypt
+    the phone every time you power it on. The only other way to decrypt is to perform a factory
+    data reset, erasing all your data.\n\nEncryption takes an hour or more. You must start with
+    a charged battery and keep your phone plugged in throughout the process. If you interrupt,
+    you\’ll lose some or all of your data.</string>
 
     <!-- Button text to start encryption process -->
     <string name="crypt_keeper_button_text" product="tablet">Encrypt tablet</string>
@@ -1028,63 +1016,6 @@
     <!-- Summary of preference to manage device policies -->
     <string name="manage_trust_agents_summary">View or deactivate trust agents</string>
 
-    <!-- Notification access settings (part of Security) -->
-
-    <!-- Title of preference to manage notification listeners -->
-    <string name="manage_notification_access">Notification access</string>
-
-    <!-- Summary of preference to manage notification listeners, when none are enabled -->
-    <string name="manage_notification_access_summary_zero">Apps cannot read notifications</string>
-
-    <!-- Summary of preference to manage notification listeners, when one or more are enabled
-         and are therefore able to read the user's notifications -->
-    <plurals name="manage_notification_access_summary_nonzero">
-        <item quantity="one">%d app can read notifications</item>
-        <item quantity="other">%d apps can read notifications</item>
-    </plurals>
-
-    <!-- String to show in the list of notification listeners, when none is installed -->
-    <string name="no_notification_listeners">No notification listeners are installed.</string>
-
-    <!-- Title for a warning message about security implications of enabling a notification
-          listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
-    <string name="notification_listener_security_warning_title">Enable
-         <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
-    <!-- Summary for a warning message about security implications of enabling a notification
-          listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
-    <string name="notification_listener_security_warning_summary">
-        <xliff:g id="notification_listener_name">%1$s</xliff:g> will be able to
-        read all notifications posted by the system or any installed app, which may include personal
-        information such as contact names and the text of messages sent to you. It will also be able
-        to dismiss these notifications or touch action buttons within them.
-    </string>
-
-    <!-- Title of preference to manage condition providers -->
-    <string name="manage_condition_providers">Condition providers</string>
-
-    <!-- Summary of preference to manage condition providers, when none are enabled -->
-    <string name="manage_condition_providers_summary_zero">No apps provide conditions</string>
-
-    <!-- Summary of preference to manage condition providers, when one or more are enabled -->
-    <plurals name="manage_condition_providers_summary_nonzero">
-        <item quantity="one">%d app provides conditions</item>
-        <item quantity="other">%d apps provide conditions</item>
-    </plurals>
-
-    <!-- String to show in the list of condition providers, when none is installed -->
-    <string name="no_condition_providers">No condition providers are installed.</string>
-
-    <!-- Title for a warning message about security implications of enabling a condition
-          provider, displayed as a dialog message. [CHAR LIMIT=NONE] -->
-    <string name="condition_provider_security_warning_title">Enable
-         <xliff:g id="service" example="ConditionProvider">%1$s</xliff:g>?</string>
-    <!-- Summary for a warning message about security implications of enabling a condition
-          provider, displayed as a dialog message. [CHAR LIMIT=NONE] -->
-    <string name="condition_provider_security_warning_summary">
-        <xliff:g id="condition_provider_name">%1$s</xliff:g> will be able to
-        add exit conditions to Do not disturb mode.
-    </string>
-
     <!-- Bluetooth settings -->
     <!-- Bluetooth settings check box title on Main Settings screen -->
     <string name="bluetooth_quick_toggle_title">Bluetooth</string>
@@ -1417,6 +1348,8 @@
     <string name="wifi_menu_forget">Forget network</string>
     <!-- Menu option to modify a Wi-Fi network configuration -->
     <string name="wifi_menu_modify">Modify network</string>
+    <!-- Menu option to write a Wi-Fi configuration token to an NFC tag [CHAR_LIMIT=30]-->
+    <string name="wifi_menu_write_to_nfc">Write to NFC tag</string>
     <!-- Wi-Fi settings. text displayed when Wi-Fi is off and network list is empty [CHAR LIMIT=50]-->
     <string name="wifi_empty_list_wifi_off">To see available networks, turn Wi\u2011Fi on.</string>
     <!-- Wi-Fi settings. text displayed when Wi-Fi is on and network list is empty [CHAR LIMIT=50]-->
@@ -1522,8 +1455,8 @@
     <!-- Substring of wifi status for wifi with authentication.  This version is for when the
          string is not first in the list (lowercase in english) -->
     <string name="wifi_secured_second_item">, secured with <xliff:g id="wifi_security_short">%1$s</xliff:g></string>
-    <!-- Message in WriteWifiConfigToNfcDialog when prompted to enter network password [CHAR LIMIT=150] -->
-    <string name="wifi_wps_nfc_enter_password">Enter your network password.</string>
+    <!-- Message in WriteWifiConfigToNfcDialog when prompted to enter network password [CHAR_LIMIT=40] -->
+    <string name="wifi_wps_nfc_enter_password">Enter your network password</string>
 
     <!-- Do not translate.  Concise terminology for wifi with WEP security -->
     <string name="wifi_security_short_wep">WEP</string>
@@ -1776,8 +1709,6 @@
     <string name="display_settings_title">Display</string>
     <!-- Sound settings screen heading -->
     <string name="sound_settings">Sound</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">""</string>
     <!-- Sound settings screen, volume title -->
@@ -1790,8 +1721,6 @@
     <string name="vibrate_in_silent_title">Vibrate when silent</string>
     <!-- Sound settings screen, setting option name -->
     <string name="notification_sound_title">Default notification sound</string>
-    <!-- Sound settings screen, notification light repeat pulsing title -->
-    <string name="notification_pulse_title">Pulse notification light</string>
     <!-- Display settings screen, notification popups are enabled [CHAR LIMIT=30] -->
     <string name="heads_up_enabled_title">Pop up if high priority</string>
     <!-- Sound settings screen, the title of the volume bar to adjust the incoming call volume -->
@@ -1837,9 +1766,6 @@
     <string name="volume_notification_mute">Mute notifications</string>
     <!-- Image description for alarm volume mute button. -->
     <string name="volume_alarm_mute">Mute alarms</string>
-    <!-- Sound settings screen, setting option name checkbox. About vibration setting
-         during incoming calls. [CHAR LIMIT=30] -->
-    <string name="vibrate_when_ringing_title">Vibrate when ringing</string>
 
     <!-- Dock settings title, top level -->
     <string name="dock_settings">Dock</string>
@@ -4364,6 +4290,10 @@
     <string name="status_wimax_mac_address">4G MAC address</string>
     <!-- This is displayed to the user when the device needs to be decrypted -->
     <string name="enter_password">Type password to decrypt storage</string>
+    <!-- Informational text on the pin entry screen prompting the user for their pin -->
+    <string name="enter_pin">Enter your PIN to decrypt storage</string>
+    <!-- Informational text on the pattern entry screen prompting the user for their pattern -->
+    <string name="enter_pattern">Draw your pattern to decrypt storage</string>
     <!-- This is displayed when the password is entered incorrectly -->
     <string name="try_again">Try again.</string>
 
@@ -4955,6 +4885,9 @@
     <string name="nfc_payment_settings_title">Tap &amp; pay</string>
     <!-- String shown when there are no NFC payment applications installed -->
     <string name="nfc_payment_no_apps">Pay with just a tap</string>
+    <!-- String shown before a checkbox, allowing the user to indicate that he wants foreground apps
+         to be able to override the configured default app -->
+    <string name="nfc_payment_favor_foreground">Favor foreground app</string>
     <!-- String shown when there are no NFC payment applications installed, clickable, pointing to
          a website to learn more-->
     <string name="nfc_payment_learn_more">Learn more</string>
@@ -5069,22 +5002,6 @@
     <!-- Text to display in regulatory info screen (from device overlay). -->
     <string name="regulatory_info_text"></string>
 
-    <!-- NFC unlock -->
-    <string name="lock_settings_nfc_title">NFC Screen Lock Settings</string>
-    <string name="nfc_unlock_paired_tags_title">Paired Tags</string>
-    <string name="nfc_unlock_enabled">Enabled</string>
-    <string name="start_nfc_pairing">Pair with a tag</string>
-
-    <!-- Nfc pair activity strings -->
-    <string name="title_activity_nfc_pairing">NfcPairingActivity</string>
-    <string name="pairing_button_title">Pair now</string>
-    <string name="status_no_ring_detected">Set the tag flat on a table and place the phone on top</string>
-    <string name="status_device_paired">Tag and phone successfully paired, you are done!</string>
-    <string name="status_error_invalid_device">The tag provided cannot be used to unlock your phone</string>
-    <string name="status_error_pairing_failed">The pairing with your tag failed, please try again</string>
-    <string name="enable_nfc">NFC is not enabled and is required for NFC Unlock. Please turn on NFC.</string>
-    <string name="ok">NFC Settings</string>
-
     <!--Dashboard strings-->
     <!-- Text to describe the dashboard fragment title [CHAR LIMIT=16] -->
     <string name="dashboard_title">Settings</string>
@@ -5105,43 +5022,10 @@
     <!--Search Keywords-->
     <string name="keywords_wifi">wifi wi-fi network connection</string>
 
-    <!-- Notifications on lockscreen -->
-    <!-- Label for checkbox controlling the contents of notifications shown on
-         the secure lockscreen [CHAR LIMIT=25] -->
-    <string name="lock_screen_notifications">When device is locked</string>
-    <!-- Summary for lock_screen_notifications: sensitive information will be
-         hidden or redacted from notifications shown on a secure lock screen
-         [CHAR LIMIT=50] -->
-    <string name="lock_screen_notifications_summary_hide">Hide sensitive notification content</string>
-    <!-- Summary for lock_screen_notifications: all information will be
-         shown in notifications shown on a secure lock screen
-         [CHAR LIMIT=50] -->
-    <string name="lock_screen_notifications_summary_show">Show all notification content</string>
+    <!-- NFC Wi-Fi pairing/setup strings-->
 
-    <!-- [CHAR LIMIT=30] Notification settings screen, setting option name -->
-    <string name="title_zen_mode">Do not disturb</string>
-
-    <!-- [CHAR LIMIT=30] Zen mode settings screen, activity title -->
-    <string name="zen_mode_settings_title">Do not disturb</string>
-
-    <!-- [CHAR LIMIT=20] Notifications settings header -->
-    <string name="notification_settings">Notifications</string>
-
-    <!-- [CHAR LIMIT=20] Notifications settings: Tweaks section header (eng
-         builds only) -->
-    <string name="notification_settings_tweaks">Tweaks</string>
-
-    <!-- [CHAR LIMIT=20] Notifications settings: Apps section header -->
-    <string name="notification_settings_apps_title">App notifications</string>
-
-    <!-- [CHAR LIMIT=NONE] Content description for per-app notification
-         settings button -->
-    <string name="notification_app_settings_button">Notification settings</string>
-
-    <!-- NFC WiFi pairing/setup strings-->
-
-    <!-- Write NFC tag for WiFi pairing/setup title -->
-    <string name="setup_wifi_nfc_tag">Set up WiFi NFC Tag</string>
+    <!-- Write NFC tag for Wi-Fi pairing/setup title [CHAR_LIMIT=30]-->
+    <string name="setup_wifi_nfc_tag">Set up Wi-Fi NFC Tag</string>
     <!-- Text for button to confirm writing tag -->
     <string name="write_tag">Write</string>
     <!-- Text to inform the user to tap a tag to complete the setup process -->
@@ -5158,27 +5042,174 @@
     <!-- Option title for the default sound, context based on screen -->
     <string name="default_sound">Default sound</string>
 
+
+    <!-- Sounds and Notifications -->
+
+    <!-- Sounds & notifications: Settings header. [CHAR LIMIT=20] -->
+    <string name="notification_settings">Sounds &amp; Notifications</string>
+
+    <!-- Sounds & notifications: Title for the option managing media volume. [CHAR LIMIT=NONE] -->
+    <string name="media_volume_option_title">Media volume</string>
+
+    <!-- Sounds & notifications: Title for the option managing alarm volume. [CHAR LIMIT=NONE] -->
+    <string name="alarm_volume_option_title">Alarm volume</string>
+
+    <!-- Sounds & notifications: Title for the option managing ringer volume. [CHAR LIMIT=NONE] -->
+    <string name="ring_volume_option_title">Ring volume</string>
+
+    <!-- Sounds & notifications: Title for the Do not disturb option and associated settings page. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_settings_title">Do not disturb</string>
+
+    <!-- Sounds & notifications: Title for the ringer mode option. [CHAR LIMIT=NONE] -->
+    <string name="ringer_mode_title">When calls and notifications arrive</string>
+
+    <!-- Sounds & notifications: Value for the ringer mode option when audible. [CHAR LIMIT=NONE] -->
+    <string name="ringer_mode_audible">Ring</string>
+
+    <!-- Sounds & notifications: Value for the ringer mode option when vibrate. [CHAR LIMIT=NONE] -->
+    <string name="ringer_mode_vibrate">Vibrate instead of ringing</string>
+
+    <!-- Sounds & notifications: Value for the ringer mode option when silent. [CHAR LIMIT=NONE] -->
+    <string name="ringer_mode_silent">Don\'t ring or vibrate</string>
+
+    <!-- Sounds & notifications: Title for the option defining the phone ringtone. [CHAR LIMIT=NONE] -->
+    <string name="ringtone_title">Phone ringtone</string>
+
+    <!-- Sounds & notifications: Title for the option defining the default notification ringtone. [CHAR LIMIT=NONE] -->
+    <string name="notification_ringtone_title">Default notification ringtone</string>
+
+    <!-- Sounds & notifications: Title for the option managing whether or not to vibrate when ringing. [CHAR LIMIT=NONE] -->
+    <string name="vibrate_when_ringing_title">Vibrate when ringing</string>
+
+    <!-- Sounds & notifications: Title for the showing notifications option and associated settings page. [CHAR LIMIT=NONE] -->
+    <string name="notification_display_settings">Showing notifications</string>
+
+    <!-- Sounds & notifications > Showing notifications: Title for the pulse notification light option. [CHAR LIMIT=NONE] -->
+    <string name="notification_pulse_title">Pulse notification light</string>
+
+    <!-- Sounds & notifications > Showing notifications: Title for the option controlling notifications on the lockscreen. [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_notifications_title">When device is locked</string>
+
+    <!-- Sounds & notifications > Showing notifications: Value for lockscreen notifications:  all information will be
+         shown in notifications shown on a secure lock screen
+         [CHAR LIMIT=50] -->
+    <string name="lock_screen_notifications_summary_show">Show all notification content</string>
+
+    <!-- Sounds & notifications > Showing notifications: Value for lockscreen notifications: sensitive information will be
+         hidden or redacted from notifications shown on a secure lock screen
+         [CHAR LIMIT=50] -->
+    <string name="lock_screen_notifications_summary_hide">Hide sensitive notification content</string>
+
+    <!-- Sounds & notifications > Showing notifications: Value for lockscreen notifications: notifications will not appear on a secure lock screen
+         [CHAR LIMIT=50] -->
+    <string name="lock_screen_notifications_summary_disable">Don\'t show notifications at all</string>
+
+    <!-- Sounds & notifications > Showing notifications: Title for the option managing notification display in zen mode. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_notifications_title">When do not disturb is on</string>
+
+    <!-- Sounds & notifications > Showing notifications: Value for zen mode notifications: notifications will be suppressed in zen mode [CHAR LIMIT=50] -->
+    <string name="zen_mode_notifications_summary_hide">Hide new notifications from the list</string>
+
+    <!-- Sounds & notifications > Showing notifications: Value for zen mode notifications: notifications will be displayed in zen mode [CHAR LIMIT=50] -->
+    <string name="zen_mode_notifications_summary_show">Show all notifications in the list</string>
+
+    <!-- Sounds & notifications > Showing notifications: Title for the option managing notifications per application. [CHAR LIMIT=NONE] -->
+    <string name="app_notifications_title">App notifications</string>
+
+    <!-- Sounds & notifications: Title for the touch sounds option and associated settings page. [CHAR LIMIT=NONE] -->
+    <string name="touch_sound_settings">Touch sounds</string>
+
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=NONE] -->
+    <string name="dial_pad_tones_title">Dial pad tones</string>
+
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling touch sounds for screen locking and unlocking. [CHAR LIMIT=NONE] -->
+    <string name="screen_locking_sounds_title">Screen locking &amp; unlocking</string>
+
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling other touch sounds. [CHAR LIMIT=NONE] -->
+    <string name="other_touch_sounds_title">Other touch sounds</string>
+
+    <!-- Sounds & notifications > Touch sounds: Title for the option enabling haptic feedback on touch. [CHAR LIMIT=NONE] -->
+    <string name="vibrate_on_touch_title">Vibrate on touch</string>
+
+    <!-- Sounds & notifications: Title for managing notification listeners option. [CHAR LIMIT=NONE] -->
+    <string name="manage_notification_access_title">Notification access</string>
+
+    <!-- Summary of preference to manage notification listeners, when none are enabled -->
+    <string name="manage_notification_access_summary_zero">Apps cannot read notifications</string>
+
+    <!-- Summary of preference to manage notification listeners, when one or more are enabled
+         and are therefore able to read the user's notifications -->
+    <plurals name="manage_notification_access_summary_nonzero">
+        <item quantity="one">%d app can read notifications</item>
+        <item quantity="other">%d apps can read notifications</item>
+    </plurals>
+
+    <!-- String to show in the list of notification listeners, when none is installed -->
+    <string name="no_notification_listeners">No notification listeners are installed.</string>
+
+    <!-- Title for a warning message about security implications of enabling a notification
+          listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
+    <string name="notification_listener_security_warning_title">Enable
+         <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
+    <!-- Summary for a warning message about security implications of enabling a notification
+          listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
+    <string name="notification_listener_security_warning_summary">
+        <xliff:g id="notification_listener_name">%1$s</xliff:g> will be able to
+        read all notifications posted by the system or any installed app, which may include personal
+        information such as contact names and the text of messages sent to you. It will also be able
+        to dismiss these notifications or touch action buttons within them.
+    </string>
+
+    <!-- Title of preference to manage condition providers -->
+    <string name="manage_condition_providers">Condition providers</string>
+
+    <!-- Summary of preference to manage condition providers, when none are enabled -->
+    <string name="manage_condition_providers_summary_zero">No apps provide conditions</string>
+
+    <!-- Summary of preference to manage condition providers, when one or more are enabled -->
+    <plurals name="manage_condition_providers_summary_nonzero">
+        <item quantity="one">%d app provides conditions</item>
+        <item quantity="other">%d apps provide conditions</item>
+    </plurals>
+
+    <!-- String to show in the list of condition providers, when none is installed -->
+    <string name="no_condition_providers">No condition providers are installed.</string>
+
+    <!-- Title for a warning message about security implications of enabling a condition
+          provider, displayed as a dialog message. [CHAR LIMIT=NONE] -->
+    <string name="condition_provider_security_warning_title">Enable
+         <xliff:g id="service" example="ConditionProvider">%1$s</xliff:g>?</string>
+    <!-- Summary for a warning message about security implications of enabling a condition
+          provider, displayed as a dialog message. [CHAR LIMIT=NONE] -->
+    <string name="condition_provider_security_warning_summary">
+        <xliff:g id="condition_provider_name">%1$s</xliff:g> will be able to
+        add exit conditions to Do not disturb mode.
+    </string>
+
     <!-- [CHAR LIMIT=NONE] Text when loading app list in notification settings -->
     <string name="loading_notification_apps">Loading apps...</string>
 
-    <!-- [CHAR LIMIT=40] Notification settings: App notifications screen title -->
-    <string name="app_notifications_title">App notifications</string>
-
-    <!-- [CHAR LIMIT=30] Notification settings: App notifications dialog show option -->
+    <!-- [CHAR LIMIT=NONE] Notification settings: App notifications dialog show option -->
     <string name="app_notifications_dialog_show">Show notifications</string>
 
-    <!-- [CHAR LIMIT=30] Notification settings: App notifications dialog priority option -->
-    <string name="app_notifications_dialog_priority">High priority</string>
+    <!-- [CHAR LIMIT=NONE] Notification settings: App notifications dialog priority option -->
+    <string name="app_notifications_dialog_priority">Display at the top of the list</string>
+
+    <!-- [CHAR LIMIT=NONE] Notification settings: App notifications dialog visibility option -->
+    <string name="app_notifications_dialog_visibility">Hide sensitive content when device is locked</string>
+
+    <!-- [CHAR LIMIT=20] Notification settings: App notifications row summary when banned -->
+    <string name="app_notification_row_banned">Blocked</string>
+
+    <!-- [CHAR LIMIT=20] Notification settings: App notifications row summary when high priority -->
+    <string name="app_notification_row_priority">Top of list</string>
+
+    <!-- [CHAR LIMIT=20] Notification settings: App notifications row summary when sensitive -->
+    <string name="app_notification_row_sensitive">Sensitive</string>
 
     <!-- [CHAR LIMIT=20] Notification settings: App notifications dialog dismiss button caption -->
     <string name="app_notifications_dialog_done">Done</string>
 
-    <!-- [CHAR LIMIT=20] Zen mode settings: Master switch option title, off -->
-    <string name="zen_mode_option_off">Off</string>
-
-    <!-- [CHAR LIMIT=20] Zen mode settings: Master switch option title, on -->
-    <string name="zen_mode_option_on">On</string>
-
     <!-- [CHAR LIMIT=30] Zen mode settings: Exit condition selection dialog, default option -->
     <string name="zen_mode_default_option">Until you turn this off</string>
 
@@ -5194,8 +5225,8 @@
     <!-- [CHAR LIMIT=40] Zen mode settings: Entry conditions option: title -->
     <string name="zen_mode_entry_conditions_title">Automatically turn on</string>
 
-    <!-- [CHAR LIMIT=40] Zen mode settings: Entry conditions option: summary condition divider -->
-    <string name="zen_mode_entry_conditions_summary_divider">, </string>
+    <!-- [CHAR LIMIT=40] General divider text when concatenating multiple items in a text summary -->
+    <string name="summary_divider_text">, </string>
 
     <!-- [CHAR LIMIT=40] Zen mode settings: Entry conditions option: value when blank -->
     <string name="zen_mode_entry_conditions_summary_none">Never</string>
@@ -5242,6 +5273,14 @@
     <!-- [CHAR LIMIT=20] Zen mode settings: End time option: Summary text value format -->
     <string name="zen_mode_end_time_summary_format"><xliff:g id="formatted_time">%s</xliff:g> next day</string>
 
+    <!-- [CHAR LIMIT=20] Notifications settings: Apps section header -->
+    <string name="notification_settings_apps_title">App notifications</string>
+
+    <!-- [CHAR LIMIT=NONE] Content description for per-app notification
+         settings button -->
+    <string name="notification_app_settings_button">Notification settings</string>
+
+
    <!-- [CHAR LIMIT=35] Feedback on the device -->
    <string name="device_feedback">Send feedback about this device</string>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index f9e7b2b..568297f 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -86,9 +86,6 @@
         <item name="android:windowContentOverlay">@null</item>
     </style>
 
-    <style name="Theme.CreateShortCut" parent="android:Theme.Quantum.Light.DialogWhenLarge">
-    </style>
-
     <style name="PreferenceHeaderPanelSinglePane">
         <item name="android:layout_marginStart">0dp</item>
         <item name="android:layout_marginEnd">0dp</item>
@@ -242,10 +239,6 @@
         <item name="android:widgetLayout">@layout/preference_inputmethod_widget</item>
     </style>
 
-    <style name="TextAppearance.Switch" parent="@*android:style/TextAppearance.Quantum.Widget.Switch">
-        <item name="android:textAllCaps">true</item>
-    </style>
-
     <style name="TextAppearance.PagerTabs" parent="@android:style/TextAppearance.Quantum.Small">
         <item name="android:textAllCaps">true</item>
         <item name="android:textStyle">bold</item>
@@ -262,7 +255,13 @@
         <item name="android:layout">@layout/apn_preference_layout</item>
     </style>
 
-    <style name="TextAppearance.Switch" parent="@android:style/TextAppearance.Quantum.Medium">
-        <item name="android:textSize">16sp</item>
+    <style name="TextAppearance.Medium" parent="@android:style/TextAppearance.Quantum.Medium">
     </style>
+
+    <style name="TextAppearance.Small" parent="@android:style/TextAppearance.Quantum.Small">
+    </style>
+
+    <style name="TextAppearance.Switch" parent="TextAppearance.Medium">
+    </style>
+
 </resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 97dc0d4..c39910b 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -59,7 +59,19 @@
         <item name="wifi_signal">@drawable/wifi_signal_light</item>
     </style>
 
-    <style name="Theme.Settings" parent="@android:style/Theme.Quantum.Light">
+    <style name="Theme.CreateShortCut" parent="android:Theme.Quantum.Light.DialogWhenLarge">
+        <item name="android:actionBarWidgetTheme">@android:style/ThemeOverlay.Quantum.ActionBarWidget</item>
+        <item name="android:actionBarTheme">@android:style/ThemeOverlay.Quantum.Dark</item>
+
+        <item name="android:colorPrimary">@color/actionbar_background_color</item>
+        <!-- Used by the bouncing effect for ListView and ScrollView -->
+        <item name="android:colorPrimaryLight">@color/actionbar_background_color</item>
+        <!-- Used by the StatusBar and NavBar -->
+        <item name="android:colorPrimaryDark">@color/actionbar_background_color</item>
+        <item name="android:colorAccent">@color/quantum_orange_A200</item>
+    </style>
+
+    <style name="Theme.Settings" parent="@android:style/Theme.Quantum.Light.DarkActionBar">
         <item name="@*android:preferenceHeaderPanelStyle">@style/PreferenceHeaderPanelSinglePane</item>
         <item name="@*android:preferencePanelStyle">@style/PreferencePanelSinglePane</item>
         <item name="@*android:preferenceListStyle">@style/PreferenceHeaderListSinglePane</item>
@@ -71,22 +83,11 @@
         <item name="ic_wps">@drawable/ic_wps_dark</item>
         <item name="wifi_signal">@drawable/wifi_signal_dark</item>
 
-        <item name="android:actionBarTheme">@style/Theme.Settings.ActionBar.Quantum</item>
-
         <item name="android:colorPrimary">@color/actionbar_background_color</item>
-        <item name="android:colorPrimaryLight">@color/quantum_blue_grey_100</item>
-        <item name="android:colorPrimaryDark">@color/quantum_blue_grey_700</item>
-        <item name="android:colorAccent">@color/quantum_orange_A200</item>
-    </style>
-
-    <style name="Theme.Settings.ActionBar.Quantum" parent="@android:style/Theme.Quantum">
-        <!--Set the background color-->
-        <item name="android:colorPrimary">@color/actionbar_background_color</item>
-        <!--Set the activated state color for the on/off switches-->
-        <item name="android:colorControlActivated">?android:attr/colorControlNormal</item>
-        <!--Other colors-->
-        <item name="android:colorPrimaryLight">@color/quantum_blue_grey_100</item>
-        <item name="android:colorPrimaryDark">@color/quantum_blue_grey_700</item>
+        <!-- Used by the bouncing effect for ListView and ScrollView -->
+        <item name="android:colorPrimaryLight">@color/actionbar_background_color</item>
+        <!-- Used by the StatusBar and NavBar -->
+        <item name="android:colorPrimaryDark">@color/actionbar_background_color</item>
         <item name="android:colorAccent">@color/quantum_orange_A200</item>
     </style>
 
diff --git a/res/xml/notification_display_settings.xml b/res/xml/notification_display_settings.xml
new file mode 100644
index 0000000..d5cade1
--- /dev/null
+++ b/res/xml/notification_display_settings.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/notification_display_settings"
+        android:key="notification_display_settings"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+    <!-- Pulse notification light -->
+    <SwitchPreference
+            android:key="notification_pulse"
+            android:title="@string/notification_pulse_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
+            android:persistent="false" />
+
+     <!-- When device is locked -->
+    <com.android.settings.notification.DropDownPreference
+            android:key="lock_screen_notifications"
+            android:title="@string/lock_screen_notifications_title"
+            android:persistent="false" />
+
+    <!-- When do not disturb is on -->
+    <com.android.settings.notification.DropDownPreference
+            android:key="zen_mode_notifications"
+            android:title="@string/zen_mode_notifications_title"
+            android:persistent="false" />
+
+    <!-- App notifications -->
+    <PreferenceScreen
+            android:key="app_notifications"
+            android:title="@string/app_notifications_title"
+            android:fragment="com.android.settings.notification.AppNotificationSettings" />
+
+</PreferenceScreen>
diff --git a/res/xml/notification_settings.xml b/res/xml/notification_settings.xml
index 8cc1069..633c133 100644
--- a/res/xml/notification_settings.xml
+++ b/res/xml/notification_settings.xml
@@ -19,41 +19,78 @@
         android:key="notification_settings"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
+    <!-- Media volume -->
+    <com.android.settings.notification.VolumeSeekBarPreference
+            android:key="media_volume"
+            android:icon="@*android:drawable/ic_audio_vol"
+            android:title="@string/media_volume_option_title" />
+
+    <!-- Alarm volume -->
+    <com.android.settings.notification.VolumeSeekBarPreference
+            android:key="alarm_volume"
+            android:icon="@*android:drawable/ic_audio_alarm"
+            android:title="@string/alarm_volume_option_title" />
+
+    <!-- Ring volume -->
+    <com.android.settings.notification.VolumeSeekBarPreference
+            android:key="ring_volume"
+            android:icon="@*android:drawable/ic_audio_ring_notif"
+            android:title="@string/ring_volume_option_title" />
+
+    <!-- Do not disturb -->
+    <PreferenceScreen
+            android:key="zen_mode"
+            android:title="@string/zen_mode_settings_title"
+            android:fragment="com.android.settings.notification.ZenModeSettings" />
+
+    <!-- When calls and notifications arrive -->
+    <com.android.settings.notification.DropDownPreference
+            android:key="ringer_mode"
+            android:title="@string/ringer_mode_title"
+            android:persistent="false" />
+
+    <!-- Phone ringtone -->
     <com.android.settings.DefaultRingtonePreference
-            android:key="notification_sound"
-            android:title="@string/default_sound"
-            android:dialogTitle="@string/notification_sound_dialog_title"
+            android:key="ringtone"
+            android:title="@string/ringtone_title"
+            android:dialogTitle="@string/ringtone_title"
+            android:persistent="false"
+            android:ringtoneType="ringtone" />
+
+    <!-- Default notification ringtone -->
+    <com.android.settings.DefaultRingtonePreference
+            android:key="notification_ringtone"
+            android:title="@string/notification_ringtone_title"
+            android:dialogTitle="@string/notification_ringtone_title"
             android:persistent="false"
             android:ringtoneType="notification" />
 
-    <CheckBoxPreference
-            android:key="notification_pulse"
-            android:title="@string/notification_pulse_title"
+    <!-- Vibrate when ringing -->
+    <SwitchPreference
+            android:key="vibrate_when_ringing"
+            android:title="@string/vibrate_when_ringing_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
             android:persistent="false" />
 
-    <CheckBoxPreference
-            android:key="heads_up"
-            android:title="@string/heads_up_enabled_title"
-            android:persistent="false" />
+    <!-- Showing notifications -->
+    <Preference
+            android:key="showing_notifications"
+            android:title="@string/notification_display_settings"
+            android:persistent="false"
+            android:fragment="com.android.settings.notification.NotificationDisplaySettings" />
 
-    <com.android.settings.notification.DropDownPreference
-            android:key="toggle_lock_screen_notifications"
-            android:title="@string/lock_screen_notifications"
-            android:persistent="false" />
+    <!-- Touch sounds -->
+    <Preference
+            android:key="touch_sounds"
+            android:title="@string/touch_sound_settings"
+            android:persistent="false"
+            android:fragment="com.android.settings.notification.TouchSoundSettings" />
 
-    <PreferenceScreen
-            android:key="configure"
-            android:title="@string/notification_settings_apps_title"
-            android:fragment="com.android.settings.notification.AppNotificationSettings" />
-
-    <PreferenceScreen
-            android:key="zen_mode"
-            android:title="@string/title_zen_mode"
-            android:fragment="com.android.settings.notification.ZenModeSettings" />
-
+    <!-- Notification access -->
     <Preference
             android:key="manage_notification_access"
-            android:title="@string/manage_notification_access"
+            android:title="@string/manage_notification_access_title"
             android:persistent="false"
             android:fragment="com.android.settings.notification.NotificationAccessSettings" />
 
diff --git a/res/xml/security_settings_biometric_weak.xml b/res/xml/security_settings_biometric_weak.xml
index 7226c6c..c663492 100644
--- a/res/xml/security_settings_biometric_weak.xml
+++ b/res/xml/security_settings_biometric_weak.xml
@@ -57,11 +57,6 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
-        <PreferenceScreen
-            android:key="nfc_unlock_set_or_change"
-            android:title="@string/nfc_unlock_title"
-            android:persistent="false"/>
-
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_chooser.xml b/res/xml/security_settings_chooser.xml
index f6e2e89..d17366e 100644
--- a/res/xml/security_settings_chooser.xml
+++ b/res/xml/security_settings_chooser.xml
@@ -32,11 +32,6 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
-        <PreferenceScreen
-            android:key="nfc_unlock_set_or_change"
-            android:title="@string/nfc_unlock_title"
-            android:persistent="false"/>
-
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index 0380716..b418aa7 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -44,11 +44,6 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
-        <PreferenceScreen
-            android:key="nfc_unlock_set_or_change"
-            android:title="@string/nfc_unlock_title"
-            android:persistent="false"/>
-
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index 8a8cb63..d47a99d 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -48,11 +48,6 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
-        <PreferenceScreen
-            android:key="nfc_unlock_set_or_change"
-            android:title="@string/nfc_unlock_title"
-            android:persistent="false"/>
-
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index c114631..c1aac48 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -44,11 +44,6 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
-        <PreferenceScreen
-            android:key="nfc_unlock_set_or_change"
-            android:title="@string/nfc_unlock_title"
-            android:persistent="false"/>
-
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_unencrypted.xml b/res/xml/security_settings_unencrypted.xml
index 00213df..947317c 100644
--- a/res/xml/security_settings_unencrypted.xml
+++ b/res/xml/security_settings_unencrypted.xml
@@ -23,7 +23,6 @@
         <PreferenceScreen
             android:key="encryption"
             android:title="@string/crypt_keeper_encrypt_title"
-            android:summary="@string/crypt_keeper_encrypt_summary"
             android:fragment="com.android.settings.CryptKeeperSettings" />
     
     </PreferenceCategory>
diff --git a/res/xml/touch_sound_settings.xml b/res/xml/touch_sound_settings.xml
new file mode 100644
index 0000000..d10ef0d
--- /dev/null
+++ b/res/xml/touch_sound_settings.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/touch_sound_settings"
+        android:key="touch_sound_settings"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+    <!-- Dial pad tones -->
+    <SwitchPreference
+            android:key="dial_pad_tones"
+            android:title="@string/dial_pad_tones_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
+            android:persistent="false" />
+
+    <!-- Screen locking / unlocking -->
+    <SwitchPreference
+            android:key="screen_locking_sounds"
+            android:title="@string/screen_locking_sounds_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
+            android:persistent="false" />
+
+    <!-- Other touch sounds -->
+    <SwitchPreference
+            android:key="other_touch_sounds"
+            android:title="@string/other_touch_sounds_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
+            android:persistent="false" />
+
+    <!-- Vibrate on touch -->
+    <SwitchPreference
+            android:key="vibrate_on_touch"
+            android:title="@string/vibrate_on_touch_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
+            android:persistent="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index b1ec8ad..35732d6 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -19,15 +19,9 @@
     android:key="zen_mode_settings"
     android:title="@string/zen_mode_settings_title" >
 
-    <SwitchPreference
-        android:key="zen_mode"
-        android:persistent="false"
-        android:switchTextOff=""
-        android:switchTextOn="" />
-
     <PreferenceCategory
         android:key="general"
-        android:layout="@layout/zen_mode_section"
+        android:layout="@layout/zen_mode_section_first"
         android:title="@string/zen_mode_general_category" >
         <SwitchPreference
             android:key="phone_calls"
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java
index 1efe98f..661e304 100644
--- a/src/com/android/settings/CryptKeeper.java
+++ b/src/com/android/settings/CryptKeeper.java
@@ -120,6 +120,8 @@
     private LockPatternView mLockPatternView;
     /** Number of calls to {@link #notifyUser()} to ignore before notifying. */
     private int mNotificationCountdown = 0;
+    /** Number of calls to {@link #notifyUser()} before we release the wakelock */
+    private int mReleaseWakeLockCountdown = 0;
 
     /**
      * Used to propagate state through configuration changes (e.g. screen rotation)
@@ -287,6 +289,14 @@
         // Notify the user again in 5 seconds.
         mHandler.removeMessages(MESSAGE_NOTIFY);
         mHandler.sendEmptyMessageDelayed(MESSAGE_NOTIFY, 5 * 1000);
+
+        if (mWakeLock.isHeld()) {
+            if (mReleaseWakeLockCountdown > 0) {
+                --mReleaseWakeLockCountdown;
+            } else {
+                mWakeLock.release();
+            }
+        }
     }
 
     /**
@@ -388,9 +398,11 @@
                 public void onPostExecute(java.lang.Void v) {
                     if(type == StorageManager.CRYPT_TYPE_PIN) {
                         setContentView(R.layout.crypt_keeper_pin_entry);
+                        ((TextView)findViewById(R.id.status)).setText(R.string.enter_pin);
                     } else if (type == StorageManager.CRYPT_TYPE_PATTERN) {
                         setContentView(R.layout.crypt_keeper_pattern_entry);
                         setBackFunctionality(false);
+                        ((TextView)findViewById(R.id.status)).setText(R.string.enter_pattern);
                     } else {
                         setContentView(R.layout.crypt_keeper_password_entry);
                     }
@@ -624,8 +636,12 @@
             if (pm != null) {
                 mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
                 mWakeLock.acquire();
+                // Keep awake for 10 minutes - if the user hasn't been alerted by then
+                // best not to just drain their battery
+                mReleaseWakeLockCountdown = 96; // 96 * 5 + 120 = 600
             }
         }
+
         // Asynchronously throw up the IME, since there are issues with requesting it to be shown
         // immediately.
         if (mLockPatternView == null) {
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index d21e4ab..cc7a116 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -387,19 +387,6 @@
             mEnabledSwitch.setEnabled(false);
             return;
         }
-        mSwitchBar.addOnSwitchChangeListener(this);
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        mSwitchBar.show();
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        mSwitchBar.hide();
     }
 
     private boolean removePreferenceForProduction(Preference preference) {
@@ -464,6 +451,17 @@
             mEnabledSwitch.setChecked(mLastEnabledState);
             setPrefsEnabledState(mLastEnabledState);
         }
+
+        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchBar.show();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        mSwitchBar.removeOnSwitchChangeListener(this);
+        mSwitchBar.hide();
     }
 
     void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java
index 9119f7b..1175639 100644
--- a/src/com/android/settings/DreamSettings.java
+++ b/src/com/android/settings/DreamSettings.java
@@ -16,7 +16,6 @@
 
 package com.android.settings;
 
-import android.app.ActionBar;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -27,7 +26,6 @@
 import android.content.IntentFilter;
 import android.os.Bundle;
 import android.util.Log;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -39,8 +37,6 @@
 import android.view.View.OnTouchListener;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.RadioButton;
@@ -48,10 +44,12 @@
 import android.widget.TextView;
 
 import com.android.settings.DreamBackend.DreamInfo;
+import com.android.settings.widget.SwitchBar;
 
 import java.util.List;
 
-public class DreamSettings extends SettingsPreferenceFragment {
+public class DreamSettings extends SettingsPreferenceFragment implements
+        SwitchBar.OnSwitchChangeListener {
     private static final String TAG = DreamSettings.class.getSimpleName();
     static final boolean DEBUG = false;
     private static final int DIALOG_WHEN_TO_DREAM = 1;
@@ -62,6 +60,7 @@
     private Context mContext;
     private DreamBackend mBackend;
     private DreamInfoAdapter mAdapter;
+    private SwitchBar mSwitchBar;
     private Switch mSwitch;
     private MenuItem[] mMenuItemsWhenEnabled;
     private boolean mRefreshing;
@@ -83,46 +82,28 @@
         logd("onCreate(%s)", icicle);
         super.onCreate(icicle);
 
-        final Activity activity = getActivity();
-
-        mBackend = new DreamBackend(activity);
-        mSwitch = new Switch(activity.getActionBar().getThemedContext());
-        mSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                if (!mRefreshing) {
-                    mBackend.setEnabled(isChecked);
-                    refreshFromBackend();
-                }
-            }
-        });
-
-        final int padding = activity.getResources().getDimensionPixelSize(
-                R.dimen.action_bar_switch_padding);
-        mSwitch.setPaddingRelative(0, 0, padding, 0);
+        mBackend = new DreamBackend(getActivity());
 
         setHasOptionsMenu(true);
     }
 
     @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        if (!mRefreshing) {
+            mBackend.setEnabled(isChecked);
+            refreshFromBackend();
+        }
+    }
+
+    @Override
     public void onStart() {
         logd("onStart()");
         super.onStart();
-
-        final ActionBar actionBar = getActivity().getActionBar();
-
-        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
-                ActionBar.DISPLAY_SHOW_CUSTOM);
-        actionBar.setCustomView(mSwitch, new ActionBar.LayoutParams(
-                ActionBar.LayoutParams.WRAP_CONTENT,
-                ActionBar.LayoutParams.WRAP_CONTENT,
-                Gravity.CENTER_VERTICAL | Gravity.END));
     }
 
     @Override
     public void onDestroyView() {
         logd("onDestroyView()");
-        getActivity().getActionBar().setCustomView(null);
         super.onDestroyView();
     }
 
@@ -140,6 +121,10 @@
 
         mAdapter = new DreamInfoAdapter(mContext);
         listView.setAdapter(mAdapter);
+
+        final SettingsActivity sa = (SettingsActivity) getActivity();
+        mSwitchBar = sa.getSwitchBar();
+        mSwitch = mSwitchBar.getSwitch();
     }
 
     @Override
@@ -225,7 +210,11 @@
     public void onPause() {
         logd("onPause()");
         super.onPause();
+
         mContext.unregisterReceiver(mPackageReceiver);
+
+        mSwitchBar.removeOnSwitchChangeListener(this);
+        mSwitchBar.hide();
     }
 
     @Override
@@ -242,6 +231,9 @@
         filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
         filter.addDataScheme(PACKAGE_SCHEME);
         mContext.registerReceiver(mPackageReceiver , filter);
+
+        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchBar.show();
     }
 
     public static int getSummaryResource(Context context) {
diff --git a/src/com/android/settings/HighlightingFragment.java b/src/com/android/settings/HighlightingFragment.java
index a1d6be0..3595eec 100644
--- a/src/com/android/settings/HighlightingFragment.java
+++ b/src/com/android/settings/HighlightingFragment.java
@@ -83,8 +83,9 @@
                 public void run() {
                     final int centerX = view.getWidth() / 2;
                     final int centerY = view.getHeight() / 2;
-                    highlight.setHotspot(0, centerX, centerY);
-                    highlight.clearHotspots();
+                    highlight.setHotspot(centerX, centerY);
+                    view.setPressed(true);
+                    view.setPressed(false);
                 }
             }, DELAY_HIGHLIGHT_DURATION_MILLIS);
 
diff --git a/src/com/android/settings/NfcLockFragment.java b/src/com/android/settings/NfcLockFragment.java
deleted file mode 100644
index b7bf6f7..0000000
--- a/src/com/android/settings/NfcLockFragment.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2013 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.nfc.NfcAdapter;
-import android.nfc.NfcUnlock;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-
-import android.preference.PreferenceCategory;
-import android.util.Log;
-import com.android.internal.widget.LockPatternUtils;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-import static android.preference.Preference.OnPreferenceClickListener;
-
-public class NfcLockFragment extends SettingsPreferenceFragment {
-
-    private static final String NFC_PAIRING = "nfc_pairing";
-    private static final String NFC_UNLOCK_ENABLED = "nfc_unlock_enabled";
-    private static final String TAGS_CATEGORY = "nfc_unlock_tags_category";
-    private static final String TAG_FORMAT = "Tag # %d";
-
-    private NfcUnlock mNfcUnlock;
-    private LockPatternUtils mLockPatternUtils;
-    private NfcAdapter mNfcAdapter;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mNfcUnlock = NfcUnlock.getInstance(NfcAdapter.getDefaultAdapter(getActivity()));
-        mLockPatternUtils = new LockPatternUtils(getActivity());
-        mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
-        addPreferencesFromResource(R.xml.security_settings_nfc_unlock);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        boolean prefsEnabled = (mLockPatternUtils.isLockPasswordEnabled() ||
-                mLockPatternUtils.isLockPatternEnabled()) && mNfcAdapter.isEnabled();
-        CheckBoxPreference unlockPref = (CheckBoxPreference) findPreference(NFC_UNLOCK_ENABLED);
-        unlockPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                mNfcUnlock.setNfcUnlockEnabled((Boolean) newValue);
-                return true;
-            }
-        });
-        Preference pairingPref = findPreference(NFC_PAIRING);
-        unlockPref.setEnabled(prefsEnabled);
-        pairingPref.setEnabled(prefsEnabled);
-
-        long[] tagRegistryTimes = mNfcUnlock.getTagRegistryTimes();
-        unlockPref.setChecked(mNfcUnlock.getNfcUnlockEnabled());
-
-        final PreferenceCategory pairedTags = (PreferenceCategory) findPreference(TAGS_CATEGORY);
-        pairedTags.setEnabled(prefsEnabled);
-
-        loadTagList(tagRegistryTimes, pairedTags);
-    }
-
-    private void loadTagList(long[] tagRegistryTimes, final PreferenceCategory pairedTags) {
-        pairedTags.removeAll();
-
-        for (int i = 0; i < tagRegistryTimes.length; i++) {
-
-            final Preference thisPreference = new Preference(getActivity());
-            final long timestamp = tagRegistryTimes[i];
-
-            thisPreference.setTitle(String.format(TAG_FORMAT, i));
-            thisPreference.setSummary(
-                    DateFormat.getDateTimeInstance().format(new Date(tagRegistryTimes[i])));
-            thisPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
-                @Override
-                public boolean onPreferenceClick(Preference preference) {
-
-                    AlertDialog.Builder deleteDialogBuilder = new AlertDialog.Builder(getActivity());
-
-                    deleteDialogBuilder.setTitle(thisPreference.getTitle());
-                    deleteDialogBuilder.setItems(new String[] {"Delete"},
-                            new DialogInterface.OnClickListener() {
-                                @Override
-                                public void onClick(DialogInterface dialog, int which) {
-                                    if (which == 0) {
-                                        if (mNfcUnlock.deregisterTag(timestamp)) {
-                                            loadTagList(mNfcUnlock.getTagRegistryTimes(),
-                                                    pairedTags);
-                                        }
-                                    }
-                                }
-                            });
-
-
-                    deleteDialogBuilder.show();
-
-                    return true;
-                }
-            });
-
-
-            pairedTags.addPreference(thisPreference);
-        }
-    }
-}
diff --git a/src/com/android/settings/PairNfcDevice.java b/src/com/android/settings/PairNfcDevice.java
deleted file mode 100644
index 7c75b9f..0000000
--- a/src/com/android/settings/PairNfcDevice.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2013 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.app.PendingIntent;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.nfc.NfcAdapter;
-import android.nfc.NfcUnlock;
-import android.nfc.Tag;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.provider.Settings;
-import android.view.Menu;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class PairNfcDevice extends Activity {
-    private static String TAG = PairNfcDevice.class.getName();
-
-    private TextView mStatusText;
-    private ImageView mStatusImage;
-
-    private PendingIntent mPendingIntent;
-    private NfcAdapter mAdapter;
-
-    private Handler mHandler = new Handler();
-    private PowerManager.WakeLock mWakeLock;
-
-    private NfcUnlock mNfcUnlock;
-
-    // If pairing fails, we immediately get a new intent that would not leave time for the user to
-    // read the error message.  So we'll just drop it and the user has to try again.
-    // TEST
-    private boolean mWaitingForDeviceDelayed;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_nfc_pairing);
-
-        mStatusText = (TextView) findViewById(R.id.status_text);
-        mStatusImage = (ImageView) findViewById(R.id.status_image);
-
-        mAdapter = NfcAdapter.getDefaultAdapter(this);
-        mPendingIntent = PendingIntent.getActivity(
-                this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
-
-        mNfcUnlock = NfcUnlock.getInstance(mAdapter);
-
-        setWaitingForDeviceMode();
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        return false;
-    }
-
-    public void onPause() {
-        super.onPause();
-        mAdapter.disableForegroundDispatch(this);
-        if (mWakeLock != null) {
-            mWakeLock.release();
-        }
-    }
-
-    public void onResume() {
-        super.onResume();
-
-        if (!mAdapter.isEnabled()) {
-            // We need the user to start NFC.
-            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
-            dialogBuilder.setMessage(R.string.enable_nfc);
-            dialogBuilder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
-                public void onClick(DialogInterface dialog, int id) {
-                    startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
-                }
-            });
-            dialogBuilder.show();
-        }
-
-        mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
-
-        if (mWakeLock == null) {
-            PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
-            mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG);
-        }
-        mWakeLock.acquire();
-    }
-
-    @Override
-    public void onNewIntent(Intent intent) {
-        Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
-        if (!mWaitingForDeviceDelayed) {
-            processTag(tag);
-        }
-    }
-
-    private void processTag(Tag tag) {
-        if (mNfcUnlock.registerTag(tag)) {
-            setPairingSucceededMode();
-        } else {
-            setPairingFailedMode();
-        }
-    }
-
-    private void setWaitingForDeviceModeDelayed(int delayInMs) {
-        mWaitingForDeviceDelayed = true;
-        mHandler.postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                mWaitingForDeviceDelayed = false;
-                setWaitingForDeviceMode();
-            }
-        }, delayInMs);
-    }
-
-    private void setWaitingForDeviceMode() {
-        mStatusImage.setImageResource(R.drawable.no_ring_detected);
-        mStatusText.setText(R.string.status_no_ring_detected);
-    }
-
-    private void setPairingFailedMode() {
-        setErrorMode(R.string.status_error_pairing_failed);
-    }
-
-    private void setPairingSucceededMode() {
-        mStatusImage.setImageResource(R.drawable.ring_paired);
-        mStatusText.setText(R.string.status_device_paired);
-
-        // Automatically quit.
-        mHandler.postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                finish();
-            }
-        }, 1000);
-    }
-
-    private void setErrorMode(int errorMsgResourceId) {
-        mStatusText.setText(errorMsgResourceId);
-        setWaitingForDeviceModeDelayed(2500);
-    }
-}
diff --git a/src/com/android/settings/RingerVolumePreference.java b/src/com/android/settings/RingerVolumePreference.java
index dd81ded..0f28e06 100644
--- a/src/com/android/settings/RingerVolumePreference.java
+++ b/src/com/android/settings/RingerVolumePreference.java
@@ -34,6 +34,7 @@
 import android.os.Message;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.preference.SeekBarVolumizer;
 import android.preference.VolumePreference;
 import android.provider.Settings;
 import android.provider.Settings.System;
@@ -173,10 +174,10 @@
             mSeekBars[i] = seekBar;
             if (SEEKBAR_TYPE[i] == AudioManager.STREAM_MUSIC) {
                 mSeekBarVolumizer[i] = new SeekBarVolumizer(getContext(), seekBar,
-                        SEEKBAR_TYPE[i], getMediaVolumeUri(getContext()));
+                        SEEKBAR_TYPE[i], getMediaVolumeUri(getContext()), this);
             } else {
                 mSeekBarVolumizer[i] = new SeekBarVolumizer(getContext(), seekBar,
-                        SEEKBAR_TYPE[i]);
+                        SEEKBAR_TYPE[i], null, this);
             }
         }
 
@@ -275,7 +276,7 @@
     }
 
     @Override
-    protected void onSampleStarting(SeekBarVolumizer volumizer) {
+    public void onSampleStarting(SeekBarVolumizer volumizer) {
         super.onSampleStarting(volumizer);
         for (SeekBarVolumizer vol : mSeekBarVolumizer) {
             if (vol != null && vol != volumizer) vol.stopSample();
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 0ab9ea7..00d1d89 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -20,7 +20,6 @@
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
 
 import android.app.Activity;
-import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
@@ -30,7 +29,6 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
-import android.nfc.NfcUnlock;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -54,8 +52,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import static com.android.settings.search.SearchIndexableResources.RANK_SECURITY;
-
 /**
  * Gesture lock pattern settings.
  */
@@ -65,7 +61,6 @@
 
     // Lock Settings
     private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change";
-    private static final String KEY_NFC_UNLOCK_SET_OR_CHANGE = "nfc_unlock_set_or_change";
     private static final String KEY_BIOMETRIC_WEAK_IMPROVE_MATCHING =
             "biometric_weak_improve_matching";
     private static final String KEY_BIOMETRIC_WEAK_LIVELINESS = "biometric_weak_liveliness";
@@ -238,19 +233,6 @@
             }
         }
 
-        // don't display NFC unlock settings if the prop is not enabled
-        if (!NfcUnlock.getPropertyEnabled()) {
-            PreferenceGroup securityCategory =
-                    (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY);
-
-            if (securityCategory != null) {
-                Preference preference = root.findPreference(KEY_NFC_UNLOCK_SET_OR_CHANGE);
-                if (preference != null) {
-                    securityCategory.removePreference(preference);
-                }
-            }
-        }
-
         // Append the rest of the settings
         addPreferencesFromResource(R.xml.security_settings_misc);
 
@@ -490,9 +472,6 @@
         if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) {
             startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment",
                     SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
-        } else if (KEY_NFC_UNLOCK_SET_OR_CHANGE.equals(key)) {
-            startFragment(this, "com.android.settings.NfcLockFragment",
-                    SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
         } else if (KEY_BIOMETRIC_WEAK_IMPROVE_MATCHING.equals(key)) {
             ChooseLockSettingsHelper helper =
                     new ChooseLockSettingsHelper(this.getActivity(), this);
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 25378086..38176eb 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -88,6 +88,9 @@
     public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class NotificationSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class NotificationDisplaySettingsActivity extends SettingsActivity { /* empty */ }
+    public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class TouchSoundSettingsActivity extends SettingsActivity { /* empty */ }
 
     public static class TopLevelSettings extends SettingsActivity { /* empty */ }
 }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index fb2f0ac..5b78950 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -470,15 +470,13 @@
             ArrayList<DashboardCategory> categories =
                     savedState.getParcelableArrayList(SAVE_KEY_CATEGORIES);
             if (categories != null) {
+                mCategories.clear();
                 mCategories.addAll(categories);
                 setTitleFromBackStack();
             }
 
             mDisplayHomeAsUpEnabled = savedState.getBoolean(SAVE_KEY_SHOW_HOME_AS_UP);
         } else {
-            // We need to build the Categories in all cases
-            buildDashboardCategories(mCategories);
-
             if (!mIsShowingDashboard) {
                 final ComponentName cn = getIntent().getComponent();
                 // No UP is we are launched thru a Settings shortcut
@@ -493,6 +491,9 @@
                 switchToFragment( initialFragmentName, initialArguments, true, false,
                         mInitialTitle, false);
             } else {
+                // We need to build the Categories in all cases
+                buildDashboardCategories(mCategories);
+
                 // No UP if we are displaying the main Dashboard
                 mDisplayHomeAsUpEnabled = false;
                 if (mCategories.size() > 0) {
@@ -504,34 +505,35 @@
         }
 
         mActionBar = getActionBar();
-        mActionBar.setDisplayHomeAsUpEnabled(mDisplayHomeAsUpEnabled);
-        mActionBar.setHomeButtonEnabled(mDisplayHomeAsUpEnabled);
-
+        if (mActionBar != null) {
+            mActionBar.setDisplayHomeAsUpEnabled(mDisplayHomeAsUpEnabled);
+            mActionBar.setHomeButtonEnabled(mDisplayHomeAsUpEnabled);
+        }
         mSwitchBar = (SwitchBar) findViewById(R.id.switch_bar);
 
         // see if we should show Back/Next buttons
         Intent intent = getIntent();
         if (intent.getBooleanExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)) {
 
-            View buttonBar = findViewById(com.android.internal.R.id.button_bar);
+            View buttonBar = findViewById(R.id.button_bar);
             if (buttonBar != null) {
                 buttonBar.setVisibility(View.VISIBLE);
 
-                Button backButton = (Button)findViewById(com.android.internal.R.id.back_button);
+                Button backButton = (Button)findViewById(R.id.back_button);
                 backButton.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                         setResult(RESULT_CANCELED);
                         finish();
                     }
                 });
-                Button skipButton = (Button)findViewById(com.android.internal.R.id.skip_button);
+                Button skipButton = (Button)findViewById(R.id.skip_button);
                 skipButton.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                         setResult(RESULT_OK);
                         finish();
                     }
                 });
-                mNextButton = (Button)findViewById(com.android.internal.R.id.next_button);
+                mNextButton = (Button)findViewById(R.id.next_button);
                 mNextButton.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                         setResult(RESULT_OK);
@@ -632,8 +634,6 @@
         mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
                 mDevelopmentPreferencesListener);
 
-        invalidateCategories();
-
         registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
 
         mDynamicIndexableContentMonitor.register(this);
@@ -649,17 +649,17 @@
 
         unregisterReceiver(mBatteryInfoReceiver);
 
-        mDevelopmentPreferences.unregisterOnSharedPreferenceChangeListener(
-                mDevelopmentPreferencesListener);
-
-        mDevelopmentPreferencesListener = null;
-
         mDynamicIndexableContentMonitor.unregister();
     }
 
     @Override
     public void onDestroy() {
         super.onDestroy();
+
+        mDevelopmentPreferences.unregisterOnSharedPreferenceChangeListener(
+                mDevelopmentPreferencesListener);
+        mDevelopmentPreferencesListener = null;
+
         if (mListeningToAccountUpdates) {
             AccountManager.get(this).removeOnAccountsUpdatedListener(this);
         }
@@ -816,7 +816,7 @@
      * @param categories The list in which to place the tiles categories.
      */
     private void buildDashboardCategories(List<DashboardCategory> categories) {
-        mCategories.clear();
+        categories.clear();
         loadCategoriesFromResource(R.xml.dashboard_categories, categories);
         updateTilesList(categories);
     }
@@ -1249,7 +1249,8 @@
         if (current != null && current instanceof SearchResultsSummary) {
             mSearchResultsFragment = (SearchResultsSummary) current;
         } else {
-            final boolean isShowingSwitchBar = mSwitchBar.isShowing();
+            final boolean isShowingSwitchBar =
+                    (mSwitchBar != null) ? mSwitchBar.isShowing() : false;
             String title = getString(R.string.search_results_title);
             mSearchResultsFragment = (SearchResultsSummary) switchToFragment(
                     SearchResultsSummary.class.getName(), null, false, true, title,
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 2c290b1..9fbdebe 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -183,10 +183,12 @@
                     listView.postDelayed(new Runnable() {
                         @Override
                         public void run() {
-                            final int centerX = listView.getWidth() / 2;
-                            final int centerY = listView.getChildAt(0).getHeight() / 2;
-                            highlight.setHotspot(0, centerX, centerY);
-                            highlight.clearHotspots();
+                            final View v = listView.getChildAt(0);
+                            final int centerX = v.getWidth() / 2;
+                            final int centerY = v.getHeight() / 2;
+                            highlight.setHotspot(centerX, centerY);
+                            v.setPressed(true);
+                            v.setPressed(false);
                             ((PreferenceGroupAdapter) adapter).setHighlighted(-1);
                         }
                     }, DELAY_HIGHLIGHT_DURATION_MILLIS);
@@ -201,8 +203,9 @@
                 preferenceView.setBackground(highlight);
                 final int centerX = preferenceView.getWidth() / 2;
                 final int centerY = preferenceView.getHeight() / 2;
-                highlight.setHotspot(0, centerX, centerY);
-                highlight.clearHotspots();
+                highlight.setHotspot(centerX, centerY);
+                preferenceView.setPressed(true);
+                preferenceView.setPressed(false);
             }
         }
     }
diff --git a/src/com/android/settings/TrustAgentSettings.java b/src/com/android/settings/TrustAgentSettings.java
index f209ca5..d31436d 100644
--- a/src/com/android/settings/TrustAgentSettings.java
+++ b/src/com/android/settings/TrustAgentSettings.java
@@ -158,8 +158,8 @@
                     && type != XmlPullParser.START_TAG) {
             }
             String nodeName = parser.getName();
-            if (!"trust_agent".equals(nodeName)) {
-                Slog.w(TAG, "Meta-data does not start with trust_agent tag");
+            if (!"trust-agent".equals(nodeName)) {
+                Slog.w(TAG, "Meta-data does not start with trust-agent tag");
                 return null;
             }
             TypedArray sa = res
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
index 810b8b5..5dcf121 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.accessibility;
 
-import android.app.ActionBar;
-import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.Resources;
@@ -29,7 +27,6 @@
 import android.preference.PreferenceFrameLayout;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.provider.Settings;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -39,9 +36,12 @@
 
 import com.android.internal.widget.SubtitleView;
 import com.android.settings.R;
+import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
-import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.ToggleSwitch;
+import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
 
 import java.util.Locale;
 
@@ -69,6 +69,7 @@
     private CaptioningManager mCaptioningManager;
     private SubtitleView mPreviewText;
     private View mPreviewWindow;
+    private SwitchBar mSwitchBar;
     private ToggleSwitch mToggleSwitch;
 
     // Standard options.
@@ -129,14 +130,9 @@
         mPreviewText = (SubtitleView) view.findViewById(R.id.preview_text);
         mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
 
-        final Context context = getActivity().getActionBar().getThemedContext();
-        final int padding = context.getResources().getDimensionPixelSize(
-                R.dimen.action_bar_switch_padding);
-        mToggleSwitch = new ToggleSwitch(context);
-        mToggleSwitch.setPaddingRelative(0, 0, padding, 0);
-        mToggleSwitch.setLayoutParams(new ActionBar.LayoutParams(
-                ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,
-                Gravity.CENTER_VERTICAL | Gravity.END));
+        SettingsActivity activity = (SettingsActivity) getActivity();
+        mSwitchBar = activity.getSwitchBar();
+        mToggleSwitch = mSwitchBar.getSwitch();
         mToggleSwitch.setCheckedInternal(enabled);
 
         mPreviewWindow = view.findViewById(R.id.preview_window);
@@ -149,14 +145,12 @@
     @Override
     public void onResume() {
         super.onResume();
-
-        installActionBarToggleSwitch();
+        installSwitchBarToggleSwitch();
     }
 
     @Override
     public void onPause() {
-        removeActionBarToggleSwitch();
-
+        removeSwitchBarToggleSwitch();
         super.onPause();
     }
 
@@ -205,7 +199,7 @@
         }
     }
 
-    protected void onInstallActionBarToggleSwitch() {
+    protected void onInstallSwitchBarToggleSwitch() {
         mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
             @Override
             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
@@ -221,20 +215,14 @@
         });
     }
 
-    private void installActionBarToggleSwitch() {
-        final ActionBar ab = getActivity().getActionBar();
-        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
-        ab.setCustomView(mToggleSwitch);
-
-        onInstallActionBarToggleSwitch();
+    private void installSwitchBarToggleSwitch() {
+        onInstallSwitchBarToggleSwitch();
+        mSwitchBar.show();
     }
 
-    private void removeActionBarToggleSwitch() {
+    private void removeSwitchBarToggleSwitch() {
+        mSwitchBar.hide();
         mToggleSwitch.setOnBeforeCheckedChangeListener(null);
-
-        final ActionBar ab = getActivity().getActionBar();
-        ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
-        ab.setCustomView(null);
     }
 
     private void initializeAllPreferences() {
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index db473f8..a446f49 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -37,7 +37,8 @@
 import android.widget.TextView;
 
 import com.android.settings.R;
-import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.settings.widget.ToggleSwitch;
+import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -280,8 +281,8 @@
     }
 
     @Override
-    protected void onInstallActionBarToggleSwitch() {
-        super.onInstallActionBarToggleSwitch();
+    protected void onInstallSwitchBarToggleSwitch() {
+        super.onInstallSwitchBarToggleSwitch();
         mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
                 @Override
             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
index 384aafc..b910f796a 100644
--- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -16,25 +16,20 @@
 
 package com.android.settings.accessibility;
 
-import android.accessibilityservice.AccessibilityService;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceScreen;
-import android.preference.SeekBarPreference;
 import android.provider.Settings;
 import android.view.View;
 import android.view.accessibility.AccessibilityManager;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
 
+import android.widget.Switch;
 import com.android.settings.R;
-import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.settings.widget.SwitchBar;
 
 public class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePreferenceFragment
-        implements Preference.OnPreferenceChangeListener {
+        implements Preference.OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener {
     private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED;
     private static final String TYPE = Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER;
     private static final String QUICK_SETTING_ENABLED =
@@ -82,17 +77,18 @@
     }
 
     @Override
-    protected void onInstallActionBarToggleSwitch() {
-        super.onInstallActionBarToggleSwitch();
+    protected void onInstallSwitchBarToggleSwitch() {
+        super.onInstallSwitchBarToggleSwitch();
 
         mToggleSwitch.setCheckedInternal(
                 Settings.Secure.getInt(getContentResolver(), ENABLED, 0) == 1);
-        mToggleSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton button, boolean checked) {
-                onPreferenceToggled(mPreferenceKey, checked);
-            }
-        });
+        mSwitchBar.addOnSwitchChangeListener(this);
+    }
+
+    @Override
+    protected void onRemoveSwitchBarToggleSwitch() {
+        super.onRemoveSwitchBarToggleSwitch();
+        mSwitchBar.removeOnSwitchChangeListener(this);
     }
 
     private void initPreferences() {
@@ -111,4 +107,9 @@
                     getString(R.string.simulate_color_space)));
         }
     }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        onPreferenceToggled(mPreferenceKey, isChecked);
+    }
 }
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 6558cc7..331c0e3 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -16,16 +16,12 @@
 
 package com.android.settings.accessibility;
 
-import android.app.ActionBar;
-import android.app.Activity;
-import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
-import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -37,10 +33,13 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.ToggleSwitch;
 
 public abstract class ToggleFeaturePreferenceFragment
         extends SettingsPreferenceFragment {
 
+    protected SwitchBar mSwitchBar;
     protected ToggleSwitch mToggleSwitch;
 
     protected String mPreferenceKey;
@@ -88,14 +87,9 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
 
-        final Context context = getActivity().getActionBar().getThemedContext();
-        final int padding = context.getResources().getDimensionPixelSize(
-                R.dimen.action_bar_switch_padding);
-        mToggleSwitch = new ToggleSwitch(context);
-        mToggleSwitch.setPaddingRelative(0, 0, padding, 0);
-        mToggleSwitch.setLayoutParams(new ActionBar.LayoutParams(
-                ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,
-                Gravity.CENTER_VERTICAL | Gravity.END));
+        SettingsActivity activity = (SettingsActivity) getActivity();
+        mSwitchBar = activity.getSwitchBar();
+        mToggleSwitch = mSwitchBar.getSwitch();
 
         onProcessArguments(getArguments());
     }
@@ -124,28 +118,26 @@
         menuItem.setIntent(mSettingsIntent);
     }
 
-    protected void onInstallActionBarToggleSwitch() {
+    protected void onInstallSwitchBarToggleSwitch() {
         // Implement this to set a checked listener.
     }
 
-    private void installActionBarToggleSwitch() {
-        final ActionBar ab = getActivity().getActionBar();
-        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
-        ab.setCustomView(mToggleSwitch);
+    protected void onRemoveSwitchBarToggleSwitch() {
+        // Implement this to reset a checked listener.
+    }
 
-        onInstallActionBarToggleSwitch();
+    private void installActionBarToggleSwitch() {
+        mSwitchBar.show();
+        onInstallSwitchBarToggleSwitch();
     }
 
     private void removeActionBarToggleSwitch() {
         mToggleSwitch.setOnBeforeCheckedChangeListener(null);
-
-        final ActionBar ab = getActivity().getActionBar();
-        ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
-        ab.setCustomView(null);
+        onRemoveSwitchBarToggleSwitch();
+        mSwitchBar.hide();
     }
 
     public void setTitle(String title) {
-        final SettingsActivity activity = (SettingsActivity) getActivity();
         getActivity().setTitle(title);
     }
 
diff --git a/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java
index f4ac2cc..782e7a5 100644
--- a/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java
@@ -18,7 +18,8 @@
 
 import android.provider.Settings;
 
-import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.settings.widget.ToggleSwitch;
+import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
 
 public class ToggleGlobalGesturePreferenceFragment
         extends ToggleFeaturePreferenceFragment {
@@ -29,8 +30,8 @@
     }
 
     @Override
-    protected void onInstallActionBarToggleSwitch() {
-        super.onInstallActionBarToggleSwitch();
+    protected void onInstallSwitchBarToggleSwitch() {
+        super.onInstallSwitchBarToggleSwitch();
         mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
                 @Override
             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
diff --git a/src/com/android/settings/accessibility/ToggleInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleInversionPreferenceFragment.java
index 92a778e..b6d5569 100644
--- a/src/com/android/settings/accessibility/ToggleInversionPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleInversionPreferenceFragment.java
@@ -16,24 +16,18 @@
 
 package com.android.settings.accessibility;
 
-import android.accessibilityservice.AccessibilityService;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
-import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.PreferenceScreen;
-import android.preference.SeekBarPreference;
 import android.provider.Settings;
 import android.view.View;
-import android.view.accessibility.AccessibilityManager;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
 
+import android.widget.Switch;
 import com.android.settings.R;
-import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.settings.widget.SwitchBar;
 
 public class ToggleInversionPreferenceFragment extends ToggleFeaturePreferenceFragment
-        implements Preference.OnPreferenceChangeListener {
+        implements Preference.OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener {
     private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED;
     private static final String QUICK_SETTING_ENABLED =
             Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_QUICK_SETTING_ENABLED;
@@ -74,17 +68,18 @@
     }
 
     @Override
-    protected void onInstallActionBarToggleSwitch() {
-        super.onInstallActionBarToggleSwitch();
+    protected void onInstallSwitchBarToggleSwitch() {
+        super.onInstallSwitchBarToggleSwitch();
 
         mToggleSwitch.setCheckedInternal(
                 Settings.Secure.getInt(getContentResolver(), ENABLED, 0) == 1);
-        mToggleSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton button, boolean checked) {
-                onPreferenceToggled(mPreferenceKey, checked);
-            }
-        });
+        mSwitchBar.addOnSwitchChangeListener(this);
+    }
+
+    @Override
+    protected void onRemoveSwitchBarToggleSwitch() {
+        super.onRemoveSwitchBarToggleSwitch();
+        mSwitchBar.removeOnSwitchChangeListener(this);
     }
 
     private void initPreferences() {
@@ -92,4 +87,9 @@
                 Settings.Secure.getInt(getContentResolver(), QUICK_SETTING_ENABLED, 0) == 1);
         mEnableQuickSetting.setOnPreferenceChangeListener(this);
     }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        onPreferenceToggled(mPreferenceKey, isChecked);
+    }
 }
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 27d07d2..8202a2a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -18,7 +18,8 @@
 
 import android.provider.Settings;
 
-import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.settings.widget.ToggleSwitch;
+import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
 
 public class ToggleScreenMagnificationPreferenceFragment
         extends ToggleFeaturePreferenceFragment {
@@ -29,8 +30,8 @@
     }
 
     @Override
-    protected void onInstallActionBarToggleSwitch() {
-        super.onInstallActionBarToggleSwitch();
+    protected void onInstallSwitchBarToggleSwitch() {
+        super.onInstallSwitchBarToggleSwitch();
         mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
                 @Override
             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
diff --git a/src/com/android/settings/applications/AppOpsSummary.java b/src/com/android/settings/applications/AppOpsSummary.java
index 4cee8e5..92515ac 100644
--- a/src/com/android/settings/applications/AppOpsSummary.java
+++ b/src/com/android/settings/applications/AppOpsSummary.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.applications;
 
-import android.app.AppOpsManager;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.os.Bundle;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 6cd6d7a..faafad1 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -75,8 +75,6 @@
 
         mAuthHelper = ((SettingsActivity) context).getAuthenticatorHelper();
 
-        rebuildUI(getActivity());
-
         return rootView;
     }
 
@@ -121,18 +119,20 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
+    public void onResume() {
+        super.onResume();
 
         if (!mAccountListenerAdded) {
             AccountManager.get(getActivity()).addOnAccountsUpdatedListener(this, null, false);
             mAccountListenerAdded = true;
         }
+
+        rebuildCategories();
     }
 
     @Override
-    public void onStop() {
-        super.onStop();
+    public void onDestroy() {
+        super.onDestroy();
 
         if (mAccountListenerAdded) {
             AccountManager.get(getActivity()).removeOnAccountsUpdatedListener(this);
diff --git a/src/com/android/settings/dashboard/SearchResultsSummary.java b/src/com/android/settings/dashboard/SearchResultsSummary.java
index e45c585..862b53b 100644
--- a/src/com/android/settings/dashboard/SearchResultsSummary.java
+++ b/src/com/android/settings/dashboard/SearchResultsSummary.java
@@ -448,6 +448,8 @@
             SuggestionItem item = (SuggestionItem) getItem(position);
             query.setText(item.query);
 
+            view.setBackgroundResource(R.drawable.dashboard_tile_background);
+
             return view;
         }
     }
@@ -621,6 +623,8 @@
                 imageView.setBackgroundResource(R.drawable.empty_icon);
             }
 
+            view.setBackgroundResource(R.drawable.dashboard_tile_background);
+
             return view;
         }
     }
diff --git a/src/com/android/settings/nfc/AndroidBeam.java b/src/com/android/settings/nfc/AndroidBeam.java
index f289550..2d8d6fe 100644
--- a/src/com/android/settings/nfc/AndroidBeam.java
+++ b/src/com/android/settings/nfc/AndroidBeam.java
@@ -16,88 +16,75 @@
 
 package com.android.settings.nfc;
 
-import android.app.ActionBar;
-import android.app.Activity;
 import android.app.Fragment;
 import android.nfc.NfcAdapter;
 import android.os.Bundle;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.CompoundButton;
 import android.widget.Switch;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.widget.SwitchBar;
 
 public class AndroidBeam extends Fragment
-        implements CompoundButton.OnCheckedChangeListener {
+        implements SwitchBar.OnSwitchChangeListener {
     private View mView;
     private NfcAdapter mNfcAdapter;
-    private Switch mActionBarSwitch;
+    private SwitchBar mSwitchBar;
+    private Switch mSwitch;
     private CharSequence mOldActivityTitle;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        Activity activity = getActivity();
 
-        mActionBarSwitch = new Switch(activity.getActionBar().getThemedContext());
+        SettingsActivity activity = (SettingsActivity) getActivity();
 
-        if (activity instanceof SettingsActivity) {
-            final int padding = activity.getResources().getDimensionPixelSize(
-                    R.dimen.action_bar_switch_padding);
-            mActionBarSwitch.setPaddingRelative(0, 0, padding, 0);
-            activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
-                    ActionBar.DISPLAY_SHOW_CUSTOM);
-            activity.getActionBar().setCustomView(mActionBarSwitch, new ActionBar.LayoutParams(
-                    ActionBar.LayoutParams.WRAP_CONTENT,
-                    ActionBar.LayoutParams.WRAP_CONTENT,
-                    Gravity.CENTER_VERTICAL | Gravity.END));
-            mOldActivityTitle = activity.getActionBar().getTitle();
-            activity.getActionBar().setTitle(R.string.android_beam_settings_title);
-        }
-
-        mActionBarSwitch.setOnCheckedChangeListener(this);
+        mOldActivityTitle = activity.getActionBar().getTitle();
+        activity.getActionBar().setTitle(R.string.android_beam_settings_title);
 
         mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
-        mActionBarSwitch.setChecked(mNfcAdapter.isNdefPushEnabled());
+
+        mSwitchBar = activity.getSwitchBar();
+        mSwitch = mSwitchBar.getSwitch();
+        mSwitch.setChecked(mNfcAdapter.isNdefPushEnabled());
     }
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         mView = inflater.inflate(R.layout.android_beam, container, false);
-        initView(mView);
+
+        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchBar.show();
+        mSwitch.setChecked(mNfcAdapter.isNdefPushEnabled());
+
         return mView;
     }
 
     @Override
     public void onDestroyView() {
         super.onDestroyView();
-        getActivity().getActionBar().setCustomView(null);
+        mSwitchBar.removeOnSwitchChangeListener(this);
+        mSwitchBar.hide();
         if (mOldActivityTitle != null) {
             getActivity().getActionBar().setTitle(mOldActivityTitle);
         }
     }
 
-    private void initView(View view) {
-        mActionBarSwitch.setOnCheckedChangeListener(this);
-        mActionBarSwitch.setChecked(mNfcAdapter.isNdefPushEnabled());
-    }
-
     @Override
-    public void onCheckedChanged(CompoundButton buttonView, boolean desiredState) {
+    public void onSwitchChanged(Switch switchView, boolean desiredState) {
         boolean success = false;
-        mActionBarSwitch.setEnabled(false);
+        mSwitch.setEnabled(false);
         if (desiredState) {
             success = mNfcAdapter.enableNdefPush();
         } else {
             success = mNfcAdapter.disableNdefPush();
         }
         if (success) {
-            mActionBarSwitch.setChecked(desiredState);
+            mSwitch.setChecked(desiredState);
         }
-        mActionBarSwitch.setEnabled(true);
+        mSwitch.setEnabled(true);
     }
 }
diff --git a/src/com/android/settings/nfc/PaymentBackend.java b/src/com/android/settings/nfc/PaymentBackend.java
index f84bc74..25572a7 100644
--- a/src/com/android/settings/nfc/PaymentBackend.java
+++ b/src/com/android/settings/nfc/PaymentBackend.java
@@ -24,6 +24,7 @@
 import android.nfc.cardemulation.ApduServiceInfo;
 import android.nfc.cardemulation.CardEmulation;
 import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -74,6 +75,20 @@
         return appInfos;
     }
 
+    boolean isForegroundMode() {
+        try {
+            return Settings.Secure.getInt(mContext.getContentResolver(),
+                    Settings.Secure.NFC_PAYMENT_FOREGROUND) != 0;
+        } catch (SettingNotFoundException e) {
+            return false;
+        }
+    }
+
+    void setForegroundMode(boolean foreground) {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.NFC_PAYMENT_FOREGROUND, foreground ? 1 : 0) ;
+    }
+
     ComponentName getDefaultPaymentApp() {
         String componentString = Settings.Secure.getString(mContext.getContentResolver(),
                 Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT);
diff --git a/src/com/android/settings/nfc/PaymentDefaultDialog.java b/src/com/android/settings/nfc/PaymentDefaultDialog.java
index 61c6fdb..6bc29e1 100644
--- a/src/com/android/settings/nfc/PaymentDefaultDialog.java
+++ b/src/com/android/settings/nfc/PaymentDefaultDialog.java
@@ -19,14 +19,7 @@
 import android.content.ComponentName;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.nfc.cardemulation.ApduServiceInfo;
 import android.nfc.cardemulation.CardEmulation;
-import android.nfc.cardemulation.HostApduService;
-import android.nfc.cardemulation.OffHostApduService;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -35,11 +28,8 @@
 import com.android.settings.R;
 import com.android.settings.nfc.PaymentBackend.PaymentAppInfo;
 
-import java.io.IOException;
 import java.util.List;
 
-import org.xmlpull.v1.XmlPullParserException;
-
 public final class PaymentDefaultDialog extends AlertActivity implements
         DialogInterface.OnClickListener {
 
diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java
index 7548c50..df4e396 100644
--- a/src/com/android/settings/nfc/PaymentSettings.java
+++ b/src/com/android/settings/nfc/PaymentSettings.java
@@ -22,7 +22,9 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.preference.CheckBoxPreference;
 import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
@@ -48,7 +50,7 @@
 import java.util.List;
 
 public class PaymentSettings extends SettingsPreferenceFragment implements
-        OnClickListener {
+        OnClickListener, OnPreferenceChangeListener {
     public static final String TAG = "PaymentSettings";
     private LayoutInflater mInflater;
     private PaymentBackend mPaymentBackend;
@@ -67,6 +69,7 @@
     public void refresh() {
         PreferenceManager manager = getPreferenceManager();
         PreferenceScreen screen = manager.createPreferenceScreen(getActivity());
+
         // Get all payment services
         List<PaymentAppInfo> appInfos = mPaymentBackend.getPaymentAppInfos();
         if (appInfos != null && appInfos.size() > 0) {
@@ -92,6 +95,13 @@
             emptyImage.setVisibility(View.VISIBLE);
             getListView().setVisibility(View.GONE);
         } else {
+            CheckBoxPreference foreground = new CheckBoxPreference(getActivity());
+            boolean foregroundMode = mPaymentBackend.isForegroundMode();
+            foreground.setPersistent(false);
+            foreground.setTitle(getString(R.string.nfc_payment_favor_foreground));
+            foreground.setChecked(foregroundMode);
+            foreground.setOnPreferenceChangeListener(this);
+            screen.addPreference(foreground);
             emptyText.setVisibility(View.GONE);
             learnMore.setVisibility(View.GONE);
             emptyImage.setVisibility(View.GONE);
@@ -207,14 +217,25 @@
         protected void onBindView(View view) {
             super.onBindView(view);
 
-            view.setOnClickListener(listener);
-            view.setTag(appInfo);
-
             RadioButton radioButton = (RadioButton) view.findViewById(android.R.id.button1);
             radioButton.setChecked(appInfo.isDefault);
+            radioButton.setOnClickListener(listener);
+            radioButton.setTag(appInfo);
 
             ImageView banner = (ImageView) view.findViewById(R.id.banner);
             banner.setImageDrawable(appInfo.banner);
+            banner.setOnClickListener(listener);
+            banner.setTag(appInfo);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (preference instanceof CheckBoxPreference) {
+            mPaymentBackend.setForegroundMode(((Boolean) newValue).booleanValue());
+            return true;
+        } else {
+            return false;
         }
     }
 }
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index c63ae63..91035732 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -29,11 +29,7 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
 import android.content.pm.Signature;
-import android.graphics.Paint;
-import android.graphics.Path;
 import android.graphics.drawable.Drawable;
-import android.graphics.drawable.ShapeDrawable;
-import android.graphics.drawable.shapes.PathShape;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
@@ -64,6 +60,7 @@
 import java.util.Comparator;
 import java.util.List;
 
+/** Just a sectioned list of installed applications, nothing else to index **/
 public class AppNotificationSettings extends ListFragment {
     private static final String TAG = "AppNotificationSettings";
     private static final boolean DEBUG = true;
@@ -187,6 +184,9 @@
         final TextView title = (TextView) layout.findViewById(android.R.id.title);
         title.setText(row.label);
         final CheckBox showBox = (CheckBox) layout.findViewById(android.R.id.button1);
+        final CheckBox priBox = (CheckBox) layout.findViewById(android.R.id.button2);
+        final CheckBox senBox = (CheckBox) layout.findViewById(android.R.id.button3);
+
         showBox.setChecked(!row.banned);
         final OnCheckedChangeListener showListener = new OnCheckedChangeListener() {
             @Override
@@ -195,6 +195,8 @@
                 if (success) {
                     row.banned = !isChecked;
                     mAdapter.bindView(v, row, true /*animate*/);
+                    priBox.setEnabled(!row.banned);
+                    senBox.setEnabled(!row.banned);
                 } else {
                     showBox.setOnCheckedChangeListener(null);
                     showBox.setChecked(!isChecked);
@@ -203,6 +205,44 @@
             }
         };
         showBox.setOnCheckedChangeListener(showListener);
+
+        priBox.setChecked(row.priority);
+        final OnCheckedChangeListener priListener = new OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                boolean success = mBackend.setHighPriority(row.pkg, row.uid, isChecked);
+                if (success) {
+                    row.priority = isChecked;
+                    mAdapter.bindView(v, row, true /*animate*/);
+                } else {
+                    priBox.setOnCheckedChangeListener(null);
+                    priBox.setChecked(!isChecked);
+                    priBox.setOnCheckedChangeListener(this);
+                }
+            }
+        };
+        priBox.setOnCheckedChangeListener(priListener);
+
+        senBox.setChecked(row.sensitive);
+        final OnCheckedChangeListener senListener = new OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                boolean success = mBackend.setSensitive(row.pkg, row.uid, isChecked);
+                if (success) {
+                    row.sensitive = isChecked;
+                    mAdapter.bindView(v, row, true /*animate*/);
+                } else {
+                    senBox.setOnCheckedChangeListener(null);
+                    senBox.setChecked(!isChecked);
+                    senBox.setOnCheckedChangeListener(this);
+                }
+            }
+        };
+        senBox.setOnCheckedChangeListener(senListener);
+
+        priBox.setEnabled(!row.banned);
+        senBox.setEnabled(!row.banned);
+
         final AlertDialog d = new AlertDialog.Builder(mContext)
             .setView(layout)
             .setPositiveButton(R.string.app_notifications_dialog_done, null)
@@ -214,48 +254,16 @@
         ViewGroup row;
         ViewGroup appButton;
         ImageView icon;
-        ImageView banBadge;
-        ImageView priBadge;
         TextView title;
+        TextView subtitle;
         View settingsDivider;
         ImageView settingsButton;
         View rowDivider;
     }
 
     private class NotificationAppAdapter extends ArrayAdapter<Row> implements SectionIndexer {
-        private final ShapeDrawable mBanShape, mPriShape;
-
         public NotificationAppAdapter(Context context) {
             super(context, 0, 0);
-            final int s = context.getResources()
-                    .getDimensionPixelSize(R.dimen.notification_app_icon_badge_size);
-            mBanShape = shape(banPath(s), s);
-            mPriShape = shape(priPath(s), s);
-        }
-
-        private ShapeDrawable shape(Path path, int s) {
-            final ShapeDrawable sd = new ShapeDrawable(new PathShape(path, s, s));
-            sd.getPaint().setStyle(Paint.Style.STROKE);
-            sd.getPaint().setColor(0xffffffff);
-            sd.getPaint().setStrokeWidth(s / 12);
-            sd.setIntrinsicWidth(s);
-            sd.setIntrinsicHeight(s);
-            return sd;
-        }
-
-        private Path banPath(int s) {
-            final Path p = new Path();
-            final int d = s / 5;
-            p.moveTo(d, d); p.lineTo(s - d, s - d);
-            p.moveTo(d, s - d); p.lineTo(s - d, d);
-            return p;
-        }
-
-        private Path priPath(int s) {
-            final Path p = new Path();
-            final int d = s / 5;
-            p.moveTo(s / 2, d); p.lineTo(s / 2, s - d);
-            return p;
         }
 
         @Override
@@ -302,11 +310,8 @@
             vh.appButton = (ViewGroup) v.findViewById(android.R.id.button1);
             vh.appButton.setLayoutTransition(new LayoutTransition());
             vh.icon = (ImageView) v.findViewById(android.R.id.icon);
-            vh.banBadge = (ImageView) v.findViewById(android.R.id.icon1);
-            vh.banBadge.setImageDrawable(mBanShape);
-            vh.priBadge = (ImageView) v.findViewById(android.R.id.icon2);
-            vh.priBadge.setImageDrawable(mPriShape);
             vh.title = (TextView) v.findViewById(android.R.id.title);
+            vh.subtitle = (TextView) v.findViewById(android.R.id.text1);
             vh.settingsDivider = v.findViewById(R.id.settings_divider);
             vh.settingsButton = (ImageView) v.findViewById(android.R.id.button2);
             vh.rowDivider = v.findViewById(R.id.row_divider);
@@ -326,6 +331,7 @@
 
         public void bindView(final View view, Row r, boolean animate) {
             if (!(r instanceof AppRow)) {
+                // it's a section row
                 TextView tv = (TextView)view;
                 tv.setText(r.section);
                 return;
@@ -343,9 +349,10 @@
             });
             enableLayoutTransitions(vh.appButton, animate);
             vh.icon.setImageDrawable(row.icon);
-            vh.banBadge.setVisibility(row.banned ? View.VISIBLE : View.GONE);
-            vh.priBadge.setVisibility(row.priority ? View.VISIBLE : View.GONE);
             vh.title.setText(row.label);
+            final String sub = getSubtitle(row);
+            vh.subtitle.setText(sub);
+            vh.subtitle.setVisibility(!sub.isEmpty() ? View.VISIBLE : View.GONE);
             final boolean showSettings = !row.banned && row.settingsIntent != null;
             vh.settingsDivider.setVisibility(showSettings ? View.VISIBLE : View.GONE);
             vh.settingsButton.setVisibility(showSettings ? View.VISIBLE : View.GONE);
@@ -359,6 +366,17 @@
             });
         }
 
+        private String getSubtitle(AppRow row) {
+            if (row.banned) return mContext.getString(R.string.app_notification_row_banned);
+            if (!row.priority && !row.sensitive) return "";
+            final String priString = mContext.getString(R.string.app_notification_row_priority);
+            final String senString = mContext.getString(R.string.app_notification_row_sensitive);
+            if (row.priority != row.sensitive) {
+                return row.priority ? priString : senString;
+            }
+            return priString + mContext.getString(R.string.summary_divider_text) + senString;
+        }
+
         @Override
         public Object[] getSections() {
             return mSections.toArray(new Object[mSections.size()]);
@@ -396,7 +414,8 @@
         public Intent settingsIntent;
         public boolean banned;
         public boolean priority;
-        public boolean first;
+        public boolean sensitive;
+        public boolean first;  // first app in section
     }
 
     private static final Comparator<AppRow> mRowComparator = new Comparator<AppRow>() {
@@ -435,6 +454,7 @@
                     row.icon = pkg.applicationInfo.loadIcon(pm);
                     row.banned = mBackend.getNotificationsBanned(row.pkg, row.uid);
                     row.priority = mBackend.getHighPriority(row.pkg, row.uid);
+                    row.sensitive = mBackend.getSensitive(row.pkg, row.uid);
                     mRows.put(row.pkg, row);
                 }
                 // collect config activities
@@ -552,5 +572,15 @@
             // TODO save high-pri state to NoMan
             return true;
         }
+
+        public boolean getSensitive(String pkg, int uid) {
+            // TODO get visibility state from NoMan
+            return false;
+        }
+
+        public boolean setSensitive(String pkg, int uid, boolean sensitive) {
+            // TODO save visibility state to NoMan
+            return true;
+        }
     }
 }
diff --git a/src/com/android/settings/notification/NotificationDisplaySettings.java b/src/com/android/settings/notification/NotificationDisplaySettings.java
new file mode 100644
index 0000000..7842cad
--- /dev/null
+++ b/src/com/android/settings/notification/NotificationDisplaySettings.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceScreen;
+import android.preference.TwoStatePreference;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+public class NotificationDisplaySettings extends SettingsPreferenceFragment {
+    private static final String TAG = "NotificationDisplaySettings";
+
+    private static final String KEY_NOTIFICATION_PULSE = "notification_pulse";
+    private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "lock_screen_notifications";
+    private static final String KEY_ZEN_MODE_NOTIFICATIONS = "zen_mode_notifications";
+
+    private final Handler mHandler = new Handler();
+    private final SettingsObserver mSettingsObserver = new SettingsObserver();
+
+    private TwoStatePreference mNotificationPulse;
+    private DropDownPreference mLockscreen;
+    private DropDownPreference mZenModeNotifications;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        addPreferencesFromResource(R.xml.notification_display_settings);
+
+        final PreferenceScreen root = getPreferenceScreen();
+        initPulse(root);
+        initLockscreenNotifications(root);
+        initZenModeNotifications(root);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mSettingsObserver.register(true);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mSettingsObserver.register(false);
+    }
+
+    // === Pulse notification light ===
+
+    private void initPulse(PreferenceScreen parent) {
+        mNotificationPulse = (TwoStatePreference) parent.findPreference(KEY_NOTIFICATION_PULSE);
+        if (mNotificationPulse == null) return;
+        if (!getResources()
+                .getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed)) {
+            parent.removePreference(mNotificationPulse);
+        } else {
+            updatePulse();
+            mNotificationPulse.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    final boolean val = (Boolean)newValue;
+                    return Settings.System.putInt(getContentResolver(),
+                            Settings.System.NOTIFICATION_LIGHT_PULSE,
+                            val ? 1 : 0);
+                }
+            });
+        }
+    }
+
+    private void updatePulse() {
+        if (mNotificationPulse == null) return;
+        try {
+            mNotificationPulse.setChecked(Settings.System.getInt(getContentResolver(),
+                    Settings.System.NOTIFICATION_LIGHT_PULSE) == 1);
+        } catch (Settings.SettingNotFoundException snfe) {
+            Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found");
+        }
+    }
+
+    // === Lockscreen (public / private) notifications ===
+
+    private void initLockscreenNotifications(PreferenceScreen parent) {
+        mLockscreen = (DropDownPreference) parent.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS);
+        if (mLockscreen == null) return;
+        mLockscreen.addItem(R.string.lock_screen_notifications_summary_show,
+                R.string.lock_screen_notifications_summary_show);
+        mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide,
+                R.string.lock_screen_notifications_summary_hide);
+        mLockscreen.addItem(R.string.lock_screen_notifications_summary_disable,
+                R.string.lock_screen_notifications_summary_disable);
+        updateLockscreenNotifications();
+        mLockscreen.setCallback(new DropDownPreference.Callback() {
+            @Override
+            public boolean onItemSelected(int pos, Object value) {
+                final int val = (Integer) value;
+                final boolean enabled = val != R.string.lock_screen_notifications_summary_disable;
+                final boolean show = val == R.string.lock_screen_notifications_summary_show;
+                Settings.Secure.putInt(getContentResolver(),
+                        Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, show ? 1 : 0);
+                Settings.Global.putInt(getContentResolver(),
+                        Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0);
+                return true;
+            }
+        });
+    }
+
+    private void updateLockscreenNotifications() {
+        if (mLockscreen == null) return;
+        final boolean allowPrivate = getLockscreenAllowPrivateNotifications();
+        final boolean enabled = getLockscreenNotificationsEnabled();
+        final int val = !enabled ? R.string.lock_screen_notifications_summary_disable :
+                allowPrivate ? R.string.lock_screen_notifications_summary_show :
+                R.string.lock_screen_notifications_summary_hide;
+        mLockscreen.setSelectedValue(val);
+    }
+
+    private boolean getLockscreenNotificationsEnabled() {
+        return Settings.Global.getInt(getContentResolver(),
+                Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
+    }
+
+    private boolean getLockscreenAllowPrivateNotifications() {
+        return Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0;
+    }
+
+    // === Zen mode notifications ===
+
+    private void initZenModeNotifications(PreferenceScreen parent) {
+        mZenModeNotifications = (DropDownPreference)
+                parent.findPreference(KEY_ZEN_MODE_NOTIFICATIONS);
+        if (mZenModeNotifications == null) return;
+        mZenModeNotifications.addItem(R.string.zen_mode_notifications_summary_hide, 0);
+        mZenModeNotifications.addItem(R.string.zen_mode_notifications_summary_show, 1);
+        updateZenModeNotifications();
+        mZenModeNotifications.setCallback(new DropDownPreference.Callback() {
+            @Override
+            public boolean onItemSelected(int pos, Object value) {
+                final int val = (Integer) value;
+                Settings.Secure.putInt(getContentResolver(),
+                        Settings.Secure.DISPLAY_INTERCEPTED_NOTIFICATIONS, val);
+                return true;
+            }
+        });
+    }
+
+    private void updateZenModeNotifications() {
+        if (mZenModeNotifications == null) return;
+        mZenModeNotifications.setSelectedValue(Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.DISPLAY_INTERCEPTED_NOTIFICATIONS, 0));
+    }
+
+    // === Callbacks ===
+
+    private final class SettingsObserver extends ContentObserver {
+        private final Uri NOTIFICATION_LIGHT_PULSE_URI =
+                Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE);
+        private final Uri LOCK_SCREEN_PRIVATE_URI =
+                Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS);
+        private final Uri LOCK_SCREEN_SHOW_URI =
+                Settings.Global.getUriFor(Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS);
+        private final Uri DISPLAY_INTERCEPTED_NOTIFICATIONS_URI =
+                Settings.Secure.getUriFor(Settings.Secure.DISPLAY_INTERCEPTED_NOTIFICATIONS);
+
+        public SettingsObserver() {
+            super(mHandler);
+        }
+
+        public void register(boolean register) {
+            final ContentResolver cr = getContentResolver();
+            if (register) {
+                cr.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI, false, this);
+                cr.registerContentObserver(LOCK_SCREEN_PRIVATE_URI, false, this);
+                cr.registerContentObserver(LOCK_SCREEN_SHOW_URI, false, this);
+                cr.registerContentObserver(DISPLAY_INTERCEPTED_NOTIFICATIONS_URI, false, this);
+            } else {
+                cr.unregisterContentObserver(this);
+            }
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            super.onChange(selfChange, uri);
+            if (NOTIFICATION_LIGHT_PULSE_URI.equals(uri)) {
+                updatePulse();
+            }
+            if (LOCK_SCREEN_PRIVATE_URI.equals(uri) || LOCK_SCREEN_SHOW_URI.equals(uri)) {
+                updateLockscreenNotifications();
+            }
+            if (DISPLAY_INTERCEPTED_NOTIFICATIONS_URI.equals(uri)) {
+                updateZenModeNotifications();
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java
index d432bed..b67032a 100644
--- a/src/com/android/settings/notification/NotificationSettings.java
+++ b/src/com/android/settings/notification/NotificationSettings.java
@@ -16,209 +16,205 @@
 
 package com.android.settings.notification;
 
+import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
+import android.media.AudioManager;
 import android.media.RingtoneManager;
-import android.os.Build;
+import android.net.Uri;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceGroup;
+import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceScreen;
+import android.preference.SeekBarVolumizer;
 import android.preference.TwoStatePreference;
 import android.provider.Settings;
-import android.util.Log;
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.SoundSettings;
 
-public class NotificationSettings extends SettingsPreferenceFragment implements
-        Preference.OnPreferenceChangeListener, OnPreferenceClickListener {
+public class NotificationSettings extends SettingsPreferenceFragment {
     private static final String TAG = "NotificationSettings";
 
-    private static final String KEY_NOTIFICATION_SOUND = "notification_sound";
-    private static final String KEY_NOTIFICATION_PULSE = "notification_pulse";
-    private static final String KEY_HEADS_UP = "heads_up";
-    private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "toggle_lock_screen_notifications";
+    private static final String KEY_MEDIA_VOLUME = "media_volume";
+    private static final String KEY_ALARM_VOLUME = "alarm_volume";
+    private static final String KEY_RING_VOLUME = "ring_volume";
+    private static final String KEY_RINGER_MODE = "ringer_mode";
+    private static final String KEY_PHONE_RINGTONE = "ringtone";
+    private static final String KEY_NOTIFICATION_RINGTONE = "notification_ringtone";
+    private static final String KEY_VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
     private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access";
 
-    private static final String KEY_TWEAKS_CATEGORY = "category_tweaks"; // power toys, eng only
+    private static final int SAMPLE_CUTOFF = 2000;  // manually cap sample playback at 2 seconds
 
-    private static final int MSG_UPDATE_SOUND_SUMMARY = 2;
+    private final VolumePreferenceCallback mVolumeCallback = new VolumePreferenceCallback();
+    private final H mHandler = new H();
+    private final SettingsObserver mSettingsObserver = new SettingsObserver();
 
     private Context mContext;
     private PackageManager mPM;
 
-    private Preference mNotificationSoundPreference;
+    private DropDownPreference mRingerMode;
+    private Preference mPhoneRingtonePreference;
+    private Preference mNotificationRingtonePreference;
+    private TwoStatePreference mVibrateWhenRinging;
     private Preference mNotificationAccess;
-    private DropDownPreference mLockscreen;
-    private TwoStatePreference mHeadsUp;
-    private TwoStatePreference mNotificationPulse;
-
-    private final Runnable mRingtoneLookupRunnable = new Runnable() {
-        @Override
-        public void run() {
-            if (mNotificationSoundPreference != null) {
-                final CharSequence summary = SoundSettings.updateRingtoneName(
-                        mContext, RingtoneManager.TYPE_NOTIFICATION);
-                if (summary != null) {
-                    mHandler.sendMessage(
-                            mHandler.obtainMessage(MSG_UPDATE_SOUND_SUMMARY, summary));
-                }
-            }
-        }
-    };
-
-    private final Handler mHandler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_UPDATE_SOUND_SUMMARY:
-                    mNotificationSoundPreference.setSummary((CharSequence) msg.obj);
-                    break;
-            }
-        }
-    };
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mContext = getActivity();
-        final ContentResolver resolver = mContext.getContentResolver();
-
         mPM = mContext.getPackageManager();
 
         addPreferencesFromResource(R.xml.notification_settings);
 
         final PreferenceScreen root = getPreferenceScreen();
-
-        PreferenceGroup tweaksCategory = (PreferenceGroup)
-                root.findPreference(KEY_TWEAKS_CATEGORY);
-
-        if (tweaksCategory != null
-                && !(Build.TYPE.equals("eng") || Build.TYPE.equals("userdebug"))) {
-            root.removePreference(tweaksCategory);
-            tweaksCategory = null;
-        }
-
-        mNotificationSoundPreference = findPreference(KEY_NOTIFICATION_SOUND);
+        initVolumePreference(KEY_MEDIA_VOLUME, AudioManager.STREAM_MUSIC);
+        initVolumePreference(KEY_ALARM_VOLUME, AudioManager.STREAM_ALARM);
+        initVolumePreference(KEY_RING_VOLUME, AudioManager.STREAM_RING);
+        initRingerMode(root);
+        initRingtones(root);
+        initVibrateWhenRinging(root);
 
         mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS);
         refreshNotificationListeners();
-
-        mLockscreen = (DropDownPreference) root.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS);
-        if (mLockscreen != null) {
-            if (!getDeviceLockscreenNotificationsEnabled()) {
-                root.removePreference(mLockscreen);
-            } else {
-                mLockscreen.addItem(R.string.lock_screen_notifications_summary_show, 1);
-                mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide, 0);
-                final int val = getLockscreenAllowPrivateNotifications() ? 1 : 0;
-                mLockscreen.setSelectedValue(val);
-                mLockscreen.setCallback(new DropDownPreference.Callback() {
-                    @Override
-                    public boolean onItemSelected(int pos, Object value) {
-                        final int val = (Integer) value;
-                        Settings.Secure.putInt(getContentResolver(),
-                                Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, val);
-                        return true;
-                    }
-                });
-            }
-        }
-
-        mHeadsUp = (TwoStatePreference) findPreference(KEY_HEADS_UP);
-        if (mHeadsUp != null) {
-            updateHeadsUpMode(resolver);
-            mHeadsUp.setOnPreferenceChangeListener(this);
-            resolver.registerContentObserver(
-                    Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED),
-                    false, new ContentObserver(mHandler) {
-                @Override
-                public void onChange(boolean selfChange) {
-                    updateHeadsUpMode(resolver);
-                }
-            });
-        }
-        mNotificationPulse = (TwoStatePreference) findPreference(KEY_NOTIFICATION_PULSE);
-
-        if (mNotificationPulse != null
-                && getResources().getBoolean(
-                com.android.internal.R.bool.config_intrusiveNotificationLed) == false) {
-            getPreferenceScreen().removePreference(mNotificationPulse);
-        } else {
-            try {
-                mNotificationPulse.setChecked(Settings.System.getInt(resolver,
-                        Settings.System.NOTIFICATION_LIGHT_PULSE) == 1);
-                mNotificationPulse.setOnPreferenceChangeListener(this);
-            } catch (Settings.SettingNotFoundException snfe) {
-                Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found");
-            }
-        }
     }
 
     @Override
     public void onResume() {
         super.onResume();
-
         refreshNotificationListeners();
         lookupRingtoneNames();
+        final IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
+        mContext.registerReceiver(mReceiver, filter);
+        mSettingsObserver.register(true);
     }
 
     @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        final String key = preference.getKey();
+    public void onPause() {
+        super.onPause();
+        mVolumeCallback.stopSample();
+        mContext.unregisterReceiver(mReceiver);
+        mSettingsObserver.register(false);
+    }
 
-        if (KEY_HEADS_UP.equals(key)) {
-            setHeadsUpMode(getContentResolver(), mHeadsUp.isChecked());
-        } else if (KEY_NOTIFICATION_PULSE.equals(key)) {
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.NOTIFICATION_LIGHT_PULSE,
-                    mNotificationPulse.isChecked() ? 1 : 0);
-        } else {
-            return super.onPreferenceTreeClick(preferenceScreen, preference);
+    // === Volumes ===
+
+    private void initVolumePreference(String key, int stream) {
+        final VolumeSeekBarPreference volumePref = (VolumeSeekBarPreference) findPreference(key);
+        volumePref.setStream(stream);
+        volumePref.setCallback(mVolumeCallback);
+    }
+
+    private final class VolumePreferenceCallback implements VolumeSeekBarPreference.Callback {
+        private SeekBarVolumizer mCurrent;
+
+        @Override
+        public void onSampleStarting(SeekBarVolumizer sbv) {
+            if (mCurrent != null && mCurrent != sbv) {
+                mCurrent.stopSample();
+            }
+            mCurrent = sbv;
+            if (mCurrent != null) {
+                mHandler.removeMessages(H.STOP_SAMPLE);
+                mHandler.sendEmptyMessageDelayed(H.STOP_SAMPLE, SAMPLE_CUTOFF);
+            }
         }
 
-        return true;
+        public void stopSample() {
+            if (mCurrent != null) {
+                mCurrent.stopSample();
+            }
+        }
+    };
+
+    // === Ringer mode ===
+
+    private void initRingerMode(PreferenceScreen root) {
+        mRingerMode = (DropDownPreference) root.findPreference(KEY_RINGER_MODE);
+        if (mRingerMode == null) return;
+        final AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+        mRingerMode.addItem(R.string.ringer_mode_audible, AudioManager.RINGER_MODE_NORMAL);
+        mRingerMode.addItem(R.string.ringer_mode_vibrate, AudioManager.RINGER_MODE_VIBRATE);
+        mRingerMode.addItem(R.string.ringer_mode_silent, AudioManager.RINGER_MODE_SILENT);
+        updateRingerMode();
+        mRingerMode.setCallback(new DropDownPreference.Callback() {
+            @Override
+            public boolean onItemSelected(int pos, Object value) {
+                final int val = (Integer) value;
+                am.setRingerMode(val);
+                return true;
+            }
+        });
     }
 
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object objValue) {
-        return true;
+    private void updateRingerMode() {
+        final AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+        mRingerMode.setSelectedValue(am.getRingerMode());
     }
 
-    @Override
-    public boolean onPreferenceClick(Preference preference) {
-        return false;
+    // === Phone & notification ringtone ===
+
+    private void initRingtones(PreferenceScreen root) {
+        mPhoneRingtonePreference = root.findPreference(KEY_PHONE_RINGTONE);
+        mNotificationRingtonePreference = root.findPreference(KEY_NOTIFICATION_RINGTONE);
     }
 
-    // === Heads-up notifications ===
-
-    private void updateHeadsUpMode(ContentResolver resolver) {
-        mHeadsUp.setChecked(Settings.Global.HEADS_UP_ON == Settings.Global.getInt(resolver,
-                Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, Settings.Global.HEADS_UP_OFF));
+    private void lookupRingtoneNames() {
+        AsyncTask.execute(mLookupRingtoneNames);
     }
 
-    private void setHeadsUpMode(ContentResolver resolver, boolean value) {
-        Settings.Global.putInt(resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
-                value ? Settings.Global.HEADS_UP_ON : Settings.Global.HEADS_UP_OFF);
+    private final Runnable mLookupRingtoneNames = new Runnable() {
+        @Override
+        public void run() {
+            if (mPhoneRingtonePreference != null) {
+                final CharSequence summary = SoundSettings.updateRingtoneName(
+                        mContext, RingtoneManager.TYPE_RINGTONE);
+                if (summary != null) {
+                    mHandler.obtainMessage(H.UPDATE_PHONE_RINGTONE, summary).sendToTarget();
+                }
+            }
+            if (mNotificationRingtonePreference != null) {
+                final CharSequence summary = SoundSettings.updateRingtoneName(
+                        mContext, RingtoneManager.TYPE_NOTIFICATION);
+                if (summary != null) {
+                    mHandler.obtainMessage(H.UPDATE_NOTIFICATION_RINGTONE, summary).sendToTarget();
+                }
+            }
+        }
+    };
+
+    // === Vibrate when ringing ===
+
+    private void initVibrateWhenRinging(PreferenceScreen root) {
+        mVibrateWhenRinging = (TwoStatePreference) findPreference(KEY_VIBRATE_WHEN_RINGING);
+        if (mVibrateWhenRinging == null) return;
+        mVibrateWhenRinging.setPersistent(false);
+        updateVibrateWhenRinging();
+        mVibrateWhenRinging.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+            @Override
+            public boolean onPreferenceChange(Preference preference, Object newValue) {
+                final boolean val = (Boolean) newValue;
+                return Settings.System.putInt(getContentResolver(),
+                        Settings.System.VIBRATE_WHEN_RINGING,
+                        val ? 1 : 0);
+            }
+        });
     }
 
-    // === Lockscreen (public / private) notifications ===
-
-    private boolean getDeviceLockscreenNotificationsEnabled() {
-        return 0 != Settings.Global.getInt(getContentResolver(),
-                Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0);
-    }
-
-    private boolean getLockscreenAllowPrivateNotifications() {
-        return 0 != Settings.Secure.getInt(getContentResolver(),
-                Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0);
+    private void updateVibrateWhenRinging() {
+        if (mVibrateWhenRinging == null) return;
+        mVibrateWhenRinging.setChecked(Settings.System.getInt(getContentResolver(),
+                Settings.System.VIBRATE_WHEN_RINGING, 0) != 0);
     }
 
     // === Notification listeners ===
@@ -242,9 +238,65 @@
         }
     }
 
-    // === Ringtone ===
+    // === Callbacks ===
 
-    private void lookupRingtoneNames() {
-        new Thread(mRingtoneLookupRunnable).start();
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(intent.getAction())) {
+                updateRingerMode();
+            }
+        }
+    };
+
+    private final class SettingsObserver extends ContentObserver {
+        private final Uri VIBRATE_WHEN_RINGING_URI =
+                Settings.System.getUriFor(Settings.System.VIBRATE_WHEN_RINGING);
+
+        public SettingsObserver() {
+            super(mHandler);
+        }
+
+        public void register(boolean register) {
+            final ContentResolver cr = getContentResolver();
+            if (register) {
+                cr.registerContentObserver(VIBRATE_WHEN_RINGING_URI, false, this);
+            } else {
+                cr.unregisterContentObserver(this);
+            }
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            super.onChange(selfChange, uri);
+            if (VIBRATE_WHEN_RINGING_URI.equals(uri)) {
+                updateVibrateWhenRinging();
+            }
+        }
+    }
+
+    private final class H extends Handler {
+        private static final int UPDATE_PHONE_RINGTONE = 1;
+        private static final int UPDATE_NOTIFICATION_RINGTONE = 2;
+        private static final int STOP_SAMPLE = 3;
+
+        private H() {
+            super(Looper.getMainLooper());
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case UPDATE_PHONE_RINGTONE:
+                    mPhoneRingtonePreference.setSummary((CharSequence) msg.obj);
+                    break;
+                case UPDATE_NOTIFICATION_RINGTONE:
+                    mNotificationRingtonePreference.setSummary((CharSequence) msg.obj);
+                    break;
+                case STOP_SAMPLE:
+                    mVolumeCallback.stopSample();
+                    break;
+            }
+        }
     }
 }
diff --git a/src/com/android/settings/notification/NotificationStation.java b/src/com/android/settings/notification/NotificationStation.java
index 69a7a89..3f37f6d 100644
--- a/src/com/android/settings/notification/NotificationStation.java
+++ b/src/com/android/settings/notification/NotificationStation.java
@@ -35,8 +35,7 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
-import android.service.notification.INotificationListener;
-import android.service.notification.NotificationOrderUpdate;
+import android.service.notification.NotificationListenerService;
 import android.service.notification.StatusBarNotification;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -73,14 +72,13 @@
         }
     };
 
-    private INotificationListener.Stub mListener = new INotificationListener.Stub() {
+    private NotificationListenerService mListener = new NotificationListenerService() {
         @Override
-        public void onListenerConnected(NotificationOrderUpdate update) throws RemoteException {
+        public void onListenerConnected(String[] notificationKeys) {
             // noop
         }
         @Override
-        public void onNotificationPosted(StatusBarNotification notification,
-                NotificationOrderUpdate update) throws RemoteException {
+        public void onNotificationPosted(StatusBarNotification notification) {
             Log.v(TAG, "onNotificationPosted: " + notification);
             final Handler h = getListView().getHandler();
             h.removeCallbacks(mRefreshListRunnable);
@@ -88,17 +86,11 @@
         }
 
         @Override
-        public void onNotificationRemoved(StatusBarNotification notification,
-                NotificationOrderUpdate update) throws RemoteException {
+        public void onNotificationRemoved(StatusBarNotification notification) {
             final Handler h = getListView().getHandler();
             h.removeCallbacks(mRefreshListRunnable);
             h.postDelayed(mRefreshListRunnable, 100);
         }
-
-        @Override
-        public void onNotificationOrderUpdate(NotificationOrderUpdate update)
-                throws RemoteException {
-        }
     };
 
     private NotificationHistoryAdapter mAdapter;
@@ -122,16 +114,24 @@
         mNoMan = INotificationManager.Stub.asInterface(
                 ServiceManager.getService(Context.NOTIFICATION_SERVICE));
         try {
-            mNoMan.registerListener(mListener,
-                    new ComponentName(mContext.getPackageName(),
-                            this.getClass().getCanonicalName()),
-                    ActivityManager.getCurrentUser());
+            mListener.registerAsSystemService(new ComponentName(mContext.getPackageName(),
+                    this.getClass().getCanonicalName()), ActivityManager.getCurrentUser());
         } catch (RemoteException e) {
             // well, that didn't work out
         }
     }
 
     @Override
+    public void onDetach() {
+        try {
+            mListener.unregisterAsSystemService();
+        } catch (RemoteException e) {
+            // well, that didn't work out
+        }
+        super.onDetach();
+    }
+
+    @Override
     public void onCreate(Bundle icicle) {
         logd("onCreate(%s)", icicle);
         super.onCreate(icicle);
diff --git a/src/com/android/settings/notification/TouchSoundSettings.java b/src/com/android/settings/notification/TouchSoundSettings.java
new file mode 100644
index 0000000..2d7149e
--- /dev/null
+++ b/src/com/android/settings/notification/TouchSoundSettings.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Vibrator;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.TwoStatePreference;
+import android.provider.Settings.System;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+
+public class TouchSoundSettings extends SettingsPreferenceFragment {
+    private static final String TAG = "TouchSoundSettings";
+
+    private static final String KEY_DIAL_PAD_TONES = "dial_pad_tones";
+    private static final String KEY_SCREEN_LOCKING_SOUNDS = "screen_locking_sounds";
+    private static final String KEY_OTHER_TOUCH_SOUNDS = "other_touch_sounds";
+    private static final String KEY_VIBRATE_ON_TOUCH = "vibrate_on_touch";
+
+    private final Handler mHandler = new Handler();
+    private final SettingsObserver mSettingsObserver = new SettingsObserver();
+
+    private AudioManager mAudioManager;
+    private SystemSettingPref mDialPadTones;
+    private SystemSettingPref mScreenLockingSounds;
+    private SystemSettingPref mOtherTouchSounds;
+    private SystemSettingPref mVibrateOnTouch;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        addPreferencesFromResource(R.xml.touch_sound_settings);
+
+        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+
+        final boolean hasVoice = Utils.isVoiceCapable(getActivity());
+        final Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+        final boolean hasHaptic = vibrator != null && vibrator.hasVibrator();
+
+        mDialPadTones = new SystemSettingPref(hasVoice,
+                KEY_DIAL_PAD_TONES, System.DTMF_TONE_WHEN_DIALING);
+
+        mScreenLockingSounds = new SystemSettingPref(true,
+                KEY_SCREEN_LOCKING_SOUNDS, System.LOCKSCREEN_SOUNDS_ENABLED);
+
+        mOtherTouchSounds = new SystemSettingPref(true,
+                KEY_OTHER_TOUCH_SOUNDS,System.SOUND_EFFECTS_ENABLED) {
+            @Override
+            protected void setSetting(boolean value) {
+                if (value) {
+                    mAudioManager.loadSoundEffects();
+                } else {
+                    mAudioManager.unloadSoundEffects();
+                }
+                super.setSetting(value);
+            }
+        };
+
+        mVibrateOnTouch = new SystemSettingPref(hasHaptic,
+                KEY_VIBRATE_ON_TOUCH, System.HAPTIC_FEEDBACK_ENABLED);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mSettingsObserver.register(true);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mSettingsObserver.register(false);
+    }
+
+    // === Common system setting preference helper ===
+
+    private class SystemSettingPref {
+        private final String mSetting;
+        private final Uri mUri;
+
+        private TwoStatePreference mPref;
+
+        private SystemSettingPref(boolean applicable, String key, String setting) {
+            mSetting = setting;
+            mUri = System.getUriFor(mSetting);
+            if (!applicable) removePreference(key);
+            mPref = (TwoStatePreference) getPreferenceScreen().findPreference(key);
+            if (mPref == null) return;
+            update();
+            mPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    setSetting((Boolean)newValue);
+                    return true;
+                }
+            });
+        }
+
+        protected void setSetting(boolean value) {
+            System.putInt(getContentResolver(), mSetting, value ? 1 : 0);
+        }
+
+        private Uri getUri() {
+            return mUri;
+        }
+
+        private void update() {
+            if (mPref == null) return;
+            mPref.setChecked(System.getInt(getContentResolver(), mSetting, 1) != 0);
+        }
+    }
+
+    // === Callbacks ===
+
+    private final class SettingsObserver extends ContentObserver {
+        public SettingsObserver() {
+            super(mHandler);
+        }
+
+        public void register(boolean register) {
+            final ContentResolver cr = getContentResolver();
+            if (register) {
+                cr.registerContentObserver(mDialPadTones.getUri(), false, this);
+                cr.registerContentObserver(mScreenLockingSounds.getUri(), false, this);
+                cr.registerContentObserver(mOtherTouchSounds.getUri(), false, this);
+                cr.registerContentObserver(mVibrateOnTouch.getUri(), false, this);
+            } else {
+                cr.unregisterContentObserver(this);
+            }
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            super.onChange(selfChange, uri);
+            if (mDialPadTones.getUri().equals(uri)) {
+                mDialPadTones.update();
+            }
+            if (mScreenLockingSounds.getUri().equals(uri)) {
+                mScreenLockingSounds.update();
+            }
+            if (mOtherTouchSounds.getUri().equals(uri)) {
+                mOtherTouchSounds.update();
+            }
+            if (mVibrateOnTouch.getUri().equals(uri)) {
+                mVibrateOnTouch.update();
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java
new file mode 100644
index 0000000..5b0621d
--- /dev/null
+++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.preference.PreferenceManager;
+import android.preference.SeekBarPreference;
+import android.preference.SeekBarVolumizer;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.SeekBar;
+
+import com.android.settings.R;
+
+/** A slider preference that directly controls an audio stream volume (no dialog) **/
+public class VolumeSeekBarPreference extends SeekBarPreference
+        implements PreferenceManager.OnActivityStopListener {
+    private static final String TAG = "VolumeSeekBarPreference";
+
+    private final Context mContext;
+
+    private int mStream;
+    private SeekBar mSeekBar;
+    private SeekBarVolumizer mVolumizer;
+    private Callback mCallback;
+
+    public VolumeSeekBarPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mContext = context;
+    }
+
+    public void setStream(int stream) {
+        mStream = stream;
+    }
+
+    public void setCallback(Callback callback) {
+        mCallback = callback;
+    }
+
+    @Override
+    public void onActivityStop() {
+        if (mVolumizer != null) {
+            mVolumizer.stop();
+        }
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        if (mStream == 0) {
+            Log.w(TAG, "No stream found, not binding volumizer");
+            return;
+        }
+        getPreferenceManager().registerOnActivityStopListener(this);
+        final SeekBar seekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar);
+        if (seekBar == mSeekBar) return;
+        mSeekBar = seekBar;
+        final SeekBarVolumizer.Callback sbvc = new SeekBarVolumizer.Callback() {
+            @Override
+            public void onSampleStarting(SeekBarVolumizer sbv) {
+                if (mCallback != null) {
+                    mCallback.onSampleStarting(sbv);
+                }
+            }
+        };
+        final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
+        mVolumizer = new SeekBarVolumizer(mContext, seekBar, mStream, sampleUri, sbvc);
+    }
+
+    private Uri getMediaVolumeUri() {
+        return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
+                + mContext.getPackageName()
+                + "/" + R.raw.media_volume);
+    }
+
+    public interface Callback {
+        void onSampleStarting(SeekBarVolumizer sbv);
+    }
+}
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index ff1a5ab..e69fe95 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -45,42 +45,65 @@
 import android.service.notification.ZenModeConfig;
 import android.text.format.DateFormat;
 import android.util.Log;
+import android.util.SparseArray;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Switch;
 import android.widget.TextView;
 import android.widget.TimePicker;
 
 import com.android.settings.R;
+import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
+import com.android.settings.widget.SwitchBar;
 
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
 import java.util.Objects;
 
-public class ZenModeSettings extends SettingsPreferenceFragment implements Indexable {
+public class ZenModeSettings extends SettingsPreferenceFragment implements Indexable,
+        SwitchBar.OnSwitchChangeListener {
     private static final String TAG = "ZenModeSettings";
     private static final boolean DEBUG = true;
 
-    private static final String KEY_ZEN_MODE = "zen_mode";
     private static final String KEY_GENERAL = "general";
     private static final String KEY_CALLS = "phone_calls";
     private static final String KEY_MESSAGES = "messages";
 
     private static final String KEY_AUTOMATIC = "automatic";
     private static final String KEY_WHEN = "when";
+    private static final String KEY_START_TIME = "start_time";
+    private static final String KEY_END_TIME = "end_time";
 
     private static final String KEY_AUTOMATION = "automation";
     private static final String KEY_ENTRY = "entry";
     private static final String KEY_CONDITION_PROVIDERS = "manage_condition_providers";
 
+    private static final SparseArray<String> ALL_KEY_TITLES = allKeyTitles();
+
+    private static SparseArray<String> allKeyTitles() {
+        final SparseArray<String> rt = new SparseArray<String>();
+        rt.put(R.string.zen_mode_general_category, KEY_GENERAL);
+        rt.put(R.string.zen_mode_phone_calls, KEY_CALLS);
+        rt.put(R.string.zen_mode_messages, KEY_MESSAGES);
+        rt.put(R.string.zen_mode_automatic_category, KEY_AUTOMATIC);
+        rt.put(R.string.zen_mode_when, KEY_WHEN);
+        rt.put(R.string.zen_mode_start_time, KEY_START_TIME);
+        rt.put(R.string.zen_mode_end_time, KEY_END_TIME);
+        rt.put(R.string.zen_mode_automation_category, KEY_AUTOMATION);
+        rt.put(R.string.manage_condition_providers, KEY_CONDITION_PROVIDERS);
+        return rt;
+    }
+
     private final Handler mHandler = new Handler();
     private final SettingsObserver mSettingsObserver = new SettingsObserver();
 
-    private SwitchPreference mSwitch;
+    private SwitchBar mSwitchBar;
+    private Switch mSwitch;
     private Context mContext;
     private PackageManager mPM;
     private ZenModeConfig mConfig;
@@ -98,6 +121,26 @@
     private boolean mIgnoreNext;
 
     @Override
+    public void onSwitchChanged(Switch switchView, final boolean isChecked) {
+        if (DEBUG) Log.d(TAG, "onPreferenceChange isChecked=" + isChecked
+                + " mIgnoreNext=" + mIgnoreNext);
+        if (mIgnoreNext) {
+            mIgnoreNext = false;
+        }
+        AsyncTask.execute(new Runnable() {
+            @Override
+            public void run() {
+                final int v = isChecked ? Global.ZEN_MODE_ON : Global.ZEN_MODE_OFF;
+                putZenModeSetting(v);
+                final int n = ConditionProviderSettings.getEnabledProviderCount(mContext);
+                if (n > 0) {
+                    mHandler.post(isChecked ? mShowDialog : mHideDialog);
+                }
+            }
+        });
+    }
+
+    @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         mContext = getActivity();
@@ -111,8 +154,8 @@
         mConfig = getZenModeConfig();
         if (DEBUG) Log.d(TAG, "Loaded mConfig=" + mConfig);
 
-        mSwitch = (SwitchPreference) root.findPreference(KEY_ZEN_MODE);
-        mSwitch.setOnPreferenceChangeListener(mSwitchListener);
+        mSwitchBar = ((SettingsActivity) mContext).getSwitchBar();
+        mSwitch = mSwitchBar.getSwitch();
 
         final PreferenceCategory general = (PreferenceCategory) root.findPreference(KEY_GENERAL);
 
@@ -193,6 +236,7 @@
         final FragmentManager mgr = getFragmentManager();
 
         mStart = new TimePickerPreference(mContext, mgr);
+        mStart.setKey(KEY_START_TIME);
         mStart.setTitle(R.string.zen_mode_start_time);
         mStart.setCallback(new TimePickerPreference.Callback() {
             @Override
@@ -214,6 +258,7 @@
         mStart.setDependency(mWhen.getKey());
 
         mEnd = new TimePickerPreference(mContext, mgr);
+        mEnd.setKey(KEY_END_TIME);
         mEnd.setTitle(R.string.zen_mode_end_time);
         mEnd.setSummaryFormat(R.string.zen_mode_end_time_summary_format);
         mEnd.setCallback(new TimePickerPreference.Callback() {
@@ -305,7 +350,7 @@
             if (automatic == null || automatic.length == 0) {
                 return null;
             }
-            final String divider = getString(R.string.zen_mode_entry_conditions_summary_divider);
+            final String divider = getString(R.string.summary_divider_text);
             final StringBuilder sb = new StringBuilder();
             for (int i = 0; i < automatic.length; i++) {
                 if (i > 0) sb.append(divider);
@@ -324,12 +369,16 @@
         updateControls();
         updateZenMode();
         mSettingsObserver.register();
+        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchBar.show();
     }
 
     @Override
     public void onPause() {
         super.onPause();
         mSettingsObserver.unregister();
+        mSwitchBar.removeOnSwitchChangeListener(this);
+        mSwitchBar.hide();
     }
 
     private void updateZenMode() {
@@ -339,7 +388,6 @@
             mSwitch.setChecked(zenMode);
             mIgnoreNext = true;
         }
-        mSwitch.setTitle(zenMode ? R.string.zen_mode_option_on : R.string.zen_mode_option_off);
     }
 
     private void updateZenModeConfig() {
@@ -417,54 +465,22 @@
         }
     };
 
-    private final OnPreferenceChangeListener mSwitchListener = new OnPreferenceChangeListener() {
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            final boolean isChecked = (Boolean) newValue;
-            if (DEBUG) Log.d(TAG, "onPreferenceChange isChecked=" + isChecked
-                    + " mIgnoreNext=" + mIgnoreNext);
-            if (mIgnoreNext) {
-                mIgnoreNext = false;
-                return true;
-            }
-            AsyncTask.execute(new Runnable() {
-                @Override
-                public void run() {
-                    final int v = isChecked ? Global.ZEN_MODE_ON : Global.ZEN_MODE_OFF;
-                    putZenModeSetting(v);
-                    final int n = ConditionProviderSettings.getEnabledProviderCount(mContext);
-                    if (n > 0) {
-                        mHandler.post(isChecked ? mShowDialog : mHideDialog);
-                    }
-                }
-            });
-            return true;
-        }
-    };
-
     // Enable indexing of searchable data
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
         new BaseSearchIndexProvider() {
             @Override
             public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
-                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
-                add(result, context, R.string.zen_mode_settings_title);
-                add(result, context, R.string.zen_mode_general_category);
-                add(result, context, R.string.zen_mode_phone_calls);
-                add(result, context, R.string.zen_mode_messages);
-                add(result, context, R.string.zen_mode_automatic_category);
-                add(result, context, R.string.zen_mode_when);
-                add(result, context, R.string.zen_mode_start_time);
-                add(result, context, R.string.zen_mode_end_time);
-                return result;
-            }
-
-            private void add(List<SearchIndexableRaw> result, Context context, int title) {
+                final int N = ALL_KEY_TITLES.size();
+                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(N);
                 final Resources res = context.getResources();
-                final SearchIndexableRaw data = new SearchIndexableRaw(context);
-                data.title = res.getString(title);
-                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
-                result.add(data);
+                for (int i = 0; i < N; i++) {
+                    final SearchIndexableRaw data = new SearchIndexableRaw(context);
+                    data.key = ALL_KEY_TITLES.valueAt(i);
+                    data.title = res.getString(ALL_KEY_TITLES.keyAt(i));
+                    data.screenTitle = res.getString(R.string.zen_mode_settings_title);
+                    result.add(data);
+                }
+                return result;
             }
         };
 
diff --git a/src/com/android/settings/print/PrintServiceSettingsFragment.java b/src/com/android/settings/print/PrintServiceSettingsFragment.java
index ab162fb..f104a06 100644
--- a/src/com/android/settings/print/PrintServiceSettingsFragment.java
+++ b/src/com/android/settings/print/PrintServiceSettingsFragment.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.print;
 
-import android.app.ActionBar;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -45,7 +44,6 @@
 import android.print.PrinterInfo;
 import android.text.TextUtils;
 import android.util.Log;
-import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -53,30 +51,31 @@
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityManager;
 import android.widget.BaseAdapter;
-import android.widget.CompoundButton;
 import android.widget.Filter;
 import android.widget.Filterable;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.SearchView;
+import android.widget.Switch;
 import android.widget.TextView;
 
 import com.android.settings.R;
+import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.print.PrintSettingsFragment.ToggleSwitch;
-import com.android.settings.print.PrintSettingsFragment.ToggleSwitch.OnBeforeCheckedChangeListener;
 
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import android.widget.CompoundButton.OnCheckedChangeListener;
+import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.ToggleSwitch;
+
 /**
  * Fragment with print service settings.
  */
 public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
-        implements DialogInterface.OnClickListener {
+        implements DialogInterface.OnClickListener, SwitchBar.OnSwitchChangeListener {
 
     private static final int LOADER_ID_PRINTERS_LOADER = 1;
 
@@ -112,6 +111,7 @@
         }
     };
 
+    private SwitchBar mSwitchBar;
     private ToggleSwitch mToggleSwitch;
 
     private String mPreferenceKey;
@@ -143,12 +143,16 @@
         mSettingsContentObserver.register(getContentResolver());
         updateEmptyView();
         updateUiForServiceState();
+        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchBar.show();
     }
 
     @Override
     public void onPause() {
         mSettingsContentObserver.unregister(getContentResolver());
         super.onPause();
+        mSwitchBar.removeOnSwitchChangeListener(this);
+        mSwitchBar.hide();
     }
 
     @Override
@@ -159,18 +163,10 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
-        setupActionBarToggleSwitch(getActivity(), mToggleSwitch);
-    }
-
-    @Override
     public void onDestroyView() {
-        removeActionBarToggleSwitch(getActivity());
         if (mOldActivityTitle != null) {
             getActivity().getActionBar().setTitle(mOldActivityTitle);
         }
-        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
         super.onDestroyView();
     }
 
@@ -294,8 +290,12 @@
         mPrintersAdapter = new PrintersAdapter();
         mPrintersAdapter.registerDataSetObserver(mDataObserver);
 
-        mToggleSwitch = createActionBarToggleSwitch(getActivity().getActionBar().getThemedContext());
-        mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
+        final SettingsActivity activity = (SettingsActivity) getActivity();
+
+        mSwitchBar = activity.getSwitchBar();
+
+        mToggleSwitch = mSwitchBar.getSwitch();
+        mToggleSwitch.setOnBeforeCheckedChangeListener(new ToggleSwitch.OnBeforeCheckedChangeListener() {
             @Override
             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
                 if (checked) {
@@ -312,17 +312,17 @@
                 return false;
             }
         });
-        mToggleSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                updateEmptyView();
-            }
-        });
 
         getListView().setSelector(new ColorDrawable(Color.TRANSPARENT));
         getListView().setAdapter(mPrintersAdapter);
     }
 
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        updateEmptyView();
+    }
+
     private void updateUiForArguments() {
         Bundle arguments = getArguments();
 
@@ -445,27 +445,6 @@
         }
     }
 
-    private ToggleSwitch createActionBarToggleSwitch(Context context) {
-        ToggleSwitch toggleSwitch = new ToggleSwitch(context);
-        final int padding = context.getResources().getDimensionPixelSize(
-                R.dimen.action_bar_switch_padding);
-        toggleSwitch.setPaddingRelative(0, 0, padding, 0);
-        return toggleSwitch;
-    }
-
-    private void setupActionBarToggleSwitch(Activity activity, ToggleSwitch toggleSwitch) {
-        activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
-                ActionBar.DISPLAY_SHOW_CUSTOM);
-        activity.getActionBar().setCustomView(toggleSwitch,
-                new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
-                        ActionBar.LayoutParams.WRAP_CONTENT,
-                        Gravity.CENTER_VERTICAL | Gravity.END));
-    }
-
-    private void removeActionBarToggleSwitch(Activity activity) {
-        activity.getActionBar().setCustomView(null);
-    }
-
     private static abstract class SettingsContentObserver extends ContentObserver {
 
         public SettingsContentObserver(Handler handler) {
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index 07e70d8..3f7362c 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -50,7 +50,6 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Switch;
 import android.widget.TextView;
 
 import com.android.internal.content.PackageMonitor;
@@ -294,36 +293,6 @@
         }
     }
 
-    public static class ToggleSwitch extends Switch {
-
-        private OnBeforeCheckedChangeListener mOnBeforeListener;
-
-        public static interface OnBeforeCheckedChangeListener {
-            public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked);
-        }
-
-        public ToggleSwitch(Context context) {
-            super(context);
-        }
-
-        public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
-            mOnBeforeListener = listener;
-        }
-
-        @Override
-        public void setChecked(boolean checked) {
-            if (mOnBeforeListener != null
-                    && mOnBeforeListener.onBeforeCheckedChanged(this, checked)) {
-                return;
-            }
-            super.setChecked(checked);
-        }
-
-        public void setCheckedInternal(boolean checked) {
-            super.setChecked(checked);
-        }
-    }
-
     private static abstract class SettingsContentObserver extends ContentObserver {
 
         public SettingsContentObserver(Handler handler) {
diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java
index 1bcb9d8..adddb39 100644
--- a/src/com/android/settings/search/Index.java
+++ b/src/com/android/settings/search/Index.java
@@ -1217,9 +1217,16 @@
 
             long lastInsertedRowId = -1;
             try {
-                lastInsertedRowId =
-                        database.replaceOrThrow(Tables.TABLE_SAVED_QUERIES, null, values);
+                // First, delete all saved queries that are the same
+                database.delete(Tables.TABLE_SAVED_QUERIES,
+                        IndexDatabaseHelper.SavedQueriesColums.QUERY + " = ?",
+                        new String[] { params[0] });
 
+                // Second, insert the saved query
+                lastInsertedRowId =
+                        database.insertOrThrow(Tables.TABLE_SAVED_QUERIES, null, values);
+
+                // Last, remove "old" saved queries
                 final long delta = lastInsertedRowId - MAX_SAVED_SEARCH_QUERY;
                 if (delta > 0) {
                     int count = database.delete(Tables.TABLE_SAVED_QUERIES, "rowId <= ?",
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 80aef85..03f06e6 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -36,7 +36,9 @@
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.location.LocationSettings;
+import com.android.settings.notification.NotificationDisplaySettings;
 import com.android.settings.notification.NotificationSettings;
+import com.android.settings.notification.TouchSoundSettings;
 import com.android.settings.notification.ZenModeSettings;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.users.UserSettings;
@@ -137,6 +139,18 @@
                         NotificationSettings.class.getName(),
                         R.drawable.ic_settings_notifications));
 
+        sResMap.put(NotificationDisplaySettings.class.getName(),
+                new SearchIndexableResource(RANK_NOTIFICATIONS,
+                        R.xml.notification_display_settings,
+                        NotificationDisplaySettings.class.getName(),
+                        R.drawable.ic_settings_notifications));
+
+        sResMap.put(TouchSoundSettings.class.getName(),
+                new SearchIndexableResource(RANK_NOTIFICATIONS,
+                        R.xml.touch_sound_settings,
+                        TouchSoundSettings.class.getName(),
+                        R.drawable.ic_settings_notifications));
+
         sResMap.put(ZenModeSettings.class.getName(),
                 new SearchIndexableResource(RANK_NOTIFICATIONS,
                         NO_DATA_RES_ID,
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index e871671..40c8481 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -33,7 +33,7 @@
 
 public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedChangeListener {
 
-    private Switch mSwitch;
+    private ToggleSwitch mSwitch;
     private TextView mTextView;
 
     private ArrayList<OnSwitchChangeListener> mSwitchChangeListeners =
@@ -69,7 +69,7 @@
         mTextView = (TextView) findViewById(R.id.switch_text);
         mTextView.setText(R.string.switch_off_text);
 
-        mSwitch = (Switch) findViewById(R.id.switch_widget);
+        mSwitch = (ToggleSwitch) findViewById(R.id.switch_widget);
         mSwitch.setOnCheckedChangeListener(this);
 
         addOnSwitchChangeListener(new OnSwitchChangeListener() {
@@ -86,7 +86,7 @@
         setVisibility(View.GONE);
     }
 
-    public Switch getSwitch() {
+    public ToggleSwitch getSwitch() {
         return mSwitch;
     }
 
diff --git a/src/com/android/settings/accessibility/ToggleSwitch.java b/src/com/android/settings/widget/ToggleSwitch.java
similarity index 76%
rename from src/com/android/settings/accessibility/ToggleSwitch.java
rename to src/com/android/settings/widget/ToggleSwitch.java
index e7c39e4..8232ff1 100644
--- a/src/com/android/settings/accessibility/ToggleSwitch.java
+++ b/src/com/android/settings/widget/ToggleSwitch.java
@@ -14,12 +14,14 @@
  * limitations under the License.
  */
 
-package com.android.settings.accessibility;
+package com.android.settings.widget;
 
 import android.content.Context;
+import android.util.AttributeSet;
 import android.widget.Switch;
 
 public class ToggleSwitch extends Switch {
+
     private ToggleSwitch.OnBeforeCheckedChangeListener mOnBeforeListener;
 
     public static interface OnBeforeCheckedChangeListener {
@@ -30,6 +32,18 @@
         super(context);
     }
 
+    public ToggleSwitch(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public ToggleSwitch(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public ToggleSwitch(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
     public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
         mOnBeforeListener = listener;
     }
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index a54c1c4..7ccfc6b 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -20,6 +20,9 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.net.IpConfiguration;
+import android.net.IpConfiguration.IpAssignment;
+import android.net.IpConfiguration.ProxySettings;
 import android.net.LinkAddress;
 import android.net.LinkProperties;
 import android.net.NetworkInfo.DetailedState;
@@ -28,9 +31,7 @@
 import android.net.RouteInfo;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiConfiguration.AuthAlgorithm;
-import android.net.wifi.WifiConfiguration.IpAssignment;
 import android.net.wifi.WifiConfiguration.KeyMgmt;
-import android.net.wifi.WifiConfiguration.ProxySettings;
 import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiEnterpriseConfig.Eap;
 import android.net.wifi.WifiEnterpriseConfig.Phase2;
@@ -240,27 +241,27 @@
             boolean showAdvancedFields = false;
             if (mAccessPoint.networkId != INVALID_NETWORK_ID) {
                 WifiConfiguration config = mAccessPoint.getConfig();
-                if (config.ipAssignment == IpAssignment.STATIC) {
+                if (config.getIpAssignment() == IpAssignment.STATIC) {
                     mIpSettingsSpinner.setSelection(STATIC_IP);
                     showAdvancedFields = true;
                 } else {
                     mIpSettingsSpinner.setSelection(DHCP);
                 }
                 //Display IP addresses
-                for(InetAddress a : config.linkProperties.getAddresses()) {
+                for(InetAddress a : config.getLinkProperties().getAddresses()) {
                     addRow(group, R.string.wifi_ip_address, a.getHostAddress());
                 }
 
 
-                if (config.proxySettings == ProxySettings.STATIC) {
+                if (config.getProxySettings() == ProxySettings.STATIC) {
                     mProxySettingsSpinner.setSelection(PROXY_STATIC);
                     showAdvancedFields = true;
-                } else if (config.proxySettings == ProxySettings.PAC) {
+                } else if (config.getProxySettings() == ProxySettings.PAC) {
                     mProxySettingsSpinner.setVisibility(View.GONE);
                     TextView textView = (TextView)mView.findViewById(R.id.proxy_pac_info);
                     textView.setVisibility(View.VISIBLE);
                     textView.setText(context.getString(R.string.proxy_url) +
-                            config.linkProperties.getHttpProxy().getPacFileUrl());
+                            config.getLinkProperties().getHttpProxy().getPacFileUrl());
                     showAdvancedFields = true;
                 } else {
                     mProxySettingsSpinner.setSelection(PROXY_NONE);
@@ -446,9 +447,8 @@
                 return null;
         }
 
-        config.proxySettings = mProxySettings;
-        config.ipAssignment = mIpAssignment;
-        config.linkProperties = new LinkProperties(mLinkProperties);
+        config.setIpConfiguration(
+                new IpConfiguration(mIpAssignment, mProxySettings, mLinkProperties));
 
         return config;
     }
@@ -772,7 +772,7 @@
                 mDns2View.addTextChangedListener(this);
             }
             if (config != null) {
-                LinkProperties linkProperties = config.linkProperties;
+                LinkProperties linkProperties = config.getLinkProperties();
                 Iterator<LinkAddress> iterator = linkProperties.getLinkAddresses().iterator();
                 if (iterator.hasNext()) {
                     LinkAddress linkAddress = iterator.next();
@@ -822,7 +822,7 @@
                 mProxyExclusionListView.addTextChangedListener(this);
             }
             if (config != null) {
-                ProxyInfo proxyProperties = config.linkProperties.getHttpProxy();
+                ProxyInfo proxyProperties = config.getLinkProperties().getHttpProxy();
                 if (proxyProperties != null) {
                     mProxyHostView.setText(proxyProperties.getHost());
                     mProxyPortView.setText(Integer.toString(proxyProperties.getPort()));
diff --git a/src/com/android/settings/wifi/WifiPickerActivity.java b/src/com/android/settings/wifi/WifiPickerActivity.java
index deef8fa..6dea82e 100644
--- a/src/com/android/settings/wifi/WifiPickerActivity.java
+++ b/src/com/android/settings/wifi/WifiPickerActivity.java
@@ -16,22 +16,12 @@
 package com.android.settings.wifi;
 
 import com.android.settings.ButtonBarHandler;
+import com.android.settings.SettingsActivity;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
 
-import android.app.Fragment;
 import android.content.Intent;
-import android.os.Bundle;
-import android.preference.PreferenceActivity;
-import android.widget.Button;
 
-public class WifiPickerActivity extends PreferenceActivity implements ButtonBarHandler {
-
-    // Same as what are in PreferenceActivity as private.
-    private static final String EXTRA_PREFS_SHOW_BUTTON_BAR = "extra_prefs_show_button_bar";
-    private static final String EXTRA_PREFS_SET_NEXT_TEXT = "extra_prefs_set_next_text";
-    private static final String EXTRA_PREFS_SET_BACK_TEXT = "extra_prefs_set_back_text";
-    private static final String EXTRA_WIFI_SHOW_ACTION_BAR = "wifi_show_action_bar";
-    private static final String EXTRA_WIFI_SHOW_MENUS = "wifi_show_menus";
+public class WifiPickerActivity extends SettingsActivity implements ButtonBarHandler {
 
     @Override
     public Intent getIntent() {
@@ -39,7 +29,6 @@
         if (!modIntent.hasExtra(EXTRA_SHOW_FRAGMENT)) {
             modIntent.putExtra(EXTRA_SHOW_FRAGMENT, WifiSettings.class.getName());
         }
-        modIntent.putExtra(EXTRA_NO_HEADERS, true);
         return modIntent;
     }
 
@@ -50,59 +39,4 @@
                 || AdvancedWifiSettings.class.getName().equals(fragmentName)) return true;
         return false;
     }
-
-    /**
-     * Almost dead copy of
-     * {@link PreferenceActivity#startWithFragment(String, Bundle, Fragment, int)}, except this has
-     * additional codes for button bar handling.
-     */
-    @Override
-    public void startWithFragment(String fragmentName, Bundle args,
-            Fragment resultTo, int resultRequestCode) {
-        Intent intent = new Intent(Intent.ACTION_MAIN);
-        intent.setClass(this, getClass());
-        intent.putExtra(EXTRA_SHOW_FRAGMENT, fragmentName);
-        intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
-        intent.putExtra(EXTRA_NO_HEADERS, true);
-
-        final Intent orgIntent = getIntent();
-        if (orgIntent.hasExtra(EXTRA_PREFS_SHOW_BUTTON_BAR)) {
-            intent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR,
-                    orgIntent.getBooleanExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false));
-        }
-        if (orgIntent.hasExtra(EXTRA_PREFS_SET_NEXT_TEXT)) {
-            intent.putExtra(EXTRA_PREFS_SET_NEXT_TEXT,
-                    orgIntent.getStringExtra(EXTRA_PREFS_SET_NEXT_TEXT));
-        }
-        if (orgIntent.hasExtra(EXTRA_PREFS_SET_BACK_TEXT)) {
-            intent.putExtra(EXTRA_PREFS_SET_BACK_TEXT,
-                    orgIntent.getStringExtra(EXTRA_PREFS_SET_BACK_TEXT));
-        }
-        if (orgIntent.hasExtra(EXTRA_WIFI_SHOW_ACTION_BAR)) {
-            intent.putExtra(EXTRA_WIFI_SHOW_ACTION_BAR,
-                    orgIntent.getBooleanExtra(EXTRA_WIFI_SHOW_ACTION_BAR, true));
-        }
-        if (orgIntent.hasExtra(EXTRA_WIFI_SHOW_MENUS)) {
-            intent.putExtra(EXTRA_WIFI_SHOW_MENUS,
-                    orgIntent.getBooleanExtra(EXTRA_WIFI_SHOW_MENUS, true));
-        }
-
-        if (resultTo == null) {
-            startActivity(intent);
-        } else {
-            resultTo.startActivityForResult(intent, resultRequestCode);
-        }
-    }
-
-    @Override
-    public boolean hasNextButton() {
-        // PreferenceActivity#hasNextButton() is protected, so we need to expose it here.
-        return super.hasNextButton();
-    }
-
-    @Override
-    public Button getNextButton() {
-        // PreferenceActivity#getNextButton() is protected, so we need to expose it here.
-        return super.getNextButton();
-    }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index a7d46e8..00a5b90 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -28,7 +28,6 @@
 import com.android.settings.widget.SwitchBar;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
 
-import android.app.ActionBar;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -59,7 +58,6 @@
 import android.util.Log;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -73,7 +71,6 @@
 import android.widget.PopupMenu;
 import android.widget.PopupMenu.OnMenuItemClickListener;
 import android.widget.RelativeLayout;
-import android.widget.Switch;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -570,7 +567,7 @@
 
                     if (mSelectedAccessPoint.security != AccessPoint.SECURITY_NONE) {
                         // Only allow writing of NFC tags for password-protected networks.
-                        menu.add(Menu.NONE, MENU_ID_WRITE_NFC, 0, "Write to NFC Tag");
+                        menu.add(Menu.NONE, MENU_ID_WRITE_NFC, 0, R.string.wifi_menu_write_to_nfc);
                     }
                 }
             }
@@ -705,9 +702,11 @@
                             })
                             .create();
             case WRITE_NFC_DIALOG_ID:
-                mWifiToNfcDialog =new WriteWifiConfigToNfcDialog(
-                        getActivity(), mSelectedAccessPoint, mWifiManager);
-                return mWifiToNfcDialog;
+                if (mSelectedAccessPoint != null) {
+                    mWifiToNfcDialog = new WriteWifiConfigToNfcDialog(
+                            getActivity(), mSelectedAccessPoint, mWifiManager);
+                    return mWifiToNfcDialog;
+                }
 
         }
         return super.onCreateDialog(dialogId);
diff --git a/src/com/android/settings/wifi/WpsDialog.java b/src/com/android/settings/wifi/WpsDialog.java
index 2a93884..662d477 100644
--- a/src/com/android/settings/wifi/WpsDialog.java
+++ b/src/com/android/settings/wifi/WpsDialog.java
@@ -27,7 +27,6 @@
 import android.net.wifi.WpsInfo;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.Message;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ProgressBar;
@@ -45,6 +44,8 @@
 public class WpsDialog extends AlertDialog {
 
     private final static String TAG = "WpsDialog";
+    private static final String DIALOG_STATE = "android:dialogState";
+    private static final String DIALOG_MSG_STRING = "android:dialogMsg";
 
     private View mView;
     private TextView mTextView;
@@ -64,6 +65,7 @@
 
     private Context mContext;
     private Handler mHandler = new Handler();
+    private String mMsgString = "";
 
     private enum DialogState {
         WPS_INIT,
@@ -128,6 +130,25 @@
                 handleEvent(context, intent);
             }
         };
+        setCanceledOnTouchOutside(false);
+    }
+
+    @Override
+    public Bundle onSaveInstanceState () {
+        Bundle bundle  = super.onSaveInstanceState();
+        bundle.putString(DIALOG_STATE, mDialogState.toString());
+        bundle.putString(DIALOG_MSG_STRING, mMsgString.toString());
+        return bundle;
+    }
+
+    @Override
+    public void onRestoreInstanceState(Bundle savedInstanceState) {
+        if (savedInstanceState != null) {
+            super.onRestoreInstanceState(savedInstanceState);
+            DialogState dialogState = mDialogState.valueOf(savedInstanceState.getString(DIALOG_STATE));
+            String msg = savedInstanceState.getString(DIALOG_MSG_STRING);
+            updateDialog(dialogState, msg);
+        }
     }
 
     @Override
@@ -207,6 +228,7 @@
             return;
         }
         mDialogState = state;
+        mMsgString = msg;
 
         mHandler.post(new Runnable() {
                 @Override
diff --git a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
index 7515f5c..e59c61c 100644
--- a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
+++ b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.android.settings.wifi;
 
 import android.app.Activity;
@@ -39,6 +55,8 @@
 
     private static final String TAG = WriteWifiConfigToNfcDialog.class.getName().toString();
     private static final String PASSWORD_FORMAT = "102700%s%s";
+    private static final int HEX_RADIX = 16;
+    private static final char[] hexArray = "0123456789ABCDEF".toCharArray();
 
     private final PowerManager.WakeLock mWakeLock;
 
@@ -58,12 +76,13 @@
     WriteWifiConfigToNfcDialog(Context context, AccessPoint accessPoint,
             WifiManager wifiManager) {
         super(context);
-        this.mContext = context;
-        this.mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
+
+        mContext = context;
+        mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
                 .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WriteWifiConfigToNfcDialog:wakeLock");
-        this.mAccessPoint = accessPoint;
-        this.mOnTextChangedHandler = new Handler();
-        this.mWifiManager = wifiManager;
+        mAccessPoint = accessPoint;
+        mOnTextChangedHandler = new Handler();
+        mWifiManager = wifiManager;
     }
 
     @Override
@@ -105,9 +124,9 @@
                 = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
         String passwordHex = byteArrayToHexString(password.getBytes());
 
-        String passwordLength = password.length() >= 16
-                ? "" + Character.forDigit(password.length(), 16)
-                : "0" + Character.forDigit(password.length(), 16);
+        String passwordLength = password.length() >= HEX_RADIX
+                ? "" + Character.forDigit(password.length(), HEX_RADIX)
+                : "0" + Character.forDigit(password.length(), HEX_RADIX);
 
         passwordHex = String.format(PASSWORD_FORMAT, passwordLength, passwordHex).toUpperCase();
 
@@ -166,11 +185,11 @@
                     setViewText(mCancelButton, com.android.internal.R.string.done_label);
                 } catch (IOException e) {
                     setViewText(mLabelView, R.string.status_failed_to_write);
-                    Log.e(TAG, "Unable to write WiFi config to NFC tag.", e);
+                    Log.e(TAG, "Unable to write Wi-Fi config to NFC tag.", e);
                     return;
                 } catch (FormatException e) {
                     setViewText(mLabelView, R.string.status_failed_to_write);
-                    Log.e(TAG, "Unable to write WiFi config to NFC tag.", e);
+                    Log.e(TAG, "Unable to write Wi-Fi config to NFC tag.", e);
                     return;
                 }
             } else {
@@ -239,14 +258,13 @@
         byte[] data = new byte[len / 2];
 
         for (int i = 0; i < len; i += 2) {
-            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
-                    + Character.digit(s.charAt(i + 1), 16));
+            data[i / 2] = (byte) ((Character.digit(s.charAt(i), HEX_RADIX) << 4)
+                    + Character.digit(s.charAt(i + 1), HEX_RADIX));
         }
 
         return data;
     }
 
-    final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
     private static String byteArrayToHexString(byte[] bytes) {
         char[] hexChars = new char[bytes.length * 2];
         for ( int j = 0; j < bytes.length; j++ ) {
@@ -259,6 +277,7 @@
 
     @Override
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
     @Override
     public void afterTextChanged(Editable s) {}
 }