Merge "Fix bug #13167668 stability-sys: Java crash in com.android.settings: ...java.lang.RuntimeException: Unable to destroy activity {com.android.settings/ com.android.settings.Settings}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index fe777c9..69fb73a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1295,6 +1295,7 @@
             <intent-filter>
                 <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
                 <action android:name="android.bluetooth.device.action.PAIRING_CANCEL" />
+                <action android:name="android.bluetooth.device.action.BOND_STATE_CHANGED" />
             </intent-filter>
         </receiver>
 
diff --git a/res/layout/settings_main.xml b/res/layout/settings_main.xml
index f34ece8..8b98794 100644
--- a/res/layout/settings_main.xml
+++ b/res/layout/settings_main.xml
@@ -76,6 +76,6 @@
               android:layout_width="300dp"
               android:layout_height="match_parent"
               android:layout_gravity="start"
-              android:background="#ff333333"/>
+              android:background="@color/background_drawer"/>
 
 </android.support.v4.widget.DrawerLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 1bc17f9..627f76e 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -1096,7 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Jou tablet en persoonlike inligting is meer blootgestel aan aanvalle van programme uit onbekende bronne. Jy stem in dat slegs jy verantwoordelik is vir enige skade aan jou tablet of verlies van data weens die gebruik van hierdie programme."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Jou selfoon en persoonlike inligting is meer kwesbaar vir aanvalle deur programme van onbekende bronne. Jy stem saam dat slegs jy verantwoordelik is vir enige skade aan jou foon of verlies van data weens die gebruik van hierdie programme."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Verifieer programme"</string>
-    <string name="verify_applications_summary" msgid="2013363344093910880">"Gaan alle programme gereeld na en weier of stuur \'n waarskuwing oor daardie programme wat skade kan aanrig"</string>
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Gaan alle programme gereeld na en weier of stuur \'n waarskuwing oor die programme wat skade kan aanrig"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Gevorderde instellings"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Aktiveer meer instellingsopsies"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Programinligting"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 062052d..3388e23 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -1096,7 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Η συσκευή σας tablet και τα προσωπικά σας δεδομένα είναι περισσότερο ευάλωτα σε επιθέσεις από εφαρμογές από άγνωστες προελεύσεις. Συμφωνείτε ότι είστε αποκλειστικά υπεύθυνοι για τυχόν βλάβη η οποία ενδέχεται να δημιουργηθεί στο tablet σας ή τυχόν απώλεια δεδομένων η οποία ενδέχεται να προκύψει μέσα από τη χρήση αυτών των εφαρμογών."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Το τηλέφωνό σας και τα προσωπικά δεδομένα σας είναι ευάλωτα σε επιθέσεις από εφαρμογές που προέρχονται από άγνωστες πηγές. Συμφωνείτε ότι είστε οι μοναδικοί υπεύθυνοι για κάθε ζημιά στο τηλέφωνο ή για απώλεια δεδομένων που ενδέχεται να προκύψουν από τη χρήση τέτοιων εφαρμογών."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Επαλήθευση εφαρμογών"</string>
-    <string name="verify_applications_summary" msgid="2013363344093910880">"Να ελέγχετε τακτικά όλες τις εφαρμογές και να καταργείτε ή να προειδοποιείτε για εκείνες που ενδέχεται να προκαλέσουν προβλήματα"</string>
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Τακτικός έλεγχος όλων των εφαρμογών και κατάργηση ή προειδοποίηση για εκείνες που ενδέχεται να προκαλέσουν προβλήματα"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Σύνθετες ρυθμίσεις"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Ενεργοποίηση περισσότερων επιλογών ρυθμίσεων"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Πληροφορίες εφαρμογής"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index e8b7961..aacf6ae 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -1096,8 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Tablet-laite ja henkilötiedot ovat alttiimpia tuntemattomista lähteistä tulevien sovelluksien kautta tapahtuville hyökkäyksille. Hyväksyt, että olet itse vastuussa mahdollisista tablet-laitteelle aiheutuvista vahingoista tai tietojen menetyksestä, joka voi johtua näiden sovelluksien käytöstä."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Puhelimesi ja henkilötiedot ovat alttiimpia tuntemattomista lähteistä tulevien sovelluksien kautta tapahtuville hyökkäyksille. Hyväksyt, että olet itse vastuussa mahdollisista puhelimelle aiheutuvista vahingoista tai tietojen menetyksestä, joka voi johtua näiden sovelluksien käytöstä."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Vahvista sovellukset"</string>
-    <!-- no translation found for verify_applications_summary (2013363344093910880) -->
-    <skip />
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Tarkista säännöllisesti kaikki sovellukset ja estä ne, jotka saattavat aiheuttaa vahinkoa, tai varoita niistä"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Lisäasetukset"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Ota lisää asetuksia käyttöön."</string>
     <string name="application_info_label" msgid="5736524913065714880">"Sovelluksen tiedot"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 22c1d6e..371485f 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -1096,8 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"თქვენი ტაბლეტის და პირადი მონაცემები უცნობი წყაროების აპების შემთხვევაში შეტევების მეტი რისკის ქვეშ დგას. თქვენ თანხმობას აცხადებთ მასზედ, რომ სრულიად პასუხისმგებელი ხართ ამ აპების გამოყენების შედეგად თქვენი ტაბლეტისადმი მიყენებულ ზარალზე ან მონაცემების დაკაგრვაზე."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"თქვენი ტელეფონი და პირადი მონაცემები უფრო დაუცველია უცნობი წყაროებიდან აპების შემოტევებისგან. თქვენ თანხმობას აცხადებთ, რომ მხოლოდ თქვენ ხართ პასუხისმგებელი ამ აპების გამოყენების შედეგად ტელეფონისთვის მიყენებულ ზიანსა და მონაცემების დაკარგვაზე."</string>
     <string name="verify_applications" msgid="2959359554974828518">"აპების ვერიფიკაცია"</string>
-    <!-- no translation found for verify_applications_summary (2013363344093910880) -->
-    <skip />
+    <string name="verify_applications_summary" msgid="2013363344093910880">"ყველა აპის რეგულარული შემოწმება და პოტენციურად მავნე აპების აკრძალვა, ან გაფრთხილების ჩვენება"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"დამატებითი პარამეტრები"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"მეტი პარამეტრების ვარიანტების ჩართვა"</string>
     <string name="application_info_label" msgid="5736524913065714880">"აპლიკაციის შესახებ"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 782389f..f338bed 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -1096,8 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Tablet dan data peribadi anda lebih terdedah kepada serangan oleh aplikasi dari sumber yang tidak diketahui. Anda bersetuju bahawa anda bertanggungjawab sepenuhnya bagi apa-apa kerosakan kepada tablet atau kehilangan data yang mungkin berlaku akibat penggunaan aplikasi ini."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Telefon dan data peribadi anda lebih terdedah kepada serangan oleh aplikasi dari sumber yang tidak diketahui. Anda bersetuju bahawa anda bertanggungjawab sepenuhnya untuk apa-apa kerosakan kepada telefon anda atau kehilangan data yang mungkin berlaku akibat menggunakan aplikasi ini."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Sahkan apl"</string>
-    <!-- no translation found for verify_applications_summary (2013363344093910880) -->
-    <skip />
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Semak semua apl secara kerap dan tolak atau berikan amaran mengenai apl yang boleh menyebabkan masalah"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Tetapan terperinci"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Dayakan lebih banyak pilihan tetapan"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Maklumat aplikasi"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index fcb48a1..1608b5b 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -1096,7 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"O tablet e os dados pessoais estão mais vulneráveis ​​a ataques de aplicações de fontes desconhecidas. O utilizador concorda que é o único responsável por qualquer dano causado ao tablet ou perda de dados que possam resultar da utilização destas aplicações."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"O telemóvel e os dados pessoais estão mais vulneráveis ​​a ataques de aplicações de fontes desconhecidas. O utilizador concorda que é o único responsável por qualquer dano causado ao telemóvel ou perda de dados que possam resultar da utilização dessas aplicações."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Verificar aplicações"</string>
-    <string name="verify_applications_summary" msgid="2013363344093910880">"Verificar regularmente todas as aplicações e não permitir ou avisar relativamente a aplicações prejudiciais"</string>
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Verificar regularmente todas as aplicações e não permitir a instalação/utilização ou avisar relativamente a aplicações prejudiciais"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Definições avançadas"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Ativar mais opções de definições"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Informações da aplicação"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index bfa3895..40446ac 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -1096,8 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Seu tablet e seus dados pessoais são mais vulneráveis ​​a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano a seu tablet ou perda de dados decorrentes do uso desses aplicativos."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Seu telefone e seus dados pessoais são mais vulneráveis ​​a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano ao seu telefone ou perda de dados decorrentes do uso desses aplicativos."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Verificar aplicativos"</string>
-    <!-- no translation found for verify_applications_summary (2013363344093910880) -->
-    <skip />
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Verifica regularmente todos os aplicativos e bloqueia ou emite avisos sobre aplicativos perigosos"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Configurações avançadas"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Ativa mais opções de configuração"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Informações do app"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 4bc1c8e..a75d2ab 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -1096,8 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Tableta şi datele dvs. personale sunt mai vulnerabile la un atac din partea aplicaţiilor ce provin din surse necunoscute. Sunteţi de acord că sunteţi singura persoană responsabilă pentru deteriorarea tabletei sau pierderea datelor ce pot avea loc ca urmare a utilizării acestor aplicaţii."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Telefonul şi datele dvs. personale sunt mai vulnerabile la un atac din partea aplicaţiilor ce provin din surse necunoscute. Sunteţi de acord că sunteţi singura persoană responsabilă pentru deteriorarea telefonului sau pierderea datelor ce pot avea loc ca urmare a utilizării acestor aplicaţii."</string>
     <string name="verify_applications" msgid="2959359554974828518">"Verificaţi aplicaţiile"</string>
-    <!-- no translation found for verify_applications_summary (2013363344093910880) -->
-    <skip />
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Verificați periodic toate aplicațiile și respingeți sau semnalați aplicațiile care pot fi dăunătoare"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Setări avansate"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Activaţi mai multe opţiuni pentru setări"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Informaţii despre aplicaţie"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0288f79..b4a17a9 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -957,7 +957,7 @@
     <string name="media_format_desc" product="default" msgid="8764037252319942415">"ลบการ์ด SD หรือไม่ คุณจะสูญเสียข้อมูล"<b>"ทั้งหมด"</b>"บนการ์ด!"</string>
     <string name="media_format_button_text" product="nosdcard" msgid="6293669371185352810">"ลบที่เก็บข้อมูล USB"</string>
     <string name="media_format_button_text" product="default" msgid="6721544380069373626">"ลบการ์ด SD"</string>
-    <string name="media_format_final_desc" product="nosdcard" msgid="699929778486375913">"ลบที่จัดเก็บข้อมูล USB ซึ่งจะเป็นการลบไฟล์ทั้งหมดที่จัดเก็บอยู่ในนั้นหรือไม่ คุณไม่สามารถย้อนกลับการทำงานนี้ได้!"</string>
+    <string name="media_format_final_desc" product="nosdcard" msgid="699929778486375913">"ลบที่จัดเก็บข้อมูล USB ซึ่งจะเป็นการลบไฟล์ทั้งหมดที่จัดเก็บอยู่ในนั้นหรือไม่ คุณไม่สามารถกลับการทำงานนี้ได้!"</string>
     <string name="media_format_final_desc" product="default" msgid="3344525419872744989">"ต้องการลบการ์ด SD ซึ่งจะเป็นการลบไฟล์ทั้งหมดที่จัดเก็บไว้หรือไม่ คุณไม่สามารถย้อนกลับการทำงานนี้ได้!"</string>
     <string name="media_format_final_button_text" msgid="4881713344315923175">"ลบทุกอย่าง"</string>
     <string name="media_format_gesture_prompt" msgid="3109349468816856670">"วาดรูปแบบการปลดล็อก"</string>
@@ -1731,7 +1731,7 @@
     <string name="wifi_setup_refresh_list" msgid="3411615711486911064">"รีเฟรชรายการ"</string>
     <string name="wifi_setup_skip" msgid="6661541841684895522">"ข้าม"</string>
     <string name="wifi_setup_next" msgid="3388694784447820477">"ถัดไป"</string>
-    <string name="wifi_setup_back" msgid="144777383739164044">"ย้อนกลับ"</string>
+    <string name="wifi_setup_back" msgid="144777383739164044">"กลับ"</string>
     <string name="wifi_setup_detail" msgid="2336990478140503605">"รายละเอียดเครือข่าย"</string>
     <string name="wifi_setup_connect" msgid="7954456989590237049">"เชื่อมต่อ"</string>
     <string name="wifi_setup_forget" msgid="2562847595567347526">"ลืม"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index a44449f..0ef39bb 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -1096,7 +1096,7 @@
     <string name="install_all_warning" product="tablet" msgid="3263360446508268880">"Mas madaling mapinsala ang iyong tablet at personal na data ng atake ng apps mula sa hindi alam na mga pinagmulan. Sumasang-ayon ka na ikaw ang tanging mananagot para sa anumang pinsala sa iyong tablet o pagkawala ng data na maaaring magresulta mula sa paggamit ng apps na ito."</string>
     <string name="install_all_warning" product="default" msgid="8113734576826384682">"Mas madaling mapinsala ang iyong telepono at personal na data ng atake ng apps mula sa hindi alam na mga pinagmulan. Sumasang-ayon ka na ikaw ang tanging mananagot para sa anumang pinsala sa iyong telepono o pagkawala ng data na maaaring magresulta mula sa paggamit ng apps na ito."</string>
     <string name="verify_applications" msgid="2959359554974828518">"I-verify ang apps"</string>
-    <string name="verify_applications_summary" msgid="2013363344093910880">"Regular na suriin ang lahat ng app at huwag payagan ang o magbigay ng babala tungkol sa mga maaaring maging sanhi ng pinsala"</string>
+    <string name="verify_applications_summary" msgid="2013363344093910880">"Regular na suriin ang lahat ng app at huwag payagan o magbigay ng babala tungkol sa mga maaaring maging sanhi ng pinsala"</string>
     <string name="advanced_settings" msgid="1777249286757067969">"Mga advanced na setting"</string>
     <string name="advanced_settings_summary" msgid="4016682978071086747">"Paganahin ang higit pang mga pagpipilian sa mga setting"</string>
     <string name="application_info_label" msgid="5736524913065714880">"Impormasyon ng app"</string>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 40098f5..206dbac 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,6 +15,8 @@
 -->
 
 <resources>
+    <color name="background_drawer">#ff777777</color>
+
     <color name="black">#000</color>
     <color name="red">#F00</color>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a5076e4..8cb1510 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4993,4 +4993,16 @@
     <string name="dashboard_title">Overview</string>
     <string name="dashboard_wip" translatable="false">Overview - work in progress\n\nUse the Drawer on the left to see the settings list</string>
 
+    <!-- Notifications on lockscreen -->
+    <!-- Label for checkbox controlling the contents of notifications shown on
+         the secure lockscreen [CHAR LIMIT=16] -->
+    <string name="lock_screen_notifications">Show notifications</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_off">Sensitive notification contents will be hidden when locked</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_on">All notification contents will be shown when locked</string>
 </resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index a87ad33..20cb3b4 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -59,7 +59,7 @@
         <item name="wifi_signal">@drawable/wifi_signal_light</item>
     </style>
 
-    <style name="Theme.Settings" parent="@android:style/Theme.Holo">
+    <style name="Theme.Settings" parent="@android:style/Theme.Holo.Light">
         <item name="@*android:preferenceHeaderPanelStyle">@style/PreferenceHeaderPanelSinglePane</item>
         <item name="@*android:preferencePanelStyle">@style/PreferencePanelSinglePane</item>
         <item name="@*android:preferenceListStyle">@style/PreferenceHeaderListSinglePane</item>
@@ -70,6 +70,5 @@
         <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
         <item name="ic_wps">@drawable/ic_wps_dark</item>
         <item name="wifi_signal">@drawable/wifi_signal_dark</item>
-        <item name="android:actionBarStyle">@android:style/Widget.Holo.ActionBar.Solid</item>
     </style>
 </resources>
diff --git a/res/xml/security_settings_biometric_weak.xml b/res/xml/security_settings_biometric_weak.xml
index c2e8ab7..d994922 100644
--- a/res/xml/security_settings_biometric_weak.xml
+++ b/res/xml/security_settings_biometric_weak.xml
@@ -66,6 +66,13 @@
             android:title="@string/nfc_unlock_title"
             android:persistent="false"/>
 
+        <CheckBoxPreference
+            android:key="toggle_lock_screen_notifications"
+            android:title="@string/lock_screen_notifications"
+            android:summaryOff="@string/lock_screen_notifications_summary_off"
+            android:summaryOn="@string/lock_screen_notifications_summary_on"
+            android:persistent="false" />
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index a102efa..20d7644 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -53,6 +53,13 @@
             android:title="@string/nfc_unlock_title"
             android:persistent="false"/>
 
+        <CheckBoxPreference
+            android:key="toggle_lock_screen_notifications"
+            android:title="@string/lock_screen_notifications"
+            android:summaryOff="@string/lock_screen_notifications_summary_off"
+            android:summaryOn="@string/lock_screen_notifications_summary_on"
+            android:persistent="false" />
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index 0584e4a..c02df7a 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -57,6 +57,13 @@
             android:title="@string/nfc_unlock_title"
             android:persistent="false"/>
 
+        <CheckBoxPreference
+            android:key="toggle_lock_screen_notifications"
+            android:title="@string/lock_screen_notifications"
+            android:summaryOff="@string/lock_screen_notifications_summary_off"
+            android:summaryOn="@string/lock_screen_notifications_summary_on"
+            android:persistent="false" />
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index 1417e21..2636fa4 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -53,6 +53,13 @@
             android:title="@string/nfc_unlock_title"
             android:persistent="false"/>
 
+        <CheckBoxPreference
+            android:key="toggle_lock_screen_notifications"
+            android:title="@string/lock_screen_notifications"
+            android:summaryOff="@string/lock_screen_notifications_summary_off"
+            android:summaryOn="@string/lock_screen_notifications_summary_on"
+            android:persistent="false" />
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index f75480b..84a07f2 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -31,7 +31,6 @@
 import android.content.pm.UserInfo;
 import android.nfc.NfcUnlock;
 import android.os.Bundle;
-import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.CheckBoxPreference;
@@ -86,6 +85,7 @@
     private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks";
     private static final String KEY_CREDENTIALS_MANAGER = "credentials_management";
     private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access";
+    private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "toggle_lock_screen_notifications";
     private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
 
     private PackageManager mPM;
@@ -110,6 +110,7 @@
     private CheckBoxPreference mEnableKeyguardWidgets;
 
     private Preference mNotificationAccess;
+    private CheckBoxPreference mLockscreenNotifications;
 
     private boolean mIsPrimary;
 
@@ -355,9 +356,34 @@
             protectByRestrictions(mResetCredentials);
             protectByRestrictions(root.findPreference(KEY_CREDENTIALS_INSTALL));
         }
+
+        mLockscreenNotifications
+                = (CheckBoxPreference) root.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS);
+        if (mLockscreenNotifications != null) {
+            if (!getDeviceLockscreenNotificationsEnabled()) {
+                final PreferenceGroup lockscreenCategory =
+                        (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY);
+                if (lockscreenCategory != null) {
+                    lockscreenCategory.removePreference(mLockscreenNotifications);
+                }
+            } else {
+                mLockscreenNotifications.setChecked(getLockscreenAllowPrivateNotifications());
+            }
+        }
+
         return root;
     }
 
+    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 int getNumEnabledNotificationListeners() {
         final String flat = Settings.Secure.getString(getContentResolver(),
                 Settings.Secure.ENABLED_NOTIFICATION_LISTENERS);
@@ -591,6 +617,10 @@
         } else if (KEY_TOGGLE_VERIFY_APPLICATIONS.equals(key)) {
             Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE,
                     mToggleVerifyApps.isChecked() ? 1 : 0);
+        } else if (KEY_LOCK_SCREEN_NOTIFICATIONS.equals(key)) {
+            Settings.Secure.putInt(getContentResolver(),
+                    Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
+                    mLockscreenNotifications.isChecked() ? 1 : 0);
         } else {
             // If we didn't handle it, let preferences handle it.
             return super.onPreferenceTreeClick(preferenceScreen, preference);
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index beb7985..34c5704 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -65,6 +65,7 @@
 import android.util.Pair;
 import android.util.TypedValue;
 import android.util.Xml;
+import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
@@ -519,7 +520,14 @@
 
         DevicePolicyManager dpm =
                 (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
-        mHeaderAdapter= new HeaderAdapter(this, getHeaders(), mAuthenticatorHelper, dpm);
+
+        // As the Settings Theme is now Holo Light, the primary text color is "Black" ... but
+        // we want the text color of the Drawer items to be "White", so use the inverse Theme (Holo)
+        // for the Header adapter (and thus making the TextView appearance to have a white color.
+        Context headersContext = new ContextThemeWrapper(this,
+                com.android.internal.R.style.Theme_Holo);
+
+        mHeaderAdapter= new HeaderAdapter(headersContext, getHeaders(), mAuthenticatorHelper, dpm);
 
         mDevelopmentPreferences = getSharedPreferences(DevelopmentSettings.PREF_FILE,
                 Context.MODE_PRIVATE);
@@ -1438,8 +1446,6 @@
         static int getHeaderType(Header header) {
             if (header.fragment == null && header.intent == null) {
                 return HEADER_TYPE_CATEGORY;
-            } else if (header.id == R.id.wifi_settings || header.id == R.id.bluetooth_settings) {
-                return HEADER_TYPE_SWITCH;
             } else if (header.id == R.id.security_settings) {
                 return HEADER_TYPE_BUTTON;
             } else {
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
index 324c595..49e31cf 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
@@ -69,6 +69,7 @@
     private CaptioningManager mCaptioningManager;
     private SubtitleView mPreviewText;
     private View mPreviewWindow;
+    private ToggleSwitch mToggleSwitch;
 
     // Standard options.
     private LocalePreference mLocale;
@@ -124,13 +125,38 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
 
+        final boolean enabled = mCaptioningManager.isEnabled();
         mPreviewText = (SubtitleView) view.findViewById(R.id.preview_text);
+        mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
+
+        final Context context = view.getContext();
+        final int padding = context.getResources().getDimensionPixelSize(
+                R.dimen.action_bar_switch_padding);
+        mToggleSwitch = new ToggleSwitch(context);
+        mToggleSwitch.setPaddingRelative(0, 0, padding, 0);
+        mToggleSwitch.setCheckedInternal(enabled);
+
         mPreviewWindow = view.findViewById(R.id.preview_window);
 
-        installActionBarToggleSwitch();
+        getPreferenceScreen().setEnabled(enabled);
+
         refreshPreviewText();
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        installActionBarToggleSwitch();
+    }
+
+    @Override
+    public void onPause() {
+        removeActionBarToggleSwitch();
+
+        super.onPause();
+    }
+
     private void refreshPreviewText() {
         final Context context = getActivity();
         if (context == null) {
@@ -176,39 +202,41 @@
         }
     }
 
-    private void installActionBarToggleSwitch() {
-        final Activity activity = getActivity();
-        final ToggleSwitch toggleSwitch = new ToggleSwitch(activity);
-
-        final int padding = getResources().getDimensionPixelSize(
-                R.dimen.action_bar_switch_padding);
-        toggleSwitch.setPaddingRelative(0, 0, padding, 0);
-
-        final ActionBar actionBar = activity.getActionBar();
-        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
-
-        final ActionBar.LayoutParams params = new ActionBar.LayoutParams(
-                ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,
-                        Gravity.CENTER_VERTICAL | Gravity.END);
-        actionBar.setCustomView(toggleSwitch, params);
-
-        final boolean enabled = mCaptioningManager.isEnabled();
-        getPreferenceScreen().setEnabled(enabled);
-        mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
-        toggleSwitch.setCheckedInternal(enabled);
-        toggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
+    protected void onInstallActionBarToggleSwitch() {
+        mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
             @Override
             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
                 toggleSwitch.setCheckedInternal(checked);
                 Settings.Secure.putInt(getActivity().getContentResolver(),
                         Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, checked ? 1 : 0);
                 getPreferenceScreen().setEnabled(checked);
-                mPreviewText.setVisibility(checked ? View.VISIBLE : View.INVISIBLE);
+                if (mPreviewText != null) {
+                    mPreviewText.setVisibility(checked ? View.VISIBLE : View.INVISIBLE);
+                }
                 return false;
             }
         });
     }
 
+    private void installActionBarToggleSwitch() {
+        final ActionBar ab = getActivity().getActionBar();
+        final ActionBar.LayoutParams params = new ActionBar.LayoutParams(
+                ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,
+                        Gravity.CENTER_VERTICAL | Gravity.END);
+        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
+        ab.setCustomView(mToggleSwitch, params);
+
+        onInstallActionBarToggleSwitch();
+    }
+
+    private void removeActionBarToggleSwitch() {
+        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
+
+        final ActionBar ab = getActivity().getActionBar();
+        ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
+        ab.setCustomView(null);
+    }
+
     private void initializeAllPreferences() {
         mLocale = (LocalePreference) findPreference(PREF_LOCALE);
         mFontSize = (ListPreference) findPreference(PREF_FONT_SIZE);
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index d56e37c..03f9072 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -18,6 +18,7 @@
 
 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;
@@ -86,15 +87,28 @@
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-        onInstallActionBarToggleSwitch();
+
+        final Context context = view.getContext();
+        final int padding = context.getResources().getDimensionPixelSize(
+                R.dimen.action_bar_switch_padding);
+        mToggleSwitch = new ToggleSwitch(context);
+        mToggleSwitch.setPaddingRelative(0, 0, padding, 0);
+
         onProcessArguments(getArguments());
     }
 
     @Override
-    public void onDestroyView() {
-        getActivity().getActionBar().setCustomView(null);
-        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
-        super.onDestroyView();
+    public void onResume() {
+        super.onResume();
+
+        installActionBarToggleSwitch();
+    }
+
+    @Override
+    public void onPause() {
+        removeActionBarToggleSwitch();
+
+        super.onPause();
     }
 
     protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled);
@@ -108,21 +122,26 @@
     }
 
     protected void onInstallActionBarToggleSwitch() {
-        mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity());
+        // Implement this to set a checked listener.
     }
 
-    private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) {
-        ToggleSwitch toggleSwitch = new ToggleSwitch(activity);
-        final int padding = activity.getResources().getDimensionPixelSize(
-                R.dimen.action_bar_switch_padding);
-        toggleSwitch.setPaddingRelative(0, 0, padding, 0);
-        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));
-        return toggleSwitch;
+    private void installActionBarToggleSwitch() {
+        final ActionBar ab = getActivity().getActionBar();
+        final ActionBar.LayoutParams params = new ActionBar.LayoutParams(
+                ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,
+                Gravity.CENTER_VERTICAL | Gravity.END);
+        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
+        ab.setCustomView(mToggleSwitch, params);
+
+        onInstallActionBarToggleSwitch();
+    }
+
+    private void removeActionBarToggleSwitch() {
+        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
+
+        final ActionBar ab = getActivity().getActionBar();
+        ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
+        ab.setCustomView(null);
     }
 
     public void setTitle(String title) {
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
old mode 100644
new mode 100755
index 722f569..b1145a1
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -576,6 +576,12 @@
     }
 
     @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        mSession.release();
+    }
+
+    @Override
     public void onAllSizesComputed() {
     }
 
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
index 838e7b1..ea36fee 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
@@ -103,6 +103,19 @@
             NotificationManager manager = (NotificationManager) context
                     .getSystemService(Context.NOTIFICATION_SERVICE);
             manager.cancel(NOTIFICATION_ID);
+
+        } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
+            int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
+                    BluetoothDevice.ERROR);
+            int oldState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE,
+                    BluetoothDevice.ERROR);
+            if((oldState == BluetoothDevice.BOND_BONDING) &&
+                    (bondState == BluetoothDevice.BOND_NONE)) {
+                // Remove the notification
+                NotificationManager manager = (NotificationManager) context
+                    .getSystemService(Context.NOTIFICATION_SERVICE);
+                manager.cancel(NOTIFICATION_ID);
+            }
         }
     }
 }
diff --git a/src/com/android/settings/tts/TtsEngineSettingsFragment.java b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
index bb5ac7a..25ec1fd 100644
--- a/src/com/android/settings/tts/TtsEngineSettingsFragment.java
+++ b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
@@ -158,12 +158,22 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == VOICE_DATA_INTEGRITY_CHECK) {
-            mVoiceDataDetails = data;
-            updateVoiceDetails();
+            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
+                updateVoiceDetails(data);
+            } else {
+                Log.e(TAG, "CheckVoiceData activity failed");
+            }
         }
     }
 
-    private void updateVoiceDetails() {
+    private void updateVoiceDetails(Intent data) {
+        if (data == null){
+            Log.e(TAG, "Engine failed voice data integrity check (null return)" +
+                    mTts.getCurrentEngine());
+            return;
+        }
+        mVoiceDataDetails = data;
+
         if (DBG) Log.d(TAG, "Parsing voice data details, data: " + mVoiceDataDetails.toUri(0));
 
         final ArrayList<String> available = mVoiceDataDetails.getStringArrayListExtra(