Merge "Add summary provider for system tile."
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 0f1fa4d..ea33881 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Wys %d versteekte items</item>
<item quantity="one">Wys %d versteekte item</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Netwerk en internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Instellings"</string>
<string name="search_menu" msgid="6283419262313758339">"Soekinstellings"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Soekinstellings"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index cffa887..000fa48 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="one">%d የተደበቁ ንጥሎችን አሳይ</item>
<item quantity="other">%d የተደበቁ ንጥሎችን አሳይ</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"አውታረ መረብ እና በይነመረብ"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ቅንብሮች"</string>
<string name="search_menu" msgid="6283419262313758339">"የፍለጋ ቅንብሮች"</string>
<string name="query_hint_text" msgid="3350700807437473939">"የፍለጋ ቅንብሮች"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 207db30..0bc0be2 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -2610,6 +2610,9 @@
<item quantity="other">عرض %d عنصر مخفي</item>
<item quantity="one">عرض %d عنصر مخفي</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"الشبكة والإنترنت"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"الإعدادات"</string>
<string name="search_menu" msgid="6283419262313758339">"إعدادات البحث"</string>
<string name="query_hint_text" msgid="3350700807437473939">"إعدادات البحث"</string>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 222c7ef..7fd0f1c 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">%d gizli element göstərin</item>
<item quantity="one">%d gizli element göstərin</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Şəbəkə və İnternet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Ayarlar"</string>
<string name="search_menu" msgid="6283419262313758339">"Axtarış ayarları"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Axtarış ayarları"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 35c7a3f..15a42e8 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -378,8 +378,8 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="1863561601428695160">"Ups, to nije senzor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="5053971232594165142">"Koristite senzor za otisak prsta na uređaju."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="3618021988442639280">"Registracija nije završena"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="2942551158278899627">"Vremensko ograničenje za registraciju otiska prsta je isteklo. Pokušajte ponovo."</string>
- <string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="3624760637222239293">"Registracija otiska prsta nije uspela. Pokušajte ponovo ili koristite drugi prst."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="2942551158278899627">"Vremensko ograničenje za registraciju otiska prsta je isteklo. Probajte ponovo."</string>
+ <string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="3624760637222239293">"Registracija otiska prsta nije uspela. Probajte ponovo ili koristite drugi prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6317978977419045463">"Dodajte još jedan"</string>
<string name="fingerprint_enroll_button_next" msgid="6247009337616342759">"Dalje"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="2624905914239271751">"Osim za otključavanje telefona, otisak prsta možete da koristite i da biste dali ovlašćenje za kupovine i pristup aplikacijama. "<annotation id="url">"Saznajte više"</annotation></string>
@@ -504,7 +504,7 @@
<string name="unlock_change_lock_pattern_title" msgid="2044092014872741130">"Promena šablona za otključavanje"</string>
<string name="unlock_change_lock_pin_title" msgid="806629901095938484">"Promena PIN-a za otključavanje"</string>
<string name="unlock_change_lock_password_title" msgid="5606298470358768865">"Promena lozinke za otključavanje"</string>
- <string name="lock_profile_wipe_attempts" msgid="1216193652369039672">"Pokušajte ponovo. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. pokušaj od <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
+ <string name="lock_profile_wipe_attempts" msgid="1216193652369039672">"Probajte ponovo. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. pokušaj od <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
<string name="lock_profile_wipe_warning_title" msgid="2961600792367265036">"Poslednji pokušaj"</string>
<string name="lock_profile_wipe_warning_content_pattern" msgid="8978031996247660921">"Ako u ovom pokušaju unesete netačan šablon za Work, sa ovog uređaja ćemo ukloniti profil za Work i povezane podatke."</string>
<string name="lock_profile_wipe_warning_content_pin" msgid="7697973618542377880">"Ako u ovom pokušaju unesete netačan PIN za Work, sa ovog uređaja ćemo ukloniti profil za Work i povezane podatke."</string>
@@ -723,11 +723,11 @@
<string name="wifi_wps_complete" msgid="2388138550456729134">"WPS je uspeo. Povezivanje na mrežu..."</string>
<string name="wifi_wps_connected" msgid="7153432445748931183">"Uspostavljena je veza sa Wi-Fi mrežom <xliff:g id="NETWORK_NAME">%s</xliff:g>"</string>
<string name="wifi_wps_in_progress" msgid="3372311348221357944">"WPS je već pokrenut i biće dovršen za najviše dva minuta"</string>
- <string name="wifi_wps_failed_generic" msgid="5668775022238832527">"WPS nije uspeo. Pokušajte ponovo za nekoliko minuta."</string>
+ <string name="wifi_wps_failed_generic" msgid="5668775022238832527">"WPS nije uspeo. Probajte ponovo za nekoliko minuta."</string>
<string name="wifi_wps_failed_wep" msgid="2702820087105284461">"Bezbednosno podešavanje bežičnog rutera (WEP) nije podržano"</string>
<string name="wifi_wps_failed_tkip" msgid="4282401586860713349">"Bezbednosno podešavanje bežičnog rutera (TKIP) nije podržano"</string>
- <string name="wifi_wps_failed_auth" msgid="1174614355181181958">"Potvrda autentičnosti nije uspela. Pokušajte ponovo."</string>
- <string name="wifi_wps_failed_overlap" msgid="5159533685596844778">"Otkrivena je druga WPS sesija. Pokušajte ponovo za nekoliko minuta."</string>
+ <string name="wifi_wps_failed_auth" msgid="1174614355181181958">"Potvrda autentičnosti nije uspela. Probajte ponovo."</string>
+ <string name="wifi_wps_failed_overlap" msgid="5159533685596844778">"Otkrivena je druga WPS sesija. Probajte ponovo za nekoliko minuta."</string>
<string name="wifi_ssid" msgid="5519636102673067319">"Ime mreže"</string>
<string name="wifi_ssid_hint" msgid="897593601067321355">"Unesite SSID"</string>
<string name="wifi_security" msgid="6603611185592956936">"Bezbednost"</string>
@@ -1101,8 +1101,8 @@
<string name="dlg_confirm_unmount_text" product="default" msgid="6998379994779187692">"Ako izvadite SD karticu, neke aplikacije koje koristite će se zaustaviti i možda neće biti dostupne sve dok ponovo ne stavite SD karticu."</string>
<string name="dlg_error_unmount_title" product="nosdcard" msgid="4642742385125426529"></string>
<string name="dlg_error_unmount_title" product="default" msgid="4642742385125426529"></string>
- <string name="dlg_error_unmount_text" product="nosdcard" msgid="9191518889746166147">"Nije moguće isključiti USB memoriju. Pokušajte ponovo kasnije."</string>
- <string name="dlg_error_unmount_text" product="default" msgid="3500976899159848422">"Nije moguće isključiti SD karticu. Pokušajte ponovo kasnije."</string>
+ <string name="dlg_error_unmount_text" product="nosdcard" msgid="9191518889746166147">"Nije moguće isključiti USB memoriju. Probajte ponovo kasnije."</string>
+ <string name="dlg_error_unmount_text" product="default" msgid="3500976899159848422">"Nije moguće isključiti SD karticu. Probajte ponovo kasnije."</string>
<string name="unmount_inform_text" product="nosdcard" msgid="7120241136790744265">"USB memorija će biti isključena."</string>
<string name="unmount_inform_text" product="default" msgid="1904212716075458402">"SD kartica će biti isključena."</string>
<string name="sd_ejecting_title" msgid="8824572198034365468">"Oslobađanje"</string>
@@ -1401,7 +1401,7 @@
<string name="lockpattern_recording_intro_header" msgid="308287052221942814">"Nacrtajte šablon za otključavanje"</string>
<string name="lockpattern_recording_intro_footer" msgid="1118579101409152113">"Pritisnite „Meni“ da biste dobili pomoć."</string>
<string name="lockpattern_recording_inprogress" msgid="6667844062721656773">"Podignite prst kada završite"</string>
- <string name="lockpattern_recording_incorrect_too_short" msgid="1348234155120957561">"Povežite najmanje <xliff:g id="NUMBER">%d</xliff:g> tačke. Pokušajte ponovo."</string>
+ <string name="lockpattern_recording_incorrect_too_short" msgid="1348234155120957561">"Povežite najmanje <xliff:g id="NUMBER">%d</xliff:g> tačke. Probajte ponovo."</string>
<string name="lockpattern_pattern_entered_header" msgid="4316818983675591604">"Šablon je snimljen"</string>
<string name="lockpattern_need_to_confirm" msgid="8054853451639221265">"Ponovo nacrtajte šablon da biste potvrdili"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="8455614172231880211">"Novi šablon za otključavanje"</string>
@@ -1420,7 +1420,7 @@
<string name="lockpattern_settings_choose_lock_pattern" msgid="1652352830005653447">"Podešavanje šablona za otključavanje"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1123908306116495545">"Promeni šablon za otključavanje"</string>
<string name="lockpattern_settings_help_how_to_record" msgid="2614673439060830433">"Kako nacrtati šablon za otključavanje"</string>
- <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="6909161623701848863">"Previše netačnih pokušaja. Pokušajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
+ <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="6909161623701848863">"Previše netačnih pokušaja. Probajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
<string name="activity_not_found" msgid="5551664692991605325">"Aplikacija nije instalirana na telefonu."</string>
<string name="lock_settings_profile_title" msgid="2121876391814535295">"Bezbednost profila za Work"</string>
<string name="lock_settings_profile_screen_lock_title" msgid="3334747927367115256">"Zaključavanje ekrana za profil za Work"</string>
@@ -2313,7 +2313,7 @@
<string name="vpn_lockdown_summary" msgid="2200032066376720339">"Izaberite VPN profil sa kojim ćete uvek biti povezani. Mrežni sadržaj će biti dozvoljen samo kada ste povezani sa ovim VPN-om."</string>
<string name="vpn_lockdown_none" msgid="9214462857336483711">"Nijedan"</string>
<string name="vpn_lockdown_config_error" msgid="3898576754914217248">"Stalno uključeni VPN zahteva IP adresu za server i DNS."</string>
- <string name="vpn_no_network" msgid="3050233675132726155">"Nije uspostavljena mrežna veza. Pokušajte ponovo kasnije."</string>
+ <string name="vpn_no_network" msgid="3050233675132726155">"Nije uspostavljena mrežna veza. Probajte ponovo kasnije."</string>
<string name="vpn_missing_cert" msgid="7972907102570411501">"Nedostaje sertifikat. Izmenite profil."</string>
<string name="trusted_credentials_system_tab" msgid="3984284264816924534">"Sistem"</string>
<string name="trusted_credentials_user_tab" msgid="2244732111398939475">"Korisnik"</string>
@@ -2544,6 +2544,9 @@
<item quantity="few">Prikaži %d skrivene stavke</item>
<item quantity="other">Prikaži %d skrivenih stavki</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Mreža i internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Podešavanja"</string>
<string name="search_menu" msgid="6283419262313758339">"Pretražite podešavanja"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Podešavanja pretrage"</string>
@@ -2594,7 +2597,7 @@
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Podesite Wi-Fi NFC oznaku"</string>
<string name="write_tag" msgid="8571858602896222537">"Napiši"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"Dodirnite oznaku da biste pisali..."</string>
- <string name="status_invalid_password" msgid="2575271864572897406">"Lozinka je nevažeća. Pokušajte ponovo."</string>
+ <string name="status_invalid_password" msgid="2575271864572897406">"Lozinka je nevažeća. Probajte ponovo."</string>
<string name="status_write_success" msgid="5228419086308251169">"Uspeli ste!"</string>
<string name="status_failed_to_write" msgid="8072752734686294718">"Nije moguće pisanje podataka u NFC oznaku. Ako se problem i dalje javlja, pokušajte sa drugom oznakom"</string>
<string name="status_tag_not_writable" msgid="2511611539977682175">"NFC oznaka ne podržava pisanje. Koristite drugu oznaku."</string>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index 955717f..94c5cd7 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -2566,6 +2566,9 @@
<item quantity="many">Паказаць %d схаваных элементаў</item>
<item quantity="other">Паказаць %d схаванага элемента</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Сетка і інтэрнэт"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Налады"</string>
<string name="search_menu" msgid="6283419262313758339">"Налады пошуку"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Налады пошуку"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index e953daa..025185b 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Показване на %d скрити елемента</item>
<item quantity="one">Показване на %d скрит елемент</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Мрежа и интернет"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Настройки"</string>
<string name="search_menu" msgid="6283419262313758339">"Търсете в настройките"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Настройки за търсене"</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index d0488a1..a97819b 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">%dটি লুকানো আইটেম দেখান</item>
<item quantity="other">%dটি লুকানো আইটেম দেখান</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"সেটিংস"</string>
<string name="search_menu" msgid="6283419262313758339">"অনুসন্ধান সেটিংস"</string>
<string name="query_hint_text" msgid="3350700807437473939">"অনুসন্ধান সেটিংস"</string>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index b43e463..0ff7283 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -2544,6 +2544,9 @@
<item quantity="few">Prikaži %d skrivene stavke</item>
<item quantity="other">Prikaži %d skrivenih stavki</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Mreža i internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Postavke"</string>
<string name="search_menu" msgid="6283419262313758339">"Postavke pretraživanja"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Postavke pretraživanja"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 19420f4..41b9f7c 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Mostra %d elements amagats</item>
<item quantity="one">Mostra %d element amagat</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Xarxa i Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Configuració"</string>
<string name="search_menu" msgid="6283419262313758339">"Configuració de la cerca"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Configuració de la cerca"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 3e91ee7..aab8f9a 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -2566,6 +2566,9 @@
<item quantity="other">Zobrazit %d skrytých položek</item>
<item quantity="one">Zobrazit %d skrytou položku</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Síť a internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Nastavení"</string>
<string name="search_menu" msgid="6283419262313758339">"Nastavení vyhledávání"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Vyhledávání nastavení"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index d43e00c..d33c683 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -371,7 +371,7 @@
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="6808422329107426923">"Vil du springe registrering af fingeraftryk over?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="274849306857859783">"Du har valgt at bruge fingeraftryk som en metode til at låse din telefon op. Hvis du springer det over nu, skal du konfigurere dette senere. Konfigurationen tager kun omkring et minut."</string>
<string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="1195743489835505376">"Konfigurer skærmlås"</string>
- <string name="security_settings_fingerprint_enroll_done" msgid="4014607378328187567">"Færdig"</string>
+ <string name="security_settings_fingerprint_enroll_done" msgid="4014607378328187567">"Udfør"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="1863561601428695160">"Hov! Dette er ikke sensoren"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="5053971232594165142">"Brug fingeraftrykssensoren på din enhed."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="3618021988442639280">"Registreringen kunne ikke gennemføres"</string>
@@ -2522,6 +2522,10 @@
<item quantity="one">Vis %d skjult element</item>
<item quantity="other">Vis %d skjulte elementer</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Indstillinger"</string>
<string name="search_menu" msgid="6283419262313758339">"Søgeindstillinger"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Indstillinger for søgning"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 9a09384..f1228f4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -111,9 +111,9 @@
<string name="bluetooth_device" msgid="5291950341750186887">"Unbenanntes Bluetooth-Gerät"</string>
<string name="progress_scanning" msgid="192587958424295789">"Suche läuft"</string>
<string name="bluetooth_no_devices_found" msgid="1085232930277181436">"Kein Bluetooth-Gerät in der Nähe gefunden"</string>
- <string name="bluetooth_notif_ticker" msgid="4726721390078512173">"Bluetooth-Pairing-Anfrage"</string>
- <string name="bluetooth_notif_title" msgid="2485175521845371514">"Pairing-Anfrage"</string>
- <string name="bluetooth_notif_message" msgid="5057417127600942904">"Für Pairing mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> tippen."</string>
+ <string name="bluetooth_notif_ticker" msgid="4726721390078512173">"Anfrage zur Bluetooth-Kopplung"</string>
+ <string name="bluetooth_notif_title" msgid="2485175521845371514">"Kopplungsanfrage"</string>
+ <string name="bluetooth_notif_message" msgid="5057417127600942904">"Für Kopplung mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> tippen."</string>
<string name="bluetooth_show_received_files" msgid="5164787486105868895">"Empfangene Dateien anzeigen"</string>
<string name="device_picker" msgid="4978696506172252813">"Bluetooth-Gerät auswählen"</string>
<string name="bluetooth_ask_enablement" msgid="3387222809404177525">"<xliff:g id="APP_NAME">%1$s</xliff:g> fordert die Berechtigung, Bluetooth zu aktivieren"</string>
@@ -560,18 +560,18 @@
<string name="bluetooth_settings" msgid="1810521656168174329">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="1908745291161353016">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="2091062709530570462">"Verbindungen, Gerätenamen und Erkennbarkeit verwalten"</string>
- <string name="bluetooth_pairing_request" msgid="2605098826364694673">"Pairing mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> durchführen?"</string>
- <string name="bluetooth_pairing_key_msg" msgid="418124944140102021">"Bluetooth-Pairing-Code"</string>
- <string name="bluetooth_enter_passkey_msg" msgid="6813273136442138444">"Gib den Pairing-Code ein und tippe dann auf die Eingabetaste."</string>
+ <string name="bluetooth_pairing_request" msgid="2605098826364694673">"Mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> koppeln?"</string>
+ <string name="bluetooth_pairing_key_msg" msgid="418124944140102021">"Bluetooth-Kopplungscode"</string>
+ <string name="bluetooth_enter_passkey_msg" msgid="6813273136442138444">"Gib den Kopplungscode ein und tippe dann auf die Eingabetaste."</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="7222713483058171357">"Die PIN enthält Buchstaben oder Symbole."</string>
<string name="bluetooth_pin_values_hint" msgid="3815897557875873646">"In der Regel 0000 oder 1234"</string>
<string name="bluetooth_pin_values_hint_16_digits" msgid="7849359451584101077">"Muss aus 16 Ziffern bestehen"</string>
<string name="bluetooth_enter_pin_other_device" msgid="4637977124526813470">"Möglicherweise musst du diese PIN auch auf dem anderen Gerät eingeben."</string>
<string name="bluetooth_enter_passkey_other_device" msgid="2798719004030279602">"Möglicherweise musst du diesen Zugangscode auch auf dem anderen Gerät eingeben."</string>
- <!-- syntax error in translation for bluetooth_confirm_passkey_msg (3708312912841950052) org.xmlpull.v1.XmlPullParserException: name expected (position:START_TAG <null>@1:239 in <string name="bluetooth_confirm_passkey_msg" msgid="3708312912841950052">"Zum Pairing mit:><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Vergewissere dich, dass folgender Zugangscode angezeigt wird:<<br><b>P<xliff:g id="PASSKEY">%2$s</xliff:g></b>."</string>
+ <!-- syntax error in translation for bluetooth_confirm_passkey_msg (3708312912841950052) org.xmlpull.v1.XmlPullParserException: name expected (position:START_TAG <null>@1:240 in <string name="bluetooth_confirm_passkey_msg" msgid="3708312912841950052">"Zur Kopplung mit:><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Vergewissere dich, dass folgender Zugangscode angezeigt wird:<<br><b>P<xliff:g id="PASSKEY">%2$s</xliff:g></b>."</string>
) -->
- <string name="bluetooth_incoming_pairing_msg" msgid="1615930853859551491">"Von:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Pairing mit diesem Gerät durchführen?"</string>
- <string name="bluetooth_display_passkey_pin_msg" msgid="2796550001376088433">"Gib zum Pairing mit <xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g> <xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g> ein und drücke anschließend die Eingabetaste."</string>
+ <string name="bluetooth_incoming_pairing_msg" msgid="1615930853859551491">"Von:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br> Mit diesem Gerät koppeln?"</string>
+ <string name="bluetooth_display_passkey_pin_msg" msgid="2796550001376088433">"Gib zur Kopplung mit <xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g> <xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g> ein und drücke anschließend die Eingabetaste."</string>
<string name="bluetooth_pairing_shares_phonebook" msgid="2277931851483023208">"Zulassen, dass <xliff:g id="DEVICE_NAME">%1$s</xliff:g> auf deine Kontakte und deine Anrufliste zugreifen kann"</string>
<string name="bluetooth_error_title" msgid="6850384073923533096"></string>
<string name="bluetooth_connecting_error_message" msgid="1397388344342081090">"Keine Verbindung zu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> möglich"</string>
@@ -579,23 +579,23 @@
<string name="bluetooth_search_for_devices" msgid="2754007356491461674">"Aktualisieren"</string>
<string name="bluetooth_searching_for_devices" msgid="9203739709307871727">"Suche läuft..."</string>
<string name="bluetooth_preference_device_settings" msgid="907776049862799122">"Geräteeinstellungen"</string>
- <string name="bluetooth_preference_paired_dialog_title" msgid="8875124878198774180">"Pairing-Gerät"</string>
+ <string name="bluetooth_preference_paired_dialog_title" msgid="8875124878198774180">"Gekoppeltes Gerät"</string>
<string name="bluetooth_preference_paired_dialog_name_label" msgid="8111146086595617285">"Name"</string>
<string name="bluetooth_preference_paired_dialog_internet_option" msgid="7112953286863428412">"Internetverbindung"</string>
<string name="bluetooth_preference_paired_dialog_keyboard_option" msgid="2271954176947879628">"Tastatur"</string>
<string name="bluetooth_preference_paired_dialog_contacts_option" msgid="7747163316331917594">"Kontakte und Anrufliste"</string>
- <string name="bluetooth_pairing_dialog_title" msgid="1417255032435317301">"Pairing mit diesem Gerät durchführen?"</string>
+ <string name="bluetooth_pairing_dialog_title" msgid="1417255032435317301">"Mit diesem Gerät koppeln?"</string>
<string name="bluetooth_pairing_dialog_sharing_phonebook_title" msgid="7664141669886358618">"Telefonbuch teilen?"</string>
<string name="bluetooth_pairing_dialog_contants_request" msgid="5531109163573611348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> fordert Zugriff auf deine Kontakte und deine Anrufliste an."</string>
- <string name="bluetooth_pairing_dialog_paring_request" msgid="8451248193517851958">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> möchte ein Bluetooth-Pairing durchführen und hat dann Zugriff auf deine Kontakte und deine Anrufliste."</string>
- <string name="bluetooth_preference_paired_devices" msgid="1970524193086791964">"Pairing-Geräte"</string>
+ <string name="bluetooth_pairing_dialog_paring_request" msgid="8451248193517851958">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> möchte eine Kopplung über Bluetooth herstellen und hat dann Zugriff auf deine Kontakte und deine Anrufliste."</string>
+ <string name="bluetooth_preference_paired_devices" msgid="1970524193086791964">"Gekoppelte Geräte"</string>
<string name="bluetooth_preference_found_devices" msgid="1647983835063249680">"Verfügbar"</string>
<string name="bluetooth_preference_no_found_devices" msgid="7594339669961811591">"Keine Geräte verfügbar"</string>
<string name="bluetooth_device_context_connect" msgid="3997659895003244941">"Verbinden"</string>
<string name="bluetooth_device_context_disconnect" msgid="8220072022970148683">"Verbindung trennen"</string>
- <string name="bluetooth_device_context_pair_connect" msgid="7611522504813927727">"Pairing durchführen und verbinden"</string>
- <string name="bluetooth_device_context_unpair" msgid="662992425948536144">"Pairing aufheben"</string>
- <string name="bluetooth_device_context_disconnect_unpair" msgid="7644014238070043798">"Verbindung trennen und Pairing aufheben"</string>
+ <string name="bluetooth_device_context_pair_connect" msgid="7611522504813927727">"Kopplung durchführen und verbinden"</string>
+ <string name="bluetooth_device_context_unpair" msgid="662992425948536144">"Entkoppeln"</string>
+ <string name="bluetooth_device_context_disconnect_unpair" msgid="7644014238070043798">"Verbindung trennen und entkoppeln"</string>
<string name="bluetooth_device_context_connect_advanced" msgid="2643129703569788771">"Optionen..."</string>
<string name="bluetooth_menu_advanced" msgid="8572178316357220524">"Erweitert"</string>
<string name="bluetooth_advanced_titlebar" msgid="2142159726881547669">"Bluetooth - Erweitert"</string>
@@ -608,7 +608,7 @@
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"Der Internetzugriff über <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wird deaktiviert."</string>
<string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"Die Freigabe der Internetverbindung dieses Tablets wird für <xliff:g id="DEVICE_NAME">%1$s</xliff:g> deaktiviert."</string>
<string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"Die Freigabe der Internetverbindung dieses Telefons wird für <xliff:g id="DEVICE_NAME">%1$s</xliff:g> deaktiviert."</string>
- <string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"Bluetooth-Gerät mit aktivem Pairing"</string>
+ <string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"Gekoppeltes Bluetooth-Gerät"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"Verbinden"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"Mit Bluetooth-Gerät verbinden"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"Nutzen für"</string>
@@ -2522,6 +2522,9 @@
<item quantity="other">%d ausgeblendete Elemente anzeigen</item>
<item quantity="one">%d ausgeblendetes Element anzeigen</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Netzwerk & Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Einstellungen"</string>
<string name="search_menu" msgid="6283419262313758339">"Sucheinstellungen"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Sucheinstellungen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 82af487..eac5eaa 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Εμφάνιση %d κρυφών στοιχείων</item>
<item quantity="one">Εμφάνιση %d κρυφού στοιχείου</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Δίκτυο και διαδίκτυο"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Ρυθμίσεις"</string>
<string name="search_menu" msgid="6283419262313758339">"Ρυθμίσεις αναζήτησης"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Ρυθμίσεις αναζήτησης"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 8b7073c..b96d10a 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Show %d hidden items</item>
<item quantity="one">Show %d hidden item</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Network & Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Settings"</string>
<string name="search_menu" msgid="6283419262313758339">"Search Settings"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Search settings"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index ad0cd98e..568ab05 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Show %d hidden items</item>
<item quantity="one">Show %d hidden item</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Network & Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Settings"</string>
<string name="search_menu" msgid="6283419262313758339">"Search Settings"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Search settings"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index ad0cd98e..568ab05 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Show %d hidden items</item>
<item quantity="one">Show %d hidden item</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Network & Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Settings"</string>
<string name="search_menu" msgid="6283419262313758339">"Search Settings"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Search settings"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 24d4a29..667ec4c 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Mostrar %d elementos ocultos</item>
<item quantity="one">Mostrar %d elemento oculto</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Internet y red"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Configuración"</string>
<string name="search_menu" msgid="6283419262313758339">"Configuración de búsqueda"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Configuración de búsqueda"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f7eeeff..a22c406 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -2520,6 +2520,9 @@
<item quantity="other">Mostrar %d elementos ocultos</item>
<item quantity="one">Mostrar %d elemento oculto</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Red e Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Ajustes"</string>
<string name="search_menu" msgid="6283419262313758339">"Ajustes de búsqueda"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Ajustes de búsqueda"</string>
@@ -3067,7 +3070,7 @@
<string name="condition_battery_summary" msgid="4418839236027977450">"Ha disminuido el rendimiento. Las conexiones automáticas y los servicios de ubicación están desactivados."</string>
<string name="condition_cellular_title" msgid="2398754272044917264">"Datos móviles desactivados"</string>
<string name="condition_cellular_summary" msgid="1818046558419658463">"Internet solo está disponible a través de redes Wi-Fi"</string>
- <string name="condition_bg_data_title" msgid="2483860304802846542">"Economizador de Datos activado"</string>
+ <string name="condition_bg_data_title" msgid="2483860304802846542">"Ahorro de datos activado"</string>
<string name="condition_bg_data_summary" msgid="656957852895282228">"Las conexiones automáticas solo están disponibles a través de redes Wi-Fi. Si la conexión Wi-Fi no está disponible, algunas aplicaciones o algunos servicios pueden verse afectados."</string>
<string name="condition_work_title" msgid="7293722361184366648">"Perfil de trabajo desactivado"</string>
<string name="condition_work_summary" msgid="7543202177571590378">"Las aplicaciones, la sincronización en segundo plano y otras funciones relacionadas con tu perfil de trabajo están desactivadas."</string>
@@ -3105,16 +3108,16 @@
<string name="configure" msgid="1029654422228677273">"Configurar"</string>
<string name="data_usage_other_apps" msgid="3272872663517382050">"Otras aplicaciones incluidas en el uso"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="2635267833484232703">
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> aplicaciones pueden usar datos no restringidos cuando el Economizador de Datos está activado</item>
- <item quantity="one">1 aplicación puede usar datos no restringidos cuando el Economizador de Datos está activado</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> aplicaciones pueden usar datos no restringidos cuando el ahorro de datos está activado</item>
+ <item quantity="one">1 aplicación puede usar datos no restringidos cuando el ahorro de datos está activado</item>
</plurals>
- <string name="data_saver_title" msgid="398458827917495765">"Economizador de Datos"</string>
+ <string name="data_saver_title" msgid="398458827917495765">"Ahorro de datos"</string>
<string name="unrestricted_data_saver" msgid="7019858887510062789">"Acceso a datos no restringidos"</string>
<string name="restrict_background_blacklisted" msgid="3995443391711013068">"Las conexiones automáticas están desactivadas"</string>
<string name="data_saver_on" msgid="6774217590237934709">"Sí"</string>
<string name="data_saver_off" msgid="6892309031162738794">"No"</string>
<string name="unrestricted_app_title" msgid="4465437191723332066">"Uso de datos no restringidos"</string>
- <string name="unrestricted_app_summary" msgid="6458008993501723912">"No restringir datos si el Economizador de Datos está activado"</string>
+ <string name="unrestricted_app_summary" msgid="6458008993501723912">"No restringir datos si el ahorra de datos está activado"</string>
<string name="home_app" msgid="4066188520886810030">"Aplicación de inicio"</string>
<string name="no_default_home" msgid="7184117487704520238">"Sin aplicación de inicio predeterminada"</string>
<string name="lockpattern_settings_require_cred_before_startup" msgid="3832020101401318248">"Inicio seguro"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 2866ae9..a84c007 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Kuva %d peidetud üksust</item>
<item quantity="one">Kuva %d peidetud üksus</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Võrk ja Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Seaded"</string>
<string name="search_menu" msgid="6283419262313758339">"Otsingu seaded"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Otsinguseaded"</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 20088ce..3fd2ca4 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -777,9 +777,9 @@
<string name="wifi_cancel" msgid="6763568902542968964">"Utzi"</string>
<string name="wifi_skip_anyway" msgid="6965361454438011190">"Saltatu halere"</string>
<string name="wifi_dont_skip" msgid="3615535136327231588">"Atzera"</string>
- <string name="wifi_skipped_message" product="tablet" msgid="6761689889733331124">"KONTUZ: ez baduzu aktibatzen Wi‑Fi konexioa, tabletak datu mugikorrak soilik erabiliko ditu hasierako deskargak edo eguneratzeak egiteko. Datuengatiko kostuak ekiditeko, konektatu Wi-Fi sare batera."</string>
- <string name="wifi_skipped_message" product="device" msgid="1385490367826852775">"KONTUZ: ez baduzu aktibatzen Wi‑Fi konexioa, gailuak datu mugikorrak soilik erabiliko ditu hasierako deskargak edo eguneratzeak egiteko. Datuengatiko kostuak ekiditeko, konektatu Wi-Fi sare batera."</string>
- <string name="wifi_skipped_message" product="default" msgid="6084295135297772350">"KONTUZ: ez baduzu aktibatzen Wi‑Fi konexioa, telefonoak datu mugikorrak soilik erabiliko ditu hasierako deskargak edo eguneratzeak egiteko. Datuengatiko kostuak ekiditeko, konektatu Wi-Fi sare batera."</string>
+ <string name="wifi_skipped_message" product="tablet" msgid="6761689889733331124">"ABISUA: ez baduzu aktibatzen Wi‑Fi konexioa, tabletak datu mugikorrak soilik erabiliko ditu hasierako deskargak edo eguneratzeak egiteko. Datuengatiko kostuak ekiditeko, konektatu Wi-Fi sare batera."</string>
+ <string name="wifi_skipped_message" product="device" msgid="1385490367826852775">"ABISUA: ez baduzu aktibatzen Wi‑Fi konexioa, gailuak datu mugikorrak soilik erabiliko ditu hasierako deskargak edo eguneratzeak egiteko. Datuengatiko kostuak ekiditeko, konektatu Wi-Fi sare batera."</string>
+ <string name="wifi_skipped_message" product="default" msgid="6084295135297772350">"ABISUA: ez baduzu aktibatzen Wi‑Fi konexioa, telefonoak datu mugikorrak soilik erabiliko ditu hasierako deskargak edo eguneratzeak egiteko. Datuengatiko kostuak ekiditeko, konektatu Wi-Fi sare batera."</string>
<string name="wifi_and_mobile_skipped_message" product="tablet" msgid="6324917391996718760">"Wi‑Fi sarera konektatzeko urratsa saltatzen baduzu:\n\n"<li>"Tableta ez da konektatuko Internetera."</li>\n\n<li>"Ez duzu jasoko software-eguneratzerik Internetera konektatzen zaren arte."</li>\n\n<li>"Ezin izango dituzu aktibatu gailuaren babes-eginbideak."</li></string>
<string name="wifi_and_mobile_skipped_message" product="device" msgid="1110629752293998468">"Wi‑Fi sarera konektatzeko urratsa saltatzen baduzu:\n\n"<li>"Gailua ez da konektatuko Internetera."</li>\n\n<li>"Ez duzu jasoko software-eguneratzerik Internetera konektatzen zaren arte."</li>\n\n<li>"Ezin izango dituzu aktibatu gailuaren babes-eginbideak."</li></string>
<string name="wifi_and_mobile_skipped_message" product="default" msgid="8271524692702309267">"Wi‑Fi sarera konektatzeko urratsa saltatzen baduzu:\n\n"<li>"Telefonoa ez da konektatuko Internetera."</li>\n\n<li>"Ez duzu jasoko software-eguneratzerik Internetera konektatzen zaren arte."</li>\n\n<li>"Ezin izango dituzu aktibatu gailuaren babes-eginbideak."</li></string>
@@ -2522,6 +2522,10 @@
<item quantity="other">Erakutsi %d elementu ezkutu</item>
<item quantity="one">Erakutsi %d elementu ezkutu</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Ezarpenak"</string>
<string name="search_menu" msgid="6283419262313758339">"Bilaketa-ezarpenak"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Bilaketa-ezarpenak"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index e3de165..e09b877 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">نمایش %d مورد پنهان</item>
<item quantity="other">نمایش %d مورد پنهان</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"تنظیمات"</string>
<string name="search_menu" msgid="6283419262313758339">"تنظیمات جستجو"</string>
<string name="query_hint_text" msgid="3350700807437473939">"تنظیمات جستجو"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 1ab8e1e..6581bf0 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Näytä %d piilotettua kohdetta</item>
<item quantity="one">Näytä %d piilotettu kohde</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Verkko ja internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Asetukset"</string>
<string name="search_menu" msgid="6283419262313758339">"Hakuasetukset"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Hakuasetukset"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 59dd223..bb15810 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">Afficher %d élément masqué</item>
<item quantity="other">Afficher %d éléments masqués</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Paramètres"</string>
<string name="search_menu" msgid="6283419262313758339">"Paramètres de recherche"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Paramètres de recherche"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index adc4da2..803d247 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">Afficher %d élément masqué</item>
<item quantity="other">Afficher %d éléments masqués</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Paramètres"</string>
<string name="search_menu" msgid="6283419262313758339">"Paramètres de recherche"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Paramètres de recherche"</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 0266dbe..89e2b6f 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Mostrar %d elementos ocultos</item>
<item quantity="one">Mostrar %d elemento oculto</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Rede e Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Configuración"</string>
<string name="search_menu" msgid="6283419262313758339">"Configuración de busca"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Configuración de busca"</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index bd8fb65..2180f08 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -2524,6 +2524,10 @@
<item quantity="one">%d છુપાયેલ આઇટમ બતાવો</item>
<item quantity="other">%d છુપાયેલ આઇટમ બતાવો</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"સેટિંગ્સ"</string>
<string name="search_menu" msgid="6283419262313758339">"શોધ સેટિંગ્સ"</string>
<string name="query_hint_text" msgid="3350700807437473939">"શોધ સેટિંગ્સ"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 88fec25..3263c4b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="one">छिपे हुए %d आइटम दिखाएं</item>
<item quantity="other">छिपे हुए %d आइटम दिखाएं</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"नेटवर्क और इंटरनेट"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"सेटिंग"</string>
<string name="search_menu" msgid="6283419262313758339">"खोज सेटिंग"</string>
<string name="query_hint_text" msgid="3350700807437473939">"खोज सेटिंग"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 20676dc..00f3d46 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -2544,6 +2544,9 @@
<item quantity="few">Prikaži %d skrivene stavke</item>
<item quantity="other">Prikaži %d skrivenih stavki</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Mreža i internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Postavke"</string>
<string name="search_menu" msgid="6283419262313758339">"Postavke pretraživanja"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Postavke pretraživanja"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 2545cf8..8001a1b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">%d rejtett elem megjelenítése</item>
<item quantity="one">%d rejtett elem megjelenítése</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Beállítások"</string>
<string name="search_menu" msgid="6283419262313758339">"Keresési beállítások"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Keresési beállítások"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 8f55c42..a594196 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="one">Show %d hidden items</item>
<item quantity="other">Ցույց տալ %d թաքնված տարրեր</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Ցանց և ինտերնետ"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Կարգավորումներ"</string>
<string name="search_menu" msgid="6283419262313758339">"Որոնման կարգավորումներ"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Որոնման կարգավորումներ"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 15d7bad..f39d1ca 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Tampilkan %d item tersembunyi</item>
<item quantity="one">Tampilkan %d item tersembunyi</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Jaringan & Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Setelan"</string>
<string name="search_menu" msgid="6283419262313758339">"Setelan penelusuran"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Setelan penelusuran"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 7c7ec07..c053fce 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="one">Sýna %d falið atriði</item>
<item quantity="other">Sýna %d falin atriði</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Netkerfi og internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Stillingar"</string>
<string name="search_menu" msgid="6283419262313758339">"Leitarstillingar"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Leitarstillingar"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3296461..c51cea9 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Mostra %d elementi nascosti</item>
<item quantity="one">Mostra %d elemento nascosto</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Rete e Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Impostazioni"</string>
<string name="search_menu" msgid="6283419262313758339">"Impostazioni di ricerca"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Impostazioni di ricerca"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 64828ba..32d4503 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -2568,6 +2568,10 @@
<item quantity="other">הצג %d פריטים מוסתרים</item>
<item quantity="one">הצג פריט %d מוסתר</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"הגדרות"</string>
<string name="search_menu" msgid="6283419262313758339">"הגדרות חיפוש"</string>
<string name="query_hint_text" msgid="3350700807437473939">"הגדרות חיפוש"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 35aef83..a92f2ac 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -2526,6 +2526,10 @@
<item quantity="other">%d 件の非表示のアイテムを表示</item>
<item quantity="one">%d 件の非表示のアイテムを表示</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"設定"</string>
<string name="search_menu" msgid="6283419262313758339">"検索設定"</string>
<string name="query_hint_text" msgid="3350700807437473939">"検索設定"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index b04fd44..4a60fe7 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">%d დამალული ერთეულის ჩვენება</item>
<item quantity="one">%d დამალული ერთეულის ჩვენება</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"ქსელი და ინტერნეტი"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"პარამეტრები"</string>
<string name="search_menu" msgid="6283419262313758339">"ძიების პარამეტრები"</string>
<string name="query_hint_text" msgid="3350700807437473939">"ძიების პარამეტრები"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 3b44ae9..bde0e2a 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">%d жасырын элементті көрсету</item>
<item quantity="one">%d жасырын элементті көрсету</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Желі және интернет"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Параметрлер"</string>
<string name="search_menu" msgid="6283419262313758339">"Іздеу параметрлері"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Іздеу параметрлері"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 744c33c..e322c82 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">បង្ហាញធាតុ %d ដែលបានលាក់</item>
<item quantity="one">បង្ហាញធាតុ %d ដែលបានលាក់</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ការកំណត់"</string>
<string name="search_menu" msgid="6283419262313758339">"ការកំណត់ការស្វែងរក"</string>
<string name="query_hint_text" msgid="3350700807437473939">"កំណត់ការស្វែងរក"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 056b5cb..c04b861 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">%d ಮರೆಮಾಡಲಾದ ಐಟಂಗಳನ್ನು ತೋರಿಸಿ</item>
<item quantity="other">%d ಮರೆಮಾಡಲಾದ ಐಟಂಗಳನ್ನು ತೋರಿಸಿ</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="search_menu" msgid="6283419262313758339">"ಹುಡುಕಾಟ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="query_hint_text" msgid="3350700807437473939">"ಹುಡುಕಾಟ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 045972e..00b2048 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">%d개의 숨겨진 항목 표시</item>
<item quantity="one">%d개의 숨겨진 항목 표시</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"설정"</string>
<string name="search_menu" msgid="6283419262313758339">"검색 설정"</string>
<string name="query_hint_text" msgid="3350700807437473939">"검색 설정"</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 020f20b..776529d 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -2521,6 +2521,9 @@
<item quantity="other">Жашырылган %d нерсе көрсөтүлсүн</item>
<item quantity="one">Жашырылган %d нерсе көрсөтүлсүн</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Тармак жана Интернет"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Жөндөөлөр"</string>
<string name="search_menu" msgid="6283419262313758339">"Издөө жөндөөлөрү"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Издөө жөндөөлөрү"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index afe4ce4..929aa93 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">ສະແດງ %d ລາຍການທີ່ເຊື່ອງໄວ້</item>
<item quantity="one">ສະແດງ %d ລາຍການທີ່ເຊື່ອງໄວ້</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ການຕັ້ງຄ່າ"</string>
<string name="search_menu" msgid="6283419262313758339">"ການຕັ້ງຄ່າການຊອກຫາ"</string>
<string name="query_hint_text" msgid="3350700807437473939">"ການຕັ້ງຄ່າການຊອກຫາ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 5c9b0c7..d61c372 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -1019,7 +1019,7 @@
<string name="sim_enter_ok" msgid="6475946836899218919">"Gerai"</string>
<string name="sim_enter_cancel" msgid="6240422158517208036">"Atšaukti"</string>
<string name="sim_multi_sims_title" msgid="9159427879911231239">"Rastos kelios SIM"</string>
- <string name="sim_multi_sims_summary" msgid="7018740080801483990">"Pasirinkite norimą SIM korinio ryšio duomenims."</string>
+ <string name="sim_multi_sims_summary" msgid="7018740080801483990">"Pasirinkite norimą SIM mobiliojo ryšio duomenims."</string>
<string name="sim_change_data_title" msgid="294357201685244532">"Keisti duomenų SIM?"</string>
<string name="sim_change_data_message" msgid="1313940695939674633">"Korinio ryšio duomenims naudoti <xliff:g id="NEW_SIM">%1$s</xliff:g> vietoje <xliff:g id="OLD_SIM">%2$s</xliff:g>?"</string>
<string name="sim_preferred_title" msgid="5567909634636045268">"Atnauj. pageid. SIM kortelę?"</string>
@@ -1246,7 +1246,7 @@
<string name="menu_restore" msgid="8260067415075573273">"Nustatyti iš naujo į numatytuosius nustatymus"</string>
<string name="restore_default_apn_completed" msgid="2824775307377604897">"Numatytųjų APN nustatymų nustatymas iš naujo baigtas."</string>
<string name="reset_network_title" msgid="4557113742173895074">"Tinklo nustatymų nustatymas iš naujo"</string>
- <string name="reset_network_desc" msgid="581668983587311282">"Bus ištrinti visi tinklo nustatymai, įskaitant:\n\n"<li>"„Wi‑Fi“"</li>\n<li>"korinio ryšio duomenis"</li>\n<li>"„Bluetooth“"</li></string>
+ <string name="reset_network_desc" msgid="581668983587311282">"Bus ištrinti visi tinklo nustatymai, įskaitant:\n\n"<li>"„Wi‑Fi“"</li>\n<li>"mobiliojo ryšio duomenis"</li>\n<li>"„Bluetooth“"</li></string>
<string name="reset_network_button_text" msgid="2035676527471089853">"Nustatyti iš naujo"</string>
<string name="reset_network_final_desc" msgid="6388371121099245116">"Iš naujo nustatyti visus tinklo nustatymus? Šio veiksmo negalėsite anuliuoti!"</string>
<string name="reset_network_final_button_text" msgid="1797434793741744635">"Nustatyti iš naujo"</string>
@@ -2225,7 +2225,7 @@
<string name="data_usage_label_foreground" msgid="4938034231928628164">"Priekinis planas"</string>
<string name="data_usage_label_background" msgid="3225844085975764519">"Fonas"</string>
<string name="data_usage_app_restricted" msgid="3568465218866589705">"ribotas"</string>
- <string name="data_usage_disable_mobile" msgid="2613595056882494652">"Išjungti korinio ryšio duomenis?"</string>
+ <string name="data_usage_disable_mobile" msgid="2613595056882494652">"Išjungti mobiliojo ryšio duomenis?"</string>
<string name="data_usage_disable_mobile_limit" msgid="3934211003105066167">"Nust. kor. ryš. duom. apr."</string>
<string name="data_usage_disable_4g_limit" msgid="6233554774946681175">"Nustatyti 4G duomenų apribojimą"</string>
<string name="data_usage_disable_3g_limit" msgid="2558557840444266906">"Nustatyti 2G–3G duomenų apribojimą"</string>
@@ -2248,7 +2248,7 @@
<string name="data_usage_app_restrict_background_summary_disabled" msgid="1446565717342917727">"Kad aprib. šios progr. fon. duom., pirm. nustat. kor. duom. apr."</string>
<string name="data_usage_app_restrict_dialog_title" msgid="1613108390242737923">"Apriboti foninius duomenis?"</string>
<string name="data_usage_app_restrict_dialog" msgid="5871168521456832764">"Dėl šios funkcijos, kai pasiekiami tik koriniai tinklai, gali neveikti programos, kurių veikimas priklauso nuo foninių duomenų.\n\nProgramos nustatymuose galite rasti tinkamesnių duomenų naudojimo valdiklių."</string>
- <string name="data_usage_restrict_denied_dialog" msgid="1493134803720421674">"Apriboti foninius duomenis galima tik nustačius korinio ryšio duomenų apribojimą."</string>
+ <string name="data_usage_restrict_denied_dialog" msgid="1493134803720421674">"Apriboti foninius duomenis galima tik nustačius mobiliojo ryšio duomenų apribojimą."</string>
<string name="data_usage_auto_sync_on_dialog_title" msgid="2438617846762244389">"Įjungti autom. sinchronizavimą?"</string>
<string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="8581983093524041669">"Bet kokie paskyrų pakeitimai, kuriuos atliekate žiniatinklyje, bus automatiškai nukopijuoti į planšetinį kompiuterį.\n\nIš kai kurių paskyrų į žiniatinklį gali būti automatiškai kopijuojami visi planšetiniame kompiuteryje atlikti pakeitimai. Taip pat daroma ir „Google“ paskyroje."</string>
<string name="data_usage_auto_sync_on_dialog" product="default" msgid="8651376294887142858">"Bet kokie paskyrų pakeitimai, kuriuos atliekate žiniatinklyje, bus automatiškai nukopijuoti į telefoną.\n\nIš kai kurių paskyrų į žiniatinklį gali būti automatiškai kopijuojami visi telefone atlikti pakeitimai. Taip pat daroma ir „Google“ paskyroje."</string>
@@ -2260,12 +2260,12 @@
<string name="data_usage_warning_editor_title" msgid="3704136912240060339">"Nustatyti duomenų naudojimo įspėjimą"</string>
<string name="data_usage_limit_editor_title" msgid="9153595142385030015">"Nustatyti duomenų naudojimo apribojimą"</string>
<string name="data_usage_limit_dialog_title" msgid="3023111643632996097">"Duomenų naudojimo ribojimas"</string>
- <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="5788774061143636263">"Pasiekus nustatytą apribojimą planšetiniame kompiuteryje bus išjungti korinio ryšio duomenys.\n\nKadangi sunaudoti duomenys skaičiuojami pagal telefoną ir operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę nustatyti mažesnį apribojimą."</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="3511301596446820549">"Pasiekus nustatytą apribojimą telefone bus išjungti korinio ryšio duomenys.\n\nKadangi sunaudoti duomenys skaičiuojami pagal telefoną ir operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę nustatyti mažesnį apribojimą."</string>
+ <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="5788774061143636263">"Pasiekus nustatytą apribojimą planšetiniame kompiuteryje bus išjungti mobiliojo ryšio duomenys.\n\nKadangi sunaudoti duomenys skaičiuojami pagal telefoną ir operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę nustatyti mažesnį apribojimą."</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="3511301596446820549">"Pasiekus nustatytą apribojimą telefone bus išjungti mobiliojo ryšio duomenys.\n\nKadangi sunaudoti duomenys skaičiuojami pagal telefoną ir operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę nustatyti mažesnį apribojimą."</string>
<string name="data_usage_restrict_background_title" msgid="2201315502223035062">"Apriboti foninius duomenis?"</string>
- <string name="data_usage_restrict_background" msgid="6264965779074729381">"Jei apribosite korinio ryšio foninius duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo."</string>
- <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="7954930300449415764">"Jei apribosite korinio ryšio foninius duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo.\n\nŠis nustatymas taikomas visiems šio planšetinio kompiuterio naudotojams."</string>
- <string name="data_usage_restrict_background_multiuser" product="default" msgid="259958321968870600">"Jei apribosite korinio ryšio foninius duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo.\n\nŠis nustatymas taikomas visiems šio telefono naudotojams."</string>
+ <string name="data_usage_restrict_background" msgid="6264965779074729381">"Jei apribosite mobiliojo ryšio foninius duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo."</string>
+ <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="7954930300449415764">"Jei apribosite mobiliojo ryšio foninius duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo.\n\nŠis nustatymas taikomas visiems šio planšetinio kompiuterio naudotojams."</string>
+ <string name="data_usage_restrict_background_multiuser" product="default" msgid="259958321968870600">"Jei apribosite mobiliojo ryšio foninius duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo.\n\nŠis nustatymas taikomas visiems šio telefono naudotojams."</string>
<string name="data_usage_sweep_warning" msgid="6387081852568846982"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"įspėjimas"</font></string>
<string name="data_usage_sweep_limit" msgid="860566507375933039"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font><font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"apribojimas"</font></string>
<string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Pašalintos programos"</string>
@@ -2566,6 +2566,9 @@
<item quantity="many">Rodyti %d paslėpto elemento</item>
<item quantity="other">Rodyti %d paslėptų elementų</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Tinkas ir internetas"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Nustatymai"</string>
<string name="search_menu" msgid="6283419262313758339">"Paieškos nustatymai"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Paieškos nustatymai"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 2875825..3bde22c 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -2544,6 +2544,10 @@
<item quantity="one">Rādīt %d slēptu vienumu</item>
<item quantity="other">Rādīt %d slēptus vienumus</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Iestatījumi"</string>
<string name="search_menu" msgid="6283419262313758339">"Meklēšanas iestatījumi"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Meklēšanas iestatījumi"</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 416e650..e923fff 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">Прикажи %d сокриена ставка</item>
<item quantity="other">Прикажи %d сокриени ставки</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Поставки"</string>
<string name="search_menu" msgid="6283419262313758339">"Поставки за пребарување"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Поставки за пребарување"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index ad835c4..df0b42d 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">മറച്ച %d ഇനങ്ങൾ കാണിക്കുക</item>
<item quantity="one">മറച്ച %d ഇനം കാണിക്കുക</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ക്രമീകരണം"</string>
<string name="search_menu" msgid="6283419262313758339">"തിരയൽ ക്രമീകരണം"</string>
<string name="query_hint_text" msgid="3350700807437473939">"തിരയൽ ക്രമീകരണങ്ങൾ"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 566586b..4d97773 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">Нуусан %d зүйлийг харуулах</item>
<item quantity="one">Нуусан %d зүйлийг харуулах</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Тохиргоо"</string>
<string name="search_menu" msgid="6283419262313758339">"Хайлтын тохиргоо"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Хайлтын тохиргоо"</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 66908c5..ca64607 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">%d लपविलेला आयटम दर्शवा</item>
<item quantity="other">%d लपविलेले आयटम दर्शवा</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"सेटिंग्ज"</string>
<string name="search_menu" msgid="6283419262313758339">"शोध सेटिंग्ज"</string>
<string name="query_hint_text" msgid="3350700807437473939">"शोध सेटिंग्ज"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index f95db4d..18655cb 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">Tunjukkan %d item yang tersembunyi</item>
<item quantity="one">Tunjukkan %d item yang tersembunyi</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Tetapan"</string>
<string name="search_menu" msgid="6283419262313758339">"Tetapan carian"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Tetapan carian"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 74abad5..976bbad 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">ဖျောက်ထားသည့် %d ခုကို ပြပါ</item>
<item quantity="one">ဖျောက်ထားသည့် %d ခုကို ပြပါ</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"ကွန်ရန်နှင့် အင်တာနက်"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ဆက်တင်များ"</string>
<string name="search_menu" msgid="6283419262313758339">"ရှာဖွေမှု ဆက်တင်များ"</string>
<string name="query_hint_text" msgid="3350700807437473939">"ရှာဖွေမှု ဆက်တင်များ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 03eb294..cc15f65 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Vis %d skjulte elementer</item>
<item quantity="one">Vis %d skjult element</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Nettverk og Internett"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Innstillinger"</string>
<string name="search_menu" msgid="6283419262313758339">"Søkeinnstillinger"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Søkeinnstillinger"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 96ef684..5f122ec 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">लुकाइएका %d वस्तुहरू देखाउनुहोस्</item>
<item quantity="one">लुकाइएको %d वस्तु देखाउनुहोस्</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"सेटिङहरू"</string>
<string name="search_menu" msgid="6283419262313758339">"खोज सेटिङहरू"</string>
<string name="query_hint_text" msgid="3350700807437473939">"खोज सेटिङहरू"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index fed074d..d64ba7e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -1155,9 +1155,9 @@
<string name="storage_wizard_init_title" msgid="5085400514028585772">"Je <xliff:g id="NAME">^1</xliff:g> configureren"</string>
<string name="storage_wizard_init_external_title" msgid="4867326438945303598">"Gebruiken als draagbare opslag"</string>
<string name="storage_wizard_init_external_summary" msgid="7476105886344565074">"Voor het verplaatsen van foto\'s en andere media tussen apparaten."</string>
- <string name="storage_wizard_init_internal_title" msgid="9100613534261408519">"Gebruiken als intern geheugen"</string>
+ <string name="storage_wizard_init_internal_title" msgid="9100613534261408519">"Gebruiken als interne opslag"</string>
<string name="storage_wizard_init_internal_summary" msgid="6240417501036216410">"Voor het opslaan van dingen op alleen dit apparaat (waaronder apps en foto\'s). Hiervoor moet het apparaat worden geformatteerd, zodat het niet meer werkt met andere apparaten."</string>
- <string name="storage_wizard_format_confirm_title" msgid="2814021794538252546">"Formatteren als intern geheugen"</string>
+ <string name="storage_wizard_format_confirm_title" msgid="2814021794538252546">"Formatteren als interne opslag"</string>
<string name="storage_wizard_format_confirm_body" msgid="4401758710076806509">"De <xliff:g id="NAME_0">^1</xliff:g> moet worden geformatteerd om deze te beveiligen. \n\nNa het formatteren werkt deze <xliff:g id="NAME_1">^1</xliff:g> alleen in dit apparaat. \n\n"<b>"Wanneer je formatteert, worden alle gegevens gewist die momenteel op de <xliff:g id="NAME_2">^1</xliff:g> zijn opgeslagen."</b>" Als je wilt voorkomen dat je gegevens kwijtraakt, kun je eerst een back-up maken."</string>
<string name="storage_wizard_format_confirm_public_title" msgid="4905690038882041566">"Formatteren als draagbare opslag"</string>
<string name="storage_wizard_format_confirm_public_body" msgid="1516932692920060272">"Hiervoor moet de <xliff:g id="NAME_0">^1</xliff:g> worden geformatteerd. \n\n"<b>"Bij formatteren worden alle gegevens gewist die momenteel zijn opgeslagen op de <xliff:g id="NAME_1">^1</xliff:g>."</b>" Als je wilt voorkomen dat je gegevens kwijtraakt, kun je eerst een back-up maken."</string>
@@ -1165,7 +1165,7 @@
<string name="storage_wizard_format_progress_title" msgid="6487352396450582292">"<xliff:g id="NAME">^1</xliff:g> formatteren…"</string>
<string name="storage_wizard_format_progress_body" msgid="4445041233802828430">"Verwijder de <xliff:g id="NAME">^1</xliff:g> niet tijdens het formatteren."</string>
<string name="storage_wizard_migrate_title" msgid="1363078147938160407">"Gegevens verpl. n. nieuwe opslag"</string>
- <string name="storage_wizard_migrate_body" msgid="890751699549542345">"Je kunt je foto\'s, bestanden en bepaalde apps verplaatsen naar deze nieuwe <xliff:g id="NAME">^1</xliff:g>. \n\nHet overzetten duurt ongeveer <xliff:g id="TIME">^2</xliff:g> en maakt <xliff:g id="SIZE">^3</xliff:g> intern geheugen vrij. Tijdens het overzetten werken sommige apps niet."</string>
+ <string name="storage_wizard_migrate_body" msgid="890751699549542345">"Je kunt je foto\'s, bestanden en bepaalde apps verplaatsen naar deze nieuwe <xliff:g id="NAME">^1</xliff:g>. \n\nHet overzetten duurt ongeveer <xliff:g id="TIME">^2</xliff:g> en maakt <xliff:g id="SIZE">^3</xliff:g> interne opslag vrij. Tijdens het overzetten werken sommige apps niet."</string>
<string name="storage_wizard_migrate_now" msgid="4523444323744239143">"Nu verplaatsen"</string>
<string name="storage_wizard_migrate_later" msgid="3173482328116026253">"Later verplaatsen"</string>
<string name="storage_wizard_migrate_confirm_title" msgid="8564833529613286965">"Gegevens nu verplaatsen"</string>
@@ -1494,7 +1494,7 @@
<string name="not_installed" msgid="2797554494953450291">"Niet geïnstalleerd voor deze gebruiker"</string>
<string name="no_applications" msgid="7336588977497084921">"Geen apps."</string>
<string name="internal_storage" msgid="1584700623164275282">"Interne opslag"</string>
- <string name="internal_storage_sentence" msgid="889098931914857143">"intern geheugen"</string>
+ <string name="internal_storage_sentence" msgid="889098931914857143">"interne opslag"</string>
<string name="sd_card_storage" product="nosdcard" msgid="2673203150465132465">"USB-opslag"</string>
<string name="sd_card_storage" product="default" msgid="7623513618171928235">"SD-kaartopslag"</string>
<string name="recompute_size" msgid="7722567982831691718">"Grootte opnieuw berekenen..."</string>
@@ -2522,6 +2522,9 @@
<item quantity="other">%d verborgen items weergeven</item>
<item quantity="one">%d verborgen item weergeven</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Netwerk en internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Instellingen"</string>
<string name="search_menu" msgid="6283419262313758339">"Zoekinstellingen"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Zoekinstellingen"</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index e7c71d3..fb69f16 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">%d ਲੁਕੀਆਂ ਹੋਈਆਂ ਆਈਟਮਾਂ ਵਿਖਾਓ</item>
<item quantity="other">%d ਲੁਕੀਆਂ ਹੋਈਆਂ ਆਈਟਮਾਂ ਵਿਖਾਓ</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ਸੈਟਿੰਗਾਂ"</string>
<string name="search_menu" msgid="6283419262313758339">"ਖੋਜ ਸੈੱਟਿੰਗਜ਼"</string>
<string name="query_hint_text" msgid="3350700807437473939">"ਖੋਜ ਸੈਟਿੰਗਾਂ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9c2bda6..d2df975 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -2566,6 +2566,9 @@
<item quantity="other">Pokaż %d ukrytego elementu</item>
<item quantity="one">Pokaż %d ukryty element</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Sieć i internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Ustawienia"</string>
<string name="search_menu" msgid="6283419262313758339">"Ustawienia wyszukiwania"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Ustawienia wyszukiwania"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index c75ab4d..0cb1232 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">Mostrar %d item oculto</item>
<item quantity="other">Mostrar %d itens ocultos</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Configurações"</string>
<string name="search_menu" msgid="6283419262313758339">"Configurações de pesquisa"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Configurações de pesquisa"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index b4c96ef..c5826b4 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">Mostrar %d itens ocultos</item>
<item quantity="one">Mostrar %d item oculto</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Rede e Internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Definições"</string>
<string name="search_menu" msgid="6283419262313758339">"Definições de pesquisa"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Definições de pesquisa"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index c75ab4d..0cb1232 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">Mostrar %d item oculto</item>
<item quantity="other">Mostrar %d itens ocultos</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Configurações"</string>
<string name="search_menu" msgid="6283419262313758339">"Configurações de pesquisa"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Configurações de pesquisa"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index cde98cc..0e0e3e8 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -2544,6 +2544,9 @@
<item quantity="other">Afișați %d de elemente ascunse</item>
<item quantity="one">Afișați %d element ascuns</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Rețea și internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Setări"</string>
<string name="search_menu" msgid="6283419262313758339">"Setări de căutare"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Setări pentru căutare"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 726a8cb..4db3539 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -2566,6 +2566,10 @@
<item quantity="many">Показать %d скрытых объектов</item>
<item quantity="other">Показать %d скрытых объекта</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Настройки"</string>
<string name="search_menu" msgid="6283419262313758339">"Поиск настроек"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Поиск настроек"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 30d7a2e..3e6def6 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -1337,7 +1337,7 @@
<string name="location_access_summary" msgid="69031404093194341">"ඔබගෙන් අවසර ඉල්ලූ යෙදුම්වලට ඔබගේ ස්ථාන තොරතුරු භාවිතයට ඉඩ දෙන්න"</string>
<string name="location_sources_heading" msgid="1278732419851088319">"පිහිටීම් මූලාශ්ර"</string>
<string name="about_settings" product="tablet" msgid="593457295516533765">"ටැබ්ලටය පිලිබඳ"</string>
- <string name="about_settings" product="default" msgid="1743378368185371685">"දුරකථනය පිලිබඳ"</string>
+ <string name="about_settings" product="default" msgid="1743378368185371685">"දුරකථනය පිළිබඳ"</string>
<string name="about_settings" product="emulator" msgid="221313099578564438">"උපාංගය ගැන"</string>
<string name="about_settings_summary" msgid="3371517697156165959">"නීතිමය තොරතුරු, තත්වය, මෘදුකාංග අනුවාදය පෙන්වන්න"</string>
<string name="legal_information" msgid="5769301644270604095">"නීතිමය තොරතුරු"</string>
@@ -2524,6 +2524,9 @@
<item quantity="one">සඟවන ලද අයිතම %dක් පෙන්වන්න</item>
<item quantity="other">සඟවන ලද අයිතම %dක් පෙන්වන්න</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"ජාලය සහ අන්තර්ජාලය"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"සැකසීම්"</string>
<string name="search_menu" msgid="6283419262313758339">"සැකසීම් සොයන්න"</string>
<string name="query_hint_text" msgid="3350700807437473939">"සැකසීම් සොයන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b6fcb47..3ee888f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -2566,6 +2566,10 @@
<item quantity="other">Zobraziť %d skrytých položiek</item>
<item quantity="one">Zobraziť %d skrytú položku</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Nastavenia"</string>
<string name="search_menu" msgid="6283419262313758339">"Nastavenia vyhľadávania"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Nastavenia vyhľadávania"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 228a488..43fddc8 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -2566,6 +2566,10 @@
<item quantity="few">Pokaži %d skrite elemente</item>
<item quantity="other">Pokaži %d skritih elementov</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Nastavitve"</string>
<string name="search_menu" msgid="6283419262313758339">"Nastavitve iskanja"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Nastavitve iskanja"</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 616d476..bfb0248 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">Shfaq %d artikuj të fshehur</item>
<item quantity="one">Shfaq %d artikull të fshehur</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Cilësimet"</string>
<string name="search_menu" msgid="6283419262313758339">"Cilësimet e kërkimit"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Cilësimet e kërkimit"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 3a96d08..6719d16 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -378,8 +378,8 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="1863561601428695160">"Упс, то није сензор"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="5053971232594165142">"Користите сензор за отисак прста на уређају."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="3618021988442639280">"Регистрација није завршена"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="2942551158278899627">"Временско ограничење за регистрацију отиска прста је истекло. Покушајте поново."</string>
- <string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="3624760637222239293">"Регистрација отиска прста није успела. Покушајте поново или користите други прст."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="2942551158278899627">"Временско ограничење за регистрацију отиска прста је истекло. Пробајте поново."</string>
+ <string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="3624760637222239293">"Регистрација отиска прста није успела. Пробајте поново или користите други прст."</string>
<string name="fingerprint_enroll_button_add" msgid="6317978977419045463">"Додајте још један"</string>
<string name="fingerprint_enroll_button_next" msgid="6247009337616342759">"Даље"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="2624905914239271751">"Осим за откључавање телефона, отисак прста можете да користите и да бисте дали овлашћење за куповине и приступ апликацијама. "<annotation id="url">"Сазнајте више"</annotation></string>
@@ -504,7 +504,7 @@
<string name="unlock_change_lock_pattern_title" msgid="2044092014872741130">"Промена шаблона за откључавање"</string>
<string name="unlock_change_lock_pin_title" msgid="806629901095938484">"Промена PIN-а за откључавање"</string>
<string name="unlock_change_lock_password_title" msgid="5606298470358768865">"Промена лозинке за откључавање"</string>
- <string name="lock_profile_wipe_attempts" msgid="1216193652369039672">"Покушајте поново. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. покушај од <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
+ <string name="lock_profile_wipe_attempts" msgid="1216193652369039672">"Пробајте поново. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. покушај од <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
<string name="lock_profile_wipe_warning_title" msgid="2961600792367265036">"Последњи покушај"</string>
<string name="lock_profile_wipe_warning_content_pattern" msgid="8978031996247660921">"Ако у овом покушају унесете нетачан шаблон за Work, са овог уређаја ћемо уклонити профил за Work и повезане податке."</string>
<string name="lock_profile_wipe_warning_content_pin" msgid="7697973618542377880">"Ако у овом покушају унесете нетачан PIN за Work, са овог уређаја ћемо уклонити профил за Work и повезане податке."</string>
@@ -723,11 +723,11 @@
<string name="wifi_wps_complete" msgid="2388138550456729134">"WPS је успео. Повезивање на мрежу..."</string>
<string name="wifi_wps_connected" msgid="7153432445748931183">"Успостављена је веза са Wi-Fi мрежом <xliff:g id="NETWORK_NAME">%s</xliff:g>"</string>
<string name="wifi_wps_in_progress" msgid="3372311348221357944">"WPS је већ покренут и биће довршен за највише два минута"</string>
- <string name="wifi_wps_failed_generic" msgid="5668775022238832527">"WPS није успео. Покушајте поново за неколико минута."</string>
+ <string name="wifi_wps_failed_generic" msgid="5668775022238832527">"WPS није успео. Пробајте поново за неколико минута."</string>
<string name="wifi_wps_failed_wep" msgid="2702820087105284461">"Безбедносно подешавање бежичног рутера (WEP) није подржано"</string>
<string name="wifi_wps_failed_tkip" msgid="4282401586860713349">"Безбедносно подешавање бежичног рутера (TKIP) није подржано"</string>
- <string name="wifi_wps_failed_auth" msgid="1174614355181181958">"Потврда аутентичности није успела. Покушајте поново."</string>
- <string name="wifi_wps_failed_overlap" msgid="5159533685596844778">"Откривена је друга WPS сесија. Покушајте поново за неколико минута."</string>
+ <string name="wifi_wps_failed_auth" msgid="1174614355181181958">"Потврда аутентичности није успела. Пробајте поново."</string>
+ <string name="wifi_wps_failed_overlap" msgid="5159533685596844778">"Откривена је друга WPS сесија. Пробајте поново за неколико минута."</string>
<string name="wifi_ssid" msgid="5519636102673067319">"Име мреже"</string>
<string name="wifi_ssid_hint" msgid="897593601067321355">"Унесите SSID"</string>
<string name="wifi_security" msgid="6603611185592956936">"Безбедност"</string>
@@ -1101,8 +1101,8 @@
<string name="dlg_confirm_unmount_text" product="default" msgid="6998379994779187692">"Ако извадите SD картицу, неке апликације које користите ће се зауставити и можда неће бити доступне све док поново не ставите SD картицу."</string>
<string name="dlg_error_unmount_title" product="nosdcard" msgid="4642742385125426529"></string>
<string name="dlg_error_unmount_title" product="default" msgid="4642742385125426529"></string>
- <string name="dlg_error_unmount_text" product="nosdcard" msgid="9191518889746166147">"Није могуће искључити USB меморију. Покушајте поново касније."</string>
- <string name="dlg_error_unmount_text" product="default" msgid="3500976899159848422">"Није могуће искључити SD картицу. Покушајте поново касније."</string>
+ <string name="dlg_error_unmount_text" product="nosdcard" msgid="9191518889746166147">"Није могуће искључити USB меморију. Пробајте поново касније."</string>
+ <string name="dlg_error_unmount_text" product="default" msgid="3500976899159848422">"Није могуће искључити SD картицу. Пробајте поново касније."</string>
<string name="unmount_inform_text" product="nosdcard" msgid="7120241136790744265">"USB меморија ће бити искључена."</string>
<string name="unmount_inform_text" product="default" msgid="1904212716075458402">"SD картица ће бити искључена."</string>
<string name="sd_ejecting_title" msgid="8824572198034365468">"Ослобађање"</string>
@@ -1401,7 +1401,7 @@
<string name="lockpattern_recording_intro_header" msgid="308287052221942814">"Нацртајте шаблон за откључавање"</string>
<string name="lockpattern_recording_intro_footer" msgid="1118579101409152113">"Притисните „Мени“ да бисте добили помоћ."</string>
<string name="lockpattern_recording_inprogress" msgid="6667844062721656773">"Подигните прст када завршите"</string>
- <string name="lockpattern_recording_incorrect_too_short" msgid="1348234155120957561">"Повежите најмање <xliff:g id="NUMBER">%d</xliff:g> тачке. Покушајте поново."</string>
+ <string name="lockpattern_recording_incorrect_too_short" msgid="1348234155120957561">"Повежите најмање <xliff:g id="NUMBER">%d</xliff:g> тачке. Пробајте поново."</string>
<string name="lockpattern_pattern_entered_header" msgid="4316818983675591604">"Шаблон је снимљен"</string>
<string name="lockpattern_need_to_confirm" msgid="8054853451639221265">"Поново нацртајте шаблон да бисте потврдили"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="8455614172231880211">"Нови шаблон за откључавање"</string>
@@ -1420,7 +1420,7 @@
<string name="lockpattern_settings_choose_lock_pattern" msgid="1652352830005653447">"Подешавање шаблона за откључавање"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1123908306116495545">"Промени шаблон за откључавање"</string>
<string name="lockpattern_settings_help_how_to_record" msgid="2614673439060830433">"Како нацртати шаблон за откључавање"</string>
- <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="6909161623701848863">"Превише нетачних покушаја. Покушајте поново за <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
+ <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="6909161623701848863">"Превише нетачних покушаја. Пробајте поново за <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
<string name="activity_not_found" msgid="5551664692991605325">"Апликација није инсталирана на телефону."</string>
<string name="lock_settings_profile_title" msgid="2121876391814535295">"Безбедност профила за Work"</string>
<string name="lock_settings_profile_screen_lock_title" msgid="3334747927367115256">"Закључавање екрана за профил за Work"</string>
@@ -2313,7 +2313,7 @@
<string name="vpn_lockdown_summary" msgid="2200032066376720339">"Изаберите VPN профил са којим ћете увек бити повезани. Мрежни садржај ће бити дозвољен само када сте повезани са овим VPN-ом."</string>
<string name="vpn_lockdown_none" msgid="9214462857336483711">"Ниједан"</string>
<string name="vpn_lockdown_config_error" msgid="3898576754914217248">"Стално укључени VPN захтева IP адресу за сервер и DNS."</string>
- <string name="vpn_no_network" msgid="3050233675132726155">"Није успостављена мрежна веза. Покушајте поново касније."</string>
+ <string name="vpn_no_network" msgid="3050233675132726155">"Није успостављена мрежна веза. Пробајте поново касније."</string>
<string name="vpn_missing_cert" msgid="7972907102570411501">"Недостаје сертификат. Измените профил."</string>
<string name="trusted_credentials_system_tab" msgid="3984284264816924534">"Систем"</string>
<string name="trusted_credentials_user_tab" msgid="2244732111398939475">"Корисник"</string>
@@ -2544,6 +2544,9 @@
<item quantity="few">Прикажи %d скривене ставке</item>
<item quantity="other">Прикажи %d скривених ставки</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Мрежа и интернет"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Подешавања"</string>
<string name="search_menu" msgid="6283419262313758339">"Претражите подешавања"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Подешавања претраге"</string>
@@ -2594,7 +2597,7 @@
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Подесите Wi-Fi NFC ознаку"</string>
<string name="write_tag" msgid="8571858602896222537">"Напиши"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"Додирните ознаку да бисте писали..."</string>
- <string name="status_invalid_password" msgid="2575271864572897406">"Лозинка је неважећа. Покушајте поново."</string>
+ <string name="status_invalid_password" msgid="2575271864572897406">"Лозинка је неважећа. Пробајте поново."</string>
<string name="status_write_success" msgid="5228419086308251169">"Успели сте!"</string>
<string name="status_failed_to_write" msgid="8072752734686294718">"Није могуће писање података у NFC ознаку. Ако се проблем и даље јавља, покушајте са другом ознаком"</string>
<string name="status_tag_not_writable" msgid="2511611539977682175">"NFC ознака не подржава писање. Користите другу ознаку."</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 5a726b1..ba7a09f 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">Visa %d dolda objekt</item>
<item quantity="one">Visa %d dolt objekt</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Inställningar"</string>
<string name="search_menu" msgid="6283419262313758339">"Sökinställningar"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Sökinställningar"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 0d2ddc8..49c1192 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -2528,6 +2528,9 @@
<item quantity="other">Onyesha vipengee %d vilivyofichwa</item>
<item quantity="one">Onyesha kipengee %d kilichofichwa</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Mtandao na Intaneti"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Mipangilio"</string>
<string name="search_menu" msgid="6283419262313758339">"Mipangilio ya utafutaji"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Mipangilio ya utafutaji"</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 26f3e39..2ce5f8e 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">மறைந்துள்ள %d உருப்படிகளைக் காட்டு</item>
<item quantity="one">மறைந்துள்ள %d உருப்படியைக் காட்டு</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"அமைப்பு"</string>
<string name="search_menu" msgid="6283419262313758339">"தேடல் அமைப்புகள்"</string>
<string name="query_hint_text" msgid="3350700807437473939">"தேடல் அமைப்பு"</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 66cbb9e..b3a66c2 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">%d దాచబడిన అంశాలను చూపుతుంది</item>
<item quantity="one">%d దాచబడిన అంశాన్ని చూపుతుంది</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"నెట్వర్క్ & ఇంటర్నెట్"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"సెట్టింగ్లు"</string>
<string name="search_menu" msgid="6283419262313758339">"శోధన సెట్టింగ్లు"</string>
<string name="query_hint_text" msgid="3350700807437473939">"శోధన సెట్టింగ్లు"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index b15427e..48dc1e0 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">แสดงรายการที่ซ่อน %d รายการ</item>
<item quantity="one">แสดงรายการที่ซ่อน %d รายการ</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"การตั้งค่า"</string>
<string name="search_menu" msgid="6283419262313758339">"การตั้งค่าการค้นหา"</string>
<string name="query_hint_text" msgid="3350700807437473939">"การตั้งค่าการค้นหา"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b5e1aa6..ef5bd80 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="one">Ipakita ang %d nakatagong item</item>
<item quantity="other">Ipakita ang %d na nakatagong item</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Mga Setting"</string>
<string name="search_menu" msgid="6283419262313758339">"Mga setting ng paghahanap"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Mga setting ng paghahanap"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 595fd29..466e807 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">Gizli %d öğeyi göster</item>
<item quantity="one">Gizli %d öğeyi göster</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Ayarlar"</string>
<string name="search_menu" msgid="6283419262313758339">"Arama ayarları"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Arama ayarları"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 5718656..029e8f1 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -2566,6 +2566,9 @@
<item quantity="many">Показати %d схованих елементів</item>
<item quantity="other">Показати %d схованого елемента</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Мережа й Інтернет"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Налаштування"</string>
<string name="search_menu" msgid="6283419262313758339">"Налаштування пошуку"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Налаштуваня пошуку"</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 277eeb8..a1f8577 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -2510,6 +2510,10 @@
<string name="dashboard_title" msgid="5453710313046681820">"ترتیبات"</string>
<!-- String.format failed for translation -->
<!-- no translation found for settings_suggestion_header_summary_hidden_items (5597356221942118048) -->
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"ترتیبات"</string>
<string name="search_menu" msgid="6283419262313758339">"تلاش کی ترتیبات"</string>
<string name="query_hint_text" msgid="3350700807437473939">"تلاش کی ترتیبات"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 395a726..f91c669 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -2522,6 +2522,9 @@
<item quantity="other">%d ta yashirin elementni ko‘rsatish</item>
<item quantity="one">%d ta yashirin elementni ko‘rsatish</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Tarmoq va internet"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Sozlamalar"</string>
<string name="search_menu" msgid="6283419262313758339">"Qidiruv sozlamalari"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Qidiruv sozlamalari"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 7aedfec..a80021a 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -2522,6 +2522,10 @@
<item quantity="other">Hiển thị %d mục ẩn</item>
<item quantity="one">Hiển thị %d mục ẩn</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Cài đặt"</string>
<string name="search_menu" msgid="6283419262313758339">"Cài đặt tìm kiếm"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Cài đặt tìm kiếm"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ce977ea..0659350 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -726,7 +726,7 @@
<string name="wifi_status" msgid="4824568012414605414">"状态信息"</string>
<string name="wifi_speed" msgid="3526198708812322037">"连接速度"</string>
<string name="wifi_frequency" msgid="7791090119577812214">"频率"</string>
- <string name="wifi_ip_address" msgid="1440054061044402918">"IP地址"</string>
+ <string name="wifi_ip_address" msgid="1440054061044402918">"IP 地址"</string>
<string name="passpoint_label" msgid="6381371313076009926">"保存方式:"</string>
<string name="passpoint_content" msgid="8447207162397870483">"<xliff:g id="NAME">%1$s</xliff:g>凭据"</string>
<string name="wifi_eap_method" msgid="8529436133640730382">"EAP方法"</string>
@@ -790,7 +790,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"高级WLAN"</string>
<string name="wifi_configure_titlebar" msgid="7977475161589303074">"配置 WLAN"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"MAC地址"</string>
- <string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"IP地址"</string>
+ <string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"IP 地址"</string>
<string name="wifi_saved_access_points_label" msgid="2013409399392285262">"已保存的网络"</string>
<string name="wifi_advanced_settings_label" msgid="3654366894867838338">"IP 设置"</string>
<string name="wifi_advanced_not_available" msgid="5823045095444154586">"此用户无法查看或修改 WLAN 网络高级设置"</string>
@@ -2522,6 +2522,10 @@
<item quantity="other">显示 %d 项隐藏内容</item>
<item quantity="one">显示 %d 项隐藏内容</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"设置"</string>
<string name="search_menu" msgid="6283419262313758339">"搜索设置"</string>
<string name="query_hint_text" msgid="3350700807437473939">"搜索设置"</string>
@@ -2805,7 +2809,7 @@
<string name="encrypt_talkback_dialog_message_pattern" msgid="2020083142199612743">"当您绘制解锁图案以启动此设备时,<xliff:g id="SERVICE">%1$s</xliff:g>等无障碍服务还未开启。"</string>
<string name="encrypt_talkback_dialog_message_password" msgid="4155875981789127796">"当您输入密码以启动此设备时,<xliff:g id="SERVICE">%1$s</xliff:g>等无障碍服务还未开启。"</string>
<string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"注意:重新启动后,您必须将手机解锁才能运行此应用"</string>
- <string name="imei_information_title" msgid="8499085421609752290">"IMEI信息"</string>
+ <string name="imei_information_title" msgid="8499085421609752290">"IMEI 信息"</string>
<string name="imei_information_summary" msgid="2074095606556565233">"IMEI相关信息"</string>
<string name="slot_number" msgid="3762676044904653577">"(插槽<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
<string name="launch_by_default" msgid="1840761193189009248">"默认打开"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index c95af14..70ccbbf 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -2527,6 +2527,10 @@
<item quantity="other">顯示 %d 個隱藏項目</item>
<item quantity="one">顯示 %d 個隱藏項目</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"設定"</string>
<string name="search_menu" msgid="6283419262313758339">"搜尋設定"</string>
<string name="query_hint_text" msgid="3350700807437473939">"搜尋設定"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index aa95a87..17c3237 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -2526,6 +2526,10 @@
<item quantity="other">顯示 %d 個隱藏項目</item>
<item quantity="one">顯示 %d 個隱藏項目</item>
</plurals>
+ <!-- no translation found for network_dashboard_title (4771589228992391573) -->
+ <skip />
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"設定"</string>
<string name="search_menu" msgid="6283419262313758339">"搜尋設定"</string>
<string name="query_hint_text" msgid="3350700807437473939">"搜尋設定"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 6e3dd1d..6f7ca7b 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -2523,6 +2523,9 @@
<item quantity="one">Bonisa izinto ezingu-%d ezifihliwe</item>
<item quantity="other">Bonisa izinto ezingu-%d ezifihliwe</item>
</plurals>
+ <string name="network_dashboard_title" msgid="4771589228992391573">"Inethiwekhi ye-inthanethi"</string>
+ <!-- no translation found for connected_devices_dashboard_title (2355264951438890709) -->
+ <skip />
<string name="search_results_title" msgid="1796252422574886932">"Izilungiselelo"</string>
<string name="search_menu" msgid="6283419262313758339">"Izilungiselelo zokusesha"</string>
<string name="query_hint_text" msgid="3350700807437473939">"Izilungiselelo zokusesha"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 64f61e2..8e6336f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5335,9 +5335,19 @@
<!-- Button label to forget a VPN profile [CHAR LIMIT=40] -->
<string name="vpn_forget_long">Forget VPN</string>
<!-- Dialog message title to set another VPN app to be always-on [CHAR LIMIT=40] -->
- <string name="vpn_replace_always_on_vpn_title">Replace existing VPN?</string>
+ <string name="vpn_replace_vpn_title">Replace existing VPN?</string>
+ <!-- Dialog message title to set always-on VPN when another app was not already set. -->
+ <string name="vpn_set_vpn_title">Set always-on VPN?</string>
+ <!-- Dialog message body to explain that always-on VPN will disable network traffic while the VPN is connecting. -->
+ <string name="vpn_first_always_on_vpn_message">By turning on this setting, you won\'t have an Internet connection until the VPN successfully connects</string>
+ <!-- Dialog message body to explain that always-on VPN will disable network traffic while the VPN is connecting, and that this will replace the current VPN. -->
+ <string name="vpn_replace_always_on_vpn_enable_message">Your existing VPN will be replaced, and you won\'t have an Internet connection until the VPN successfully connects</string>
+ <!-- Dialog message body to connect a VPN app, replacing another VPN app that is already always-on [CHAR LIMIT=NONE] -->
+ <string name="vpn_replace_always_on_vpn_disable_message">You\'re already connected to an always-on VPN. If you connect to a different one, your existing VPN will be replaced, and always-on mode will turn off.</string>
<!-- Dialog message body to set another VPN app to be always-on [CHAR LIMIT=NONE] -->
- <string name="vpn_replace_always_on_vpn_message">You\'re already connected to a VPN. If you connect to a different one, your existing VPN will be replaced.</string>
+ <string name="vpn_replace_vpn_message">You\'re already connected to a VPN. If you connect to a different one, your existing VPN will be replaced.</string>
+ <!-- Dialog action button to turn on a VPN. -->
+ <string name="vpn_turn_on">Turn on</string>
<!-- Dialog mesage title when the user can't connect an always-on vpn [CHAR LIMIT=NONE] -->
<string name="vpn_cant_connect_title"><xliff:g id="vpn_name" example="OpenVPN">%1$s</xliff:g> can\'t connect</string>
<!-- Dialog message subtitle when the user can't connect an always-on vpn [CHAR LIMIT=NONE] -->
diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml
index e990f9d..bce5dd9 100644
--- a/res/xml/network_and_internet.xml
+++ b/res/xml/network_and_internet.xml
@@ -54,4 +54,30 @@
settings:userRestriction="no_config_vpn"
settings:useAdminDisabledSummary="true"/>
+ <com.android.settingslib.RestrictedPreference
+ android:key="manage_mobile_plan"
+ android:title="@string/manage_mobile_plan_title"
+ android:persistent="false"
+ settings:userRestriction="no_config_mobile_networks"
+ settings:useAdminDisabledSummary="true"/>
+
+ <Preference
+ android:key="wifi_calling_settings"
+ android:title="@string/wifi_calling_settings_title"
+ android:fragment="com.android.settings.WifiCallingSettings"
+ settings:keywords="@string/keywords_wifi_calling"/>
+
+ <Preference
+ android:fragment="com.android.settings.ProxySelector"
+ android:key="proxy_settings"
+ android:title="@string/proxy_settings_title"/>
+
+ <!-- Network reset -->
+ <com.android.settingslib.RestrictedPreference
+ android:key="network_reset"
+ android:title="@string/reset_network_title"
+ settings:keywords="@string/keywords_network_reset"
+ android:fragment="com.android.settings.ResetNetwork"
+ settings:userRestriction="no_network_reset"
+ settings:useAdminDisabledSummary="true"/>
</PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 9349c13..06858b7 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -752,7 +752,9 @@
}
private void removeManagedProfileFingerprintsAndFinishIfNecessary(final int parentUserId) {
- mFingerprintManager.setActiveUser(UserHandle.myUserId());
+ if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) {
+ mFingerprintManager.setActiveUser(UserHandle.myUserId());
+ }
final UserManager um = UserManager.get(getActivity());
boolean hasChildProfile = false;
if (!um.getUserInfo(parentUserId).isManagedProfile()) {
@@ -791,7 +793,12 @@
}
private int getResIdForFactoryResetProtectionWarningMessage() {
- boolean hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(mUserId);
+ final boolean hasFingerprints;
+ if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) {
+ hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(mUserId);
+ } else {
+ hasFingerprints = false;
+ }
boolean isProfile = UserManager.get(getActivity()).isManagedProfile(mUserId);
switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index e41502c..32aaaf0 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -1707,11 +1707,10 @@
private void writeUsbConfigurationOption(Object newValue) {
UsbManager manager = (UsbManager)getActivity().getSystemService(Context.USB_SERVICE);
String function = newValue.toString();
- manager.setCurrentFunction(function);
if (function.equals("none")) {
- manager.setUsbDataUnlocked(false);
+ manager.setCurrentFunction(function, false);
} else {
- manager.setUsbDataUnlocked(true);
+ manager.setCurrentFunction(function, true);
}
}
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/WifiCallingSettings.java
index 5453b5e..e18f022 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/WifiCallingSettings.java
@@ -443,7 +443,7 @@
return true;
}
- static int getWfcModeSummary(Context context, int wfcMode) {
+ public static int getWfcModeSummary(Context context, int wfcMode) {
int resId = com.android.internal.R.string.wifi_calling_off_summary;
if (ImsManager.isWfcEnabledByUser(context)) {
switch (wfcMode) {
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 99e9ac5..cac964d 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -20,37 +20,30 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.admin.DevicePolicyManager;
-import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.res.Resources;
import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
-import android.nfc.NfcAdapter;
-import android.nfc.NfcManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
-import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.telephony.TelephonyManager;
-import android.text.TextUtils;
import android.util.Log;
-import com.android.ims.ImsManager;
import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.network.AirplaneModePreferenceController;
import com.android.settings.network.MobileNetworkPreferenceController;
+import com.android.settings.network.MobilePlanPreferenceController;
+import com.android.settings.network.NetworkResetPreferenceController;
+import com.android.settings.network.ProxyPreferenceController;
import com.android.settings.network.TetherPreferenceController;
import com.android.settings.network.VpnPreferenceController;
-import com.android.settings.nfc.NfcEnabler;
+import com.android.settings.network.WifiCallingPreferenceController;
+import com.android.settings.nfc.NfcPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.RestrictedLockUtils;
@@ -61,33 +54,26 @@
import java.util.Collections;
import java.util.List;
-public class WirelessSettings extends SettingsPreferenceFragment implements Indexable {
+import static com.android.settings.network.MobilePlanPreferenceController
+ .MANAGE_MOBILE_PLAN_DIALOG_ID;
+
+public class WirelessSettings extends SettingsPreferenceFragment implements Indexable,
+ MobilePlanPreferenceController.MobilePlanPreferenceHost {
private static final String TAG = "WirelessSettings";
- private static final String KEY_TOGGLE_NFC = "toggle_nfc";
private static final String KEY_WIMAX_SETTINGS = "wimax_settings";
- private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
- private static final String KEY_PROXY_SETTINGS = "proxy_settings";
-
- private static final String KEY_MANAGE_MOBILE_PLAN = "manage_mobile_plan";
- private static final String KEY_WFC_SETTINGS = "wifi_calling_settings";
- private static final String KEY_NETWORK_RESET = "network_reset";
- private NfcEnabler mNfcEnabler;
- private NfcAdapter mNfcAdapter;
-
- private ConnectivityManager mCm;
- private TelephonyManager mTm;
private UserManager mUm;
- private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
- private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
-
- private PreferenceScreen mButtonWfc;
private AirplaneModePreferenceController mAirplaneModePreferenceController;
private TetherPreferenceController mTetherPreferenceController;
private MobileNetworkPreferenceController mMobileNetworkPreferenceController;
private VpnPreferenceController mVpnPreferenceController;
+ private NetworkResetPreferenceController mNetworkResetPreferenceController;
+ private WifiCallingPreferenceController mWifiCallingPreferenceController;
+ private ProxyPreferenceController mProxyPreferenceController;
+ private MobilePlanPreferenceController mMobilePlanPreferenceController;
+ private NfcPreferenceController mNfcPreferenceController;
/**
* Invoked on each preference click in this hierarchy, overrides
@@ -100,96 +86,31 @@
if (mAirplaneModePreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
- if (preference == findPreference(KEY_MANAGE_MOBILE_PLAN)) {
- onManageMobilePlanClick();
+ if (mMobilePlanPreferenceController.handlePreferenceTreeClick(preference)) {
+ return true;
}
// Let the intents be launched by the Preference manager
return super.onPreferenceTreeClick(preference);
}
- private String mManageMobilePlanMessage;
- public void onManageMobilePlanClick() {
- log("onManageMobilePlanClick:");
- mManageMobilePlanMessage = null;
- Resources resources = getActivity().getResources();
-
- NetworkInfo ni = mCm.getActiveNetworkInfo();
- if (mTm.hasIccCard() && (ni != null)) {
- // Check for carrier apps that can handle provisioning first
- Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
- List<String> carrierPackages =
- mTm.getCarrierPackageNamesForIntent(provisioningIntent);
- if (carrierPackages != null && !carrierPackages.isEmpty()) {
- if (carrierPackages.size() != 1) {
- Log.w(TAG, "Multiple matching carrier apps found, launching the first.");
- }
- provisioningIntent.setPackage(carrierPackages.get(0));
- startActivity(provisioningIntent);
- return;
- }
-
- // Get provisioning URL
- String url = mCm.getMobileProvisioningUrl();
- if (!TextUtils.isEmpty(url)) {
- Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
- Intent.CATEGORY_APP_BROWSER);
- intent.setData(Uri.parse(url));
- intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
- Intent.FLAG_ACTIVITY_NEW_TASK);
- try {
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Log.w(TAG, "onManageMobilePlanClick: startActivity failed" + e);
- }
- } else {
- // No provisioning URL
- String operatorName = mTm.getSimOperatorName();
- if (TextUtils.isEmpty(operatorName)) {
- // Use NetworkOperatorName as second choice in case there is no
- // SPN (Service Provider Name on the SIM). Such as with T-mobile.
- operatorName = mTm.getNetworkOperatorName();
- if (TextUtils.isEmpty(operatorName)) {
- mManageMobilePlanMessage = resources.getString(
- R.string.mobile_unknown_sim_operator);
- } else {
- mManageMobilePlanMessage = resources.getString(
- R.string.mobile_no_provisioning_url, operatorName);
- }
- } else {
- mManageMobilePlanMessage = resources.getString(
- R.string.mobile_no_provisioning_url, operatorName);
- }
- }
- } else if (mTm.hasIccCard() == false) {
- // No sim card
- mManageMobilePlanMessage = resources.getString(R.string.mobile_insert_sim_card);
- } else {
- // NetworkInfo is null, there is no connection
- mManageMobilePlanMessage = resources.getString(R.string.mobile_connect_to_internet);
- }
- if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
- log("onManageMobilePlanClick: message=" + mManageMobilePlanMessage);
- showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
- }
- }
-
@Override
public Dialog onCreateDialog(int dialogId) {
log("onCreateDialog: dialogId=" + dialogId);
switch (dialogId) {
case MANAGE_MOBILE_PLAN_DIALOG_ID:
return new AlertDialog.Builder(getActivity())
- .setMessage(mManageMobilePlanMessage)
- .setCancelable(false)
- .setPositiveButton(com.android.internal.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
- mManageMobilePlanMessage = null;
- }
- })
- .create();
+ .setMessage(mMobilePlanPreferenceController.getMobilePlanDialogMessage())
+ .setCancelable(false)
+ .setPositiveButton(com.android.internal.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
+ mMobilePlanPreferenceController
+ .setMobilePlanDialogMessage(null);
+ }
+ })
+ .create();
}
return super.onCreateDialog(dialogId);
}
@@ -215,13 +136,6 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (savedInstanceState != null) {
- mManageMobilePlanMessage = savedInstanceState.getString(SAVED_MANAGE_MOBILE_PLAN_MSG);
- }
- log("onCreate: mManageMobilePlanMessage=" + mManageMobilePlanMessage);
-
- mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- mTm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mUm = (UserManager) getSystemService(Context.USER_SERVICE);
addPreferencesFromResource(R.xml.wireless_settings);
@@ -235,19 +149,23 @@
mTetherPreferenceController = new TetherPreferenceController(activity);
mMobileNetworkPreferenceController = new MobileNetworkPreferenceController(activity);
mVpnPreferenceController = new VpnPreferenceController(activity);
+ mWifiCallingPreferenceController = new WifiCallingPreferenceController(activity);
+ mNetworkResetPreferenceController = new NetworkResetPreferenceController(activity);
+ mProxyPreferenceController = new ProxyPreferenceController(activity);
+ mMobilePlanPreferenceController = new MobilePlanPreferenceController(activity, this);
+ mNfcPreferenceController = new NfcPreferenceController(activity);
+
+ mMobilePlanPreferenceController.onCreate(savedInstanceState);
mAirplaneModePreferenceController.displayPreference(screen);
mTetherPreferenceController.displayPreference(screen);
mMobileNetworkPreferenceController.displayPreference(screen);
mVpnPreferenceController.displayPreference(screen);
-
- SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC);
- RestrictedPreference androidBeam = (RestrictedPreference) findPreference(
- KEY_ANDROID_BEAM_SETTINGS);
-
- mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
-
- mButtonWfc = (PreferenceScreen) findPreference(KEY_WFC_SETTINGS);
+ mWifiCallingPreferenceController.displayPreference(screen);
+ mNetworkResetPreferenceController.displayPreference(screen);
+ mProxyPreferenceController.displayPreference(screen);
+ mMobilePlanPreferenceController.displayPreference(screen);
+ mNfcPreferenceController.displayPreference(screen);
String toggleable = Settings.Global.getString(activity.getContentResolver(),
Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
@@ -261,60 +179,12 @@
Preference ps = findPreference(KEY_WIMAX_SETTINGS);
if (ps != null) root.removePreference(ps);
} else {
- if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX )
+ if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX)
&& isWimaxEnabled) {
Preference ps = findPreference(KEY_WIMAX_SETTINGS);
ps.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
}
}
-
- // Manually set dependencies for NFC when not toggleable.
- if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) {
- findPreference(KEY_TOGGLE_NFC).setDependency(
- AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
- findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency(
- AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
- }
-
- // Remove NFC if not available
- mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
- if (mNfcAdapter == null) {
- getPreferenceScreen().removePreference(nfc);
- getPreferenceScreen().removePreference(androidBeam);
- mNfcEnabler = null;
- }
-
- // Remove Mobile Network Settings and Manage Mobile Plan for secondary users,
- // if it's a wifi-only device.
- if (!isAdmin || Utils.isWifiOnly(getActivity()) ||
- RestrictedLockUtils.hasBaseUserRestriction(activity,
- UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
- removePreference(KEY_MANAGE_MOBILE_PLAN);
- }
- // Remove Mobile Network Settings and Manage Mobile Plan
- // if config_show_mobile_plan sets false.
- final boolean isMobilePlanEnabled = this.getResources().getBoolean(
- R.bool.config_show_mobile_plan);
- if (!isMobilePlanEnabled) {
- Preference pref = findPreference(KEY_MANAGE_MOBILE_PLAN);
- if (pref != null) {
- removePreference(KEY_MANAGE_MOBILE_PLAN);
- }
- }
-
- // Enable Proxy selector settings if allowed.
- Preference mGlobalProxy = findPreference(KEY_PROXY_SETTINGS);
- final DevicePolicyManager mDPM = (DevicePolicyManager)
- activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
- // proxy UI disabled until we have better app support
- getPreferenceScreen().removePreference(mGlobalProxy);
- mGlobalProxy.setEnabled(mDPM.getGlobalProxyAdmin() == null);
-
- // Remove network reset if not allowed
- if (RestrictedLockUtils.hasBaseUserRestriction(activity,
- UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
- removePreference(KEY_NETWORK_RESET);
- }
}
@Override
@@ -322,39 +192,20 @@
super.onResume();
mAirplaneModePreferenceController.onResume();
- if (mNfcEnabler != null) {
- mNfcEnabler.resume();
- }
-
- // update WFC setting
- final Context context = getActivity();
- if (ImsManager.isWfcEnabledByPlatform(context) &&
- ImsManager.isWfcProvisionedOnDevice(context)) {
- getPreferenceScreen().addPreference(mButtonWfc);
-
- mButtonWfc.setSummary(WifiCallingSettings.getWfcModeSummary(
- context, ImsManager.getWfcMode(context, mTm.isNetworkRoaming())));
- } else {
- removePreference(KEY_WFC_SETTINGS);
- }
+ mNfcPreferenceController.onResume();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
-
- if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
- outState.putString(SAVED_MANAGE_MOBILE_PLAN_MSG, mManageMobilePlanMessage);
- }
+ mMobilePlanPreferenceController.onSaveInstanceState(outState);
}
@Override
public void onPause() {
super.onPause();
mAirplaneModePreferenceController.onPause();
- if (mNfcEnabler != null) {
- mNfcEnabler.pause();
- }
+ mNfcPreferenceController.onPause();
}
@Override
@@ -364,6 +215,11 @@
}
@Override
+ public void showMobilePlanMessageDialog() {
+ showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
+ }
+
+ @Override
protected int getHelpResource() {
return R.string.help_url_more_networks;
}
@@ -372,79 +228,51 @@
* For Search.
*/
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(
- Context context, boolean enabled) {
- // Remove wireless settings from search in demo mode
- if (UserManager.isDeviceInDemoMode(context)) {
- return Collections.emptyList();
- }
- SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.wireless_settings;
- return Arrays.asList(sir);
- }
-
- @Override
- public List<String> getNonIndexableKeys(Context context) {
- final ArrayList<String> result = new ArrayList<String>();
-
- final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
- final boolean isSecondaryUser = !um.isAdminUser();
- final boolean isWimaxEnabled = !isSecondaryUser
- && context.getResources().getBoolean(
- com.android.internal.R.bool.config_wimaxEnabled);
- if (!isWimaxEnabled) {
- result.add(KEY_WIMAX_SETTINGS);
- }
-
- new VpnPreferenceController(context).updateNonIndexableKeys(result);
-
- // Remove NFC if not available
- final NfcManager manager = (NfcManager)
- context.getSystemService(Context.NFC_SERVICE);
- if (manager != null) {
- NfcAdapter adapter = manager.getDefaultAdapter();
- if (adapter == null) {
- result.add(KEY_TOGGLE_NFC);
- result.add(KEY_ANDROID_BEAM_SETTINGS);
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(
+ Context context, boolean enabled) {
+ // Remove wireless settings from search in demo mode
+ if (UserManager.isDeviceInDemoMode(context)) {
+ return Collections.emptyList();
}
+ SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.wireless_settings;
+ return Arrays.asList(sir);
}
- // Remove Mobile Network Settings and Manage Mobile Plan if it's a wifi-only device.
- if (isSecondaryUser || Utils.isWifiOnly(context)) {
- result.add(KEY_MANAGE_MOBILE_PLAN);
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ final ArrayList<String> result = new ArrayList<String>();
+
+ final UserManager um = (UserManager) context.getSystemService(
+ Context.USER_SERVICE);
+ final boolean isSecondaryUser = !um.isAdminUser();
+ final boolean isWimaxEnabled = !isSecondaryUser
+ && context.getResources().getBoolean(
+ com.android.internal.R.bool.config_wimaxEnabled);
+ if (!isWimaxEnabled) {
+ result.add(KEY_WIMAX_SETTINGS);
+ }
+
+ new VpnPreferenceController(context).updateNonIndexableKeys(result);
+
+ new NfcPreferenceController(context).updateNonIndexableKeys(result);
+ new MobilePlanPreferenceController(context, null /* MobilePlanClickHandler */)
+ .updateNonIndexableKeys(result);
+ new MobileNetworkPreferenceController(context).updateNonIndexableKeys(result);
+
+ // Remove Airplane Mode settings if it's a stationary device such as a TV.
+ new AirplaneModePreferenceController(context, null /* fragment */)
+ .updateNonIndexableKeys(result);
+
+ new ProxyPreferenceController(context).updateNonIndexableKeys(result);
+
+ new TetherPreferenceController(context).updateNonIndexableKeys(result);
+ new WifiCallingPreferenceController(context).updateNonIndexableKeys(result);
+ new NetworkResetPreferenceController(context).updateNonIndexableKeys(result);
+
+ return result;
}
- new MobileNetworkPreferenceController(context).updateNonIndexableKeys(result);
-
- // Remove Mobile Network Settings and Manage Mobile Plan
- // if config_show_mobile_plan sets false.
- final boolean isMobilePlanEnabled = context.getResources().getBoolean(
- R.bool.config_show_mobile_plan);
- if (!isMobilePlanEnabled) {
- result.add(KEY_MANAGE_MOBILE_PLAN);
- }
- // Remove Airplane Mode settings if it's a stationary device such as a TV.
- new AirplaneModePreferenceController(context, null /* fragment */)
- .updateNonIndexableKeys(result);
-
- // proxy UI disabled until we have better app support
- result.add(KEY_PROXY_SETTINGS);
-
- new TetherPreferenceController(context)
- .updateNonIndexableKeys(result);
-
- if (!ImsManager.isWfcEnabledByPlatform(context) ||
- !ImsManager.isWfcProvisionedOnDevice(context)) {
- result.add(KEY_WFC_SETTINGS);
- }
-
- if (RestrictedLockUtils.hasBaseUserRestriction(context,
- UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
- result.add(KEY_NETWORK_RESET);
- }
-
- return result;
- }
- };
+ };
}
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index 771f9ba..b913669 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -20,8 +20,10 @@
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.nfc.NfcPreferenceController;
import com.android.settingslib.drawer.CategoryKey;
+import java.util.ArrayList;
import java.util.List;
public class ConnectedDeviceDashboardFragment extends DashboardFragment {
@@ -50,7 +52,12 @@
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
- return null;
+ final NfcPreferenceController nfcPreferenceController =
+ new NfcPreferenceController(context);
+ getLifecycle().addObserver(nfcPreferenceController);
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(nfcPreferenceController);
+ return controllers;
}
}
\ No newline at end of file
diff --git a/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java b/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
index 101f1b5..65b33df 100644
--- a/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
+++ b/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
@@ -21,13 +21,13 @@
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.text.TextUtils;
-import android.util.ArraySet;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.overlay.FeatureFactory;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentSkipListSet;
public class SharedPreferencesLogger implements SharedPreferences {
@@ -40,7 +40,7 @@
mContext = context;
mTag = tag;
mMetricsFeature = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
- mPreferenceKeySet = new ArraySet<>();
+ mPreferenceKeySet = new ConcurrentSkipListSet<>();
}
@Override
@@ -99,8 +99,12 @@
}
private void logValue(String key, String value) {
+ logValue(key, value, false /* forceLog */);
+ }
+
+ private void logValue(String key, String value, boolean forceLog) {
final String prefKey = mTag + "/" + key;
- if (!mPreferenceKeySet.contains(prefKey)) {
+ if (!forceLog && !mPreferenceKeySet.contains(prefKey)) {
// Pref key doesn't exist in set, this is initial display so we skip metrics but
// keeps track of this key.
mPreferenceKeySet.add(prefKey);
@@ -138,8 +142,9 @@
pm.getPackageInfo(value, PackageManager.MATCH_UNINSTALLED_PACKAGES);
logPackageName(key, value);
} catch (PackageManager.NameNotFoundException e) {
- // Clearly not a package, lets log it.
- logValue(key, value);
+ // Clearly not a package, and it's unlikely this preference is in prefSet, so
+ // lets force log it.
+ logValue(key, value, true /* forceLog */);
}
return null;
}
diff --git a/src/com/android/settings/core/lifecycle/Lifecycle.java b/src/com/android/settings/core/lifecycle/Lifecycle.java
index c1d6457..c47f97e 100644
--- a/src/com/android/settings/core/lifecycle/Lifecycle.java
+++ b/src/com/android/settings/core/lifecycle/Lifecycle.java
@@ -17,11 +17,14 @@
import android.annotation.UiThread;
import android.content.Context;
+import android.os.Bundle;
import com.android.settings.core.lifecycle.events.OnAttach;
+import com.android.settings.core.lifecycle.events.OnCreate;
import com.android.settings.core.lifecycle.events.OnDestroy;
import com.android.settings.core.lifecycle.events.OnPause;
import com.android.settings.core.lifecycle.events.OnResume;
+import com.android.settings.core.lifecycle.events.OnSaveInstanceState;
import com.android.settings.core.lifecycle.events.OnStart;
import com.android.settings.core.lifecycle.events.OnStop;
import com.android.settings.utils.ThreadUtils;
@@ -54,6 +57,14 @@
}
}
+ public void onCreate(Bundle savedInstanceState) {
+ for (LifecycleObserver observer : mObservers) {
+ if (observer instanceof OnCreate) {
+ ((OnCreate) observer).onCreate(savedInstanceState);
+ }
+ }
+ }
+
public void onStart() {
for (LifecycleObserver observer : mObservers) {
if (observer instanceof OnStart) {
@@ -78,6 +89,14 @@
}
}
+ public void onSaveInstanceState(Bundle outState) {
+ for (LifecycleObserver observer : mObservers) {
+ if (observer instanceof OnSaveInstanceState) {
+ ((OnSaveInstanceState) observer).onSaveInstanceState(outState);
+ }
+ }
+ }
+
public void onStop() {
for (LifecycleObserver observer : mObservers) {
if (observer instanceof OnStop) {
diff --git a/src/com/android/settings/core/lifecycle/ObservablePreferenceFragment.java b/src/com/android/settings/core/lifecycle/ObservablePreferenceFragment.java
index dff1d8f..e9822af 100644
--- a/src/com/android/settings/core/lifecycle/ObservablePreferenceFragment.java
+++ b/src/com/android/settings/core/lifecycle/ObservablePreferenceFragment.java
@@ -18,6 +18,7 @@
import android.annotation.CallSuper;
import android.content.Context;
+import android.os.Bundle;
import android.support.v14.preference.PreferenceFragment;
/**
@@ -40,6 +41,20 @@
@CallSuper
@Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mLifecycle.onCreate(savedInstanceState);
+ }
+
+ @CallSuper
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mLifecycle.onSaveInstanceState(outState);
+ }
+
+ @CallSuper
+ @Override
public void onStart() {
mLifecycle.onStart();
super.onStart();
diff --git a/src/com/android/settings/core/lifecycle/events/OnCreate.java b/src/com/android/settings/core/lifecycle/events/OnCreate.java
new file mode 100644
index 0000000..9c97cf5
--- /dev/null
+++ b/src/com/android/settings/core/lifecycle/events/OnCreate.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2016 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.core.lifecycle.events;
+
+
+import android.os.Bundle;
+
+public interface OnCreate {
+ void onCreate(Bundle savedInstanceState);
+}
diff --git a/src/com/android/settings/core/lifecycle/events/OnSaveInstanceState.java b/src/com/android/settings/core/lifecycle/events/OnSaveInstanceState.java
new file mode 100644
index 0000000..fab4041
--- /dev/null
+++ b/src/com/android/settings/core/lifecycle/events/OnSaveInstanceState.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2016 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.core.lifecycle.events;
+
+import android.os.Bundle;
+
+
+public interface OnSaveInstanceState {
+ void onSaveInstanceState(Bundle outState);
+}
diff --git a/src/com/android/settings/deviceinfo/UsbBackend.java b/src/com/android/settings/deviceinfo/UsbBackend.java
index cd88709..e648b39 100644
--- a/src/com/android/settings/deviceinfo/UsbBackend.java
+++ b/src/com/android/settings/deviceinfo/UsbBackend.java
@@ -101,20 +101,16 @@
private void setUsbFunction(int mode) {
switch (mode) {
case MODE_DATA_MTP:
- mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP);
- mUsbManager.setUsbDataUnlocked(true);
+ mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP, true);
break;
case MODE_DATA_PTP:
- mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP);
- mUsbManager.setUsbDataUnlocked(true);
+ mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP, true);
break;
case MODE_DATA_MIDI:
- mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MIDI);
- mUsbManager.setUsbDataUnlocked(true);
+ mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MIDI, true);
break;
default:
- mUsbManager.setCurrentFunction(null);
- mUsbManager.setUsbDataUnlocked(false);
+ mUsbManager.setCurrentFunction(null, false);
break;
}
}
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 3905ca6..509c771 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -46,9 +46,9 @@
@Override
protected boolean isAvailable() {
- return mIsSecondaryUser
- || Utils.isWifiOnly(mContext)
- || hasBaseUserRestriction(mContext, DISALLOW_CONFIG_MOBILE_NETWORKS, myUserId());
+ return !mIsSecondaryUser
+ && !Utils.isWifiOnly(mContext)
+ && !hasBaseUserRestriction(mContext, DISALLOW_CONFIG_MOBILE_NETWORKS, myUserId());
}
@Override
diff --git a/src/com/android/settings/network/MobilePlanPreferenceController.java b/src/com/android/settings/network/MobilePlanPreferenceController.java
new file mode 100644
index 0000000..e62686f
--- /dev/null
+++ b/src/com/android/settings/network/MobilePlanPreferenceController.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2016 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.network;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnCreate;
+import com.android.settings.core.lifecycle.events.OnSaveInstanceState;
+
+import java.util.List;
+
+import static android.content.Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.os.UserHandle.myUserId;
+import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
+
+
+public class MobilePlanPreferenceController extends PreferenceController implements
+ LifecycleObserver, OnCreate, OnSaveInstanceState {
+
+ public interface MobilePlanPreferenceHost {
+ void showMobilePlanMessageDialog();
+ }
+
+ public static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
+
+ private static final String TAG = "MobilePlanPrefContr";
+ private static final String KEY_MANAGE_MOBILE_PLAN = "manage_mobile_plan";
+ private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
+
+ private final UserManager mUserManager;
+ private final boolean mIsSecondaryUser;
+ private final MobilePlanPreferenceHost mHost;
+
+ private ConnectivityManager mCm;
+ private TelephonyManager mTm;
+
+ private String mMobilePlanDialogMessage;
+
+ public MobilePlanPreferenceController(Context context,
+ MobilePlanPreferenceHost host) {
+ super(context);
+ mHost = host;
+ mCm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ mTm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ mIsSecondaryUser = !mUserManager.isAdminUser();
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (mHost != null && KEY_MANAGE_MOBILE_PLAN.equals(preference.getKey())) {
+ mMobilePlanDialogMessage = null;
+ onManageMobilePlanClick();
+ }
+ return false;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ if (savedInstanceState != null) {
+ mMobilePlanDialogMessage = savedInstanceState.getString(SAVED_MANAGE_MOBILE_PLAN_MSG);
+ }
+ Log.d(TAG, "onCreate: mMobilePlanDialogMessage=" + mMobilePlanDialogMessage);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ if (!TextUtils.isEmpty(mMobilePlanDialogMessage)) {
+ outState.putString(SAVED_MANAGE_MOBILE_PLAN_MSG, mMobilePlanDialogMessage);
+ }
+ }
+
+ public String getMobilePlanDialogMessage() {
+ return mMobilePlanDialogMessage;
+ }
+
+ public void setMobilePlanDialogMessage(String messasge) {
+ mMobilePlanDialogMessage = messasge;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ final boolean isPrefAllowedOnDevice = mContext.getResources().getBoolean(
+ com.android.settings.R.bool.config_show_mobile_plan);
+ final boolean isPrefAllowedForUser = !mIsSecondaryUser
+ && !Utils.isWifiOnly(mContext)
+ && !hasBaseUserRestriction(mContext, DISALLOW_CONFIG_MOBILE_NETWORKS, myUserId());
+ return isPrefAllowedForUser && isPrefAllowedOnDevice;
+ }
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_MANAGE_MOBILE_PLAN;
+ }
+
+ private void onManageMobilePlanClick() {
+ Resources resources = mContext.getResources();
+ NetworkInfo ni = mCm.getActiveNetworkInfo();
+ if (mTm.hasIccCard() && (ni != null)) {
+ // Check for carrier apps that can handle provisioning first
+ Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
+ List<String> carrierPackages =
+ mTm.getCarrierPackageNamesForIntent(provisioningIntent);
+ if (carrierPackages != null && !carrierPackages.isEmpty()) {
+ if (carrierPackages.size() != 1) {
+ Log.w(TAG, "Multiple matching carrier apps found, launching the first.");
+ }
+ provisioningIntent.setPackage(carrierPackages.get(0));
+ mContext.startActivity(provisioningIntent);
+ return;
+ }
+
+ // Get provisioning URL
+ String url = mCm.getMobileProvisioningUrl();
+ if (!TextUtils.isEmpty(url)) {
+ Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
+ Intent.CATEGORY_APP_BROWSER);
+ intent.setData(Uri.parse(url));
+ intent.setFlags(FLAG_ACTIVITY_BROUGHT_TO_FRONT | FLAG_ACTIVITY_NEW_TASK);
+ try {
+ mContext.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG, "onManageMobilePlanClick: startActivity failed" + e);
+ }
+ } else {
+ // No provisioning URL
+ String operatorName = mTm.getSimOperatorName();
+ if (TextUtils.isEmpty(operatorName)) {
+ // Use NetworkOperatorName as second choice in case there is no
+ // SPN (Service Provider Name on the SIM). Such as with T-mobile.
+ operatorName = mTm.getNetworkOperatorName();
+ if (TextUtils.isEmpty(operatorName)) {
+ mMobilePlanDialogMessage =
+ resources.getString(R.string.mobile_unknown_sim_operator);
+ } else {
+ mMobilePlanDialogMessage = resources.getString(
+ R.string.mobile_no_provisioning_url, operatorName);
+ }
+ } else {
+ mMobilePlanDialogMessage =
+ resources.getString(R.string.mobile_no_provisioning_url, operatorName);
+ }
+ }
+ } else if (mTm.hasIccCard() == false) {
+ // No sim card
+ mMobilePlanDialogMessage = resources.getString(R.string.mobile_insert_sim_card);
+ } else {
+ // NetworkInfo is null, there is no connection
+ mMobilePlanDialogMessage = resources.getString(R.string.mobile_connect_to_internet);
+ }
+ if (!TextUtils.isEmpty(mMobilePlanDialogMessage)) {
+ Log.d(TAG, "onManageMobilePlanClick: message=" + mMobilePlanDialogMessage);
+ if (mHost != null) {
+ mHost.showMobilePlanMessageDialog();
+ } else {
+ Log.d(TAG, "Missing host fragment, cannot show message dialog.");
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 88099c6..fca8ec7 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -15,8 +15,12 @@
*/
package com.android.settings.network;
+import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.Context;
+import android.util.Log;
+import com.android.internal.logging.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
@@ -25,7 +29,11 @@
import java.util.ArrayList;
import java.util.List;
-public class NetworkDashboardFragment extends DashboardFragment {
+import static com.android.settings.network.MobilePlanPreferenceController
+ .MANAGE_MOBILE_PLAN_DIALOG_ID;
+
+public class NetworkDashboardFragment extends DashboardFragment implements
+ MobilePlanPreferenceController.MobilePlanPreferenceHost {
private static final String TAG = "NetworkDashboardFrag";
@@ -53,13 +61,50 @@
protected List<PreferenceController> getPreferenceControllers(Context context) {
final AirplaneModePreferenceController airplaneModePreferenceController =
new AirplaneModePreferenceController(context, this /* fragment */);
+ final MobilePlanPreferenceController mobilePlanPreferenceController =
+ new MobilePlanPreferenceController(context, this);
getLifecycle().addObserver(airplaneModePreferenceController);
+ getLifecycle().addObserver(mobilePlanPreferenceController);
final List<PreferenceController> controllers = new ArrayList<>();
controllers.add(airplaneModePreferenceController);
- controllers.add(new TetherPreferenceController(context));
controllers.add(new MobileNetworkPreferenceController(context));
+ controllers.add(new TetherPreferenceController(context));
controllers.add(new VpnPreferenceController(context));
+ controllers.add(new WifiCallingPreferenceController(context));
+ controllers.add(new NetworkResetPreferenceController(context));
+ controllers.add(new ProxyPreferenceController(context));
+ controllers.add(mobilePlanPreferenceController);
return controllers;
}
+
+ @Override
+ public void showMobilePlanMessageDialog() {
+ showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
+ }
+
+ @Override
+ public Dialog onCreateDialog(int dialogId) {
+ Log.d(TAG, "onCreateDialog: dialogId=" + dialogId);
+ switch (dialogId) {
+ case MANAGE_MOBILE_PLAN_DIALOG_ID:
+ final MobilePlanPreferenceController controller =
+ getPreferenceController(MobilePlanPreferenceController.class);
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(controller.getMobilePlanDialogMessage())
+ .setCancelable(false)
+ .setPositiveButton(com.android.internal.R.string.ok,
+ (dialog, id) -> controller.setMobilePlanDialogMessage(null))
+ .create();
+ }
+ return super.onCreateDialog(dialogId);
+ }
+
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
+ return MetricsProto.MetricsEvent.DIALOG_MANAGE_MOBILE_PLAN;
+ }
+ return 0;
+ }
}
diff --git a/src/com/android/settings/network/NetworkResetPreferenceController.java b/src/com/android/settings/network/NetworkResetPreferenceController.java
new file mode 100644
index 0000000..2fe2038
--- /dev/null
+++ b/src/com/android/settings/network/NetworkResetPreferenceController.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2016 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.network;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.core.PreferenceController;
+import com.android.settingslib.RestrictedLockUtils;
+
+public class NetworkResetPreferenceController extends PreferenceController {
+
+ private static final String KEY_NETWORK_RESET = "network_reset";
+
+ public NetworkResetPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return !RestrictedLockUtils.hasBaseUserRestriction(mContext,
+ UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_NETWORK_RESET;
+ }
+}
diff --git a/src/com/android/settings/network/ProxyPreferenceController.java b/src/com/android/settings/network/ProxyPreferenceController.java
new file mode 100644
index 0000000..075b1f0
--- /dev/null
+++ b/src/com/android/settings/network/ProxyPreferenceController.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2016 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.network;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+
+public class ProxyPreferenceController extends PreferenceController {
+
+ private static final String KEY_PROXY_SETTINGS = "proxy_settings";
+
+ public ProxyPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ // proxy UI disabled until we have better app support
+ return false;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ // Enable Proxy selector settings if allowed.
+ final Preference pref = screen.findPreference(KEY_PROXY_SETTINGS);
+ if (pref != null) {
+ final DevicePolicyManager dpm = (DevicePolicyManager)
+ mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ pref.setEnabled(dpm.getGlobalProxyAdmin() == null);
+ }
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_PROXY_SETTINGS;
+ }
+}
diff --git a/src/com/android/settings/network/WifiCallingPreferenceController.java b/src/com/android/settings/network/WifiCallingPreferenceController.java
new file mode 100644
index 0000000..e733b67
--- /dev/null
+++ b/src/com/android/settings/network/WifiCallingPreferenceController.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2016 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.network;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.telephony.TelephonyManager;
+
+import com.android.ims.ImsManager;
+import com.android.settings.WifiCallingSettings;
+import com.android.settings.core.PreferenceController;
+
+public class WifiCallingPreferenceController extends PreferenceController {
+
+ private static final String KEY_WFC_SETTINGS = "wifi_calling_settings";
+ private TelephonyManager mTm;
+
+ public WifiCallingPreferenceController(Context context) {
+ super(context);
+ mTm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final Preference pref = screen.findPreference(KEY_WFC_SETTINGS);
+ if (pref != null) {
+ pref.setSummary(WifiCallingSettings.getWfcModeSummary(
+ mContext, ImsManager.getWfcMode(mContext, mTm.isNetworkRoaming())));
+ }
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return ImsManager.isWfcEnabledByPlatform(mContext)
+ && ImsManager.isWfcProvisionedOnDevice(mContext);
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return KEY_WFC_SETTINGS;
+ }
+}
diff --git a/src/com/android/settings/nfc/NfcPreferenceController.java b/src/com/android/settings/nfc/NfcPreferenceController.java
new file mode 100644
index 0000000..0d31fe6
--- /dev/null
+++ b/src/com/android/settings/nfc/NfcPreferenceController.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2016 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.nfc;
+
+import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.nfc.NfcAdapter;
+import android.nfc.NfcManager;
+import android.os.Handler;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnPause;
+import com.android.settings.core.lifecycle.events.OnResume;
+import com.android.settings.network.AirplaneModePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.RestrictedPreference;
+
+import java.util.List;
+
+public class NfcPreferenceController extends PreferenceController
+ implements LifecycleObserver, OnResume, OnPause {
+
+ private static final String KEY_TOGGLE_NFC = "toggle_nfc";
+ private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
+
+ private NfcEnabler mNfcEnabler;
+ private NfcAdapter mNfcAdapter;
+ private final Handler mHandler = new Handler();
+ private int mAirplaneMode;
+ private AirplaneModeObserver mAirplaneModeObserver;
+ private SwitchPreference mNfcPreference;
+ private RestrictedPreference mBeamPreference;
+
+ public NfcPreferenceController(Context context) {
+ super(context);
+ mNfcAdapter = NfcAdapter.getDefaultAdapter(context);
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ if (!isAvailable()) {
+ removePreference(screen, KEY_TOGGLE_NFC);
+ removePreference(screen, KEY_ANDROID_BEAM_SETTINGS);
+ mNfcEnabler = null;
+ return;
+ }
+ mNfcPreference = (SwitchPreference) screen.findPreference(KEY_TOGGLE_NFC);
+ mBeamPreference = (RestrictedPreference) screen.findPreference(
+ KEY_ANDROID_BEAM_SETTINGS);
+ mNfcEnabler = new NfcEnabler(mContext, mNfcPreference, mBeamPreference);
+ String toggleable = Settings.Global.getString(mContext.getContentResolver(),
+ Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
+ final boolean useNewIA = FeatureFactory.getFactory(mContext)
+ .getDashboardFeatureProvider(mContext).isEnabled();
+ // Manually set dependencies for NFC when not toggleable.
+ if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) {
+ if (useNewIA) {
+ mAirplaneModeObserver = new AirplaneModeObserver();
+ updateNfcPreference();
+ } else {
+ mNfcPreference.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
+ mBeamPreference.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
+ }
+ }
+ }
+
+ @Override
+ public void updateNonIndexableKeys(List<String> keys) {
+ final NfcManager manager = (NfcManager) mContext.getSystemService(Context.NFC_SERVICE);
+ if (manager != null) {
+ NfcAdapter adapter = manager.getDefaultAdapter();
+ if (adapter == null) {
+ keys.add(KEY_TOGGLE_NFC);
+ keys.add(KEY_ANDROID_BEAM_SETTINGS);
+ }
+ }
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ return false;
+ }
+
+ @Override
+ protected boolean isAvailable() {
+ return mNfcAdapter != null;
+ }
+
+ @Override
+ protected String getPreferenceKey() {
+ return null;
+ }
+
+ public void onResume() {
+ if (mAirplaneModeObserver != null) {
+ mAirplaneModeObserver.register();
+ }
+ if (mNfcEnabler != null) {
+ mNfcEnabler.resume();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ if (mAirplaneModeObserver != null) {
+ mAirplaneModeObserver.unregister();
+ }
+ if (mNfcEnabler != null) {
+ mNfcEnabler.pause();
+ }
+ }
+
+ private void updateNfcPreference() {
+ final int airplaneMode = Settings.Global.getInt(
+ mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, mAirplaneMode);
+ if (airplaneMode == mAirplaneMode) {
+ return;
+ }
+ mAirplaneMode = airplaneMode;
+ boolean toggleable = mAirplaneMode != 1;
+ if (toggleable) {
+ mNfcAdapter.enable();
+ } else {
+ mNfcAdapter.disable();
+ }
+ mNfcPreference.setEnabled(toggleable);
+ mBeamPreference.setEnabled(toggleable);
+ }
+
+ private final class AirplaneModeObserver extends ContentObserver {
+ private final Uri AIRPLANE_MODE_URI =
+ Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON);
+
+ private AirplaneModeObserver() {
+ super(mHandler);
+ }
+
+ public void register() {
+ mContext.getContentResolver().registerContentObserver(AIRPLANE_MODE_URI, false, this);
+ }
+
+ public void unregister() {
+ mContext.getContentResolver().unregisterContentObserver(this);
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ super.onChange(selfChange, uri);
+ updateNfcPreference();
+ }
+ }
+
+}
diff --git a/src/com/android/settings/vpn2/AppDialogFragment.java b/src/com/android/settings/vpn2/AppDialogFragment.java
index 6093e89..4075c01 100644
--- a/src/com/android/settings/vpn2/AppDialogFragment.java
+++ b/src/com/android/settings/vpn2/AppDialogFragment.java
@@ -158,7 +158,7 @@
}
final int userId = getUserId();
try {
- if (mPackageInfo.packageName.equals(getConnectedPackage(mService, userId))) {
+ if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mService, userId))) {
mService.setAlwaysOnVpnPackage(userId, null, /* lockdownEnabled */ false);
mService.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
}
@@ -176,10 +176,4 @@
private int getUserId() {
return UserHandle.getUserId(mPackageInfo.applicationInfo.uid);
}
-
- private static String getConnectedPackage(IConnectivityManager service, final int userId)
- throws RemoteException {
- final VpnConfig config = service.getVpnConfig(userId);
- return config != null ? config.user : null;
- }
}
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index 1a3000e..68e0659 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -21,18 +21,21 @@
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
+import android.net.IConnectivityManager;
import android.os.Build;
import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.support.v7.preference.Preference;
+import android.text.TextUtils;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
@@ -51,7 +54,8 @@
import static android.app.AppOpsManager.OP_ACTIVATE_VPN;
public class AppManagementFragment extends SettingsPreferenceFragment
- implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
+ implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
+ ConfirmLockdownFragment.ConfirmLockdownListener {
private static final String TAG = "AppManagementFragment";
@@ -63,6 +67,7 @@
private PackageManager mPackageManager;
private ConnectivityManager mConnectivityManager;
+ private IConnectivityManager mConnectivityService;
// VPN app info
private final int mUserId = UserHandle.myUserId();
@@ -108,6 +113,8 @@
mPackageManager = getContext().getPackageManager();
mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
+ mConnectivityService = IConnectivityManager.Stub
+ .asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
mPreferenceVersion = findPreference(KEY_VERSION);
mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
@@ -169,13 +176,23 @@
return true;
}
- private boolean onAlwaysOnVpnClick(final boolean isChecked) {
- if (isChecked && isLegacyVpnLockDownOrAnotherPackageAlwaysOn()) {
- // Show dialog if user replace always-on-vpn package and show not checked first
- ReplaceExistingVpnFragment.show(this);
+ private boolean onAlwaysOnVpnClick(final boolean alwaysOnSetting) {
+ final boolean replacing = isAnotherVpnActive();
+ final boolean wasAlwaysOn = VpnUtils.isAlwaysOnOrLegacyLockdownActive(getActivity());
+ if (ConfirmLockdownFragment.shouldShow(replacing, wasAlwaysOn, alwaysOnSetting)) {
+ // Place a dialog to confirm that traffic should be locked down.
+ final Bundle options = null;
+ ConfirmLockdownFragment.show(this, replacing, wasAlwaysOn, alwaysOnSetting, options);
return false;
- } else {
- return setAlwaysOnVpnByUI(isChecked);
+ }
+ // No need to show the dialog. Change the setting straight away.
+ return setAlwaysOnVpnByUI(alwaysOnSetting);
+ }
+
+ @Override
+ public void onConfirmLockdown(Bundle options, boolean isEnabled) {
+ if (setAlwaysOnVpnByUI(isEnabled)) {
+ updateUI();
}
}
@@ -197,7 +214,7 @@
private boolean setAlwaysOnVpn(boolean isEnabled) {
return mConnectivityManager.setAlwaysOnVpnPackageForUser(mUserId,
- isEnabled ? mPackageName : null, /* lockdownEnabled */ false);
+ isEnabled ? mPackageName : null, /* lockdownEnabled */ true);
}
@VisibleForTesting
@@ -293,15 +310,17 @@
return !ArrayUtils.isEmpty(ops);
}
- private boolean isLegacyVpnLockDownOrAnotherPackageAlwaysOn() {
- if (mUserId == UserHandle.USER_SYSTEM) {
- String lockdownKey = VpnUtils.getLockdownVpn();
- if (lockdownKey != null) {
- return true;
- }
+ /**
+ * @return {@code true} if another VPN (VpnService or legacy) is connected or set as always-on.
+ */
+ private boolean isAnotherVpnActive() {
+ try {
+ final VpnConfig config = mConnectivityService.getVpnConfig(mUserId);
+ return config != null && !TextUtils.equals(config.user, mPackageName);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failure to look up active VPN", e);
+ return false;
}
-
- return getAlwaysOnVpnPackage() != null && !isVpnAlwaysOn();
}
public static class CannotConnectFragment extends InstrumentedDialogFragment {
@@ -334,42 +353,4 @@
.create();
}
}
-
- public static class ReplaceExistingVpnFragment extends InstrumentedDialogFragment
- implements DialogInterface.OnClickListener {
- private static final String TAG = "ReplaceExistingVpn";
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.DIALOG_VPN_REPLACE_EXISTING;
- }
-
- public static void show(AppManagementFragment parent) {
- if (parent.getFragmentManager().findFragmentByTag(TAG) == null) {
- final ReplaceExistingVpnFragment frag = new ReplaceExistingVpnFragment();
- frag.setTargetFragment(parent, 0);
- frag.show(parent.getFragmentManager(), TAG);
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setTitle(R.string.vpn_replace_always_on_vpn_title)
- .setMessage(getActivity().getString(R.string.vpn_replace_always_on_vpn_message))
- .setNegativeButton(getActivity().getString(R.string.vpn_cancel), null)
- .setPositiveButton(getActivity().getString(R.string.vpn_replace), this)
- .create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (getTargetFragment() instanceof AppManagementFragment) {
- final AppManagementFragment target = (AppManagementFragment) getTargetFragment();
- if (target.setAlwaysOnVpnByUI(true)) {
- target.updateUI();
- }
- }
- }
- }
}
diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java
index 1a180c5..9dbf752 100644
--- a/src/com/android/settings/vpn2/ConfigDialogFragment.java
+++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java
@@ -16,6 +16,7 @@
package com.android.settings.vpn2;
+import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
@@ -29,6 +30,7 @@
import android.security.Credentials;
import android.security.KeyStore;
import android.util.Log;
+import android.view.View;
import android.widget.Toast;
import com.android.internal.logging.MetricsProto;
@@ -41,8 +43,9 @@
/**
* Fragment wrapper around a {@link ConfigDialog}.
*/
-public class ConfigDialogFragment extends InstrumentedDialogFragment
- implements DialogInterface.OnClickListener {
+public class ConfigDialogFragment extends InstrumentedDialogFragment implements
+ DialogInterface.OnClickListener, DialogInterface.OnShowListener, View.OnClickListener,
+ ConfirmLockdownFragment.ConfirmLockdownListener {
private static final String TAG_CONFIG_DIALOG = "vpnconfigdialog";
private static final String TAG = "ConfigDialogFragment";
@@ -103,7 +106,31 @@
boolean editing = args.getBoolean(ARG_EDITING);
boolean exists = args.getBoolean(ARG_EXISTS);
- return new ConfigDialog(getActivity(), this, profile, editing, exists);
+ final Dialog dialog = new ConfigDialog(getActivity(), this, profile, editing, exists);
+ dialog.setOnShowListener(this);
+ return dialog;
+ }
+
+ /**
+ * Override for the default onClick handler which also calls dismiss().
+ *
+ * @see DialogInterface.OnClickListener#onClick(DialogInterface, int)
+ */
+ @Override
+ public void onShow(DialogInterface dialogInterface) {
+ ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View positiveButton) {
+ onClick(getDialog(), AlertDialog.BUTTON_POSITIVE);
+ }
+
+ @Override
+ public void onConfirmLockdown(Bundle options, boolean isEnabled) {
+ VpnProfile profile = (VpnProfile) options.getParcelable(ARG_PROFILE);
+ connect(profile, isEnabled);
+ dismiss();
}
@Override
@@ -112,24 +139,24 @@
VpnProfile profile = dialog.getProfile();
if (button == DialogInterface.BUTTON_POSITIVE) {
- // Update KeyStore entry
- KeyStore.getInstance().put(Credentials.VPN + profile.key, profile.encode(),
- KeyStore.UID_SELF, /* flags */ 0);
-
- // Flush out previous connection, which may be an old version of the profile
- if (!disconnect(profile)) {
- Log.w(TAG, "Unable to remove previous connection. Continuing anyway.");
- }
-
- updateLockdownVpn(dialog.isVpnAlwaysOn(), profile);
-
- // If we are not editing, connect!
- if (!dialog.isEditing() && !VpnUtils.isVpnLockdown(profile.key)) {
- try {
- connect(profile);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to connect", e);
+ // Possibly throw up a dialog to explain lockdown VPN.
+ final boolean shouldLockdown = dialog.isVpnAlwaysOn();
+ final boolean shouldConnect = shouldLockdown || !dialog.isEditing();
+ final boolean wasAlwaysOn = VpnUtils.isAlwaysOnOrLegacyLockdownActive(getContext());
+ try {
+ final boolean replace = VpnUtils.isVpnActive(getContext());
+ if (shouldConnect && !isConnected(profile) &&
+ ConfirmLockdownFragment.shouldShow(replace, wasAlwaysOn, shouldLockdown)) {
+ final Bundle opts = new Bundle();
+ opts.putParcelable(ARG_PROFILE, profile);
+ ConfirmLockdownFragment.show(this, replace, wasAlwaysOn, shouldLockdown, opts);
+ } else if (shouldConnect) {
+ connect(profile, shouldLockdown);
+ } else {
+ save(profile, false);
}
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed to check active VPN state. Skipping.", e);
}
} else if (button == DialogInterface.BUTTON_NEUTRAL) {
// Disable profile if connected
@@ -175,11 +202,31 @@
}
}
- private void connect(VpnProfile profile) throws RemoteException {
- try {
- mService.startLegacyVpn(profile);
- } catch (IllegalStateException e) {
- Toast.makeText(getActivity(), R.string.vpn_no_network, Toast.LENGTH_LONG).show();
+ private void save(VpnProfile profile, boolean lockdown) {
+ KeyStore.getInstance().put(Credentials.VPN + profile.key, profile.encode(),
+ KeyStore.UID_SELF, /* flags */ 0);
+
+ // Flush out old version of profile
+ disconnect(profile);
+
+ // Notify lockdown VPN that the profile has changed.
+ updateLockdownVpn(lockdown, profile);
+ }
+
+ private void connect(VpnProfile profile, boolean lockdown) {
+ save(profile, lockdown);
+
+ // Now try to start the VPN - this is not necessary if the profile is set as lockdown,
+ // because just saving the profile in this mode will start a connection.
+ if (!VpnUtils.isVpnLockdown(profile.key)) {
+ VpnUtils.clearLockdownVpn(getContext());
+ try {
+ mService.startLegacyVpn(profile);
+ } catch (IllegalStateException e) {
+ Toast.makeText(getActivity(), R.string.vpn_no_network, Toast.LENGTH_LONG).show();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to connect", e);
+ }
}
}
diff --git a/src/com/android/settings/vpn2/ConfirmLockdownFragment.java b/src/com/android/settings/vpn2/ConfirmLockdownFragment.java
new file mode 100644
index 0000000..4d643cf
--- /dev/null
+++ b/src/com/android/settings/vpn2/ConfirmLockdownFragment.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2016 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.vpn2;
+
+import android.app.Fragment;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+public class ConfirmLockdownFragment extends InstrumentedDialogFragment
+ implements DialogInterface.OnClickListener {
+ public interface ConfirmLockdownListener {
+ public void onConfirmLockdown(Bundle options, boolean isEnabled);
+ }
+
+ private static final String TAG = "ConfirmLockdown";
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.DIALOG_VPN_REPLACE_EXISTING;
+ }
+
+ private static final String ARG_REPLACING = "replacing";
+ private static final String ARG_LOCKDOWN_SRC = "lockdown_old";
+ private static final String ARG_LOCKDOWN_DST = "lockdown_new";
+ private static final String ARG_OPTIONS = "options";
+
+ public static boolean shouldShow(boolean replacing, boolean fromLockdown, boolean toLockdown) {
+ // We only need to show this if we are:
+ // - replacing an existing connection
+ // - switching on always-on mode where it was not enabled before.
+ return replacing || (toLockdown && !fromLockdown);
+ }
+
+ public static void show(Fragment parent, boolean replacing,
+ boolean fromLockdown, boolean toLockdown, Bundle options) {
+ if (parent.getFragmentManager().findFragmentByTag(TAG) != null) {
+ // Already exists. Don't show it twice.
+ return;
+ }
+ final Bundle args = new Bundle();
+ args.putBoolean(ARG_REPLACING, replacing);
+ args.putBoolean(ARG_LOCKDOWN_SRC, fromLockdown);
+ args.putBoolean(ARG_LOCKDOWN_DST, toLockdown);
+ args.putParcelable(ARG_OPTIONS, options);
+
+ final ConfirmLockdownFragment frag = new ConfirmLockdownFragment();
+ frag.setArguments(args);
+ frag.setTargetFragment(parent, 0);
+ frag.show(parent.getFragmentManager(), TAG);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final boolean replacing = getArguments().getBoolean(ARG_REPLACING);
+ final boolean wasAlwaysOn = getArguments().getBoolean(ARG_LOCKDOWN_SRC);
+ final boolean nowAlwaysOn = getArguments().getBoolean(ARG_LOCKDOWN_DST);
+
+ final int titleId = replacing ? R.string.vpn_replace_vpn_title : R.string.vpn_set_vpn_title;
+ final int actionId =
+ (replacing ? R.string.vpn_replace :
+ (nowAlwaysOn ? R.string.vpn_turn_on : R.string.okay));
+ final int messageId;
+ if (nowAlwaysOn) {
+ messageId = replacing
+ ? R.string.vpn_replace_always_on_vpn_enable_message
+ : R.string.vpn_first_always_on_vpn_message;
+ } else {
+ messageId = wasAlwaysOn
+ ? R.string.vpn_replace_always_on_vpn_disable_message
+ : R.string.vpn_replace_vpn_message;
+ }
+
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(titleId)
+ .setMessage(messageId)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(actionId, this)
+ .create();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (getTargetFragment() instanceof ConfirmLockdownListener) {
+ ((ConfirmLockdownListener) getTargetFragment()).onConfirmLockdown(
+ getArguments().getParcelable(ARG_OPTIONS),
+ getArguments().getBoolean(ARG_LOCKDOWN_DST));
+ }
+ }
+}
+
diff --git a/src/com/android/settings/vpn2/VpnUtils.java b/src/com/android/settings/vpn2/VpnUtils.java
index 6afa79b..5990381 100644
--- a/src/com/android/settings/vpn2/VpnUtils.java
+++ b/src/com/android/settings/vpn2/VpnUtils.java
@@ -17,16 +17,20 @@
import android.content.Context;
import android.net.ConnectivityManager;
+import android.net.IConnectivityManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.security.Credentials;
import android.security.KeyStore;
+import com.android.internal.net.VpnConfig;
+
/**
* Utility functions for vpn.
*
* Keystore methods should only be called in system user
*/
public class VpnUtils {
-
public static String getLockdownVpn() {
final byte[] value = KeyStore.getInstance().get(Credentials.LOCKDOWN_VPN);
return value == null ? null : new String(value);
@@ -35,17 +39,42 @@
public static void clearLockdownVpn(Context context) {
KeyStore.getInstance().delete(Credentials.LOCKDOWN_VPN);
// Always notify ConnectivityManager after keystore update
- context.getSystemService(ConnectivityManager.class).updateLockdownVpn();
+ getConnectivityManager(context).updateLockdownVpn();
}
public static void setLockdownVpn(Context context, String lockdownKey) {
KeyStore.getInstance().put(Credentials.LOCKDOWN_VPN, lockdownKey.getBytes(),
KeyStore.UID_SELF, /* flags */ 0);
// Always notify ConnectivityManager after keystore update
- context.getSystemService(ConnectivityManager.class).updateLockdownVpn();
+ getConnectivityManager(context).updateLockdownVpn();
}
public static boolean isVpnLockdown(String key) {
return key.equals(getLockdownVpn());
}
+
+ public static boolean isAlwaysOnOrLegacyLockdownActive(Context context) {
+ final int userId = context.getUserId();
+ return getLockdownVpn() != null
+ || getConnectivityManager(context).getAlwaysOnVpnPackageForUser(userId) != null;
+ }
+
+ public static boolean isVpnActive(Context context) throws RemoteException {
+ return getIConnectivityManager().getVpnConfig(context.getUserId()) != null;
+ }
+
+ public static String getConnectedPackage(IConnectivityManager service, final int userId)
+ throws RemoteException {
+ final VpnConfig config = service.getVpnConfig(userId);
+ return config != null ? config.user : null;
+ }
+
+ private static ConnectivityManager getConnectivityManager(Context context) {
+ return context.getSystemService(ConnectivityManager.class);
+ }
+
+ private static IConnectivityManager getIConnectivityManager() {
+ return IConnectivityManager.Stub.asInterface(
+ ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
new file mode 100644
index 0000000..0adfea8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2016 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.network;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.when;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class MobileNetworkPreferenceControllerTest {
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private UserManager mUserManager;
+ @Mock
+ private ConnectivityManager mConnectivityManager;
+
+ private MobileNetworkPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+ when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
+ .thenReturn(mConnectivityManager);
+ }
+
+ @Test
+ public void secondaryUser_prefIsNotAvailable() {
+ when(mUserManager.isAdminUser()).thenReturn(false);
+ when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class)))
+ .thenReturn(false);
+ when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
+ .thenReturn(true);
+
+ mController = new MobileNetworkPreferenceController(mContext);
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void wifiOnly_prefIsNotAvailable() {
+ when(mUserManager.isAdminUser()).thenReturn(true);
+ when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class)))
+ .thenReturn(false);
+ when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
+ .thenReturn(false);
+
+ mController = new MobileNetworkPreferenceController(mContext);
+ assertThat(mController.isAvailable()).isFalse();
+ }
+}