am 3dddd8cb: Ensure all active Device Admins are listed.

* commit '3dddd8cbff8c8153363373ebe9911d67f0e50bcd':
  Ensure all active Device Admins are listed.
diff --git a/Android.mk b/Android.mk
index 38732bb..9c9a23a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,7 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_JAVA_LIBRARIES := bouncycastle
+LOCAL_JAVA_LIBRARIES := bouncycastle telephony-common
 LOCAL_STATIC_JAVA_LIBRARIES := guava android-support-v4
 
 LOCAL_MODULE_TAGS := optional
diff --git a/res/layout/data_usage_bytes_editor.xml b/res/layout/data_usage_bytes_editor.xml
index 6207391..ec6e64f 100644
--- a/res/layout/data_usage_bytes_editor.xml
+++ b/res/layout/data_usage_bytes_editor.xml
@@ -22,7 +22,8 @@
 
     <NumberPicker
         android:id="@+id/bytes"
-        android:layout_width="48dip"
+        android:layout_width="wrap_content"
+        android:minWidth="48dip"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
         android:layout_marginLeft="16dip"
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index 5103e8b..88dae27 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -38,6 +38,7 @@
 
                 <EditText android:id="@+id/ssid"
                         style="@style/wifi_item_content"
+                        android:maxLength="32"
                         android:singleLine="true"
                         android:inputType="textNoSuggestions" />
              </LinearLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 9bd2d3a..6075a8d 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s wil toegang hê tot jou kontakte en oproepgeskiedenis. Gee toegang aan %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Moenie weer vra nie"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Datum- en tydinstellings"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 nm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Kies tydsone"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Volgens streek (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Voorskou:"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index dbb15c1..09a6de4 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s የአንተን ዕውቂያዎች እና የጥሪ ታሪኮች ለመድረስ ይፈልጋል ። ለ%2$s መድረስ ይሰጥ?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"ዳግመኛ አትጠይቅ"</string>
     <string name="date_and_time" msgid="4114084177056654663">"ቀን&amp; የሰዓትቅንብሮች"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"ከሰዓት በኃላ1:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"የጊዜ ሰቅ ምረጥ"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"የአካባቢው (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"ቅድመ-ዕይታ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index aac53bd..b0c4acb 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"يريد %1$s الدخول إلى جهات الاتصال وسجل المكالمات. هل تريد منحه حق الدخول إلى %2$s؟"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"لا تسألني مرة أخرى"</string>
     <string name="date_and_time" msgid="4114084177056654663">"إعدادات التاريخ والوقت"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 م"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"اختيار المنطقة الزمنية"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"إقليمي (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"معاينة:"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 01eb5f6..3ecc39c 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s спрабуе атрымаць доступ да вашых кантактаў і гісторыі выклікаў. Дазволіць доступ тэлефоннай кнiзе %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Больш не пытацца"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Налады даты і часу"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 пасля поўдню"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Вылучыце гадзінны пояс"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Рэгіянальны фармат даты (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Прагляд:"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index e68e0a8..bd36fcf 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"От %1$s се иска достъп до вашите контакти и история на обажданията. Да се даде ли достъп до %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Без повторно питане"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Настройки за дата и час"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Избор на часова зона"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Регионално (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Визуализация:"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 9933448..4e87ab2 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"A %1$s li agradaria accedir als teus contactes i a l\'historial de trucades. Vols donar accés a %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"No m\'ho tornis a preguntar"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Configuració de data i hora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 p. m."</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Selecció de la zona horària"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Previsualitza:"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 65736c8..b60af8a 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Zařízení %1$s žádá o přístup k vašim kontaktům a historii hovorů. Povolit zařízení %2$s přístup?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Příště se neptat"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Nastavení data a času"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Vybrat časové pásmo"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regionální (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Náhled:"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 92501cc..cb070bf 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s vil gerne have adgang til dine kontaktpersoner og opkaldsoversigt. Vil du give %2$s adgang?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Spørg ikke igen"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Indstillinger for dato og tid"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Vælg tidszone"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Eksempelvisning:"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1d907eb..9e46a36 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s möchte auf Ihre Kontakte und Ihre Anrufliste zugreifen. Möchten Sie %2$s den Zugriff erlauben?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Nicht mehr fragen"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Einstellungen für Datum &amp; Uhrzeit"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Zeitzone wählen"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Lokal (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Vorschau:"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ed027c9..3c78b92 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Το %1$s ζητά πρόσβαση στις επαφές και στο ιστορικό κλήσεών σας. Να εκχωρηθεί πρόσβαση στο %2$s;"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Να μην ερωτηθώ ξανά"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Ρυθμίσεις ημερομηνίας &amp; ώρας"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 μμ"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Επιλέξτε ζώνη ώρας"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Τοπική (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Προεπισκόπηση:"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 03559e0..86ae423 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s wants to access your contacts and call history. Give access to %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Don\'t ask again"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Date &amp; time settings"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 P.M."</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Choose time zone"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Preview:"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b4e50dd..ac7cfde 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s desea acceder a tus contactos y a tu historial de llamadas. ¿Deseas darle acceso a %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"No volver a preguntar"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Configuración de fecha y hora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 p. m."</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Elige la zona horaria"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Vista previa:"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 49d8a9c..1371907 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s quiere acceder a tus contactos y a tu historial de llamadas. ¿Quieres permitir el acceso a %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"No volver a preguntar"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Ajustes de fecha y hora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 p.m."</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Seleccionar zona horaria"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Vista previa:"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index d804669..5d3253c 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s soovib juurdepääsu teie kontaktisikutele ja kõneajaloole. Kas lubate juurdepääsu kasutajale %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Ära enam küsi"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Kuupäeva ja kellaaja seaded"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Ajavööndi valimine"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Piirkondlik (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Eelvaade:"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 0881635..7112710 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s می‌خواهد به مخاطبین و سابقه تماس شما دسترسی پیدا کند. اجازهٔ دسترسی به %2$s داده شود؟"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"دوباره سؤال نشود"</string>
     <string name="date_and_time" msgid="4114084177056654663">"تنظیمات تاریخ و ساعت"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 ب.ظ"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"انتخاب منطقهٔ زمانی"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"منطقه‌ای (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"پیش‌نمایش:"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 05f930c..bcd9b48 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s pyytää yhteystietojesi ja puheluhistoriasi käyttöoikeutta. Annetaanko käyttöoikeus (%2$s)?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Älä kysy uudestaan"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Päivämäärä- ja aika-asetukset"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1.00 ip"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13.00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Valitse aikavyöhyke"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Paikallinen (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Esikatselu:"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index b3d2df5..6a2383b 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s souhaite accéder à vos contacts et à l\'historique de vos appels. Autoriser l\'accès à %2$s ?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Ne plus me demander"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Paramètres d\'heure et de date"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Sélectionner le fuseau horaire"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Format régional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Aperçu :"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 41797ed..2128f67 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s आपके संपर्कों और कॉल इतिहास में पहुंच प्राप्त करना चाहता है. %2$s पर पहुंच दें?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"फिर से न पूछें"</string>
     <string name="date_and_time" msgid="4114084177056654663">"दिनांक और समय सेटिंग"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 सायं"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"समय क्षेत्र चुनें"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"क्षेत्रीय (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"पूर्वावलोकन:"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 8226bde..c317c39 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Korisnik %1$s želio bi pristupiti vašim kontaktima i povijesti poziva. Dati pristup korisniku %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Više me ne pitaj"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Postavke datuma i vremena"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13 h"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13 h"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Odabir vremenske zone"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regionalno (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Pregled:"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 2aa61fa..6823779 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"A(z) %1$s szeretne hozzáférni névjegyeihez és a híváselőzményekhez. Megadja a hozzáférést a(z) %2$s eszköznek?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Ne jelenjen meg többé"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Dátum és idő beállításai"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"du. 1:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Válasszon időzónát"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regionális (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Előnézet:"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index c51e757..c1c2c2c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s ingin mengakses kontak dan riwayat panggilan Anda. Berikan akses ke %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Jangan tanya lagi"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Setelan tanggal &amp; waktu"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1.00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13.00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Pilih zona waktu"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Daerah (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Pratinjau:"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index f156117..39aaa35 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s desidera accedere ai tuoi contatti e alla tua cronologia chiamate. Consentire l\'accesso a %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Non chiedermelo più"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Impostazioni data e ora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Scegli il fuso orario"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regionale (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Anteprima:"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 4ad7aa4..2656a9c 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s רוצה לגשת לאנשי הקשר ולהיסטוריית השיחות שלך. האם להעניק ל-%2$s גישה?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"אל תשאל שוב"</string>
     <string name="date_and_time" msgid="4114084177056654663">"הגדרות תאריך ושעה"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"בחר אזור זמן"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"אזורי (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"תצוגה מקדימה:"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 08f0a9d..4484304 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -162,8 +162,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$sが連絡先と通話履歴にアクセスしようとしています。%2$sにアクセスを許可しますか?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"次回から表示しない"</string>
     <string name="date_and_time" msgid="4114084177056654663">"日付と時刻"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 PM"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"タイムゾーンの選択"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"地域(<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"プレビュー:"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index bf2891b..58d12e4 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s이(가) 주소록과 통화 기록에 액세스하려고 합니다. %2$s에 액세스 권한을 제공하시겠습니까?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"다시 묻지 않음"</string>
     <string name="date_and_time" msgid="4114084177056654663">"날짜 및 시간 설정"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 PM"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"시간대 선택"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"기본값(<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"미리보기:"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index bf610ee..c4b76e3 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s nori pasiekti jūsų kontaktus ir skambučių istoriją. Suteikti prieigą %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Daugiau neklausti"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Datos ir laiko nustatymai"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Pasirinkite laiko juostą"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Pagal vietovę (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Peržiūra:"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 6767748..4323d7d 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Ierīce %1$s vēlas piekļūt jūsu kontaktpersonām un zvanu vēsturei. Vai sniegt piekļuvi ierīcei %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Nejautāt atkārtoti"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Datuma un laika iestatījumi"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13.00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13.00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Laika joslas izvēle"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Reģionāls (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Priekšskatījums:"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 0518d55..5f40e43 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s mahu mengakses kenalan dan sejarah panggilan anda. Beri akses kepada %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Jangan tanya lagi"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Tetapan tarikh &amp; masa"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 tengah hari"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Pilih zon masa"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Wilayah (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Pratonton:"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 3afc02c..f111751 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s ønsker adgang til kontaktene og ringeloggen din. Vil du gi %2$s tilgang?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Ikke spør igjen"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Innstillinger for dato og tid"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 ettermiddag"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Velg tidssone"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Forhåndsvisning:"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 368ec40..542cc73 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s wil toegang tot uw contacten en oproepgeschiedenis. Toegang verlenen aan %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Niet meer vragen"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Datum- en tijdinstellingen"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00 uur"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"01:00:00 PM"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Een tijdzone kiezen"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regionaal (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Voorbeeld:"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 97f70bc..e5799f8 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s chce uzyskać dostęp do Twoich kontaktów i historii połączeń. Zezwolić %2$s na dostęp?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Nie pytaj ponownie"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Ustawienia daty i godziny"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 (po południu)"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Wybierz strefę czasową"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regionalny (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Podgląd:"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 38e138a..07139bc 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s pretende aceder aos seus contactos e histórico de chamadas. Conceder acesso a %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Não perguntar novamente"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Definições de data e hora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Escolher o fuso horário"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Pré-visualização:"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 272ebfb..af3e925 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s deseja acessar seus contatos e o histórico de chamadas. Conceder acesso a %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Não perguntar novamente"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Configurações de data e hora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Selecione o fuso horário"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Visualizar:"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 47e11e2..650bf49 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -218,8 +218,6 @@
     <!-- no translation found for bluetooth_pb_remember_choice (2901499974259177202) -->
     <skip />
     <string name="date_and_time" msgid="4114084177056654663">"Parameters da data e da temp"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00:00"</string>
     <!-- no translation found for choose_timezone (1362834506479536274) -->
     <skip />
     <!-- no translation found for normal_date_format (7636406984925498359) -->
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 62c1c6f..1f89441 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s doreşte să acceseze Agenda dvs. şi istoricul apelurilor. Permiteţi accesul pentru %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Nu doresc să fiu întrebat(ă) din nou"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Setări privind data şi ora"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Selectaţi fusul orar"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Regional (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Previzualizaţi:"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index db5d9cd..e83ecf3 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Устройство \"%1$s\" пытается получить доступ к вашим контактам и журналу вызовов. Разрешить доступ для %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Больше не спрашивать"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Настройки даты и времени"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Выбрать часовой пояс"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"По умолчанию (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Предварительный просмотр:"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index d286308..d9d7e08 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Zariadenie %1$s žiada o prístup k vašim kontaktom a histórii hovorov. Povoliť zariadeniu %2$s prístup?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Nabudúce sa nepýtať"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Nastavenia dátumu a času"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pop."</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Zvoľte časové pásmo"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Miestne nastavenie (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Ukážka:"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 0cee34b..bae9e24 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s želi dostop do vaših stikov in zgodovine klicev. Želite dovoliti dostop osebi %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Ne vprašaj me več"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Datum in nastavitve"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13.00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13.00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Izberite časovni pas"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Območni (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Predogled:"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 4d27240..e5fe25e 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s жели да приступи вашим контактима и историји позива. Желите ли да одобрите приступ за %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Не питај поново"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Подешавања датума и времена"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Избор временске зоне"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Регионално (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Преглед:"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 4684f62..28b3373 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s vill ha åtkomst till dina kontakter och din samtalshistorik. Vill du ge %2$s åtkomst?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Fråga inte igen"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Inställningar för datum och tid"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"Kl. 13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Välj tidszon"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Lokalt (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Förhandsgranska:"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 2d3c2bd..901d793 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -162,8 +162,6 @@
     <skip />
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Usiniulize tena"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Mipangilio ya tarehe na saa"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 mchana"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Chagua ukanda wa saa"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Mkoa ( <xliff:g id="DATE">%s</xliff:g> )"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Hakiki:"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index bb13651..2c0e398 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s ต้องการเข้าถึงสมุดติดต่อและประวัติการโทรของคุณ อนุญาตให้ %2$s เข้าถึงหรือไม่"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"ไม่ต้องถามอีก"</string>
     <string name="date_and_time" msgid="4114084177056654663">"การตั้งเวลาและวันที่"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"เลือกเขตเวลา"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"ท้องถิ่น (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"แสดงตัวอย่าง:"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 26991b5..cd5fe0f 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"Nais na i-access ni %1$s ang iyong mga contact at kasaysayan ng tawag. Bigyan ng access si %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Huwag nang tatanungin muli"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Mga setting ng petsa &amp; oras"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Pumili ng time zone"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Panrehiyon (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Preview:"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index c92464a..2ad979f 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s, kişilerinize ve çağrı geçmişinize erişmek istiyor. %2$s uygulamasına erişim izni verilsin mi?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Tekrar sorma"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Tarih ve saat ayarları"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"13:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Saat dilimini seçin"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Bölgesel (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Önizleme:"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 4948a76..f74f691 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s хоче отримати доступ до ваших контактів й історії викликів. Надати %2$s доступ?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Не запитувати знову"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Налаштування дати та часу"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 пп"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Вибрати часовий пояс"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Регіональний (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Перегляд:"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 543790f..49342bc 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s muốn truy cập danh bạ và lịch sử cuộc gọi của bạn. Cấp quyền truy cập cho %2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Không hỏi lại"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Cài đặt ngày &amp; giờ"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 ch"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Chọn múi giờ"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Khu vực (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Xem trước:"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 8807d29..640be72 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s想访问您的联系人信息和通话记录。要向%2$s授予访问权限吗?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"下次不再询问"</string>
     <string name="date_and_time" msgid="4114084177056654663">"日期和时间设置"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"下午 1:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"选择时区"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"所在区域 (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"预览:"</string>
@@ -772,6 +770,7 @@
     <string name="sd_format" product="default" msgid="2576054280507119870">"格式化 SD 卡"</string>
     <string name="sd_format_summary" product="nosdcard" msgid="6331905044907914603">"清除内部 USB 存储设备中的全部数据,例如音乐和照片"</string>
     <string name="sd_format_summary" product="default" msgid="212703692181793109">"清除 SD 卡中的全部数据,例如音乐和照片"</string>
+    <string name="mtp_ptp_mode_summary">正在使用媒体设备(MTP)或相机(PTP)传输模式</string>
     <string name="read_only" msgid="6702420168629076340">" (只读)"</string>
     <string name="dlg_confirm_unmount_title" product="nosdcard" msgid="3077285629197874055">"要卸载 USB 存储设备吗?"</string>
     <string name="dlg_confirm_unmount_title" product="default" msgid="3634502237262534381">"要卸载 SD 卡吗?"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 46bb41a..f49f0c6 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"%1$s 想存取您的通訊錄和通話記錄。要將存取權授予 %2$s 嗎?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"不要再詢問"</string>
     <string name="date_and_time" msgid="4114084177056654663">"日期與時間設定"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"下午 1:00"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"選擇時區"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"本地 (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"預覽:"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index f5b0ba9..ebb267a 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -160,8 +160,6 @@
     <string name="bluetooth_pb_acceptance_dialog_text" msgid="6555508756987053866">"I-%1$s ifuna ukufinyelela kothintana nabo nomlando wekholi. Nikeza ukufinyelela ku-%2$s?"</string>
     <string name="bluetooth_pb_remember_choice" msgid="2901499974259177202">"Ungabuzi futhi"</string>
     <string name="date_and_time" msgid="4114084177056654663">"Usuku nezilungiselelo zesikhathi"</string>
-    <string name="date_time_12_hour_sample" msgid="3259617262618020574">"1:00 pm"</string>
-    <string name="date_time_24_hour_sample" msgid="8916857570746212357">"13:00"</string>
     <string name="choose_timezone" msgid="1362834506479536274">"Khetha isikhathi sendawo"</string>
     <string name="normal_date_format" msgid="7636406984925498359">"Okwesifunda (<xliff:g id="DATE">%s</xliff:g>)"</string>
     <string name="display_preview_label" msgid="1127597250917274792">"Buka kuqala:"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b433637..071c19d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -347,10 +347,6 @@
 
     <!-- Date & time settings screen title -->
     <string name="date_and_time">Date &amp; time settings</string>
-    <!-- Date/time settings.  Summary of the checkbox for choosing between 12 hour time or 24 hour time.  Sample of 12-hour time -->
-    <string name="date_time_12_hour_sample">1:00 pm</string>
-    <!-- Date/time settings.  Summary of the checkbox for choosing between 12 hour time or 24 hour time.  Sample of 24-hour time -->
-    <string name="date_time_24_hour_sample">13:00</string>
     <!-- The title of the activity to pick a time zone. -->
     <string name="choose_timezone">Choose time zone</string>
     <!-- Do not translate. Used as the value for a setting. -->
@@ -871,7 +867,7 @@
     <!-- Hint shown in dialog screen when password is too short -->
     <string name="lockpassword_password_too_short">Password must be at least %d characters</string>
     <!-- Hint shown in dialog screen when PIN is too short -->
-    <string name="lockpassword_pin_too_short">PIN must be at least %d characters</string>
+    <string name="lockpassword_pin_too_short">PIN must be at least %d digits</string>
 
     <!-- Hint shown after minimum password criteria is met -->
     <string name="lockpassword_press_continue">Touch Continue when done</string>
@@ -1433,6 +1429,8 @@
     <string name="wifi_p2p_menu_rename">Rename device</string>
     <!-- Title for available p2p devices -->
     <string name="wifi_p2p_peer_devices">Peer devices</string>
+    <!-- Title for remembered p2p groups -->
+    <string name="wifi_p2p_remembered_groups">Remembered groups</string>
     <!-- Toast text for a failed connection initiation -->
     <string name="wifi_p2p_failed_connect_message">Couldn\'t connect.</string>
     <!-- Message text for failure to rename -->
@@ -1447,10 +1445,18 @@
     <string name="wifi_p2p_cancel_connect_title">Cancel invitation?</string>
     <!-- Message text for disconnection from one device-->
     <string name="wifi_p2p_cancel_connect_message">Do you want to cancel invitation to connect with <xliff:g id="peer_name">%1$s</xliff:g>?</string>
+    <!-- Title for delete group dialog -->
+    <string name="wifi_p2p_delete_group_title">Delete group?</string>
+    <!-- Message text for remembered group deletion-->
+    <string name="wifi_p2p_delete_group_message">Do you want to delete the group <xliff:g id="group_name">%1$s</xliff:g>?</string>
 
     <!-- Wifi AP settings-->
     <!-- Label for wifi tether checkbox. Toggles Access Point on/off -->
     <string name="wifi_tether_checkbox_text">Portable Wi-Fi hotspot</string>
+    <!-- Summary text when turning hotspot on -->
+    <string name="wifi_tether_starting">Turning hotspot on\u2026</string>
+    <!-- Summary text when turning hotspot off -->
+    <string name="wifi_tether_stopping">Turning off hotspot\u2026</string>
     <!-- Subtext for wifi tether checkbox on success -->
     <string name="wifi_tether_enabled_subtext">Portable hotspot <xliff:g id="network_ssid">%1$s</xliff:g> active</string>
     <!-- Subtext for wifi tether checkbox on failure -->
@@ -1776,6 +1782,8 @@
     <string name="kernel_version">Kernel version</string>
     <!-- About phone screen,  setting option name-->
     <string name="build_number">Build number</string>
+    <!-- About phone screen,  setting option name-->
+    <string name="selinux_status">SELinux status</string>
 
     <!-- About phone screen, show when a value of some status item is unavailable. -->
     <string name="device_info_not_available">Not available</string>
@@ -1894,6 +1902,10 @@
     <!-- SD card & phone storage settings item title that will result in the phone unmounting the SD card.   [CHAR LIMIT=80] -->
     <string name="sd_format_summary" product="default">Erases all data on the SD card, such as music and photos</string>
     <!-- SD card status when it is mounted as read only. Will be appended to size, starts with an unbreakable space -->
+
+    <!-- SD card & phone storage settings item summary that will result in the phone connected to PC and MTP/PTP enabled.   [CHAR LIMIT=80] -->
+    <string name="mtp_ptp_mode_summary">MTP or PTP function is active</string>
+
     <string name="read_only">\u0020(Read-only)</string>
     <!-- SD card eject confirmation dialog title   [CHAR LIMIT=25] -->
     <string name="dlg_confirm_unmount_title" product="nosdcard">Unmount USB storage?</string>
@@ -4050,6 +4062,11 @@
     from their cell phone carrier. The use of the string is similar to the string
     "system_update_settings_list_item_title" in this project. [CHAR LIMIT=25] -->
     <string name="additional_system_update_settings_list_item_title">Additional system updates</string>
+    <!-- These statuses are displayed when a device was built with SE Android supoprt.
+    These are displayed by the settings app in the about section. -->
+    <string name="selinux_status_disabled">Disabled</string>
+    <string name="selinux_status_permissive">Permissive</string>
+    <string name="selinux_status_enforcing">Enforcing</string>
 
     <!-- User settings -->
     <skip/>
diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml
index 657d6b3..1e7ac58 100644
--- a/res/xml/date_time_prefs.xml
+++ b/res/xml/date_time_prefs.xml
@@ -42,8 +42,7 @@
         />
     <CheckBoxPreference android:key="24 hour"
         android:title="@string/date_time_24hour"
-        android:summaryOn="@string/date_time_24_hour_sample"
-        android:summaryOff="@string/date_time_12_hour_sample"/>
+        />
     <ListPreference
         android:key="date_format"
         android:title="@string/date_time_date_format"
diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml
index b156c11..324deaa 100644
--- a/res/xml/device_info_settings.xml
+++ b/res/xml/device_info_settings.xml
@@ -125,4 +125,10 @@
                 android:title="@string/build_number"
                 android:summary="@string/device_info_default"/>
 
+        <!-- SELinux status information -->
+        <Preference android:key="selinux_status"
+                style="?android:preferenceInformationStyle"
+                android:title="@string/selinux_status"
+                android:summary="@string/selinux_status_enforcing"/>
+
 </PreferenceScreen>
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index 6167f78..8cb04cc 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -179,9 +179,9 @@
         super.onResume();
         loadInstalledServices();
         updateAllPreferences();
-        if (mServicesCategory.getPreference(0) == mNoServicesMessagePreference) {
-            offerInstallAccessibilitySerivceOnce();
-        }
+
+        offerInstallAccessibilitySerivceOnce();
+
         mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false);
         RotationPolicy.registerRotationPolicyListener(getActivity(),
                 mRotationPolicyListener);
@@ -465,6 +465,17 @@
         final boolean offerInstallService = !preferences.getBoolean(
                 KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE, false);
         if (offerInstallService) {
+            String screenreaderMarketLink = SystemProperties.get(
+                    SYSTEM_PROPERTY_MARKET_URL,
+                    DEFAULT_SCREENREADER_MARKET_LINK);
+            Uri marketUri = Uri.parse(screenreaderMarketLink);
+            Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
+
+            if (getPackageManager().resolveActivity(marketIntent, 0) == null) {
+                // Don't show the dialog if no market app is found/installed.
+                return;
+            }
+
             preferences.edit().putBoolean(KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE,
                     true).commit();
             // Notify user that they do not have any accessibility
@@ -766,7 +777,7 @@
             }
             return new AlertDialog.Builder(getActivity())
                 .setTitle(title)
-                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setMessage(message)
                 .setCancelable(true)
                 .setPositiveButton(android.R.string.ok, this)
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
index efde689..79b6d15 100644
--- a/src/com/android/settings/ApnEditor.java
+++ b/src/com/android/settings/ApnEditor.java
@@ -40,6 +40,7 @@
 import android.view.MenuItem;
 
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.RILConstants;
 import com.android.internal.telephony.TelephonyProperties;
 
@@ -166,15 +167,7 @@
         mProtocol.setOnPreferenceChangeListener(this);
 
         mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL);
-        // Only enable this on CDMA phones for now, since it may cause problems on other phone
-        // types.  (This screen is not normally accessible on CDMA phones, but is useful for
-        // testing.)
-        TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
-        if (tm.getCurrentPhoneType() == Phone.PHONE_TYPE_CDMA) {
-            mRoamingProtocol.setOnPreferenceChangeListener(this);
-        } else {
-            getPreferenceScreen().removePreference(mRoamingProtocol);
-        }
+        mRoamingProtocol.setOnPreferenceChangeListener(this);
 
         mCarrierEnabled = (CheckBoxPreference) findPreference(KEY_CARRIER_ENABLED);
 
diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java
index 57762d4..56ee7a9 100644
--- a/src/com/android/settings/ApnSettings.java
+++ b/src/com/android/settings/ApnSettings.java
@@ -43,6 +43,7 @@
 import android.widget.Toast;
 
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyProperties;
 
@@ -80,6 +81,7 @@
 
     private RestoreApnUiHandler mRestoreApnUiHandler;
     private RestoreApnProcessHandler mRestoreApnProcessHandler;
+    private HandlerThread mRestoreDefaultApnThread;
 
     private String mSelectedKey;
 
@@ -90,7 +92,7 @@
         public void onReceive(Context context, Intent intent) {
             if (intent.getAction().equals(
                     TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
-                Phone.DataState state = getMobileDataState(intent);
+                PhoneConstants.DataState state = getMobileDataState(intent);
                 switch (state) {
                 case CONNECTED:
                     if (!mRestoreDefaultApnMode) {
@@ -104,12 +106,12 @@
         }
     };
 
-    private static Phone.DataState getMobileDataState(Intent intent) {
-        String str = intent.getStringExtra(Phone.STATE_KEY);
+    private static PhoneConstants.DataState getMobileDataState(Intent intent) {
+        String str = intent.getStringExtra(PhoneConstants.STATE_KEY);
         if (str != null) {
-            return Enum.valueOf(Phone.DataState.class, str);
+            return Enum.valueOf(PhoneConstants.DataState.class, str);
         } else {
-            return Phone.DataState.DISCONNECTED;
+            return PhoneConstants.DataState.DISCONNECTED;
         }
     }
 
@@ -140,10 +142,19 @@
     @Override
     protected void onPause() {
         super.onPause();
-        
+
         unregisterReceiver(mMobileStateReceiver);
     }
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+
+        if (mRestoreDefaultApnThread != null) {
+            mRestoreDefaultApnThread.quit();
+        }
+    }
+
     private void fillList() {
         String where = "numeric=\""
             + android.os.SystemProperties.get(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, "")
@@ -272,12 +283,13 @@
             mRestoreApnUiHandler = new RestoreApnUiHandler();
         }
 
-        if (mRestoreApnProcessHandler == null) {
-            HandlerThread restoreDefaultApnThread = new HandlerThread(
+        if (mRestoreApnProcessHandler == null ||
+            mRestoreDefaultApnThread == null) {
+            mRestoreDefaultApnThread = new HandlerThread(
                     "Restore default APN Handler: Process Thread");
-            restoreDefaultApnThread.start();
+            mRestoreDefaultApnThread.start();
             mRestoreApnProcessHandler = new RestoreApnProcessHandler(
-                    restoreDefaultApnThread.getLooper(), mRestoreApnUiHandler);
+                    mRestoreDefaultApnThread.getLooper(), mRestoreApnUiHandler);
         }
 
         mRestoreApnProcessHandler
diff --git a/src/com/android/settings/BandMode.java b/src/com/android/settings/BandMode.java
index 4c7663e..0a0f77f 100644
--- a/src/com/android/settings/BandMode.java
+++ b/src/com/android/settings/BandMode.java
@@ -207,7 +207,9 @@
                             Window.FEATURE_INDETERMINATE_PROGRESS,
                             Window.PROGRESS_VISIBILITY_OFF);
 
-                    displayBandSelectionResult(ar.exception);
+                    if (!isFinishing()) {
+                        displayBandSelectionResult(ar.exception);
+                    }
                     break;
             }
         }
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index c12d06c..07b1776 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -235,7 +235,7 @@
         private ResetDialog() {
             AlertDialog dialog = new AlertDialog.Builder(CredentialStorage.this)
                     .setTitle(android.R.string.dialog_alert_title)
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(R.string.credentials_reset_hint)
                     .setPositiveButton(android.R.string.ok, this)
                     .setNegativeButton(android.R.string.cancel, this)
@@ -305,7 +305,7 @@
         private ConfigureKeyGuardDialog() {
             AlertDialog dialog = new AlertDialog.Builder(CredentialStorage.this)
                     .setTitle(android.R.string.dialog_alert_title)
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(R.string.credentials_configure_lock_screen_hint)
                     .setPositiveButton(android.R.string.ok, this)
                     .setNegativeButton(android.R.string.cancel, this)
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java
index 5fb72ed..4cab767 100644
--- a/src/com/android/settings/CryptKeeper.java
+++ b/src/com/android/settings/CryptKeeper.java
@@ -56,6 +56,7 @@
 
 import com.android.internal.telephony.ITelephony;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 
 import java.util.List;
 
@@ -637,7 +638,7 @@
      */
     private final void setAirplaneModeIfNecessary() {
         final boolean isLteDevice =
-                TelephonyManager.getDefault().getLteOnCdmaMode() == Phone.LTE_ON_CDMA_TRUE;
+                TelephonyManager.getDefault().getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
         if (!isLteDevice) {
             Log.d(TAG, "Going into airplane mode.");
             Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1);
diff --git a/src/com/android/settings/CryptKeeperSettings.java b/src/com/android/settings/CryptKeeperSettings.java
index ce3ad9d..d0043e6 100644
--- a/src/com/android/settings/CryptKeeperSettings.java
+++ b/src/com/android/settings/CryptKeeperSettings.java
@@ -91,7 +91,7 @@
                 // TODO replace (or follow) this dialog with an explicit launch into password UI
                 new AlertDialog.Builder(getActivity())
                     .setTitle(R.string.crypt_keeper_dialog_need_password_title)
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(R.string.crypt_keeper_dialog_need_password_message)
                     .setPositiveButton(android.R.string.ok, null)
                     .create()
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 13512d4..5e20a6e 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -128,6 +128,7 @@
 import android.widget.TextView;
 
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.settings.drawable.InsetBoundsDrawable;
 import com.android.settings.net.ChartData;
 import com.android.settings.net.ChartDataLoader;
@@ -2193,7 +2194,7 @@
         final TelephonyManager tele = TelephonyManager.from(context);
 
         final boolean hasWimax = conn.isNetworkSupported(TYPE_WIMAX);
-        final boolean hasLte = (tele.getLteOnCdmaMode() == Phone.LTE_ON_CDMA_TRUE)
+        final boolean hasLte = (tele.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE)
                 && hasReadyMobileRadio(context);
         return hasWimax || hasLte;
     }
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 1d8e341..30d4f0a 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -171,12 +171,15 @@
         java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(context);
         final Calendar now = Calendar.getInstance();
         mDummyDate.setTimeZone(now.getTimeZone());
+        // We use December 31st because it's unambiguous when demonstrating the date format.
+        // We use 13:00 so we can demonstrate the 12/24 hour options.
         mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0);
         Date dummyDate = mDummyDate.getTime();
         mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime()));
         mTimeZone.setSummary(getTimeZoneText(now.getTimeZone()));
         mDatePref.setSummary(shortDateFormat.format(now.getTime()));
         mDateFormat.setSummary(shortDateFormat.format(dummyDate));
+        mTime24Pref.setSummary(DateFormat.getTimeFormat(getActivity()).format(dummyDate));
     }
 
     @Override
@@ -334,8 +337,6 @@
         }
     }
 
-    /*  Helper routines to format timezone */
-
     /* package */ static void setDate(int year, int month, int day) {
         Calendar c = Calendar.getInstance();
 
@@ -363,45 +364,40 @@
         }
     }
 
+    /*  Helper routines to format timezone */
+
     /* package */ static String getTimeZoneText(TimeZone tz) {
-        boolean daylight = tz.inDaylightTime(new Date());
-        StringBuilder sb = new StringBuilder();
-
-        sb.append(formatOffset(tz.getRawOffset() +
-                               (daylight ? tz.getDSTSavings() : 0))).
+        // Similar to new SimpleDateFormat("'GMT'Z, zzzz").format(new Date()), but
+        // we want "GMT-03:00" rather than "GMT-0300".
+        Date now = new Date();
+        return formatOffset(new StringBuilder(), tz, now).
             append(", ").
-            append(tz.getDisplayName(daylight, TimeZone.LONG));
-
-        return sb.toString();
+            append(tz.getDisplayName(tz.inDaylightTime(now), TimeZone.LONG)).toString();
     }
 
-    private static char[] formatOffset(int off) {
-        off = off / 1000 / 60;
+    private static StringBuilder formatOffset(StringBuilder sb, TimeZone tz, Date d) {
+        int off = tz.getOffset(d.getTime()) / 1000 / 60;
 
-        char[] buf = new char[9];
-        buf[0] = 'G';
-        buf[1] = 'M';
-        buf[2] = 'T';
-
+        sb.append("GMT");
         if (off < 0) {
-            buf[3] = '-';
+            sb.append('-');
             off = -off;
         } else {
-            buf[3] = '+';
+            sb.append('+');
         }
 
         int hours = off / 60;
         int minutes = off % 60;
 
-        buf[4] = (char) ('0' + hours / 10);
-        buf[5] = (char) ('0' + hours % 10);
+        sb.append((char) ('0' + hours / 10));
+        sb.append((char) ('0' + hours % 10));
 
-        buf[6] = ':';
+        sb.append(':');
 
-        buf[7] = (char) ('0' + minutes / 10);
-        buf[8] = (char) ('0' + minutes % 10);
+        sb.append((char) ('0' + minutes / 10));
+        sb.append((char) ('0' + minutes % 10));
 
-        return buf;
+        return sb;
     }
 
     private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index f5789ae..46ffe83 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -757,7 +757,7 @@
                             getActivity().getResources().getString(
                                     R.string.dev_settings_warning_message))
                             .setTitle(R.string.dev_settings_warning_title)
-                            .setIcon(android.R.drawable.ic_dialog_alert)
+                            .setIconAttribute(android.R.attr.alertDialogIcon)
                             .setPositiveButton(android.R.string.yes, this)
                             .setNegativeButton(android.R.string.no, this)
                             .show();
@@ -800,7 +800,7 @@
                 mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
                         getActivity().getResources().getString(R.string.adb_warning_message))
                         .setTitle(R.string.adb_warning_title)
-                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setIconAttribute(android.R.attr.alertDialogIcon)
                         .setPositiveButton(android.R.string.yes, this)
                         .setNegativeButton(android.R.string.no, this)
                         .show();
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 7d8b805..8254233 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -23,6 +23,7 @@
 import android.content.pm.ResolveInfo;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.SELinux;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.preference.Preference;
@@ -53,9 +54,11 @@
     private static final String KEY_COPYRIGHT = "copyright";
     private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings";
     private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal";
+    private static final String PROPERTY_SELINUX_STATUS = "ro.build.selinux";
     private static final String KEY_KERNEL_VERSION = "kernel_version";
     private static final String KEY_BUILD_NUMBER = "build_number";
     private static final String KEY_DEVICE_MODEL = "device_model";
+    private static final String KEY_SELINUX_STATUS = "selinux_status";
     private static final String KEY_BASEBAND_VERSION = "baseband_version";
     private static final String KEY_FIRMWARE_VERSION = "firmware_version";
     private static final String KEY_UPDATE_SETTING = "additional_system_update_settings";
@@ -79,6 +82,18 @@
         setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY);
         findPreference(KEY_KERNEL_VERSION).setSummary(getFormattedKernelVersion());
 
+        if (!SELinux.isSELinuxEnabled()) {
+            String status = getResources().getString(R.string.selinux_status_disabled);
+            setStringSummary(KEY_SELINUX_STATUS, status);
+        } else if (!SELinux.isSELinuxEnforced()) {
+            String status = getResources().getString(R.string.selinux_status_permissive);
+            setStringSummary(KEY_SELINUX_STATUS, status);
+        }
+
+        // Remove selinux information if property is not present
+        removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_SELINUX_STATUS,
+                PROPERTY_SELINUX_STATUS);
+
         // Remove Safety information preference if PROPERTY_URL_SAFETYLEGAL is not set
         removePreferenceIfPropertyMissing(getPreferenceScreen(), "safetylegal",
                 PROPERTY_URL_SAFETYLEGAL);
@@ -182,7 +197,7 @@
      * @return the first line, if any.
      * @throws IOException if the file couldn't be read
      */
-    private String readLine(String filename) throws IOException {
+    private static String readLine(String filename) throws IOException {
         BufferedReader reader = new BufferedReader(new FileReader(filename), 256);
         try {
             return reader.readLine();
@@ -191,37 +206,10 @@
         }
     }
 
-    private String getFormattedKernelVersion() {
-        String procVersionStr;
-
+    public static String getFormattedKernelVersion() {
         try {
-            procVersionStr = readLine(FILENAME_PROC_VERSION);
+            return formatKernelVersion(readLine(FILENAME_PROC_VERSION));
 
-            final String PROC_VERSION_REGEX =
-                "\\w+\\s+" + /* ignore: Linux */
-                "\\w+\\s+" + /* ignore: version */
-                "([^\\s]+)\\s+" + /* group 1: 2.6.22-omap1 */
-                "\\(([^\\s@]+(?:@[^\\s.]+)?)[^)]*\\)\\s+" + /* group 2: (xxxxxx@xxxxx.constant) */
-                "\\((?:[^(]*\\([^)]*\\))?[^)]*\\)\\s+" + /* ignore: (gcc ..) */
-                "([^\\s]+)\\s+" + /* group 3: #26 */
-                "(?:PREEMPT\\s+)?" + /* ignore: PREEMPT (optional) */
-                "(.+)"; /* group 4: date */
-
-            Pattern p = Pattern.compile(PROC_VERSION_REGEX);
-            Matcher m = p.matcher(procVersionStr);
-
-            if (!m.matches()) {
-                Log.e(LOG_TAG, "Regex did not match on /proc/version: " + procVersionStr);
-                return "Unavailable";
-            } else if (m.groupCount() < 4) {
-                Log.e(LOG_TAG, "Regex match on /proc/version only returned " + m.groupCount()
-                        + " groups");
-                return "Unavailable";
-            } else {
-                return (new StringBuilder(m.group(1)).append("\n").append(
-                        m.group(2)).append(" ").append(m.group(3)).append("\n")
-                        .append(m.group(4))).toString();
-            }
         } catch (IOException e) {
             Log.e(LOG_TAG,
                 "IO Exception when getting kernel version for Device Info screen",
@@ -231,6 +219,34 @@
         }
     }
 
+    public static String formatKernelVersion(String rawKernelVersion) {
+        // Example (see tests for more):
+        // Linux version 3.0.31-g6fb96c9 (android-build@xxx.xxx.xxx.xxx.com) \
+        //     (gcc version 4.6.x-xxx 20120106 (prerelease) (GCC) ) #1 SMP PREEMPT \
+        //     Thu Jun 28 11:02:39 PDT 2012
+
+        final String PROC_VERSION_REGEX =
+            "Linux version (\\S+) " + /* group 1: "3.0.31-g6fb96c9" */
+            "\\((\\S+?)\\) " +        /* group 2: "x@y.com" (kernel builder) */
+            "(?:\\(gcc.+? \\)) " +    /* ignore: GCC version information */
+            "(#\\d+) " +              /* group 3: "#1" */
+            "(?:.*?)?" +              /* ignore: optional SMP, PREEMPT, and any CONFIG_FLAGS */
+            "((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)"; /* group 4: "Thu Jun 28 11:02:39 PDT 2012" */
+
+        Matcher m = Pattern.compile(PROC_VERSION_REGEX).matcher(rawKernelVersion);
+        if (!m.matches()) {
+            Log.e(LOG_TAG, "Regex did not match on /proc/version: " + rawKernelVersion);
+            return "Unavailable";
+        } else if (m.groupCount() < 4) {
+            Log.e(LOG_TAG, "Regex match on /proc/version only returned " + m.groupCount()
+                    + " groups");
+            return "Unavailable";
+        }
+        return m.group(1) + "\n" +                 // 3.0.31-g6fb96c9
+            m.group(2) + " " + m.group(3) + "\n" + // x@y.com #1
+            m.group(4);                            // Thu Jun 28 11:02:39 PDT 2012
+    }
+
     /**
      * Returns " (ENGINEERING)" if the msv file has a zero value, else returns "".
      * @return a string to append to the model number description.
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 755be83..ab12587 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -348,7 +348,8 @@
         // reset dialog state. Else inject error message and show dialog again.
         Message callback = Message.obtain(mHandler, MSG_ENABLE_ICC_PIN_COMPLETE);
         mPhone.getIccCard().setIccLockEnabled(mToState, mPin, callback);
-
+        // Disable the setting till the response is received.
+        mPinToggle.setEnabled(false);
     }
 
     private void iccLockChanged(boolean success) {
@@ -358,6 +359,7 @@
             Toast.makeText(this, mRes.getString(R.string.sim_lock_failed), Toast.LENGTH_SHORT)
                     .show();
         }
+        mPinToggle.setEnabled(true);
         resetDialogState();
     }
 
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index e2433bd..d936f46 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -119,7 +119,7 @@
         // TODO: DialogFragment?
         mConfirmDialog = new AlertDialog.Builder(getActivity()).setMessage(msg)
                 .setTitle(R.string.backup_erase_dialog_title)
-                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setPositiveButton(android.R.string.ok, this)
                 .setNegativeButton(android.R.string.cancel, this)
                 .show();
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index aa3f2e9..5ba3837 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -55,6 +55,7 @@
 
 import com.android.internal.telephony.DataConnection;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.PhoneStateIntentReceiver;
 import com.android.internal.telephony.TelephonyProperties;
@@ -193,9 +194,14 @@
                     ar= (AsyncResult) msg.obj;
                     if (ar.exception == null) {
                         int type = ((int[])ar.result)[0];
+                        if (type >= mPreferredNetworkLabels.length) {
+                            Log.e(TAG, "[RadioInfo] EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
+                                    "type=" + type);
+                            type = mPreferredNetworkLabels.length - 1;
+                        }
                         preferredNetworkType.setSelection(type, true);
                     } else {
-                        preferredNetworkType.setSelection(8, true);
+                        preferredNetworkType.setSelection(mPreferredNetworkLabels.length - 1, true);
                     }
                     break;
                 case EVENT_SET_PREFERRED_TYPE_DONE:
@@ -546,7 +552,7 @@
 
     private final void
     updatePhoneState() {
-        Phone.State state = mPhoneStateReceiver.getPhoneState();
+        PhoneConstants.State state = mPhoneStateReceiver.getPhoneState();
         Resources r = getResources();
         String display = r.getString(R.string.radioInfo_unknown);
 
@@ -1009,7 +1015,7 @@
             mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
         public void onItemSelected(AdapterView parent, View v, int pos, long id) {
             Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
-            if (pos>=0 && pos<=7) { //IS THIS NEEDED to extend to the entire range of values
+            if (pos>=0 && pos<=(mPreferredNetworkLabels.length - 2)) {
                 phone.setPreferredNetworkType(pos, msg);
             }
         }
@@ -1027,5 +1033,9 @@
             "CDMA only",
             "EvDo only",
             "GSM/CDMA auto (PRL)",
+            "LTE/CDMA auto (PRL)",
+            "LTE/GSM auto (PRL)",
+            "LTE/GSM/CDMA auto (PRL)",
+            "LTE only",
             "Unknown"};
 }
diff --git a/src/com/android/settings/RingerVolumePreference.java b/src/com/android/settings/RingerVolumePreference.java
index a79f4a5..954213d 100644
--- a/src/com/android/settings/RingerVolumePreference.java
+++ b/src/com/android/settings/RingerVolumePreference.java
@@ -17,7 +17,6 @@
 package com.android.settings;
 
 import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
-import static android.provider.Telephony.Intents.SPN_STRINGS_UPDATED_ACTION;
 
 import com.android.internal.telephony.TelephonyIntents;
 
diff --git a/src/com/android/settings/TestingSettingsBroadcastReceiver.java b/src/com/android/settings/TestingSettingsBroadcastReceiver.java
index cea12c5..3c40453 100644
--- a/src/com/android/settings/TestingSettingsBroadcastReceiver.java
+++ b/src/com/android/settings/TestingSettingsBroadcastReceiver.java
@@ -1,7 +1,7 @@
 package com.android.settings;
 
 import android.provider.Telephony;
-import static android.provider.Telephony.Intents.SECRET_CODE_ACTION;
+import static com.android.internal.telephony.TelephonyIntents.SECRET_CODE_ACTION;
 
 import android.content.Context;
 import android.content.Intent;
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 77a72a7..4a79eca 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -493,8 +493,8 @@
     private void setUsbTethering(boolean enabled) {
         ConnectivityManager cm =
             (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+        mUsbTether.setChecked(false);
         if (cm.setUsbTethering(enabled) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
-            mUsbTether.setChecked(false);
             mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
             return;
         }
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 460a182..a029342 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -124,7 +124,7 @@
         // Did not find a matching activity, so remove the preference
         parentPreferenceGroup.removePreference(preference);
 
-        return true;
+        return false;
     }
 
     /**
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 715108b..196908e 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -79,7 +79,7 @@
     private Account[] mAccounts;
     private ArrayList<SyncStateCheckBoxPreference> mCheckBoxes =
                 new ArrayList<SyncStateCheckBoxPreference>();
-    private ArrayList<String> mInvisibleAdapters = Lists.newArrayList();
+    private ArrayList<SyncAdapterType> mInvisibleAdapters = Lists.newArrayList();
 
     @Override
     public Dialog onCreateDialog(final int id) {
@@ -321,8 +321,11 @@
         }
         // plus whatever the system needs to sync, e.g., invisible sync adapters
         if (mAccount != null) {
-            for (String authority : mInvisibleAdapters) {
-                requestOrCancelSync(mAccount, authority, startSync);
+            for (SyncAdapterType syncAdapter : mInvisibleAdapters) {
+                // invisible sync adapters' account type should be same as current account type
+                if (syncAdapter.accountType.equals(mAccount.type)) {
+                    requestOrCancelSync(mAccount, syncAdapter.authority, startSync);
+                }
             }
         }
     }
@@ -452,7 +455,7 @@
             } else {
                 // keep track of invisible sync adapters, so sync now forces
                 // them to sync as well.
-                mInvisibleAdapters.add(sa.authority);
+                mInvisibleAdapters.add(sa);
             }
         }
 
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index d85c341..7fe3711 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -815,7 +815,7 @@
                 case DLG_CLEAR_DATA:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.clear_data_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.clear_data_dlg_text))
                     .setPositiveButton(R.string.dlg_ok,
                             new DialogInterface.OnClickListener() {
@@ -829,7 +829,7 @@
                 case DLG_FACTORY_RESET:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.app_factory_reset_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.app_factory_reset_dlg_text))
                     .setPositiveButton(R.string.dlg_ok,
                             new DialogInterface.OnClickListener() {
@@ -843,7 +843,7 @@
                 case DLG_APP_NOT_FOUND:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.app_not_found_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.app_not_found_dlg_title))
                     .setNeutralButton(getActivity().getText(R.string.dlg_ok),
                             new DialogInterface.OnClickListener() {
@@ -856,7 +856,7 @@
                 case DLG_CANNOT_CLEAR_DATA:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.clear_failed_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.clear_failed_dlg_text))
                     .setNeutralButton(R.string.dlg_ok,
                             new DialogInterface.OnClickListener() {
@@ -870,7 +870,7 @@
                 case DLG_FORCE_STOP:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.force_stop_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.force_stop_dlg_text))
                     .setPositiveButton(R.string.dlg_ok,
                         new DialogInterface.OnClickListener() {
@@ -886,14 +886,14 @@
                             getOwner().getMoveErrMsg(moveErrorCode));
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.move_app_failed_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(msg)
                     .setNeutralButton(R.string.dlg_ok, null)
                     .create();
                 case DLG_DISABLE:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.app_disable_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.app_disable_dlg_text))
                     .setPositiveButton(R.string.dlg_ok,
                         new DialogInterface.OnClickListener() {
@@ -909,7 +909,7 @@
                 case DLG_DISABLE_NOTIFICATIONS:
                     return new AlertDialog.Builder(getActivity())
                     .setTitle(getActivity().getText(R.string.app_disable_notifications_dlg_title))
-                    .setIcon(android.R.drawable.ic_dialog_alert)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(getActivity().getText(R.string.app_disable_notifications_dlg_text))
                     .setPositiveButton(R.string.dlg_ok,
                         new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/applications/RunningServiceDetails.java b/src/com/android/settings/applications/RunningServiceDetails.java
index f91abd6..2087f21 100644
--- a/src/com/android/settings/applications/RunningServiceDetails.java
+++ b/src/com/android/settings/applications/RunningServiceDetails.java
@@ -507,7 +507,7 @@
                     
                     return new AlertDialog.Builder(getActivity())
                             .setTitle(getActivity().getString(R.string.runningservicedetails_stop_dlg_title))
-                            .setIcon(android.R.drawable.ic_dialog_alert)
+                            .setIconAttribute(android.R.attr.alertDialogIcon)
                             .setMessage(getActivity().getString(R.string.runningservicedetails_stop_dlg_text))
                             .setPositiveButton(R.string.dlg_ok,
                                     new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/bluetooth/Utils.java b/src/com/android/settings/bluetooth/Utils.java
index 01e72e0..fb44d5a 100755
--- a/src/com/android/settings/bluetooth/Utils.java
+++ b/src/com/android/settings/bluetooth/Utils.java
@@ -93,7 +93,7 @@
         Context activity = manager.getForegroundActivity();
         if(manager.isForegroundActivity()) {
             new AlertDialog.Builder(activity)
-                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setTitle(R.string.bluetooth_error_title)
                 .setMessage(message)
                 .setPositiveButton(android.R.string.ok, null)
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
index cb344bf..f1c7fbe 100644
--- a/src/com/android/settings/deviceinfo/Memory.java
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -24,6 +24,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.res.Resources;
+import android.hardware.usb.UsbManager;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.IBinder;
@@ -57,14 +58,16 @@
     // The mountToggle Preference that has last been clicked.
     // Assumes no two successive unmount event on 2 different volumes are performed before the first
     // one's preference is disabled
-    private Preference mLastClickedMountToggle;
-    private String mClickedMountPoint;
+    private static Preference mLastClickedMountToggle;
+    private static String mClickedMountPoint;
 
     // Access using getMountService()
     private IMountService mMountService = null;
 
     private StorageManager mStorageManager = null;
 
+    private UsbManager mUsbManager = null;
+
     private StorageVolumePreferenceCategory mInternalStorageVolumePreferenceCategory;
     private StorageVolumePreferenceCategory[] mStorageVolumePreferenceCategories;
 
@@ -72,6 +75,8 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
+
         if (mStorageManager == null) {
             mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
             mStorageManager.registerListener(mStorageListener);
@@ -119,6 +124,10 @@
         intentFilter.addDataScheme("file");
         getActivity().registerReceiver(mMediaScannerReceiver, intentFilter);
 
+        intentFilter = new IntentFilter();
+        intentFilter.addAction(UsbManager.ACTION_USB_STATE);
+        getActivity().registerReceiver(mMediaScannerReceiver, intentFilter);
+
         if (mInternalStorageVolumePreferenceCategory != null) {
             mInternalStorageVolumePreferenceCategory.onResume();
         }
@@ -237,9 +246,18 @@
     private final BroadcastReceiver mMediaScannerReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            // mInternalStorageVolumePreferenceCategory is not affected by the media scanner
-            for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
-                mStorageVolumePreferenceCategories[i].onMediaScannerFinished();
+            String action = intent.getAction();
+            if (action.equals(UsbManager.ACTION_USB_STATE)) {
+               boolean isUsbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
+               String usbFunction = mUsbManager.getDefaultFunction();
+               for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
+                   mStorageVolumePreferenceCategories[i].onUsbStateChanged(isUsbConnected, usbFunction);
+               }
+            } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
+                // mInternalStorageVolumePreferenceCategory is not affected by the media scanner
+                for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
+                    mStorageVolumePreferenceCategories[i].onMediaScannerFinished();
+                }
             }
         }
     };
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index 1d1dfaa..9e884c5 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -43,6 +43,7 @@
 import android.text.TextUtils;
 
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.PhoneStateIntentReceiver;
 import com.android.internal.telephony.TelephonyProperties;
@@ -115,7 +116,7 @@
     private Preference mSignalStrength;
     private Preference mUptime;
 
-    private static String sUnknown;
+    private String sUnknown;
 
     private Preference mBatteryStatus;
     private Preference mBatteryLevel;
@@ -188,9 +189,7 @@
         mBatteryStatus = findPreference(KEY_BATTERY_STATUS);
 
         mRes = getResources();
-        if (sUnknown == null) {
-            sUnknown = mRes.getString(R.string.device_info_default);
-        }
+        sUnknown = mRes.getString(R.string.device_info_default);
 
         mPhone = PhoneFactory.getDefaultPhone();
         // Note - missing in zaku build, be careful later...
@@ -213,7 +212,7 @@
                 setSummaryText(KEY_PRL_VERSION, mPhone.getCdmaPrlVersion());
                 removePreferenceFromScreen(KEY_IMEI_SV);
 
-                if (mPhone.getLteOnCdmaMode() == Phone.LTE_ON_CDMA_TRUE) {
+                if (mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) {
                     // Show ICC ID and IMEI for LTE device
                     setSummaryText(KEY_ICC_ID, mPhone.getIccSerialNumber());
                     setSummaryText(KEY_IMEI, mPhone.getImei());
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
index 0211c77..156184a 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
@@ -24,6 +24,7 @@
 import android.content.res.Resources;
 import android.graphics.drawable.ShapeDrawable;
 import android.graphics.drawable.shapes.RectShape;
+import android.hardware.usb.UsbManager;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -69,6 +70,9 @@
 
     private boolean mAllowFormat;
 
+    private boolean mUsbConnected;
+    private String mUsbFunction;
+
     static class CategoryInfo {
         final int mTitle;
         final int mColor;
@@ -305,6 +309,23 @@
                 removePreference(mFormatPreference);
             }
         }
+
+        if (mUsbConnected && (UsbManager.USB_FUNCTION_MTP.equals(mUsbFunction) ||
+                UsbManager.USB_FUNCTION_PTP.equals(mUsbFunction))) {
+            mMountTogglePreference.setEnabled(false);
+            if (Environment.MEDIA_MOUNTED.equals(state)) {
+                mMountTogglePreference.setSummary(mResources.getString(R.string.mtp_ptp_mode_summary));
+            }
+
+            if (mFormatPreference != null) {
+                mFormatPreference.setEnabled(false);
+                mFormatPreference.setSummary(mResources.getString(R.string.mtp_ptp_mode_summary));
+            }
+        } else if (mFormatPreference != null) {
+            mFormatPreference.setEnabled(true);
+            mFormatPreference.setSummary(mResources.getString(R.string.sd_format_summary));
+        }
+
     }
 
     public void updateApproximate(long totalSize, long availSize) {
@@ -376,6 +397,11 @@
         measure();
     }
 
+    public void onUsbStateChanged(boolean isUsbConnected, String usbFunction) {
+        mUsbConnected = isUsbConnected;
+        mUsbFunction = usbFunction;
+        measure();
+    }
     public void onMediaScannerFinished() {
         measure();
     }
diff --git a/src/com/android/settings/deviceinfo/UsbSettings.java b/src/com/android/settings/deviceinfo/UsbSettings.java
index af279e8..b8290fc 100644
--- a/src/com/android/settings/deviceinfo/UsbSettings.java
+++ b/src/com/android/settings/deviceinfo/UsbSettings.java
@@ -49,9 +49,15 @@
     private UsbManager mUsbManager;
     private CheckBoxPreference mMtp;
     private CheckBoxPreference mPtp;
+    private boolean mUsbAccessoryMode;
 
     private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() {
         public void onReceive(Context content, Intent intent) {
+            String action = intent.getAction();
+            if (action.equals(UsbManager.ACTION_USB_STATE)) {
+               mUsbAccessoryMode = intent.getBooleanExtra(UsbManager.USB_FUNCTION_ACCESSORY, false);
+               Log.e(TAG, "UsbAccessoryMode " + mUsbAccessoryMode);
+            }
             updateToggles(mUsbManager.getDefaultFunction());
         }
     };
@@ -106,6 +112,18 @@
             mMtp.setChecked(false);
             mPtp.setChecked(false);
         }
+
+        if (!mUsbAccessoryMode) {
+            //Enable MTP and PTP switch while USB is not in Accessory Mode, otherwise disable it
+            Log.e(TAG, "USB Normal Mode");
+            mMtp.setEnabled(true);
+            mPtp.setEnabled(true);
+        } else {
+            Log.e(TAG, "USB Accessory Mode");
+            mMtp.setEnabled(false);
+            mPtp.setEnabled(false);
+        }
+
     }
 
     @Override
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 182c1eb..c2ff0d9 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -225,6 +225,7 @@
     public void onResume() {
         super.onResume();
 
+        mSettingsObserver.resume();
         mIm.registerInputDeviceListener(this, null);
 
         if (!mIsOnlyImeSettings) {
@@ -279,6 +280,7 @@
         super.onPause();
 
         mIm.unregisterInputDeviceListener(this);
+        mSettingsObserver.pause();
 
         if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) {
             mShowInputMethodSelectorPref.setOnPreferenceChangeListener(null);
@@ -537,17 +539,27 @@
     }
 
     private class SettingsObserver extends ContentObserver {
+        private Context mContext;
+
         public SettingsObserver(Handler handler, Context context) {
             super(handler);
-            final ContentResolver cr = context.getContentResolver();
+            mContext = context;
+        }
+
+        @Override public void onChange(boolean selfChange) {
+            updateCurrentImeName();
+        }
+
+        public void resume() {
+            final ContentResolver cr = mContext.getContentResolver();
             cr.registerContentObserver(
                     Settings.Secure.getUriFor(Settings.Secure.DEFAULT_INPUT_METHOD), false, this);
             cr.registerContentObserver(Settings.Secure.getUriFor(
                     Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE), false, this);
         }
 
-        @Override public void onChange(boolean selfChange) {
-            updateCurrentImeName();
+        public void pause() {
+            mContext.getContentResolver().unregisterContentObserver(this);
         }
     }
 }
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
index ea3ddf4..13f4435 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
@@ -155,7 +155,7 @@
                 if (mDialog == null) {
                     mDialog = (new AlertDialog.Builder(getActivity()))
                             .setTitle(android.R.string.dialog_alert_title)
-                            .setIcon(android.R.drawable.ic_dialog_alert)
+                            .setIconAttribute(android.R.attr.alertDialogIcon)
                             .setCancelable(true)
                             .setPositiveButton(android.R.string.ok,
                                     new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java
index f555d21..103481e 100644
--- a/src/com/android/settings/inputmethod/InputMethodPreference.java
+++ b/src/com/android/settings/inputmethod/InputMethodPreference.java
@@ -253,7 +253,7 @@
         }
         mDialog = (new AlertDialog.Builder(mFragment.getActivity()))
                 .setTitle(android.R.string.dialog_alert_title)
-                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setCancelable(true)
                 .setPositiveButton(android.R.string.ok,
                         new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index d3e5181..8b1b867 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -122,7 +122,7 @@
         }
         mDialog = (new AlertDialog.Builder(getActivity()))
                 .setTitle(android.R.string.dialog_alert_title)
-                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setCancelable(true)
                 .setPositiveButton(android.R.string.ok,
                         new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
index 47fa34a..5654323 100644
--- a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
+++ b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
@@ -144,7 +144,7 @@
                 // Create the dialog for clearing a shortcut
                 return new AlertDialog.Builder(this)
                         .setTitle(getString(R.string.quick_launch_clear_dialog_title))
-                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setIconAttribute(android.R.attr.alertDialogIcon)
                         .setMessage(getString(R.string.quick_launch_clear_dialog_message,
                                 mClearDialogShortcut, mClearDialogBookmarkTitle))
                         .setPositiveButton(R.string.quick_launch_clear_ok_button, this)
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index fbcdb4f..603d028 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -329,7 +329,7 @@
         Log.i(TAG, "Displaying data alert for :" + key);
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         builder.setTitle(android.R.string.dialog_alert_title);
-        builder.setIcon(android.R.drawable.ic_dialog_alert);
+        builder.setIconAttribute(android.R.attr.alertDialogIcon);
         builder.setMessage(getActivity().getString(
                 R.string.tts_engine_security_warning, mEnginesHelper.getEngineInfo(key).label));
         builder.setCancelable(true);
diff --git a/src/com/android/settings/wifi/WifiApEnabler.java b/src/com/android/settings/wifi/WifiApEnabler.java
index 92e1c92..86a7cb4 100644
--- a/src/com/android/settings/wifi/WifiApEnabler.java
+++ b/src/com/android/settings/wifi/WifiApEnabler.java
@@ -180,7 +180,7 @@
     private void handleWifiApStateChanged(int state) {
         switch (state) {
             case WifiManager.WIFI_AP_STATE_ENABLING:
-                mCheckBox.setSummary(R.string.wifi_starting);
+                mCheckBox.setSummary(R.string.wifi_tether_starting);
                 mCheckBox.setEnabled(false);
                 break;
             case WifiManager.WIFI_AP_STATE_ENABLED:
@@ -193,7 +193,7 @@
                 mCheckBox.setEnabled(true);
                 break;
             case WifiManager.WIFI_AP_STATE_DISABLING:
-                mCheckBox.setSummary(R.string.wifi_stopping);
+                mCheckBox.setSummary(R.string.wifi_tether_stopping);
                 mCheckBox.setEnabled(false);
                 break;
             case WifiManager.WIFI_AP_STATE_DISABLED:
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pPersistentGroup.java b/src/com/android/settings/wifi/p2p/WifiP2pPersistentGroup.java
new file mode 100644
index 0000000..d982653
--- /dev/null
+++ b/src/com/android/settings/wifi/p2p/WifiP2pPersistentGroup.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2012 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.p2p;
+
+import android.content.Context;
+import android.net.wifi.p2p.WifiP2pGroup;
+import android.preference.Preference;
+import android.view.View;
+
+public class WifiP2pPersistentGroup extends Preference {
+
+    public WifiP2pGroup mGroup;
+
+    public WifiP2pPersistentGroup(Context context, WifiP2pGroup group) {
+        super(context);
+        mGroup = group;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        setTitle(mGroup.getNetworkName());
+        super.onBindView(view);
+    }
+
+    int getNetworkId() {
+        return mGroup.getNetworkId();
+    }
+
+    String getGroupName() {
+        return mGroup.getNetworkName();
+    }
+}
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 684ec30..1bb253a 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -30,8 +30,12 @@
 import android.net.wifi.p2p.WifiP2pConfig;
 import android.net.wifi.p2p.WifiP2pDevice;
 import android.net.wifi.p2p.WifiP2pDeviceList;
+import android.net.wifi.p2p.WifiP2pGroup;
+import android.net.wifi.p2p.WifiP2pGroupList;
 import android.net.wifi.p2p.WifiP2pManager;
+import android.net.wifi.p2p.WifiP2pManager.GroupInfoListener;
 import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
+import android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener;
 import android.net.wifi.WpsInfo;
 import android.os.Bundle;
 import android.os.Handler;
@@ -62,7 +66,7 @@
  * Displays Wi-fi p2p settings UI
  */
 public class WifiP2pSettings extends SettingsPreferenceFragment
-        implements PeerListListener {
+        implements PeerListListener, PersistentGroupInfoListener, GroupInfoListener {
 
     private static final String TAG = "WifiP2pSettings";
     private static final boolean DBG = false;
@@ -75,19 +79,24 @@
     private OnClickListener mRenameListener;
     private OnClickListener mDisconnectListener;
     private OnClickListener mCancelConnectListener;
+    private OnClickListener mDeleteGroupListener;
     private WifiP2pPeer mSelectedWifiPeer;
+    private WifiP2pPersistentGroup mSelectedGroup;
     private EditText mDeviceNameText;
 
     private boolean mWifiP2pEnabled;
     private boolean mWifiP2pSearching;
     private int mConnectedDevices;
+    private WifiP2pGroup mConnectedGroup;
 
     private PreferenceGroup mPeersGroup;
+    private PreferenceGroup mPersistentGroup;
     private Preference mThisDevicePref;
 
     private static final int DIALOG_DISCONNECT  = 1;
     private static final int DIALOG_CANCEL_CONNECT = 2;
     private static final int DIALOG_RENAME = 3;
+    private static final int DIALOG_DELETE_GROUP = 4;
 
     private static final String SAVE_DIALOG_PEER = "PEER_STATE";
     private static final String SAVE_DEVICE_NAME = "DEV_NAME";
@@ -114,6 +123,9 @@
                 if (mWifiP2pManager == null) return;
                 NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(
                         WifiP2pManager.EXTRA_NETWORK_INFO);
+                if (mWifiP2pManager != null) {
+                    mWifiP2pManager.requestGroupInfo(mChannel, WifiP2pSettings.this);
+                }
                 if (networkInfo.isConnected()) {
                     if (DBG) Log.d(TAG, "Connected");
                 } else {
@@ -134,6 +146,10 @@
                 } else {
                     updateSearchMenu(false);
                 }
+            } else if (WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION.equals(action)) {
+                if (mWifiP2pManager != null) {
+                    mWifiP2pManager.requestPersistentGroupInfo(mChannel, WifiP2pSettings.this);
+                }
             }
         }
     };
@@ -147,6 +163,7 @@
         mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
         mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
         mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION);
 
         final Activity activity = getActivity();
         mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
@@ -230,6 +247,27 @@
             }
         };
 
+        //delete persistent group dialog listener
+        mDeleteGroupListener = new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                if (which == DialogInterface.BUTTON_POSITIVE) {
+                    if (mWifiP2pManager != null) {
+                        mWifiP2pManager.deletePersistentGroup(mChannel,
+                                mSelectedGroup.getNetworkId(),
+                                new WifiP2pManager.ActionListener() {
+                            public void onSuccess() {
+                                if (DBG) Log.d(TAG, " delete group success");
+                            }
+                            public void onFailure(int reason) {
+                                if (DBG) Log.d(TAG, " delete group fail " + reason);
+                            }
+                        });
+                    }
+                }
+            }
+        };
+
         setHasOptionsMenu(true);
 
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
@@ -242,6 +280,9 @@
         mPeersGroup = new PreferenceCategory(getActivity());
         mPeersGroup.setTitle(R.string.wifi_p2p_peer_devices);
 
+        mPersistentGroup = new PreferenceCategory(getActivity());
+        mPersistentGroup.setTitle(R.string.wifi_p2p_remembered_groups);
+
         super.onActivityCreated(savedInstanceState);
     }
 
@@ -342,6 +383,9 @@
                             }
                     });
             }
+        } else if (preference instanceof WifiP2pPersistentGroup) {
+            mSelectedGroup = (WifiP2pPersistentGroup) preference;
+            showDialog(DIALOG_DELETE_GROUP);
         }
         return super.onPreferenceTreeClick(screen, preference);
     }
@@ -396,6 +440,16 @@
                 .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
                 .create();
             return dialog;
+        } else if (id == DIALOG_DELETE_GROUP) {
+            int stringId = R.string.wifi_p2p_delete_group_message;
+
+            AlertDialog dialog = new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.wifi_p2p_delete_group_title)
+                .setMessage(getActivity().getString(stringId, mSelectedGroup.getGroupName()))
+                .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDeleteGroupListener)
+                .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
+                .create();
+            return dialog;
         }
         return null;
     }
@@ -423,6 +477,21 @@
         if (DBG) Log.d(TAG, " mConnectedDevices " + mConnectedDevices);
     }
 
+    public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups) {
+        mPersistentGroup.removeAll();
+
+        for (WifiP2pGroup group: groups.getGroupList()) {
+            if (DBG) Log.d(TAG, " group " + group);
+            mPersistentGroup.addPreference(new WifiP2pPersistentGroup(getActivity(), group));
+        }
+    }
+
+    public void onGroupInfoAvailable(WifiP2pGroup group) {
+        if (DBG) Log.d(TAG, " group " + group);
+        mConnectedGroup = group;
+        updateDevicePref();
+    }
+
     private void handleP2pStateChanged() {
         updateSearchMenu(false);
         if (mWifiP2pEnabled) {
@@ -435,6 +504,9 @@
             mPeersGroup.setEnabled(true);
             preferenceScreen.addPreference(mPeersGroup);
 
+            mPersistentGroup.setEnabled(true);
+            preferenceScreen.addPreference(mPersistentGroup);
+
             /* Request latest set of peers */
             mWifiP2pManager.requestPeers(mChannel, WifiP2pSettings.this);
         }
diff --git a/tests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/src/com/android/settings/DeviceInfoSettingsTest.java
new file mode 100644
index 0000000..d2267c0
--- /dev/null
+++ b/tests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2012 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.test.AndroidTestCase;
+
+import com.android.settings.DeviceInfoSettings;
+
+public class DeviceInfoSettingsTest extends AndroidTestCase {
+
+    public void testGetFormattedKernelVersion() throws Exception {
+        if ("Unavailable".equals(DeviceInfoSettings.getFormattedKernelVersion())) {
+            fail("formatKernelVersion can't cope with this device's /proc/version");
+        }
+    }
+
+    public void testFormatKernelVersion() throws Exception {
+        assertEquals("Unavailable", DeviceInfoSettings.formatKernelVersion(""));
+        assertEquals("2.6.38.8-gg784\n" +
+                     "root@hpao4.eem.corp.google.com #2\n" +
+                     "Fri Feb 24 03:31:23 PST 2012",
+                     DeviceInfoSettings.formatKernelVersion("Linux version 2.6.38.8-gg784 " +
+                         "(root@hpao4.eem.corp.google.com) " +
+                         "(gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #2 SMP " +
+                         "Fri Feb 24 03:31:23 PST 2012"));
+        assertEquals("3.0.31-g6fb96c9\n" +
+                     "android-build@vpbs1.mtv.corp.google.com #1\n" +
+                     "Thu Jun 28 11:02:39 PDT 2012",
+                     DeviceInfoSettings.formatKernelVersion("Linux version 3.0.31-g6fb96c9 " +
+                         "(android-build@vpbs1.mtv.corp.google.com) " +
+                         "(gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 " +
+                         "SMP PREEMPT Thu Jun 28 11:02:39 PDT 2012"));
+        assertEquals("2.6.38.8-a-b-jellybean+\n" +
+                     "x@y #1\n" +
+                     "Tue Aug 28 22:10:46 CDT 2012",
+                     DeviceInfoSettings.formatKernelVersion("Linux version " +
+                         "2.6.38.8-a-b-jellybean+ (x@y) " +
+                         "(gcc version 4.4.3 (GCC) ) #1 PREEMPT Tue Aug 28 22:10:46 CDT 2012"));
+    }
+}