Merge "Disable slicing upsell when mobile data is disabled" into udc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ecc4e0f..d36dfec 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -135,6 +135,7 @@
<uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" />
<uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />
<uses-permission android:name="android.permission.BIND_TELEPHONY_DATA_SERVICE" />
+ <uses-permission android:name="android.permission.BIND_SATELLITE_GATEWAY_SERVICE" />
<uses-permission android:name="android.permission.BIND_SATELLITE_SERVICE" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 2c8117b..490f124 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-Oproep Wat Wag onder IMS is Af"</string>
<string name="updating_title" msgid="6130548922615719689">"Belinstellings"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Oproepinstellings kan net deur die administrateur verander word."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Instellings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Oproepinstellingsfout"</string>
<string name="reading_settings" msgid="1605904432450871183">"Lees tans instellings…"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index b3b063e..9dde546 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"በIMS ስር ያለው የCDMA ጥሪ መጠበቂያ ጠፍቷል"</string>
<string name="updating_title" msgid="6130548922615719689">"የጥሪ ቅንብሮች"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"የጥሪ ቅንብሮች በአስተዳዳሪ ተጠቃሚው ብቻ ነው ሊለወጡ የሚችሉት።"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"ቅንብሮች (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"የጥሪ ቅንብሮች ስህተት"</string>
<string name="reading_settings" msgid="1605904432450871183">"ቅንብሮች በማንበብ ላይ..."</string>
@@ -171,7 +173,7 @@
<string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"የቀድሞ ፒን አልተዛመደም።"</string>
<string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"አዲሱ ፒን ልክ ያልሆኑ ቁምፊዎችን ይዟል።"</string>
<string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"ፒን መቀየር አልተቻለም።"</string>
- <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"የማይደገፍ የመልዕክት አይነት፤ ለማዳመጥ ወደ <xliff:g id="NUMBER">%s</xliff:g> ይደውሉ።"</string>
+ <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"የማይደገፍ የመልዕክት ዓይነት፤ ለማዳመጥ ወደ <xliff:g id="NUMBER">%s</xliff:g> ይደውሉ።"</string>
<string name="network_settings_title" msgid="7560807107123171541">"የተንቀሳቃሽ ስልክ አውታረ መረብ"</string>
<string name="label_available" msgid="1316084116670821258">"የሚገኙ አውታረመረቦች"</string>
<string name="load_networks_progress" msgid="4051433047717401683">"በመፈለግ ላይ…"</string>
@@ -186,9 +188,9 @@
<string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"ከ %1$s ጋር በተገናኘ ጊዜ አይገኝም"</string>
<string name="network_select_title" msgid="4117305053881611988">"አውታረ መረብ"</string>
<string name="register_automatically" msgid="3907580547590554834">"ራስ ሰር ምዝገባ...."</string>
- <string name="preferred_network_mode_title" msgid="5253395265169539830">"የሚመረጠው የአውታረ መረብ አይነት"</string>
+ <string name="preferred_network_mode_title" msgid="5253395265169539830">"የሚመረጠው የአውታረ መረብ ዓይነት"</string>
<string name="preferred_network_mode_summary" msgid="3787989000044330064">"የአውታረመረቡንመከወኛ ሁነታ ለውጥ"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"የሚመረጠው የአውታረ መረብ አይነት"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"የሚመረጠው የአውታረ መረብ ዓይነት"</string>
<string name="forbidden_network" msgid="5081729819561333023">"(የተከለከለ)"</string>
<string name="choose_network_title" msgid="5335832663422653082">"አውታረ መረብ ይምረጡ"</string>
<string name="network_disconnected" msgid="8844141106841160825">"ግንኙነት ተቋርጧል"</string>
@@ -891,12 +893,12 @@
<string name="radio_info_phone_number_label" msgid="2533852539562512203">"ስልክ ቁጥር:"</string>
<string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"የድምፅ የአውታረ መረብ ዓይነት፡"</string>
<string name="radio_info_data_network_type_label" msgid="8886597029237501929">"የውሂብ አውታረ መረብ ዓይነት፡"</string>
- <string name="radio_info_override_network_type_label" msgid="4176280017221092005">"የአውታረ መረብ አይነት ሻር፦"</string>
+ <string name="radio_info_override_network_type_label" msgid="4176280017221092005">"የአውታረ መረብ ዓይነት ሻር፦"</string>
<string name="radio_info_voice_raw_registration_state_label" msgid="2822988327145825128">"የጥሬ ድምጽ ምዝገባ ሁነታ፦"</string>
<string name="radio_info_data_raw_registration_state_label" msgid="2895895513822604539">"የጥሬ ውሂብ ምዝገባ ሁነታ፦"</string>
<string name="radio_info_wlan_data_raw_registration_state_label" msgid="6396894835757296612">"የWLAN ጥሬ ውሂብ ምዝገባ ሁነታ፦"</string>
<string name="phone_index_label" msgid="6222406512768964268">"የስልክ መረጃ ጠቋሚ ይምረጡ"</string>
- <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"ተመራጭ የአውታረ መረብ አይነት ያዋቅሩ፡"</string>
+ <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"ተመራጭ የአውታረ መረብ ዓይነት ያዋቅሩ፡"</string>
<string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"ፒንግ ስመ ከዳም(www.google.com) IPv4፦"</string>
<string name="radio_info_ping_hostname_v6" msgid="2748637889486554603">"ፒንግ ስመ ካዳም(www.google.com) IPv6፡"</string>
<string name="radio_info_http_client_test" msgid="1329583721088428238">"የኤችቲቲፒ ደንበኛ ሙከራ:"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 1ee5e44..c0fc20b 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"إيقاف ميزة انتظار مكالمات CDMA في ظل IMS"</string>
<string name="updating_title" msgid="6130548922615719689">"إعدادات الاتصال"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"لا يمكن تغيير إعدادات المكالمات إلا بواسطة المستخدم الإداري."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"الإعدادات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"خطأ في إعدادات الاتصال"</string>
<string name="reading_settings" msgid="1605904432450871183">"جارٍ قراءة الإعدادات..."</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index f66b63c..6099512 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMSত CDMA কল অপেক্ষাৰত সুবিধাটো অফ আছে"</string>
<string name="updating_title" msgid="6130548922615719689">"কল ছেটিংসমূহ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"কেৱল প্ৰশাসকে কল ছেটিংসমূহ সলনি কৰিব পাৰে।"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"ছেটিংসমূহ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"কল ছেটিংসমূহত আসোঁৱাহ"</string>
<string name="reading_settings" msgid="1605904432450871183">"ছেটিংসমূহ পঢ়ি থকা হৈছে…"</string>
@@ -850,7 +852,7 @@
<string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS পঞ্জীয়ন: <xliff:g id="STATUS">%1$s</xliff:g>\nভইচ অভাৰ LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nভইচ অভাৰ ৱাই-ফাই: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nভিডিঅ’ কলিং: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ইণ্টাৰফে’চ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"সেৱাত আছে"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"সেৱাত নাই"</string>
- <string name="radioInfo_service_emergency" msgid="4763879891415016848">"কেৱল জৰুৰীকালীন কলসমূহ"</string>
+ <string name="radioInfo_service_emergency" msgid="4763879891415016848">"কেৱল জৰুৰীকালীন কল"</string>
<string name="radioInfo_service_off" msgid="3456583511226783064">"ৰেডিঅ’ অফ হৈ আছে"</string>
<string name="radioInfo_roaming_in" msgid="3156335577793145965">"ৰ’মিং"</string>
<string name="radioInfo_roaming_not" msgid="1904547918725478110">"ৰ’মিঙত নাই"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index f7cf162..e749e2e 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS ilə CDMA zəng gözlətməsi deaktivdir"</string>
<string name="updating_title" msgid="6130548922615719689">"Zəng ayarları"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Zəng parametrləri yalnız admin olan istifadəçi tərəfindən dəyişdirilə bilər."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Ayarlar ( <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g> )"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Zəng parametrləri xətası"</string>
<string name="reading_settings" msgid="1605904432450871183">"Oxuma ayarları..."</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index ce1b9a3..369db11 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Stavljanje CDMA poziva na čekanje u IMS-u je isključeno"</string>
<string name="updating_title" msgid="6130548922615719689">"Podešavanja poziva"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Samo korisniku sa administratorskim pravima je dozvoljeno da menja podešavanja poziva."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Podešavanja (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Greška u podešavanjima poziva"</string>
<string name="reading_settings" msgid="1605904432450871183">"Podešavanja se učitavaju…"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index e2e48ad..cdfa070 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Чаканне выкліку па тэхналогіі CDMA (IMS) выключана"</string>
<string name="updating_title" msgid="6130548922615719689">"Налады выклікаў"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Налады выклікаў можа мяняць толькі адміністратар."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Налады (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Памылка налад выкліку"</string>
<string name="reading_settings" msgid="1605904432450871183">"Чытанне налад..."</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 5c6ea93..27a9013 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Изчакващите обаждания за CDMA с IMS са изключени"</string>
<string name="updating_title" msgid="6130548922615719689">"Настройки за обаждане"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Само администраторът може да променя настройките за обаждане."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Настройки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Грешка в настройките за обаждане"</string>
<string name="reading_settings" msgid="1605904432450871183">"Извършва се четене на настройки…"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index cb98b0d..657a7ed 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS-এ CDMA কল ওয়েটিং সুবিধা বন্ধ আছে"</string>
<string name="updating_title" msgid="6130548922615719689">"কল সেটিংস"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"কেবলমাত্র প্রশাসক ব্যবহারকারী কল সেটিংস পরিবর্তন করতে পারবেন৷"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"সেটিংস (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"কল সেটিংসে ত্রুটি"</string>
<string name="reading_settings" msgid="1605904432450871183">"সেটিংস পড়ছে…"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 1a6d50f..405f130 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA poziv na čekanju u okviru IMS-a je isključen"</string>
<string name="updating_title" msgid="6130548922615719689">"Postavke poziva"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Postavke poziva može promijeniti samo administrator."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Postavke telefonskog računa može promijeniti samo administrator ili poslovni korisnik."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Postavke (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Greška u postavkama poziva"</string>
<string name="reading_settings" msgid="1605904432450871183">"Čitanje postavki…"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index c171c88..af6c579 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"L\'opció de trucada en espera de CDMA a IMS està desactivada"</string>
<string name="updating_title" msgid="6130548922615719689">"Configuració de trucada"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Només l\'administrador pot canviar la configuració de trucades."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Només l\'administrador o l\'usuari de la feina pot canviar la configuració del compte del telèfon."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Configuració (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Error de configuració de trucada"</string>
<string name="reading_settings" msgid="1605904432450871183">"S\'està llegint la configuració…"</string>
@@ -892,9 +893,9 @@
<string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"Tipus de xarxa de veu:"</string>
<string name="radio_info_data_network_type_label" msgid="8886597029237501929">"Tipus de xarxa de dades:"</string>
<string name="radio_info_override_network_type_label" msgid="4176280017221092005">"Substitució de tipus de xarxa:"</string>
- <string name="radio_info_voice_raw_registration_state_label" msgid="2822988327145825128">"Estat de registre de les dades sense processar de Voice:"</string>
- <string name="radio_info_data_raw_registration_state_label" msgid="2895895513822604539">"Estat de registre de les dades sense processar:"</string>
- <string name="radio_info_wlan_data_raw_registration_state_label" msgid="6396894835757296612">"Estat de registre de les dades sense processar de la WLAN:"</string>
+ <string name="radio_info_voice_raw_registration_state_label" msgid="2822988327145825128">"Estat de registre de les dades sense tractar de Voice:"</string>
+ <string name="radio_info_data_raw_registration_state_label" msgid="2895895513822604539">"Estat de registre de les dades sense tractar:"</string>
+ <string name="radio_info_wlan_data_raw_registration_state_label" msgid="6396894835757296612">"Estat de registre de les dades sense tractar de la WLAN:"</string>
<string name="phone_index_label" msgid="6222406512768964268">"Selecciona la guia telefònica"</string>
<string name="radio_info_set_perferred_label" msgid="7408131389363136210">"Defineix el tipus de xarxa preferit:"</string>
<string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"Fer ping a IPv4 de nom d\'amfitrió (www.google.com):"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 6c945ca..54141f6 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA – další hovor na lince ve službě IMS – vypnuto"</string>
<string name="updating_title" msgid="6130548922615719689">"Nastavení hovorů"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Nastavení hovorů může změnit pouze uživatel s oprávněním administrátora."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Nastavení (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Chyba nastavení hovorů"</string>
<string name="reading_settings" msgid="1605904432450871183">"Načítání nastavení..."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a489077..fbcd9b1 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Ventende CDMA-opkald under IMS er deaktiveret"</string>
<string name="updating_title" msgid="6130548922615719689">"Indstillinger for opkald"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Opkaldsindstillingerne kan kun ændres af administratorbrugeren."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Indstillinger (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Fejl i indstillinger for opkald"</string>
<string name="reading_settings" msgid="1605904432450871183">"Læser indstillinger ..."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3613464..c292b8d 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-Anklopfen unter IMS deaktiviert"</string>
<string name="updating_title" msgid="6130548922615719689">"Anrufeinstellungen"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Anrufeinstellungen können nur vom Administrator geändert werden."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Einstellungen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Fehler bei Anrufeinstellungen"</string>
<string name="reading_settings" msgid="1605904432450871183">"Einstellungen werden gelesen…"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 035e947..06f08ca 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Η αναμονή κλήσης σε λειτουργία άμεσων μηνυμάτων (ΙΜ) είναι απενεργοποιημένη"</string>
<string name="updating_title" msgid="6130548922615719689">"Ρυθμίσεις κλήσης"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Οι ρυθμίσεις κλήσεων μπορούν να αλλάξουν μόνο από τον χρήστη που έχει ρόλο διαχειριστή."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Ρυθμίσεις (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Σφάλμα ρυθμίσεων κλήσης"</string>
<string name="reading_settings" msgid="1605904432450871183">"Ανάγνωση ρυθμίσεων…"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index c9a7765..129a69a 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
<string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
<string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index b65452e..a3c0335 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA Call Waiting under IMS Off"</string>
<string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
<string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c9a7765..129a69a 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
<string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
<string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index c9a7765..129a69a 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
<string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
<string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 7c9c6ee..8b6fcd2 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA Call Waiting under IMS Off"</string>
<string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
<string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 22e0e4d..5e6358e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"La función de llamada en espera de CDMA en IMS está desactivada"</string>
<string name="updating_title" msgid="6130548922615719689">"Config. de llamada"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Solo el usuario administrador puede cambiar la configuración de llamadas."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Configuración (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Error de configuración de llamada"</string>
<string name="reading_settings" msgid="1605904432450871183">"Leyendo configuración..."</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 8fa9445..684e639 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Llamada en espera de CDMA en IMS desactivada"</string>
<string name="updating_title" msgid="6130548922615719689">"Ajustes de llamadas"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"El administrador es el único usuario que puede cambiar los ajustes de llamada."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Ajustes (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Error de configuración de llamada"</string>
<string name="reading_settings" msgid="1605904432450871183">"Leyendo ajustes..."</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 6ec88dc..92bad38 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA ootel kõne on IMS-i all välja lülitatud"</string>
<string name="updating_title" msgid="6130548922615719689">"Kõneseaded"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Kõne seadeid saab muuta ainult administraator."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Seaded (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Kõneseadete viga"</string>
<string name="reading_settings" msgid="1605904432450871183">"Seadete lugemine ..."</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 12c1a3c..ec06899 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS zerbitzupean CDMA deiak zain uzteko aukera desaktibatuta dago"</string>
<string name="updating_title" msgid="6130548922615719689">"Deien ezarpenak"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Administratzaileak soilik alda ditzake deien ezarpenak."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Ezarpenak (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Deien ezarpenen errorea"</string>
<string name="reading_settings" msgid="1605904432450871183">"Ezarpenak irakurtzen…"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index dce81ab..4897f15 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"«انتظار مکالمه CDMA» تحت IMS خاموش است"</string>
<string name="updating_title" msgid="6130548922615719689">"تنظیمات تماس"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"فقط کاربر سرپرست میتواند تنظیمات تماس را تغییر دهد."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"تنظیمات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"خطای تنظیمات تماس"</string>
<string name="reading_settings" msgid="1605904432450871183">"در حال خواندن تنظیمات..."</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 430afe0..76beda6 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS:n alainen CDMA-koputus pois käytöstä"</string>
<string name="updating_title" msgid="6130548922615719689">"Puheluasetukset"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Vain järjestelmänvalvoja voi muuttaa puheluasetuksia."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Asetukset (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Virhe puheluasetuksissa"</string>
<string name="reading_settings" msgid="1605904432450871183">"Luetaan asetuksia…"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index b5c2014..7f8e7d0 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Mise en attente d\'appels CDMA sous IMS désactivée"</string>
<string name="updating_title" msgid="6130548922615719689">"Paramètres d\'appel"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Seul l\'administrateur peut modifier les paramètres d\'appel."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Paramètres (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Erreur des paramètres d\'appel"</string>
<string name="reading_settings" msgid="1605904432450871183">"Lecture des paramètres..."</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 7e3ca20..e6849de 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Fonctionnalité d\'appel CDMA en attente sous IMS désactivée"</string>
<string name="updating_title" msgid="6130548922615719689">"Paramètres d\'appel"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Seul l\'administrateur peut modifier les paramètres d\'appel."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Paramètres (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Erreur des paramètres d\'appel"</string>
<string name="reading_settings" msgid="1605904432450871183">"Lecture des paramètres..."</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6d92dd2..b114f18 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"A función de chamada en espera de CDMA en IMS está desactivada"</string>
<string name="updating_title" msgid="6130548922615719689">"Configuración de chamada"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Só o usuario administrador pode cambiar a configuración de chamada."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Configuración (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Erro de configuración das chamadas"</string>
<string name="reading_settings" msgid="1605904432450871183">"Lendo a configuración..."</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0bc9c21..4ea05bd 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS હેઠળ CDMA કૉલ પ્રતીક્ષા બંધ છે"</string>
<string name="updating_title" msgid="6130548922615719689">"કૉલ સેટિંગ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"કૉલ સેટિંગને ફક્ત ઍડમિન વપરાશકર્તા દ્વારા જ બદલી શકાય છે."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"સેટિંગ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"કૉલ સેટિંગની ભૂલ"</string>
<string name="reading_settings" msgid="1605904432450871183">"સેટિંગ વાંચી રહ્યાં છે…"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 6ba73b9..f8959c0 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"आईएमएस में CDMA कॉल वेटिंग की सुविधा बंद है"</string>
<string name="updating_title" msgid="6130548922615719689">"कॉल सेटिंग"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"कॉल सेटिंग केवल व्यवस्थापक उपयोगकर्ता द्वारा ही बदली जा सकती हैं."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"फ़ोन की खाता सेटिंग, सिर्फ़ एडमिन या वर्क प्रोफ़ाइल के उपयोगकर्ता बदल सकते हैं."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"सेटिंग (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"कॉल सेटिंग गड़बड़ी"</string>
<string name="reading_settings" msgid="1605904432450871183">"सेटिंग पढ़ रहा है..."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index ffe6c69..e251497 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA poziv na čekanju u okviru IMS-a isključen"</string>
<string name="updating_title" msgid="6130548922615719689">"Postavke poziva"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Postavke poziva može mijenjati samo korisnik koji je administrator."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Postavke telefonskog računa može promijeniti samo administrator ili poslovni korisnik."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Postavke (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Pogreška postavki poziva"</string>
<string name="reading_settings" msgid="1605904432450871183">"Čitanje postavki..."</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a7c1b4d..5fa0d62 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS alatti CDMA-hívásvárakoztatás kikapcsolva"</string>
<string name="updating_title" msgid="6130548922615719689">"Hívásbeállítások"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"A hívásbeállításokat csak a rendszergazda módosíthatja."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"A telefon fiókbeállításait csak az adminisztrátor vagy munkahelyi felhasználó módosíthatja."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Beállítások (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Hiba a hívásbeállításokban"</string>
<string name="reading_settings" msgid="1605904432450871183">"Beállítások olvasása..."</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index b7a570b..122971f 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA զանգի սպասումը IMS-ում անջատված է"</string>
<string name="updating_title" msgid="6130548922615719689">"Զանգի կարգավորումներ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Զանգի կարգավորումները կարող է փոխել միայն ադմինիստրատոր հանդիսացող օգտատերը:"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Կարգավորումներ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Զանգի կարգավորումների սխալ"</string>
<string name="reading_settings" msgid="1605904432450871183">"Ընթերցման կարգավորումներ..."</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index e69ca7d..7b476f9 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Nada tunggu CDMA dalam IMS nonaktif"</string>
<string name="updating_title" msgid="6130548922615719689">"Setelan panggilan"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Setelan panggilan telepon hanya dapat diubah oleh pengguna admin."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Setelan (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Kesalahan setelan panggilan"</string>
<string name="reading_settings" msgid="1605904432450871183">"Membaca setelan…"</string>
@@ -186,9 +188,9 @@
<string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"Tidak tersedia saat terhubung ke %1$s"</string>
<string name="network_select_title" msgid="4117305053881611988">"Jaringan"</string>
<string name="register_automatically" msgid="3907580547590554834">"Pendaftaran otomatis..."</string>
- <string name="preferred_network_mode_title" msgid="5253395265169539830">"Jenis jaringan yang dipilih"</string>
+ <string name="preferred_network_mode_title" msgid="5253395265169539830">"Jenis jaringan preferensi"</string>
<string name="preferred_network_mode_summary" msgid="3787989000044330064">"Ubah mode pengoperasian jaringan"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Jenis jaringan yang dipilih"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Jenis jaringan preferensi"</string>
<string name="forbidden_network" msgid="5081729819561333023">"(terlarang)"</string>
<string name="choose_network_title" msgid="5335832663422653082">"Pilih jaringan"</string>
<string name="network_disconnected" msgid="8844141106841160825">"Terputus"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 07b362d..f4ca8d8 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Slökkt er á CDMA-símtölum í bið undir spjalli"</string>
<string name="updating_title" msgid="6130548922615719689">"Símtalsstillingar"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Aðeins stjórnandinn má breyta símtalsstillingum."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Stillingar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Villa í símtalsstillingum"</string>
<string name="reading_settings" msgid="1605904432450871183">"Les stillingar…"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index edc2cc3..2225a47 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Avviso di chiamata CDMA con IMS disattivato"</string>
<string name="updating_title" msgid="6130548922615719689">"Impostazioni chiamate"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Le impostazioni delle chiamate possono essere modificate solo dall\'utente amministratore."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Impostazioni (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Errore durante aggiornam. impostaz. chiamate"</string>
<string name="reading_settings" msgid="1605904432450871183">"Lettura impostazioni..."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index cb16eb2..036104a 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"השיחה הממתינה ברשת CDMA ב-IMS מושבתת"</string>
<string name="updating_title" msgid="6130548922615719689">"הגדרות שיחה"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"רק מנהל המערכת יכול לשנות הגדרות שיחה."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"הגדרות (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"שגיאה בהגדרות שיחה"</string>
<string name="reading_settings" msgid="1605904432450871183">"קריאת ההגדרות מתבצעת…"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 647a54d..6f9dae0 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS での CDMA 通話中着信が OFF になっています"</string>
<string name="updating_title" msgid="6130548922615719689">"通話設定"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"通話設定は管理者ユーザーのみが変更できます。"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"設定(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"通話設定エラー"</string>
<string name="reading_settings" msgid="1605904432450871183">"設定を読み取り中..."</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 38aff47..b572f7e 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA ზარის ლოდინი IMS-ში გამორთულია"</string>
<string name="updating_title" msgid="6130548922615719689">"ზარის პარამეტრები"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ზარის პარამეტრების შეცვლა მხოლოდ მომხმარებელ-ადმინისტრატორს შეუძლია."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ტელეფონის ანგარიშის პარამეტრების შეცვლა შეუძლია მხოლოდ ადმინს ან სამსახურის მომხმარებელს."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"პარამეტრები (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ზარის პარამეტრების შეცდომა"</string>
<string name="reading_settings" msgid="1605904432450871183">"პარამეტრების წაკითხვა…"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 55026e5..6ac155e 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS бойынша басқа CDMA желісіндегі қоңырауды ұстап тұру мүмкіндігі өшірулі."</string>
<string name="updating_title" msgid="6130548922615719689">"Қоңырау параметрлері"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Қоңырау параметрлерін тек әкімші пайдаланушы өзгерте алады."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Параметрлер (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Қоңырау параметрлерінің қателігі"</string>
<string name="reading_settings" msgid="1605904432450871183">"Параметрлерді оқуда…"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index ee9bb00..045a8db 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"ការរង់ចាំការហៅ ទូរសព្ទ CDMA ក្រោម IMS ត្រូវបានបិទ"</string>
<string name="updating_title" msgid="6130548922615719689">"កំណត់ការហៅ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ការកំណត់ការហៅអាចផ្លាស់ប្តូរបានដោយអ្នកប្រើដែលមានសិទ្ធិគ្រប់គ្រងតែប៉ុណ្ណោះ។"</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"មានតែអ្នកគ្រប់គ្រង ឬអ្នកប្រើប្រាស់ពាក់ព័ន្ធនឹងការងារប៉ុណ្ណោះ ទើបអាចផ្លាស់ប្ដូរការកំណត់គណនីទូរសព្ទបាន។"</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"ការកំណត់ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"បញ្ហាការកំណត់ការហៅ"</string>
<string name="reading_settings" msgid="1605904432450871183">"កំពុងអានការកំណត់…"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index fc0e952..666cbb0 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS ಆಫ್ ಅಡಿಯಲ್ಲಿ CDMA ಕರೆ ನಿರೀಕ್ಷೆ"</string>
<string name="updating_title" msgid="6130548922615719689">"ಕರೆ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ಕರೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಕೇವಲ ನಿರ್ವಾಹಕ ಬಳಕೆದಾರರು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ಫೋನ್ ಖಾತೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿರ್ವಾಹಕ ಅಥವಾ ಕೆಲಸದ ಬಳಕೆದಾರರು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"ಸೆಟ್ಟಿಂಗ್ಗಳು (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ಕರೆ ಸೆಟ್ಟಿಂಗ್ಗಳ ದೋಷ"</string>
<string name="reading_settings" msgid="1605904432450871183">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಓದಲಾಗುತ್ತಿದೆ…"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index a343348..c23ec1c 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS에서 CDMA 통화중 대기 사용 안함"</string>
<string name="updating_title" msgid="6130548922615719689">"통화 설정"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"관리자만 통화 설정을 변경할 수 있습니다."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"설정(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"통화 설정 오류"</string>
<string name="reading_settings" msgid="1605904432450871183">"설정을 읽는 중..."</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index a0e990a..0e4a9d1 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS платформасында CDMA чалуу күтүүcү өчүрүлгөн"</string>
<string name="updating_title" msgid="6130548922615719689">"Чалуу параметрлери"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Чалуу параметрлерин администратор гана өзгөртө алат."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Параметрлер (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Чалуу жөндөөлөрүндө ката кетти"</string>
<string name="reading_settings" msgid="1605904432450871183">"Параметрлер окулууда…"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 4809c0d..6bbec12 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"ການລໍຖ້າສາຍ CDMA ພາຍໃຕ້ IMS ປິດຢູ່"</string>
<string name="updating_title" msgid="6130548922615719689">"ການຕັ້ງຄ່າການໂທ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ມີແຕ່ຜູ້ໃຊ້ທີ່ເປັນຜູ້ດູແລລະບົບເທົ່ານັ້ນທີ່ສາມາດປ່ຽນການຕັ້ງຄ່າການໂທໄດ້."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"ການຕັ້ງຄ່າ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ການຕັ້ງຄ່າການໂທຜິດພາດ"</string>
<string name="reading_settings" msgid="1605904432450871183">"ກຳລັງອ່ານການຕັ້ງຄ່າ..."</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 6af3c18..b0f5f86 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA laukiamų skambučių paslauga įjungus IMS išjungta"</string>
<string name="updating_title" msgid="6130548922615719689">"Skambinimo nustatymai"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Skambučių nustatymus gali keisti tik administruojantis naudotojas."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefono paskyros nustatymus gali keisti tik administratorius arba darbo paskyros naudotojas."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Nustatymai (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Skambinimo nustatymų klaida"</string>
<string name="reading_settings" msgid="1605904432450871183">"Analizuojami nustatymai..."</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index eba0413..a87f800 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA zvanu gaidīšana, kad ir izslēgts tūlītējās ziņojumapmaiņas pakalpojums"</string>
<string name="updating_title" msgid="6130548922615719689">"Zvanu iestatījumi"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Tikai lietotājs ar administratora tiesībām var mainīt zvanu iestatījumus."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Iestatījumi (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Zvanu iestatījumu kļūda"</string>
<string name="reading_settings" msgid="1605904432450871183">"Notiek iestatījumu lasīšana..."</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index d8a1cb6..18ed9b4 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Повикот на чекање CDMA под IMS е исклучен"</string>
<string name="updating_title" msgid="6130548922615719689">"Поставки за повици"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Поставките за повик може да ги измени само администраторскиот корисник."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Поставки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Грешка со поставки на повици"</string>
<string name="reading_settings" msgid="1605904432450871183">"Се читаат поставките..."</string>
@@ -152,7 +154,7 @@
<string name="change_num" msgid="6982164494063109334">"Ажурирај"</string>
<string-array name="clir_display_values">
<item msgid="8477364191403806960">"Стандардна мрежа"</item>
- <item msgid="6813323051965618926">"Сокриј број"</item>
+ <item msgid="6813323051965618926">"Скриј број"</item>
<item msgid="9150034130629852635">"Прикажи број"</item>
</string-array>
<string name="vm_changed" msgid="4739599044379692505">"Бројот на говорна пошта е променет."</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 4977d58..b424f6f 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS-ന് കീഴിലുള്ള CDMA കോൾ വെയ്റ്റിംഗ് ഓഫാണ്"</string>
<string name="updating_title" msgid="6130548922615719689">"കോൾ ക്രമീകരണങ്ങൾ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"അഡ്മിൻ ഉപയോക്താവിന് മാത്രമേ കോൾ ക്രമീകരണം മാറ്റാൻ കഴിയൂ."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"അഡ്മിനോ ഔദ്യോഗിക ഉപയോക്താവിനോ മാത്രമേ ഫോൺ അക്കൗണ്ട് ക്രമീകരണം മാറ്റാനാകൂ."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"ക്രമീകരണം (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"കോൾ ക്രമീകരണ പിശക്"</string>
<string name="reading_settings" msgid="1605904432450871183">"ക്രമീകരണങ്ങൾ റീഡ് ചെയ്യുന്നു.…"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 920074d..226ff47 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS доорх CDMA-н \"Дуудлага хүлээлгэнд\" тохиргоо унтраалттай байна"</string>
<string name="updating_title" msgid="6130548922615719689">"Дуудлагын тохиргоо"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Дуудлагын тохиргоог зөвхөн админ хэрэглэгч солих боломжтой."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Тохиргоо (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Дуудлагын тохиргооны алдаа"</string>
<string name="reading_settings" msgid="1605904432450871183">"Тохиргоог уншиж байна…"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index e914d4c..fb0315b 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS मध्ये CDMA कॉल वेटिंग बंद आहे"</string>
<string name="updating_title" msgid="6130548922615719689">"कॉल सेटिंग्ज"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"कॉल सेटिंग्ज केवळ प्रशासक वापरकर्त्याद्वारे बदलल्या जाऊ शकतात."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"सेटिंग्ज (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"कॉल सेटिंग्ज एरर"</string>
<string name="reading_settings" msgid="1605904432450871183">"सेटिंग्ज वाचत आहे…"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 6ff9621..c3ef184 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Panggilan Menunggu CDMA di bawah IMS Dimatikan"</string>
<string name="updating_title" msgid="6130548922615719689">"Tetapan panggilan"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Tetapan panggilan hanya boleh diubah oleh pengguna pentadbir."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Tetapan akaun telefon hanya boleh ditukar oleh pentadbir atau pengguna di tempat kerja."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"Tetapan (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Ralat tetapan panggilan"</string>
<string name="reading_settings" msgid="1605904432450871183">"Membaca tetapan..."</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index dea794d..4c73a1b 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS အောက်ရှိ CDMA အဝင်ဖုန်း စောင့်ဆိုင်းခြင်းကို ပိတ်ထားသည်"</string>
<string name="updating_title" msgid="6130548922615719689">"ဖုန်းခေါ်ဆိုခြင်း ဆက်တင်များ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ခေါ်ဆိုမှုကြိုတင်ပြင်ဆင်ချက်များကို ကြီးကြပ်သူသာလျှင် ပြောင်းလဲနိုင်သည်။"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"ဆက်တင်များ ( <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g> )"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ခေါ်ဆိုမှုဆက်တင်အမှား"</string>
<string name="reading_settings" msgid="1605904432450871183">"ဆက်တင်များကို ဖတ်နေပါသည်…"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 700221e..cb81a6c 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA samtale venter under IMS er av"</string>
<string name="updating_title" msgid="6130548922615719689">"Samtaleinnstillinger"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Anropsinnstillinger kan bare endres av administratoren."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Innstillinger (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Feil ved samtaleinnstillinger"</string>
<string name="reading_settings" msgid="1605904432450871183">"Leser innstillingene …"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 66c41c9..ccfed3b 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS अन्तर्गत CDMA कल प्रतीक्षाको सुविधा निष्क्रिय छ"</string>
<string name="updating_title" msgid="6130548922615719689">"कल सेटिङहरू"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"कल सेटिङहरू केवल प्रशासकीय प्रयोगकर्ताद्वारा परिवर्तन गर्न सकिन्छ।"</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"एड्मिन वा कार्य प्रोफाइलका प्रयोगकर्ताले मात्र फोनको खाताका सेटिङ बदल्न सक्छन्।"</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"सेटिङहरू (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"कल सेटिङमा त्रुटि"</string>
<string name="reading_settings" msgid="1605904432450871183">"सेटिङहरू पढ्दै..."</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 8ccd4c3..5a756c6 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-wisselgesprek onder IMS uit"</string>
<string name="updating_title" msgid="6130548922615719689">"Gespreksinstellingen"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Oproepinstellingen kunnen alleen worden gewijzigd door de beheerder."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Instellingen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Fout met oproepinstellingen"</string>
<string name="reading_settings" msgid="1605904432450871183">"Instellingen lezen..."</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 8dd4ea2..58e8749 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMSରେ CDMA \'କଲ୍ ୱେଟିଂ\' ସୁବିଧା ବନ୍ଦ ଅଛି"</string>
<string name="updating_title" msgid="6130548922615719689">"କଲ ସେଟିଂସ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"କଲ ସେଟିଂସକୁ କେବଳ ଆଡମିନ ୟୁଜର ବଦଳାଇପାରିବେ।"</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ଫୋନ ଆକାଉଣ୍ଟ ସେଟିଂସ କେବଳ ଆଡମିନ କିମ୍ବା ୱାର୍କ ୟୁଜରଙ୍କ ଦ୍ୱାରା ପରିବର୍ତ୍ତନ କରାଯାଇପାରିବ।"</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"ସେଟିଙ୍ଗ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"କଲ୍ ସେଟିଙ୍ଗରେ ତ୍ରୁଟି"</string>
<string name="reading_settings" msgid="1605904432450871183">"ସେଟିଂସକୁ ପଢ଼ାଯାଉଛି…"</string>
@@ -850,7 +851,7 @@
<string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ରେଜିଷ୍ଟ୍ରସନ୍: <xliff:g id="STATUS">%1$s</xliff:g>\nଭଏସ୍ ଓଭର୍ LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nଭଏସ୍ ଓଭର୍ ୱାଇ-ଫାଇ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nଭିଡିଓ କଲିଙ୍ଗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ଇଣ୍ଟର୍ଫେସ୍: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"ସେବାରେ ଅଛି"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"ଏବେ କାମ କରୁନାହିଁ"</string>
- <string name="radioInfo_service_emergency" msgid="4763879891415016848">"କେବଳ ଜରୁରୀକାଳୀନ କଲ୍"</string>
+ <string name="radioInfo_service_emergency" msgid="4763879891415016848">"କେବଳ ଜରୁରୀକାଳୀନ କଲ"</string>
<string name="radioInfo_service_off" msgid="3456583511226783064">"ରେଡିଓ ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="radioInfo_roaming_in" msgid="3156335577793145965">"ରୋମିଂ"</string>
<string name="radioInfo_roaming_not" msgid="1904547918725478110">"ରୋମିଂରେ ନାହିଁ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index a779567..37e9cca 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS ਦੇ ਅਧੀਨ CDMA ਕਾਲ ਦੀ ਉਡੀਕ ਵਾਲੀ ਸੁਵਿਧਾ ਬੰਦ ਹੈ"</string>
<string name="updating_title" msgid="6130548922615719689">"ਕਾਲ ਸੈਟਿੰਗਾਂ"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਸਿਰਫ਼ ਪ੍ਰਸ਼ਾਸਕ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਹੀ ਬਦਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"ਸੈਟਿੰਗਾਂ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਗੜਬੜ"</string>
<string name="reading_settings" msgid="1605904432450871183">"ਸੈਟਿੰਗਾਂ ਪੜ੍ਹ ਰਿਹਾ ਹੈ…"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9b060aa..93d8c9a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Połączenie oczekujące CDMA, gdy usługa IMS jest wyłączona"</string>
<string name="updating_title" msgid="6130548922615719689">"Ustawienia połączeń"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Ustawienia połączeń może zmieniać tylko użytkownik będący administratorem."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Ustawienia (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Błąd w ustawieniach połączenia"</string>
<string name="reading_settings" msgid="1605904432450871183">"Czytanie ustawień..."</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 1afd7aa..e6393fa 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Chamada em espera CDMA em IMS desativada"</string>
<string name="updating_title" msgid="6130548922615719689">"Definições de chamadas"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"As definições de chamadas só podem ser alteradas pelo utilizador gestor."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Definições (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Erro nas definições de chamada"</string>
<string name="reading_settings" msgid="1605904432450871183">"A ler as definições..."</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index eca6894..8ec1e3d 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"A chamada CDMA em espera está desativada no IMS"</string>
<string name="updating_title" msgid="6130548922615719689">"Configurações de chamadas"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"As configurações de chamada só podem ser alteradas pelo usuário administrador."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Configurações (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Erro de configuração da chamada"</string>
<string name="reading_settings" msgid="1605904432450871183">"Lendo as configurações…"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 8e59266..db37a7b 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Apelurile în așteptare CDMA din IMS sunt dezactivate"</string>
<string name="updating_title" msgid="6130548922615719689">"Setări pentru apeluri"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Numai administratorul poate să modifice setările pentru apeluri."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Setări (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Eroare în setările pentru apeluri"</string>
<string name="reading_settings" msgid="1605904432450871183">"Se citesc setările..."</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 61d796a..f673f3c 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Ожидание вызова CDMA, если сервис IMS выключен"</string>
<string name="updating_title" msgid="6130548922615719689">"Настройки вызовов"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Настройки вызовов может изменить только основной пользователь"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Настройки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Ошибка настройки вызовов"</string>
<string name="reading_settings" msgid="1605904432450871183">"Чтение настроек…"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 2cb36b6..cd81deb 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS යටත් CDMA ඇමතුම රඳවා ගැනීම ක්රියාවිරහිතයි"</string>
<string name="updating_title" msgid="6130548922615719689">"ඇමතුම් සැකසීම්"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ඇමතුම් සැකසීම් වෙනස් කළ හැක්කේ පරිපාලක පරිශීලකයාට පමණි."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"සැකසීම් (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ඇමතුම් සැකසුම් දෝෂය"</string>
<string name="reading_settings" msgid="1605904432450871183">"සැකසුම් කියවමින්…"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7dcc467..ce9321b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA – čakajúci hovor v službe IMS – vypnuté"</string>
<string name="updating_title" msgid="6130548922615719689">"Nastavenia hovorov"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Nastavenia hovorov môže zmeniť iba používateľ s povoleniami správcu."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Nastavenia (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Chyba nastavení hovorov"</string>
<string name="reading_settings" msgid="1605904432450871183">"Nastavenia sa načítavajú…"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 327e2b4..b0974d2 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Čakajoči klic CDMA v sistemu IMS je izklopljen"</string>
<string name="updating_title" msgid="6130548922615719689">"Nastavitve klicev"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Nastavitve klicanja lahko spremeni samo uporabnik s skrbniškim dostopom."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Nastavitve (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Napaka nastavitev klicev"</string>
<string name="reading_settings" msgid="1605904432450871183">"Branje nastavitev …"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 75afce1..029ab6d 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Telefonatat në pritje CDMA në sistemin IMS janë joaktive"</string>
<string name="updating_title" msgid="6130548922615719689">"Cilësimet e telefonatës"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Cilësimet e telefonatës mund të ndryshohen vetëm nga administratori."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Cilësimet (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Gabim në cilësimet e telefonatës"</string>
<string name="reading_settings" msgid="1605904432450871183">"Po lexon cilësimet…"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 3b754b1..85a1ee5 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Стављање CDMA позива на чекање у IMS-у је искључено"</string>
<string name="updating_title" msgid="6130548922615719689">"Подешавања позива"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Само кориснику са администраторским правима је дозвољено да мења подешавања позива."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Подешавања (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Грешка у подешавањима позива"</string>
<string name="reading_settings" msgid="1605904432450871183">"Подешавања се учитавају…"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 0021e6d..ea31030 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA samtal väntar under IMS av"</string>
<string name="updating_title" msgid="6130548922615719689">"Samtalsinställningar"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Det är bara administratören som kan ändra samtalsinställningar."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Inställningar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Felaktiga samtalsinställningar"</string>
<string name="reading_settings" msgid="1605904432450871183">"Läser inställningar…"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 0a73885..9f06743 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Kipengele cha Simu Inayosubiri Kupokewa ya CDMA chini ya IMS Kimezimwa"</string>
<string name="updating_title" msgid="6130548922615719689">"Mipangilio ya simu"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Mipangilio ya simu inaweza kubadilishwa na mtumiaji wa akaunti ya msimamizi."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Mipangilio (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Hitilafu ya mipangilio ya kupiga simu"</string>
<string name="reading_settings" msgid="1605904432450871183">"Inasoma mipangilio…."</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 33db134..7529f21 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA அழைப்பு காத்திருப்பு IMS முடக்கத்தில்"</string>
<string name="updating_title" msgid="6130548922615719689">"அழைப்பு அமைப்பு"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"நிர்வாகிப் பயனர் மட்டுமே அழைப்பிற்கான அமைப்புகளை மாற்ற முடியும்."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"அமைப்புகள் (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"அழைப்பு அமைப்புகளில் பிழை"</string>
<string name="reading_settings" msgid="1605904432450871183">"அமைப்புகளைப் படிக்கிறது…"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index a62c6a5..8c1aa45 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMSలో CDMA కాల్ వెయిటింగ్ ఆఫ్లో ఉంది"</string>
<string name="updating_title" msgid="6130548922615719689">"కాల్ సెట్టింగ్లు"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"కాల్ సెట్టింగ్లను నిర్వాహక వినియోగదారు మాత్రమే మార్చగలరు."</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ఫోన్ ఖాతా సెట్టింగ్లను అడ్మిన్ లేదా వర్క్ యూజర్ మాత్రమే మార్చగలరు."</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"సెట్టింగ్లు (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"కాల్ సెట్టింగ్ల ఎర్రర్"</string>
<string name="reading_settings" msgid="1605904432450871183">"సెట్టింగ్లను చదువుతోంది…"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 029c6f3..df31726 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -133,6 +133,7 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"ปิดใช้สายเรียกซ้อนระบบ CDMA ภายใต้ IMS"</string>
<string name="updating_title" msgid="6130548922615719689">"การตั้งค่าการโทร"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"ผู้ใช้ระดับผู้ดูแลระบบเท่านั้นที่สามารถเปลี่ยนแปลงการตั้งค่าการโทรได้"</string>
+ <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"เฉพาะผู้ดูแลระบบหรือผู้ใช้ที่ทำงานเท่านั้นที่สามารถเปลี่ยนการตั้งค่าบัญชีของโทรศัพท์ได้"</string>
<string name="call_settings_with_label" msgid="8460230435361579511">"การตั้งค่า (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"ข้อผิดพลาดในการตั้งค่าการโทร"</string>
<string name="reading_settings" msgid="1605904432450871183">"กำลังประมวลการตั้งค่า…"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 37b3f44..984cf84 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Naka-off ang CDMA Call Waiting sa IMS"</string>
<string name="updating_title" msgid="6130548922615719689">"Mga setting ng tawag"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Ang admin user lang ang maaaring magbago sa mga setting ng tawag."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Mga Setting (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Error sa mga setting ng tawag"</string>
<string name="reading_settings" msgid="1605904432450871183">"Binabasa ang mga setting…"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 6916fde..72fa19f 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS altında CDMA Arama Bekletme Devre Dışı"</string>
<string name="updating_title" msgid="6130548922615719689">"Çağrı ayarları"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Çağrı ayarları sadece yönetici tarafından değiştirilebilir."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Ayarlar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Çağrı ayarları hatası"</string>
<string name="reading_settings" msgid="1605904432450871183">"Ayarlar okunuyor..."</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ea49e93..69ae6a4 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Паралельний виклик CDMA на платформі IMS вимкнено"</string>
<string name="updating_title" msgid="6130548922615719689">"Налаштування викликів"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Налаштування викликів може змінювати лише адміністратор."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Налаштування (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Помилка налаштування викликів"</string>
<string name="reading_settings" msgid="1605904432450871183">"Читання налаштувань…"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index ebac5d0..512e593 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="phoneAppLabel" product="tablet" msgid="1916019789885839910">"موبائل ڈیٹا"</string>
<string name="phoneAppLabel" product="default" msgid="130465039375347763">"فون سروسز"</string>
- <string name="emergencyDialerIconLabel" msgid="8668005772339436680">"ہنگامی ڈائلر"</string>
+ <string name="emergencyDialerIconLabel" msgid="8668005772339436680">"ایمرجنسی ڈائلر"</string>
<string name="phoneIconLabel" msgid="3015941229249651419">"فون"</string>
<string name="fdnListLabel" msgid="4119121875004244097">"FDN کی فہرست"</string>
<string name="unknown" msgid="8279698889921830815">"نامعلوم"</string>
@@ -84,7 +84,7 @@
<string name="smart_forwarding_settings_menu" msgid="8850429887958938540">"اسمارٹ فارورڈنگ"</string>
<string name="smart_forwarding_settings_menu_summary" msgid="5096947726032885325">"ایک نمبر کے قابل رسائی نہ ہونے کی صورت میں کالز کو ہمیشہ دوسرے نمبر پر فارورڈ کریں"</string>
<string name="voicemail_notifications_preference_title" msgid="7829238858063382977">"اطلاعات"</string>
- <string name="cell_broadcast_settings" msgid="8135324242541809924">"ہنگامی براڈکاسٹس"</string>
+ <string name="cell_broadcast_settings" msgid="8135324242541809924">"ایمرجنسی براڈکاسٹس"</string>
<string name="call_settings" msgid="3677282690157603818">"کال کی ترتیبات"</string>
<string name="additional_gsm_call_settings" msgid="1561980168685658846">"اضافی ترتیبات"</string>
<string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"اضافی ترتیبات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS آف کے تحت CDMA کال کا انتظار کرنا"</string>
<string name="updating_title" msgid="6130548922615719689">"کال کی ترتیبات"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"صرف منتظم صارف ہی کال کی ترتیبات تبدیل کر سکتا ہے۔"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"ترتیبات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"کال کی ترتیبات کی خرابی"</string>
<string name="reading_settings" msgid="1605904432450871183">"ترتیبات کو پڑھ رہا ہے…"</string>
@@ -329,9 +331,9 @@
<string name="cell_bc_sms_enable" msgid="2019708772024632073">"سیل نشریہ SMS فعال ہوگیا"</string>
<string name="cell_bc_sms_disable" msgid="1214238639910875347">"سیل نشریہ SMS غیر فعال ہوگیا"</string>
<string name="cb_sms_settings" msgid="6858093721831312036">"سیل نشریہ SMS کی ترتیبات"</string>
- <string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"ہنگامی نشریہ"</string>
- <string name="emergency_broadcast_enable" msgid="5759610647771102442">"ہنگامی نشریہ فعال ہوگیا"</string>
- <string name="emergency_broadcast_disable" msgid="2844904734469323266">"ہنگامی نشریہ غیر فعال ہوگیا"</string>
+ <string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"ایمرجنسی نشریہ"</string>
+ <string name="emergency_broadcast_enable" msgid="5759610647771102442">"ایمرجنسی نشریہ فعال ہوگیا"</string>
+ <string name="emergency_broadcast_disable" msgid="2844904734469323266">"ایمرجنسی نشریہ غیر فعال ہوگیا"</string>
<string name="enable_disable_administrative" msgid="7825925366822117961">"انتظامی"</string>
<string name="administrative_enable" msgid="5717963431079532028">"انتظامی فعال ہوگیا"</string>
<string name="administrative_disable" msgid="156796633660118691">"انتظامی غیر فعال ہوگیا"</string>
@@ -537,8 +539,8 @@
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"کال کرنے کیلئے موبائل نیٹ ورک آن کریں، ہوائی جہاز موڈ یا بیٹری سیور موڈ آف کریں۔"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"کال کرنے کیلئے ہوائی جہاز وضع آف کریں۔"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"کال کرنے کیلئے ہوائی جہاز وضع آف کریں یا کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"فون بہت گرم ہے"</b>\n\n"اس کال کو مکمل نہیں کیا جا سکتا۔ جب آپ کا فون ٹھنڈا ہو جائے تو دوبارہ کوشش کریں۔\n\nآپ اب بھی ہنگامی کالز کر سکتے ہیں۔"</string>
- <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"غیر ہنگامی کال کرنے کیلئے ہنگامی کال بیک موڈ سے اخراج کریں۔"</string>
+ <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"فون بہت گرم ہے"</b>\n\n"اس کال کو مکمل نہیں کیا جا سکتا۔ جب آپ کا فون ٹھنڈا ہو جائے تو دوبارہ کوشش کریں۔\n\nآپ اب بھی ایمرجنسی کالز کر سکتے ہیں۔"</string>
+ <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"غیر ایمرجنسی کال کرنے کیلئے ایمرجنسی کال بیک موڈ سے اخراج کریں۔"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"نیٹ ورک پر رجسٹرڈ نہیں ہے۔"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"موبائل نیٹ ورک دستیاب نہیں ہے۔"</string>
<string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"موبائل نیٹ ورک دستیاب نہیں ہے۔ کال کرنے کیلئے کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
@@ -556,19 +558,19 @@
<string name="incall_error_supp_service_hold" msgid="8535056414643540997">"کالز کو ہولڈ نہیں کیا جا سکتا۔"</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"کال کرنے کیلئے کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
<string name="incall_error_promote_wfc" msgid="9164896813931363415">"کال کرنے کیلئے Wi-Fi کالنگ فعال کریں۔"</string>
- <string name="emergency_information_hint" msgid="9208897544917793012">"ہنگامی معلومات"</string>
+ <string name="emergency_information_hint" msgid="9208897544917793012">"ایمرجنسی معلومات"</string>
<string name="emergency_information_owner_hint" msgid="6256909888049185316">"مالک"</string>
<string name="emergency_information_confirm_hint" msgid="5109017615894918914">"معلومات دیکھنے کیلئے دوبارہ تھپتھپائیں"</string>
- <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"ہنگامی کال"</string>
+ <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"ایمرجنسی کال"</string>
<string name="single_emergency_number_title" msgid="8413371079579067196">"ایمرجنسی نمبر"</string>
<string name="numerous_emergency_numbers_title" msgid="8972398932506755510">"ایمرجنسی نمبرز"</string>
<string name="emergency_call_shortcut_hint" msgid="1290485125107779500">"<xliff:g id="EMERGENCY_NUMBER">%s</xliff:g> کو کال کرنے کے لئے دوبارہ تھپتھپائيں"</string>
<string name="emergency_enable_radio_dialog_message" msgid="1695305158151408629">"ریڈیو آن کر رہا ہے…"</string>
<string name="emergency_enable_radio_dialog_retry" msgid="4329131876852608587">"کوئی سروس نہیں ہے۔ دوبارہ کوشش کی جا رہی ہے…"</string>
- <string name="radio_off_during_emergency_call" msgid="8011154134040481609">"ہنگامی کال کے دوران ہوائی جہاز موڈ میں داخل نہیں ہو سکتا۔"</string>
- <string name="dial_emergency_error" msgid="825822413209026039">"کال نہیں کی جا سکتی۔ <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> ایک ہنگامی نمبر نہیں ہے۔"</string>
- <string name="dial_emergency_empty_error" msgid="2785803395047793634">"کال نہیں کی جا سکتی۔ ایک ہنگامی نمبر ڈائل کریں۔"</string>
- <string name="dial_emergency_calling_not_available" msgid="6485846193794727823">"ہنگامی کالنگ دستیاب نہیں ہے"</string>
+ <string name="radio_off_during_emergency_call" msgid="8011154134040481609">"ایمرجنسی کال کے دوران ہوائی جہاز موڈ میں داخل نہیں ہو سکتا۔"</string>
+ <string name="dial_emergency_error" msgid="825822413209026039">"کال نہیں کی جا سکتی۔ <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> ایک ایمرجنسی نمبر نہیں ہے۔"</string>
+ <string name="dial_emergency_empty_error" msgid="2785803395047793634">"کال نہیں کی جا سکتی۔ ایک ایمرجنسی نمبر ڈائل کریں۔"</string>
+ <string name="dial_emergency_calling_not_available" msgid="6485846193794727823">"ایمرجنسی کالنگ دستیاب نہیں ہے"</string>
<string name="pin_puk_system_user_only" msgid="1045147220686867922">"صرف آلہ کا مالک ہی PIN/PUK کوڈ درج کرسکتا ہے۔"</string>
<string name="police_type_description" msgid="2819533883972081757">"پولیس"</string>
<string name="ambulance_type_description" msgid="6798237503553180461">"ایمبولینس"</string>
@@ -633,18 +635,18 @@
<string name="ota_try_again" msgid="6914781945599998550">"دوبارہ کوشش کریں"</string>
<string name="ota_next" msgid="2041016619313475914">"اگلا"</string>
<string name="ecm_exit_dialog" msgid="4200691880721429078">"EcmExitDialog"</string>
- <string name="phone_entered_ecm_text" msgid="8431238297843035842">"ہنگامی کال بیک طرز میں داخل ہو گیا"</string>
- <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"ہنگامی کال بیک طرز"</string>
+ <string name="phone_entered_ecm_text" msgid="8431238297843035842">"ایمرجنسی کال بیک طرز میں داخل ہو گیا"</string>
+ <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"ایمرجنسی کال بیک طرز"</string>
<string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"ڈیٹا کنکشن غیر فعال ہوگیا"</string>
<string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"<xliff:g id="COMPLETETIME">%s</xliff:g> تک کوئی ڈیٹا کنکشن نہیں"</string>
<string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{فون ایک منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔ اس وضع میں رہتے ہوئے ڈیٹا کنکشن کا استعمال کرنے والی کوئی بھی ایپ استعمال نہیں ہو سکتی۔ کیا آپ ابھی باہر نکلنا چاہتے ہیں؟}other{فون %s منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔ اس وضع میں رہتے ہوئے ڈیٹا کنکشن کا استعمال کرنے والی کوئی بھی ایپلیکیشن استعمال نہیں ہو سکتی۔ کیا آپ ابھی باہر نکلنا چاہتے ہیں؟}}"</string>
<string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{منتخب کردہ کارروائی ایمرجنسی کال بیک وضع میں دستیاب نہیں ہے۔ فون ایک منٹ تک اس وضع میں رہے گا۔ کیا آپ ابھی نکلنا چاہتے ہیں؟}other{منتخب کردہ کارروائی ایمرجنسی کال بیک وضع میں دستیاب نہیں ہے۔ فون %s منٹ تک اس وضع میں رہے گا۔ کیا آپ ابھی نکلنا چاہتے ہیں؟}}"</string>
- <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"منتخب کردہ کارروائی ایک ہنگامی کال میں رہتے ہوئے دستیاب نہیں ہے۔"</string>
- <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"موجودہ ہنگامی کال بیک طرز"</string>
+ <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"منتخب کردہ کارروائی ایک ایمرجنسی کال میں رہتے ہوئے دستیاب نہیں ہے۔"</string>
+ <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"موجودہ ایمرجنسی کال بیک طرز"</string>
<string name="alert_dialog_yes" msgid="3532525979632841417">"ہاں"</string>
<string name="alert_dialog_no" msgid="1075632654085988420">"نہیں"</string>
<string name="alert_dialog_dismiss" msgid="1336356286354517054">"کالعدم کریں"</string>
- <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"فون ہنگامی کال بیک وضع میں ہے"</string>
+ <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"فون ایمرجنسی کال بیک وضع میں ہے"</string>
<string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"<xliff:g id="COMPLETETIME">%s</xliff:g> تک"</string>
<string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{فون ایک منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔\nکیا آپ ابھی باہر نکلنا چاہتے ہیں؟}other{فون %s منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔\nکیا آپ ابھی باہر نکلنا چاہتے ہیں؟}}"</string>
<string name="voicemail_provider" msgid="4158806657253745294">"سروس"</string>
@@ -668,8 +670,8 @@
<string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ویڈیو کالنگ کو آن کرنے کیلئے، آپ کیلئے نیٹ ورک ترتیبات میں Enhanced 4G LTE وضع فعال کرنا ضروری ہے۔"</string>
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"نیٹ ورک کی ترتیبات"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"بند کریں"</string>
- <string name="sim_label_emergency_calls" msgid="9078241989421522310">"ہنگامی کالز"</string>
- <string name="sim_description_emergency_calls" msgid="5146872803938897296">"صرف ہنگامی کالنگ"</string>
+ <string name="sim_label_emergency_calls" msgid="9078241989421522310">"ایمرجنسی کالز"</string>
+ <string name="sim_description_emergency_calls" msgid="5146872803938897296">"صرف ایمرجنسی کالنگ"</string>
<string name="sim_description_default" msgid="7474671114363724971">"SIM کارڈ، سلاٹ: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
<string name="accessibility_settings_activity_title" msgid="7883415189273700298">"ایکسیسبیلٹی"</string>
<string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"Wi-Fi کال منجانب"</string>
@@ -681,7 +683,7 @@
<string name="callFailed_wifi_lost" msgid="1788036730589163141">"Wi-Fi کنکشن کھو گیا۔ کال ختم ہو گئی۔"</string>
<string name="dialFailed_low_battery" msgid="6857904237423407056">"کم بیٹری کی وجہ سے آپ کی ویڈیو کال نہیں کی جا سکتی۔"</string>
<string name="callFailed_low_battery" msgid="4056828320214416182">"کم بیٹری کی وجہ سے ویڈیو کال ختم ہو گئی۔"</string>
- <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"اس مقام میں Wi-Fi کالنگ پر ہنگامی کالز دستیاب نہیں ہیں۔"</string>
+ <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"اس مقام میں Wi-Fi کالنگ پر ایمرجنسی کالز دستیاب نہیں ہیں۔"</string>
<string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"اس مقام میں Wi-Fi کالنگ دستیاب نہیں ہے۔"</string>
<string name="change_pin_title" msgid="3564254326626797321">"صوتی میل PIN تبدیل کریں"</string>
<string name="change_pin_continue_label" msgid="5177011752453506371">"جاری رکھیں"</string>
@@ -850,7 +852,7 @@
<string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS رجسٹریشن: <xliff:g id="STATUS">%1$s</xliff:g>\nوائس اوور LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nوائس اوور WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nویڈیو کالنگ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT انٹرفیس: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"سروس میں"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"سروس میں نہیں ہے"</string>
- <string name="radioInfo_service_emergency" msgid="4763879891415016848">"صرف ہنگامی کالیں"</string>
+ <string name="radioInfo_service_emergency" msgid="4763879891415016848">"صرف ایمرجنسی کالیں"</string>
<string name="radioInfo_service_off" msgid="3456583511226783064">"ریڈیو آف کریں"</string>
<string name="radioInfo_roaming_in" msgid="3156335577793145965">"رومنگ"</string>
<string name="radioInfo_roaming_not" msgid="1904547918725478110">"رومنگ میں نہيں"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index dea3dd8..3deb38d 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS asosidagi CDMA chaqiruvlari uchun kutish rejimi faolsizlantirildi"</string>
<string name="updating_title" msgid="6130548922615719689">"Chaqiruv sozlamalari"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Faqat administrator qo‘ng‘iroq sozlamalarini o‘zgartirishi mumkin."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Sozlamalar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Chaqiruv sozlamalarida xato"</string>
<string name="reading_settings" msgid="1605904432450871183">"Sozlamalar olinmoqda…"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index c86c7ef..0576075 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -86,8 +86,8 @@
<string name="voicemail_notifications_preference_title" msgid="7829238858063382977">"Thông báo"</string>
<string name="cell_broadcast_settings" msgid="8135324242541809924">"Phát sóng trong tình huống khẩn cấp"</string>
<string name="call_settings" msgid="3677282690157603818">"Cài đặt cuộc gọi"</string>
- <string name="additional_gsm_call_settings" msgid="1561980168685658846">"Tùy chọn cài đặt bổ sung"</string>
- <string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"Tùy chọn cài đặt bổ sung (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="additional_gsm_call_settings" msgid="1561980168685658846">"Chế độ cài đặt bổ sung"</string>
+ <string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"Chế độ cài đặt bổ sung (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="sum_gsm_call_settings" msgid="7964692601608878138">"Cài đặt cuộc gọi chỉ GSM bổ sung"</string>
<string name="additional_cdma_call_settings" msgid="2178016561980611304">"Cài đặt cuộc gọi CDMA bổ sung"</string>
<string name="sum_cdma_call_settings" msgid="3185825305136993636">"Cài đặt cuộc gọi chỉ CDMA bổ sung"</string>
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Cuộc gọi chờ CDMA trong IMS đang tắt"</string>
<string name="updating_title" msgid="6130548922615719689">"Cài đặt cuộc gọi"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Chỉ người dùng quản trị mới có thể thay đổi cài đặt cuộc gọi."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Cài đặt (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Lỗi cài đặt cuộc gọi"</string>
<string name="reading_settings" msgid="1605904432450871183">"Đang đọc các tùy chọn cài đặt…"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ed1825e..3767caa 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"基于 IMS 的 CDMA 来电等待功能已关闭"</string>
<string name="updating_title" msgid="6130548922615719689">"通话设置"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"只有管理员用户才能更改通话设置。"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"设置(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"通话设置出错"</string>
<string name="reading_settings" msgid="1605904432450871183">"正在读取设置..."</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 0305a04..a691aa5 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -48,7 +48,7 @@
<string name="no_vm_number_msg" msgid="5165161462411372504">"SIM 卡中沒有儲存任何留言信箱號碼。"</string>
<string name="add_vm_number_str" msgid="7368168964435881637">"新增電話號碼"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"只有主要使用者可以修改留言設定。"</string>
- <string name="puk_unlocked" msgid="4627340655215746511">"您的 SIM 卡已解除封鎖。您的手機正在解除鎖定..."</string>
+ <string name="puk_unlocked" msgid="4627340655215746511">"你的 SIM 卡已解除封鎖。你的手機正在解除鎖定..."</string>
<string name="label_ndp" msgid="7617392683877410341">"SIM 網絡解除鎖定 PIN"</string>
<string name="label_phoneid" msgid="8775611434123577808">"流動網絡供應商的 SIM 卡已上鎖"</string>
<string name="sim_ndp_unlock_text" msgid="7737338355451978338">"解除鎖定"</string>
@@ -113,26 +113,28 @@
<string name="messageCFB" msgid="1958017270393563388">"忙線號碼"</string>
<string name="sum_cfb_enabled" msgid="332037613072049492">"轉接至 <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfb_disabled" msgid="3589913334164866035">"關閉"</string>
- <string name="disable_cfb_forbidden" msgid="4831494744351633961">"您的流動網絡供應商不支援在手機通話時停用轉接功能。"</string>
+ <string name="disable_cfb_forbidden" msgid="4831494744351633961">"你的流動網絡供應商不支援在手機通話時停用轉接功能。"</string>
<string name="labelCFNRy" msgid="3403533792248457946">"無人接聽時"</string>
<string name="messageCFNRy" msgid="7644434155765359009">"未接聽時撥號"</string>
<string name="sum_cfnry_enabled" msgid="3000500837493854799">"轉接至 <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnry_disabled" msgid="1990563512406017880">"關閉"</string>
- <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"您的流動網絡供應商不支援在手機未接聽時停用轉接功能。"</string>
+ <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"你的流動網絡供應商不支援在手機未接聽時停用轉接功能。"</string>
<string name="labelCFNRc" msgid="4163399350778066013">"無法接通時"</string>
<string name="messageCFNRc" msgid="6980340731313007250">"無法接通時的轉接號碼"</string>
<string name="sum_cfnrc_enabled" msgid="1799069234006073477">"轉接至 <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnrc_disabled" msgid="739289696796917683">"關閉"</string>
- <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"您的流動網絡供應商不支援在手機無法接通時停用轉接功能。"</string>
- <string name="registration_cf_forbidden" msgid="4386482610771190420">"您的流動網絡供應商不支援來電轉駁。"</string>
+ <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"你的流動網絡供應商不支援在手機無法接通時停用轉接功能。"</string>
+ <string name="registration_cf_forbidden" msgid="4386482610771190420">"你的流動網絡供應商不支援來電轉駁。"</string>
<string name="cdma_call_waiting" msgid="4565070960879673216">"要開啟來電等候功能嗎?"</string>
- <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"您會在通話期間收到來電通知"</string>
+ <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"你會在通話期間收到來電通知"</string>
<string name="enable_cdma_cw" msgid="811047045863422232">"開啟"</string>
<string name="disable_cdma_cw" msgid="7119290446496301734">"取消"</string>
<string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"IMS 下的 CDMA 來電等候功能已開啟"</string>
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS 下的 CDMA 來電等候功能已關閉"</string>
<string name="updating_title" msgid="6130548922615719689">"通話設定"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"只有管理員可以變更通話設定。"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"設定 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"通話設定錯誤"</string>
<string name="reading_settings" msgid="1605904432450871183">"正在讀取設定..."</string>
@@ -144,7 +146,7 @@
<string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS 要求已變更為 USSD 要求"</string>
<string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"已變更為新的 SS 要求"</string>
<string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS 要求已變更為視像通話"</string>
- <string name="fdn_check_failure" msgid="1833769746374185247">"您的「手機」應用程式已開啟固定撥號設定,因此部分撥號相關功能無法正常運作。"</string>
+ <string name="fdn_check_failure" msgid="1833769746374185247">"你的「手機」應用程式已開啟固定撥號設定,因此部分撥號相關功能無法正常運作。"</string>
<string name="radio_off_error" msgid="8321564164914232181">"查看這些設定前,請先開啟無線電。"</string>
<string name="close_dialog" msgid="1074977476136119408">"確定"</string>
<string name="enable" msgid="2636552299455477603">"開啟"</string>
@@ -158,10 +160,10 @@
<string name="vm_changed" msgid="4739599044379692505">"留言信箱號碼已更改。"</string>
<string name="vm_change_failed" msgid="7877733929455763566">"無法更改留言信箱號碼。\n如果問題持續發生,請與流動網絡供應商聯絡。"</string>
<string name="fw_change_failed" msgid="9179241823460192148">"無法更改轉接號碼。\n如果問題持續發生,請與流動網絡供應商聯絡。"</string>
- <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"無法擷取和儲存目前的轉接號碼設定。\n您仍要轉到新的供應商嗎?"</string>
+ <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"無法擷取和儲存目前的轉接號碼設定。\n你仍要轉到新的供應商嗎?"</string>
<string name="no_change" msgid="3737264882821031892">"沒有更改。"</string>
<string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"選擇留言信箱服務"</string>
- <string name="voicemail_default" msgid="6427575113775462077">"您的流動網絡供應商"</string>
+ <string name="voicemail_default" msgid="6427575113775462077">"你的流動網絡供應商"</string>
<string name="vm_change_pin_old_pin" msgid="7154951790929009241">"舊的 PIN"</string>
<string name="vm_change_pin_new_pin" msgid="2656200418481288069">"新的 PIN"</string>
<string name="vm_change_pin_progress_message" msgid="626015184502739044">"請稍候。"</string>
@@ -178,7 +180,7 @@
<string name="empty_networks_list" msgid="9216418268008582342">"找不到網絡。"</string>
<string name="network_query_error" msgid="3862515805115145124">"找不到網絡,請再試一次。"</string>
<string name="register_on_network" msgid="4194770527833960423">"正在註冊 <xliff:g id="NETWORK">%s</xliff:g>..."</string>
- <string name="not_allowed" msgid="8541221928746104798">"您的 SIM 卡無法連接這個網絡。"</string>
+ <string name="not_allowed" msgid="8541221928746104798">"你的 SIM 卡無法連接這個網絡。"</string>
<string name="connect_later" msgid="1950138106010005425">"目前無法連接這個網絡,請稍後再試。"</string>
<string name="registration_done" msgid="5337407023566953292">"已在網絡上完成註冊。"</string>
<string name="already_auto" msgid="8607068290733079336">"已選取自動選取功能。"</string>
@@ -288,14 +290,14 @@
<string name="roaming_enabled_message" msgid="9022249120750897">"可能需要支付漫遊費用。輕按即可修改。"</string>
<string name="roaming_notification_title" msgid="3590348480688047320">"流動數據連線中斷"</string>
<string name="roaming_on_notification_title" msgid="7451473196411559173">"數據漫遊已開啟"</string>
- <string name="roaming_warning" msgid="7855681468067171971">"您可能需要支付龐大的費用。"</string>
- <string name="roaming_check_price_warning" msgid="8212484083990570215">"請聯絡您的網絡供應商查詢定價。"</string>
+ <string name="roaming_warning" msgid="7855681468067171971">"你可能需要支付龐大的費用。"</string>
+ <string name="roaming_check_price_warning" msgid="8212484083990570215">"請聯絡你的網絡供應商查詢定價。"</string>
<string name="roaming_alert_title" msgid="5689615818220960940">"要允許數據漫遊嗎?"</string>
<string name="limited_sim_function_notification_title" msgid="612715399099846281">"SIM 卡功能受限"</string>
<string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"「<xliff:g id="CARRIER_NAME">%1$s</xliff:g>」通話和數據服務在使用 <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> 卡時可能遭到封鎖。"</string>
<string name="limited_sim_function_notification_message" msgid="5338638075496721160">"「<xliff:g id="CARRIER_NAME">%1$s</xliff:g>」通話和數據服務在使用其他 SIM 卡時可能遭到封鎖。"</string>
<string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"已找到並移除已停用的 SIP 帳戶"</string>
- <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Android 平台不再支援 SIP 通話。\n您現有的 SIP 帳戶 (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) 已移除。\n請確認您的預設通話帳戶設定。"</string>
+ <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Android 平台不再支援 SIP 通話。\n你現有的 SIP 帳戶 (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) 已移除。\n請確認你的預設通話帳戶設定。"</string>
<string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"前往設定"</string>
<string name="data_usage_title" msgid="8438592133893837464">"應用程式數據用量"</string>
<string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_2">%2$s</xliff:g>期間使用了 <xliff:g id="ID_1">%1$s</xliff:g>流動數據"</string>
@@ -475,7 +477,7 @@
<string name="delete_fdn_contact" msgid="7027405651994507077">"刪除固定撥號"</string>
<string name="deleting_fdn_contact" msgid="6872320570844460428">"正在刪除固定撥號…"</string>
<string name="fdn_contact_deleted" msgid="1680714996763848838">"固定撥號已刪除。"</string>
- <string name="pin2_invalid" msgid="2313954262684494442">"您所輸入的 PIN 碼不正確,FDN 未更新。"</string>
+ <string name="pin2_invalid" msgid="2313954262684494442">"你所輸入的 PIN 碼不正確,FDN 未更新。"</string>
<string name="fdn_invalid_number" msgid="9067189814657840439">"號碼超過 <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> 位數,FDN 未更新。"</string>
<string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN 無法更新。PIN2 碼不正確或電話號碼被拒。"</string>
<string name="fdn_failed" msgid="216592346853420250">"FDN 操作失敗。"</string>
@@ -489,8 +491,8 @@
<string name="oldPinLabel" msgid="8618515202411987721">"舊 PIN"</string>
<string name="newPinLabel" msgid="3585899083055354732">"新的 PIN"</string>
<string name="confirmPinLabel" msgid="7783531218662473778">"確認新 PIN"</string>
- <string name="badPin" msgid="4549286285015892321">"您所輸入的舊 PIN 碼不正確,請再試一次。"</string>
- <string name="mismatchPin" msgid="1467254768290323845">"您所輸入的 PIN 碼不符,請再試一次。"</string>
+ <string name="badPin" msgid="4549286285015892321">"你所輸入的舊 PIN 碼不正確,請再試一次。"</string>
+ <string name="mismatchPin" msgid="1467254768290323845">"你所輸入的 PIN 碼不符,請再試一次。"</string>
<string name="invalidPin" msgid="7363723429414001979">"請輸入一個 4 至 8 位數的 PIN。"</string>
<string name="disable_sim_pin" msgid="3112303905548613752">"清除 SIM PIN"</string>
<string name="enable_sim_pin" msgid="445461050748318980">"設定 SIM PIN"</string>
@@ -514,7 +516,7 @@
<string name="fdn_enable_puk2_requested" msgid="5793652792131588041">"密碼不正確。PIN2 現在已被封鎖。如要再試一次,請變更 PIN 2。"</string>
<string name="puk2_requested" msgid="6992374450720307514">"密碼不正確。SIM 現在已被封鎖,請輸入 PUK2。"</string>
<string name="puk2_blocked" msgid="3131139031779319911">"PUK2 碼已被永久封鎖。"</string>
- <string name="pin2_attempts" msgid="5625178102026453023">\n"您還有 <xliff:g id="NUMBER">%d</xliff:g> 次嘗試機會。"</string>
+ <string name="pin2_attempts" msgid="5625178102026453023">\n"你還有 <xliff:g id="NUMBER">%d</xliff:g> 次嘗試機會。"</string>
<string name="puk2_locked" msgid="6497760825455461057">"PUK2 已鎖定。請通知服務供應商解鎖。"</string>
<string name="pin2_unblocked" msgid="4481107908727789303">"PIN2 目前沒有封鎖"</string>
<string name="pin2_error_exception" msgid="8116103864600823641">"網絡或 SIM 卡錯誤。"</string>
@@ -533,18 +535,18 @@
<string name="notification_voicemail_text_format" msgid="5720947141702312537">"撥號 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
<string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"沒有可用的留言信箱號碼"</string>
<string name="notification_network_selection_title" msgid="255595526707809121">"沒有服務"</string>
- <string name="notification_network_selection_text" msgid="553288408722427659">"您所選取的網絡 (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) 無法使用"</string>
- <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"開啟流動網絡、關閉飛行模式或關閉省電模式,以撥打電話。"</string>
+ <string name="notification_network_selection_text" msgid="553288408722427659">"你所選取的網絡 (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) 無法使用"</string>
+ <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"開啟流動網絡、關閉飛行模式或關閉慳電模式,以撥打電話。"</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"關閉飛行模式以撥打電話。"</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"關閉飛行模式或連接無線網絡,以撥打電話。"</string>
- <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"電話過熱"</b>\n\n"無法完成此通話。請在電話冷卻後再試一次。\n\n您仍可進行緊急電話。"</string>
+ <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"電話過熱"</b>\n\n"無法完成此通話。請在電話冷卻後再試一次。\n\n你仍可進行緊急電話。"</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"離開緊急回撥模式即可撥打非緊急電話。"</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"未在網絡上完成註冊。"</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"無法使用流動網絡。"</string>
<string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"無法使用流動網絡。請連接無線網絡,以撥打電話。"</string>
<string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"要撥打電話,請輸入有效的號碼。"</string>
<string name="incall_error_call_failed" msgid="393508653582682539">"無法接通。"</string>
- <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"目前無法新增通話。您可以改以傳送短訊聯絡對方。"</string>
+ <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"目前無法新增通話。你可以改以傳送短訊聯絡對方。"</string>
<string name="incall_error_supp_service_unknown" msgid="8751177117194592623">"不支援的服務"</string>
<string name="incall_error_supp_service_switch" msgid="5272822448189448479">"無法切換通話。"</string>
<string name="incall_error_supp_service_resume" msgid="1276861499306817035">"無法恢復通話。"</string>
@@ -612,22 +614,22 @@
</string-array>
<string name="network_info_message" msgid="7599413947016532355">"網絡訊息"</string>
<string name="network_error_message" msgid="4271579424089326618">"錯誤訊息"</string>
- <string name="ota_title_activate" msgid="4049645324841263423">"啟用您的手機"</string>
- <string name="ota_touch_activate" msgid="838764494319694754">"如要啟用手機服務,您必須撥打一個特別電話。\n\n按「啟用」 後,請聽取手機啟用說明。"</string>
+ <string name="ota_title_activate" msgid="4049645324841263423">"啟用你的手機"</string>
+ <string name="ota_touch_activate" msgid="838764494319694754">"如要啟用手機服務,你必須撥打一個特別電話。\n\n按「啟用」 後,請聽取手機啟用說明。"</string>
<string name="ota_hfa_activation_title" msgid="3300556778212729671">"正在啟用…"</string>
<string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"手機正在啟用流動數據服務。\n\n這個程序最多需時 5 分鐘。"</string>
<string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"是否略過啟用?"</string>
- <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"如果略過啟用程序,那麼您就無法撥打電話或是連上行動數據網絡 (雖然可連上 Wi-Fi 網絡)。除非您已啟用手機,否則每次開機時,系統都會要求您啟用手機。"</string>
+ <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"如果略過啟用程序,那麼你就無法撥打電話或是連上行動數據網絡 (雖然可連上 Wi-Fi 網絡)。除非你已啟用手機,否則每次開機時,系統都會要求你啟用手機。"</string>
<string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"略過"</string>
<string name="ota_activate" msgid="7939695753665438357">"啟用"</string>
<string name="ota_title_activate_success" msgid="1272135024761004889">"手機已啟用。"</string>
<string name="ota_title_problem_with_activation" msgid="7019745985413368726">"啟用時發生問題"</string>
- <string name="ota_listen" msgid="2772252405488894280">"依照語音指示進行,直到您聽到啟用完成為止。"</string>
+ <string name="ota_listen" msgid="2772252405488894280">"依照語音指示進行,直到你聽到啟用完成為止。"</string>
<string name="ota_speaker" msgid="1086766980329820528">"揚聲器"</string>
- <string name="ota_progress" msgid="8837259285255700132">"正在為您的手機編程…"</string>
- <string name="ota_failure" msgid="5674217489921481576">"無法為您的手機編程"</string>
- <string name="ota_successful" msgid="1106825981548107774">"您的手機已啟用,大概需要 15 分鐘才能開始提供服務。"</string>
- <string name="ota_unsuccessful" msgid="8531037653803955754">"您的手機未啟用。\n建議您移到接收較佳的地方 (例如窗邊或戶外)。\n\n請再試一次,或致電客戶服務中心查詢其他啟用方式。"</string>
+ <string name="ota_progress" msgid="8837259285255700132">"正在為你的手機編程…"</string>
+ <string name="ota_failure" msgid="5674217489921481576">"無法為你的手機編程"</string>
+ <string name="ota_successful" msgid="1106825981548107774">"你的手機已啟用,大概需要 15 分鐘才能開始提供服務。"</string>
+ <string name="ota_unsuccessful" msgid="8531037653803955754">"你的手機未啟用。\n建議你移到接收較佳的地方 (例如窗邊或戶外)。\n\n請再試一次,或致電客戶服務中心查詢其他啟用方式。"</string>
<string name="ota_spc_failure" msgid="904092035241370080">"SPC 錯誤過多"</string>
<string name="ota_call_end" msgid="8657746378290737034">"上一頁"</string>
<string name="ota_try_again" msgid="6914781945599998550">"重試"</string>
@@ -637,16 +639,16 @@
<string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"緊急回撥模式"</string>
<string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"數據連線已停用"</string>
<string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"到<xliff:g id="COMPLETETIME">%s</xliff:g> 以前沒有數據連線"</string>
- <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。您要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。您要立即退出嗎?}}"</string>
- <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{緊急回撥模式不支援您所選取的操作。手機在接下來的 1 分鐘都將處於這個模式,您要立即退出嗎?}other{緊急回撥模式不支援您所選取的操作。手機在接下來的 %s 分鐘都將處於這個模式,您要立即退出嗎?}}"</string>
- <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"緊急電話模式不支援您所選取的操作。"</string>
+ <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。你要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。你要立即退出嗎?}}"</string>
+ <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{緊急回撥模式不支援你所選取的操作。手機在接下來的 1 分鐘都將處於這個模式,你要立即退出嗎?}other{緊急回撥模式不支援你所選取的操作。手機在接下來的 %s 分鐘都將處於這個模式,你要立即退出嗎?}}"</string>
+ <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"緊急電話模式不支援你所選取的操作。"</string>
<string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"正在退出緊急回撥模式"</string>
<string name="alert_dialog_yes" msgid="3532525979632841417">"是"</string>
<string name="alert_dialog_no" msgid="1075632654085988420">"否"</string>
<string name="alert_dialog_dismiss" msgid="1336356286354517054">"關閉"</string>
<string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"手機處於緊急回撥模式"</string>
<string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"直至<xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
- <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。\n您要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。\n您要立即退出嗎?}}"</string>
+ <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。\n你要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。\n你要立即退出嗎?}}"</string>
<string name="voicemail_provider" msgid="4158806657253745294">"服務"</string>
<string name="voicemail_settings" msgid="4451045613238972776">"設定"</string>
<string name="voicemail_number_not_set" msgid="8831561283386938155">"<未設定>"</string>
@@ -665,7 +667,7 @@
<string name="preference_category_ringtone" msgid="8787281191375434976">"鈴聲與震動"</string>
<string name="pstn_connection_service_label" msgid="9200102709997537069">"內置 SIM 卡"</string>
<string name="enable_video_calling_title" msgid="7246600931634161830">"開啟視像通話"</string>
- <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"如要開啟視像通話,您需要在網絡設定中啟用強化 4G LTE 模式。"</string>
+ <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"如要開啟視像通話,你需要在網絡設定中啟用強化 4G LTE 模式。"</string>
<string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"網絡設定"</string>
<string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"關閉"</string>
<string name="sim_label_emergency_calls" msgid="9078241989421522310">"緊急通話"</string>
@@ -675,11 +677,11 @@
<string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"Wi-Fi 通話來自"</string>
<string name="status_hint_label_wifi_call" msgid="942993035689809853">"Wi-Fi 通話"</string>
<string name="message_decode_error" msgid="1061856591500290887">"為訊息解碼時發生錯誤。"</string>
- <string name="callFailed_cdma_activation" msgid="5392057031552253550">"SIM 卡已啟動您的服務,並更新了您的手機漫遊功能。"</string>
+ <string name="callFailed_cdma_activation" msgid="5392057031552253550">"SIM 卡已啟動你的服務,並更新了你的手機漫遊功能。"</string>
<string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"進行中的通話過多。請先結束或合併現有通話,再重新撥打。"</string>
<string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"無法連線,請插入有效的 SIM 卡。"</string>
<string name="callFailed_wifi_lost" msgid="1788036730589163141">"已失去 Wi-Fi 連線。通話已結束。"</string>
- <string name="dialFailed_low_battery" msgid="6857904237423407056">"電量過低,因此您無法撥打視像通話。"</string>
+ <string name="dialFailed_low_battery" msgid="6857904237423407056">"電量過低,因此你無法撥打視像通話。"</string>
<string name="callFailed_low_battery" msgid="4056828320214416182">"電量過低,因此視像通話已結束。"</string>
<string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"這個地區無法透過 Wi-Fi 撥打緊急電話。"</string>
<string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"這個地區不支援 Wi-Fi 通話。"</string>
@@ -704,16 +706,16 @@
<string name="mobile_data_activate_prepaid_summary" msgid="6846085278531605925">"透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加流動數據"</string>
<string name="mobile_data_activate_roaming_plan" msgid="922290995866269366">"沒有漫遊計劃"</string>
<string name="mobile_data_activate_roaming_plan_summary" msgid="5379228493306235969">"透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加漫遊計劃"</string>
- <string name="mobile_data_activate_footer" msgid="7895874069807204548">"您可以透過您的流動網絡供應商「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加流動數據或漫遊計劃。"</string>
+ <string name="mobile_data_activate_footer" msgid="7895874069807204548">"你可以透過你的流動網絡供應商「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加流動數據或漫遊計劃。"</string>
<string name="mobile_data_activate_diag_title" msgid="5401741936224757312">"要增加數據嗎?"</string>
- <string name="mobile_data_activate_diag_message" msgid="3527260988020415441">"您可以透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加數據"</string>
+ <string name="mobile_data_activate_diag_message" msgid="3527260988020415441">"你可以透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加數據"</string>
<string name="mobile_data_activate_button" msgid="1139792516354374612">"增加數據"</string>
<string name="mobile_data_activate_cancel_button" msgid="3530174817572005860">"取消"</string>
<string name="clh_card_title_call_ended_txt" msgid="5977978317527299698">"通話已結束"</string>
<string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"已開啟飛行模式"</string>
<string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"無法存取 SIM 卡"</string>
<string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"無法使用流動網絡"</string>
- <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"您嘗試撥打的電話號碼有問題。錯誤碼 1。"</string>
+ <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"你嘗試撥打的電話號碼有問題。錯誤碼 1。"</string>
<string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"無法完成通話。錯誤碼 3。"</string>
<string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"無法完成通話。錯誤碼 6。"</string>
<string name="clh_callFailed_operator_determined_barring_txt" msgid="4202077821465974286">"無法完成通話。錯誤碼 8。"</string>
@@ -795,7 +797,7 @@
<string name="messageCallBarring" msgid="5537730400652466912">"輸入密碼"</string>
<string name="call_barring_settings" msgid="4616607285790258919">"通話限制設定"</string>
<string name="callFailed_NetworkBusy" msgid="5437103975842913681">"網絡忙碌中。請稍後再撥。"</string>
- <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"網絡壅塞。請通知您的流動網絡供應商提供協助。"</string>
+ <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"網絡壅塞。請通知你的流動網絡供應商提供協助。"</string>
<string name="supp_service_notification_call_deflected" msgid="4980942818105909813">"通話已轉向。"</string>
<string name="supp_service_notification_call_forwarded" msgid="7102930311735433088">"通話已轉駁。"</string>
<string name="supp_service_notification_call_waiting" msgid="4577403881609445324">"通話尚待接聽。"</string>
@@ -816,12 +818,12 @@
<string name="callFailed_otasp_provisioning_in_process" msgid="3345666183602879326">"目前正在佈建裝置,無法撥打電話。"</string>
<string name="callFailed_already_dialing" msgid="7250591188960691086">"系統正在撥打另一通電話,因此無法撥打電話。"</string>
<string name="callFailed_already_ringing" msgid="2376603543544289303">"由於目前有尚未接聽的來電,因此無法撥打電話。請先接聽或拒絕來電,然後再撥打電話。"</string>
- <string name="callFailed_calling_disabled" msgid="5010992739401206283">"通話功能已由 ro.telephony.disable-call 系統屬性停用,因此無法撥打電話。"</string>
+ <string name="callFailed_calling_disabled" msgid="5010992739401206283">"致電功能已由 ro.telephony.disable-call 系統屬性停用,因此無法打電話。"</string>
<string name="callFailed_too_many_calls" msgid="2761754044990799580">"目前已有兩個通話正在進行,因此無法撥打電話。請先結束其中一個通話,或將兩個通話合併為一個會議,才撥打電話。"</string>
- <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據已開啟。您可以在流動網絡設定中變更此設定。"</string>
- <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據和數據漫遊已開啟。您可以在流動網絡設定中變更此設定。"</string>
- <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 (<xliff:g id="SIM_NUMBER">%2$d</xliff:g>) 的流動數據已開啟。您可以在流動網絡設定中變更此設定。"</string>
- <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 <xliff:g id="SIM_NUMBER">%2$d</xliff:g> 的流動數據和數據漫遊已開啟。您可以在流動網絡設定中變更此設定。"</string>
+ <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據已開啟。你可以在流動網絡設定中變更此設定。"</string>
+ <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據和數據漫遊已開啟。你可以在流動網絡設定中變更此設定。"</string>
+ <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 (<xliff:g id="SIM_NUMBER">%2$d</xliff:g>) 的流動數據已開啟。你可以在流動網絡設定中變更此設定。"</string>
+ <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 <xliff:g id="SIM_NUMBER">%2$d</xliff:g> 的流動數據和數據漫遊已開啟。你可以在流動網絡設定中變更此設定。"</string>
<string name="supp_service_over_ut_precautions_dialog_dismiss" msgid="5934541487903081652">"關閉"</string>
<string name="radio_info_data_connection_enable" msgid="6183729739783252840">"啟用數據連線"</string>
<string name="radio_info_data_connection_disable" msgid="6404751291511368706">"停用數據連線"</string>
@@ -832,7 +834,7 @@
<string name="cbrs_data_switch_string" msgid="6060356430838077653">"CBRS 數據"</string>
<string name="dsds_switch_string" msgid="7564769822086764796">"啟用 DSDS"</string>
<string name="dsds_dialog_title" msgid="8494569893941847575">"要重新啟動裝置嗎?"</string>
- <string name="dsds_dialog_message" msgid="4047480385678538850">"您需要重新啟動裝置,才可變更此設定。"</string>
+ <string name="dsds_dialog_message" msgid="4047480385678538850">"你需要重新啟動裝置,才可變更此設定。"</string>
<string name="dsds_dialog_confirm" msgid="9032004888134129885">"重新啟動"</string>
<string name="dsds_dialog_cancel" msgid="3245958947099586655">"取消"</string>
<string name="removable_esim_string" msgid="7931369811671787649">"將可移除的 eSIM 卡設為預設值"</string>
@@ -850,7 +852,7 @@
<string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS 註冊:<xliff:g id="STATUS">%1$s</xliff:g>\n語音 LTE:<xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\n語音 Wi-Fi:<xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\n視像通話:<xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT 介面:<xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="45753418231446400">"服務中"</string>
<string name="radioInfo_service_out" msgid="287972405416142312">"沒有服務"</string>
- <string name="radioInfo_service_emergency" msgid="4763879891415016848">"只可撥打緊急電話"</string>
+ <string name="radioInfo_service_emergency" msgid="4763879891415016848">"只可致電緊急電話"</string>
<string name="radioInfo_service_off" msgid="3456583511226783064">"收音機已關閉"</string>
<string name="radioInfo_roaming_in" msgid="3156335577793145965">"漫遊"</string>
<string name="radioInfo_roaming_not" msgid="1904547918725478110">"沒有使用漫遊"</string>
@@ -920,11 +922,11 @@
<string name="phone_info_label" product="default" msgid="1784175881556791433">"手機資訊"</string>
<string name="carrier_provisioning" msgid="2668065041869578376">"流動網絡供應商佈建資料"</string>
<string name="trigger_carrier_provisioning" msgid="1301829588620638234">"觸發流動網絡供應商佈建程序"</string>
- <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"您的藍牙訊號微弱。請改用擴音器。"</string>
+ <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"你的藍牙訊號微弱。請改用擴音器。"</string>
<string name="call_quality_notification_name" msgid="3476828289553948830">"通話品質通知"</string>
<string name="notification_channel_sip_account" msgid="1261816025156179637">"已停用的 SIP 帳戶"</string>
<string name="send_from_work_profile_title" msgid="9201528838448432473">"無法從此個人檔案傳送訊息"</string>
- <string name="send_from_work_profile_description" msgid="5002701841936861636">"您的工作政策只允許透過工作設定檔傳送訊息"</string>
+ <string name="send_from_work_profile_description" msgid="5002701841936861636">"你的工作政策只允許透過工作設定檔傳送訊息"</string>
<string name="send_from_work_profile_cancel" msgid="177746511030381711">"取消"</string>
<string name="send_from_work_profile_action_str" msgid="6892775562934243337">"切換至工作設定檔"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 8e378c4..4ad7acd 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS 的 CDMA 來電等候功能已關閉"</string>
<string name="updating_title" msgid="6130548922615719689">"通話設定"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"只有管理員使用者可以變更通話設定。"</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"設定 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"通話設定錯誤"</string>
<string name="reading_settings" msgid="1605904432450871183">"正在讀取設定…"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 578e183..7f3a38c 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -133,6 +133,8 @@
<string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Ukulinda kwekholi ye-CDMA ngaphansi kwe-IMS kuvaliwe"</string>
<string name="updating_title" msgid="6130548922615719689">"Izilungiselelo zekholi"</string>
<string name="call_settings_admin_user_only" msgid="7238947387649986286">"Izilungiselelo zekholi zingaguqulwa kuphela ngumsebenzisi oyinhloko."</string>
+ <!-- no translation found for phone_account_settings_user_restriction (9142685151087208396) -->
+ <skip />
<string name="call_settings_with_label" msgid="8460230435361579511">"Izilungiselelo (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="2024290892676808965">"Iphutha lokulungiselela ikholi"</string>
<string name="reading_settings" msgid="1605904432450871183">"Ifunda izilungiselelo..."</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 680eb22..b32b030 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -289,6 +289,8 @@
<string name="updating_title">Call settings</string>
<!-- Toast in Call settings when asked to launch settings for a secondary user -->
<string name="call_settings_admin_user_only">Call settings can only be changed by the admin user.</string>
+ <!-- Toast in Phone Account settings when asked to launch settings for a secondary/guest user -->
+ <string name="phone_account_settings_user_restriction">Phone account settings can only be changed by the admin or work user.</string>
<!-- Title of the "Call settings" settings screen, with a text label identifying which SIM the settings are for. -->
<string name="call_settings_with_label">Settings (<xliff:g id="subscriptionlabel" example="Mock Carrier">%s</xliff:g>)</string>
<!-- Title of the alert dialog displayed if an error occurs while updating Call settings -->
@@ -1237,6 +1239,8 @@
<string name="incall_error_wfc_only_no_wireless_network">Connect to a wireless network to make a call.</string>
<!-- In-call screen: call failure message displayed in an error dialog when the user is connected to a wireless network, but wifi calling is turned off. [CHAR_LIMIT=NONE] -->
<string name="incall_error_promote_wfc">Enable Wi-Fi calling to make a call.</string>
+ <!-- In-call screen: call failure message displayed in an error dialog when the satellite modem is on. [CHAR_LIMIT=NONE] -->
+ <string name="incall_error_satellite_enabled">Disable satellite mode to make a call.</string>
<!-- Hint for the button of emergency information -->
<string name="emergency_information_hint">Emergency information</string>
@@ -1709,6 +1713,8 @@
<string name="clh_callFailed_simError_txt">Can\'t access SIM card</string>
<!-- In-call screen: call failure message displayed in an error dialog -->
<string name="clh_incall_error_out_of_service_txt">Mobile network not available</string>
+ <!-- In-call screen: call failure reason (satellite modem is enabled) -->
+ <string name="clh_callFailed_satelliteEnabled_txt">Satellite mode is on</string>
<!-- See CallFailCause for details on what causes each message -->
<!-- In-call screen: call failure reason (Cause Number 1) -->
@@ -2208,9 +2214,10 @@
notificatios -->
<string name="notification_channel_sip_account">Deprecated SIP accounts</string>
- <string name="send_from_work_profile_title">Can\'t send message from this profile</string>
- <string name="send_from_work_profile_description">Your work policy allows you to send message only from the work profile</string>
+ <string name="send_from_work_profile_title">Can\'t message from a personal app</string>
+ <string name="send_from_work_profile_description">Your organization only allows you to send messages from work apps</string>
<string name="send_from_work_profile_cancel">Cancel</string>
<string name="send_from_work_profile_action_str">Switch to work profile</string>
+ <string name="install_messages_on_work_profile_action_str">Install a work messages app</string>
</resources>
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 14db930..73b61b6 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -40,8 +40,6 @@
import com.android.internal.telephony.CallManager;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaDisplayInfoRec;
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec;
import com.android.internal.telephony.cdma.SignalToneUtil;
@@ -489,16 +487,9 @@
}
public void updatePhoneStateListeners(boolean isRefresh, int updateType, int subIdToUpdate) {
- List<SubscriptionInfo> subInfos;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- subInfos = SubscriptionManagerService.getInstance()
- .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
- mApplication.getAttributionTag());
- } else {
- subInfos = SubscriptionController.getInstance()
- .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
- mApplication.getAttributionTag());
- }
+ List<SubscriptionInfo> subInfos = SubscriptionManagerService.getInstance()
+ .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
+ mApplication.getAttributionTag());
// Sort sub id list based on slot id, so that CFI/MWI notifications will be updated for
// slot 0 first then slot 1. This is needed to ensure that when CFI or MWI is enabled for
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 9d11dfc..fa85f27 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -64,7 +64,6 @@
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConfigurationManager;
import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.SubscriptionInfoUpdater;
import com.android.internal.telephony.TelephonyPermissions;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.util.ArrayUtils;
@@ -127,8 +126,6 @@
// CarrierService change monitoring
@NonNull private CarrierServiceChangeCallback[] mCarrierServiceChangeCallbacks;
- // SubscriptionInfoUpdater
- @NonNull private final SubscriptionInfoUpdater mSubscriptionInfoUpdater;
// Broadcast receiver for system events
@NonNull
private final BroadcastReceiver mSystemBroadcastReceiver = new ConfigLoaderBroadcastReceiver();
@@ -138,7 +135,7 @@
// Message codes; see mHandler below.
- // Request from SubscriptionInfoUpdater when SIM becomes absent or error.
+ // Request from UiccController when SIM becomes absent or error.
private static final int EVENT_CLEAR_CONFIG = 0;
// Has connected to default app.
private static final int EVENT_CONNECTED_TO_DEFAULT = 3;
@@ -166,7 +163,7 @@
private static final int EVENT_FETCH_DEFAULT_TIMEOUT = 14;
// Fetching config timed out from a carrier app.
private static final int EVENT_FETCH_CARRIER_TIMEOUT = 15;
- // SubscriptionInfoUpdater has finished updating the sub for the carrier config.
+ // SubscriptionManagerService has finished updating the sub for the carrier config.
private static final int EVENT_SUBSCRIPTION_INFO_UPDATED = 16;
// Multi-SIM config changed.
private static final int EVENT_MULTI_SIM_CONFIG_CHANGED = 17;
@@ -697,9 +694,7 @@
* receiver for relevant events.
*/
@VisibleForTesting
- /* package */ CarrierConfigLoader(@NonNull Context context,
- //TODO: Remove SubscriptionInfoUpdater.
- @Nullable SubscriptionInfoUpdater subscriptionInfoUpdater, @NonNull Looper looper) {
+ /* package */ CarrierConfigLoader(@NonNull Context context, @NonNull Looper looper) {
mContext = context;
mPlatformCarrierConfigPackage =
mContext.getString(R.string.platform_carrier_config_package);
@@ -728,7 +723,6 @@
new HandlerExecutor(mHandler), mCarrierServiceChangeCallbacks[phoneId]);
}
logd("CarrierConfigLoader has started");
- mSubscriptionInfoUpdater = subscriptionInfoUpdater;
PhoneConfigurationManager.registerForMultiSimConfigChange(
mHandler, EVENT_MULTI_SIM_CONFIG_CHANGED, null);
@@ -745,8 +739,7 @@
/* package */ static CarrierConfigLoader init(@NonNull Context context) {
synchronized (CarrierConfigLoader.class) {
if (sInstance == null) {
- sInstance = new CarrierConfigLoader(context,
- PhoneFactory.getSubscriptionInfoUpdater(), Looper.myLooper());
+ sInstance = new CarrierConfigLoader(context, Looper.myLooper());
// Make this service available through ServiceManager.
TelephonyFrameworkInitializer.getTelephonyServiceManager()
.getCarrierConfigServiceRegisterer().register(sInstance);
@@ -811,16 +804,10 @@
configToSend.putAll(config);
}
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- SubscriptionManagerService.getInstance().updateSubscriptionByCarrierConfig(
- phoneId, configPackageName, configToSend,
- () -> mHandler.obtainMessage(EVENT_SUBSCRIPTION_INFO_UPDATED, phoneId, -1)
- .sendToTarget());
- } else {
- mSubscriptionInfoUpdater.updateSubscriptionByCarrierConfigAndNotifyComplete(
- phoneId, configPackageName, configToSend,
- mHandler.obtainMessage(EVENT_SUBSCRIPTION_INFO_UPDATED, phoneId, -1));
- }
+ SubscriptionManagerService.getInstance().updateSubscriptionByCarrierConfig(
+ phoneId, configPackageName, configToSend,
+ () -> mHandler.obtainMessage(EVENT_SUBSCRIPTION_INFO_UPDATED, phoneId, -1)
+ .sendToTarget());
}
private void broadcastConfigChangedIntent(int phoneId) {
diff --git a/src/com/android/phone/ErrorDialogActivity.java b/src/com/android/phone/ErrorDialogActivity.java
index 11a92a8..ab096ff 100644
--- a/src/com/android/phone/ErrorDialogActivity.java
+++ b/src/com/android/phone/ErrorDialogActivity.java
@@ -23,7 +23,9 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
+import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
@@ -55,13 +57,60 @@
}
private void showDialog() {
+ int managedProfileUserId =
+ getManagedProfileUserId(
+ getApplicationContext(), getApplicationContext().getUserId());
+ if (managedProfileUserId == UserHandle.USER_NULL) {
+ Log.w(TAG, "Error dialog is only applicable to managed profile.");
+ finish();
+ }
+ String defaultMessagesAppPackage =
+ getBaseContext()
+ .getSystemService(RoleManager.class)
+ .getSmsRoleHolder(managedProfileUserId);
+
+ Intent smsIntent = new Intent(Intent.ACTION_MAIN)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addCategory(Intent.CATEGORY_LAUNCHER)
+ .addCategory(Intent.CATEGORY_APP_MESSAGING)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .setPackage(defaultMessagesAppPackage);
+ Intent marketIntent =
+ new Intent(
+ Intent.ACTION_VIEW,
+ Uri.parse("market://search?q=messages"));
+ int positiveButtonText = 0;
+ Intent intent = null;
+ boolean showPositiveActionButton = true;
+ // A messages app may not be available in the managed profile. We try to handle that
+ // gracefully by redirecting to install a suitable app.
+ // Failing that, we simply omit the positive action button as the user has no mechanism
+ // to send the message.
+ if (defaultMessagesAppPackage != null
+ && canStartActivityAsUser(
+ smsIntent,
+ managedProfileUserId)) {
+ positiveButtonText = R.string.send_from_work_profile_action_str;
+ intent = smsIntent;
+ } else if (canStartActivityAsUser(marketIntent, managedProfileUserId)) {
+ positiveButtonText = R.string.install_messages_on_work_profile_action_str;
+ intent = marketIntent;
+ } else {
+ showPositiveActionButton = false;
+ }
+
+ // Variable has to be effectively final to be passing into the lambda, so copying it
+ // here.
+ Intent finalIntent = intent;
final DialogInterface.OnClickListener listener =
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
- switchToManagedProfile();
+ switchToManagedProfile(
+ managedProfileUserId,
+ finalIntent);
finish();
break;
case DialogInterface.BUTTON_NEGATIVE:
@@ -71,47 +120,35 @@
}
};
- new AlertDialog.Builder(this)
- .setTitle(R.string.send_from_work_profile_title)
- .setMessage(R.string.send_from_work_profile_description)
- .setPositiveButton(R.string.send_from_work_profile_action_str, listener)
- .setNegativeButton(R.string.send_from_work_profile_cancel, listener)
- .setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- finish();
- }
- })
- .show();
+ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this)
+ .setTitle(R.string.send_from_work_profile_title)
+ .setMessage(R.string.send_from_work_profile_description)
+ .setNegativeButton(R.string.send_from_work_profile_cancel, listener)
+ .setOnCancelListener(
+ new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ finish();
+ }
+ });
+ if (showPositiveActionButton) {
+ alertDialogBuilder.setPositiveButton(positiveButtonText, listener);
+ }
+ alertDialogBuilder.show();
}
- private void switchToManagedProfile() {
+ private boolean canStartActivityAsUser(Intent intent, int managedProfileUserId) {
+ return !this.getPackageManager()
+ .queryIntentActivitiesAsUser(
+ intent,
+ PackageManager.ResolveInfoFlags.of(0),
+ managedProfileUserId)
+ .isEmpty();
+ }
+
+ private void switchToManagedProfile(int managedProfileUserId, Intent intent) {
try {
- int managedProfileUserId =
- getManagedProfileUserId(
- getApplicationContext(), getApplicationContext().getUserId());
- if (managedProfileUserId == UserHandle.USER_NULL) {
- finish();
- }
-
- String defaultMessagesAppPackage =
- getBaseContext()
- .getSystemService(RoleManager.class)
- .getSmsRoleHolder(managedProfileUserId);
-
- Intent sendIntent = new Intent(Intent.ACTION_MAIN);
- sendIntent.addCategory(Intent.CATEGORY_DEFAULT);
- sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
- sendIntent.addCategory(Intent.CATEGORY_APP_MESSAGING);
-
- sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
- if (defaultMessagesAppPackage != null) {
- sendIntent.setPackage(defaultMessagesAppPackage);
- }
-
- startActivityAsUser(sendIntent,
+ startActivityAsUser(intent,
ActivityOptions.makeOpenCrossProfileAppsAnimation().toBundle(),
UserHandle.of(managedProfileUserId));
} catch (Exception e) {
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 3971dbd..2a27bb8 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -201,7 +201,6 @@
import com.android.internal.telephony.SmsApplication;
import com.android.internal.telephony.SmsController;
import com.android.internal.telephony.SmsPermissions;
-import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyPermissions;
import com.android.internal.telephony.data.DataUtils;
@@ -410,7 +409,6 @@
private final UserManager mUserManager;
private final AppOpsManager mAppOps;
private final MainThreadHandler mMainThreadHandler;
- private final SubscriptionController mSubscriptionController;
private final SharedPreferences mTelephonySharedPreferences;
private final PhoneConfigurationManager mPhoneConfigurationManager;
private final RadioInterfaceCapabilityController mRadioInterfaceCapabilities;
@@ -2461,11 +2459,6 @@
mUserManager = (UserManager) app.getSystemService(Context.USER_SERVICE);
mAppOps = (AppOpsManager)app.getSystemService(Context.APP_OPS_SERVICE);
mMainThreadHandler = new MainThreadHandler();
- if (!PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- mSubscriptionController = SubscriptionController.getInstance();
- } else {
- mSubscriptionController = null;
- }
mTelephonySharedPreferences = PreferenceManager.getDefaultSharedPreferences(mApp);
mNetworkScanRequestTracker = new NetworkScanRequestTracker();
mPhoneConfigurationManager = PhoneConfigurationManager.getInstance();
@@ -5499,11 +5492,8 @@
}
private boolean isActiveSubscription(int subId) {
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- return getSubscriptionManagerService().isActiveSubId(subId,
- mApp.getOpPackageName(), mApp.getFeatureId());
- }
- return mSubscriptionController.isActiveSubId(subId);
+ return getSubscriptionManagerService().isActiveSubId(subId,
+ mApp.getOpPackageName(), mApp.getFeatureId());
}
/**
@@ -7465,16 +7455,9 @@
return null;
}
- ParcelUuid groupUuid;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- final SubscriptionInfo info = getSubscriptionManagerService()
- .getSubscriptionInfo(subId);
- groupUuid = info.getGroupUuid();
- } else {
- final SubscriptionInfo info = mSubscriptionController
- .getSubscriptionInfo(subId);
- groupUuid = info.getGroupUuid();
- }
+ final SubscriptionInfo info = getSubscriptionManagerService()
+ .getSubscriptionInfo(subId);
+ ParcelUuid groupUuid = info.getGroupUuid();
// If it doesn't belong to any group, return just subscriberId of itself.
if (groupUuid == null) {
return new String[]{subscriberId};
@@ -7482,16 +7465,9 @@
// Get all subscriberIds from the group.
final List<String> mergedSubscriberIds = new ArrayList<>();
- List<SubscriptionInfo> groupInfos;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- groupInfos = getSubscriptionManagerService()
- .getSubscriptionsInGroup(groupUuid, mApp.getOpPackageName(),
- mApp.getAttributionTag());
- } else {
- groupInfos = mSubscriptionController
- .getSubscriptionsInGroup(groupUuid, mApp.getOpPackageName(),
- mApp.getAttributionTag());
- }
+ List<SubscriptionInfo> groupInfos = getSubscriptionManagerService()
+ .getSubscriptionsInGroup(groupUuid, mApp.getOpPackageName(),
+ mApp.getAttributionTag());
for (SubscriptionInfo subInfo : groupInfos) {
subscriberId = telephonyManager.getSubscriberId(subInfo.getSubscriptionId());
if (subscriberId != null) {
@@ -8051,23 +8027,12 @@
}
final long identity = Binder.clearCallingIdentity();
try {
- SubscriptionInfo info;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- info = getSubscriptionManagerService().getActiveSubscriptionInfo(subId,
- phone.getContext().getOpPackageName(),
- phone.getContext().getAttributionTag());
- if (info == null) {
- log("getSimLocaleForSubscriber, inactive subId: " + subId);
- return null;
- }
- } else {
- info = mSubscriptionController.getActiveSubscriptionInfo(subId,
- phone.getContext().getOpPackageName(),
- phone.getContext().getAttributionTag());
- if (info == null) {
- log("getSimLocaleForSubscriber, inactive subId: " + subId);
- return null;
- }
+ SubscriptionInfo info = getSubscriptionManagerService().getActiveSubscriptionInfo(subId,
+ phone.getContext().getOpPackageName(),
+ phone.getContext().getAttributionTag());
+ if (info == null) {
+ log("getSimLocaleForSubscriber, inactive subId: " + subId);
+ return null;
}
// Try and fetch the locale from the carrier properties or from the SIM language
// preferences (EF-PL and EF-LI)...
@@ -8119,12 +8084,8 @@
* NOTE: this method assumes permission checks are done and caller identity has been cleared.
*/
private List<SubscriptionInfo> getActiveSubscriptionInfoListPrivileged() {
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- return getSubscriptionManagerService().getActiveSubscriptionInfoList(
- mApp.getOpPackageName(), mApp.getAttributionTag());
- }
- return mSubscriptionController.getActiveSubscriptionInfoList(mApp.getOpPackageName(),
- mApp.getAttributionTag());
+ return getSubscriptionManagerService().getActiveSubscriptionInfoList(
+ mApp.getOpPackageName(), mApp.getAttributionTag());
}
private ActivityStatsTechSpecificInfo[] mLastModemActivitySpecificInfo = null;
@@ -8334,21 +8295,12 @@
.contains(callingPackage);
try {
// isActiveSubId requires READ_PHONE_STATE, which we already check for above
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- SubscriptionInfoInternal subInfo = getSubscriptionManagerService()
- .getSubscriptionInfoInternal(subId);
- if (subInfo == null || !subInfo.isActive()) {
- Rlog.d(LOG_TAG, "getServiceStateForSubscriber returning null for inactive "
- + "subId=" + subId);
- return null;
- }
- } else {
- if (!mSubscriptionController.isActiveSubId(subId, callingPackage,
- callingFeatureId)) {
- Rlog.d(LOG_TAG, "getServiceStateForSubscriber returning null for inactive "
- + "subId=" + subId);
- return null;
- }
+ SubscriptionInfoInternal subInfo = getSubscriptionManagerService()
+ .getSubscriptionInfoInternal(subId);
+ if (subInfo == null || !subInfo.isActive()) {
+ Rlog.d(LOG_TAG, "getServiceStateForSubscriber returning null for inactive "
+ + "subId=" + subId);
+ return null;
}
ServiceState ss = phone.getServiceState();
@@ -12484,7 +12436,7 @@
}
/**
- * Request to get the time after which the satellite will be visible
+ * Request to get the time after which the satellite will be visible.
*
* @param subId The subId to get the time after which the satellite will be visible for.
* @param result The result receiver that returns the time after which the satellite will
@@ -12499,6 +12451,22 @@
}
/**
+ * Inform that Device is aligned to satellite for demo mode.
+ *
+ * @param subId The subId to get the time after which the satellite will be visible for.
+ * @param isAligned {@code true} Device is aligned with the satellite for demo mode
+ * {@code false} Device fails to align with the satellite for demo mode.
+ *
+ * @throws SecurityException if the caller doesn't have required permission.
+ */
+ @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
+
+ public void onDeviceAlignedWithSatellite(int subId, @NonNull boolean isAligned) {
+ enforceSatelliteCommunicationPermission("informDeviceAlignedToSatellite");
+ mSatelliteController.onDeviceAlignedWithSatellite(subId, isAligned);
+ }
+
+ /**
* This API can be used by only CTS to update satellite vendor service package name.
*
* @param servicePackageName The package name of the satellite vendor service.
@@ -12516,6 +12484,43 @@
}
/**
+ * This API can be used by only CTS to update satellite gateway service package name.
+ *
+ * @param servicePackageName The package name of the satellite gateway service.
+ * @return {@code true} if the satellite gateway service is set successfully,
+ * {@code false} otherwise.
+ */
+ public boolean setSatelliteGatewayServicePackageName(@Nullable String servicePackageName) {
+ Log.d(LOG_TAG, "setSatelliteGatewayServicePackageName - " + servicePackageName);
+ TelephonyPermissions.enforceShellOnly(
+ Binder.getCallingUid(), "setSatelliteGatewayServicePackageName");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setSatelliteGatewayServicePackageName");
+ return mSatelliteController.setSatelliteGatewayServicePackageName(servicePackageName);
+ }
+
+ /**
+ * This API can be used by only CTS to update satellite pointing UI app package and class names.
+ *
+ * @param packageName The package name of the satellite pointing UI app.
+ * @param className The class name of the satellite pointing UI app.
+ * @return {@code true} if the satellite pointing UI app package and class is set successfully,
+ * {@code false} otherwise.
+ */
+ public boolean setSatellitePointingUiClassName(
+ @Nullable String packageName, @Nullable String className) {
+ Log.d(LOG_TAG, "setSatellitePointingUiClassName: packageName=" + packageName
+ + ", className=" + className);
+ TelephonyPermissions.enforceShellOnly(
+ Binder.getCallingUid(), "setSatellitePointingUiClassName");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setSatelliteGatewayServicePackageName");
+ return mSatelliteController.setSatellitePointingUiClassName(packageName, className);
+ }
+
+ /**
* This API can be used by only CTS to update the timeout duration in milliseconds that
* satellite should stay at listening mode to wait for the next incoming page before disabling
* listening mode.
@@ -12534,6 +12539,23 @@
}
/**
+ * This API can be used by only CTS to update the timeout duration in milliseconds whether
+ * the device is aligned with the satellite for demo mode
+ *
+ * @param timeoutMillis The timeout duration in millisecond.
+ * @return {@code true} if the timeout duration is set successfully, {@code false} otherwise.
+ */
+ public boolean setSatelliteDeviceAlignedTimeoutDuration(long timeoutMillis) {
+ Log.d(LOG_TAG, "setDeviceAlignedTimeoutDuration - " + timeoutMillis);
+ TelephonyPermissions.enforceShellOnly(
+ Binder.getCallingUid(), "setDeviceAlignedTimeoutDuration");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setDeviceAlignedTimeoutDuration");
+ return mSatelliteController.setSatelliteDeviceAlignedTimeoutDuration(timeoutMillis);
+ }
+
+ /**
* Check whether the caller (or self, if not processing an IPC) can read device identifiers.
*
* <p>This method behaves in one of the following ways:
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 80df099..498e1ea 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -181,8 +181,14 @@
private static final String DISALLOW_THERMAL_MITIGATION_PACKAGE_SUBCOMMAND = "disallow-package";
private static final String SET_SATELLITE_SERVICE_PACKAGE_NAME =
"set-satellite-service-package-name";
+ private static final String SET_SATELLITE_GATEWAY_SERVICE_PACKAGE_NAME =
+ "set-satellite-gateway-service-package-name";
private static final String SET_SATELLITE_LISTENING_TIMEOUT_DURATION =
"set-satellite-listening-timeout-duration";
+ private static final String SET_SATELLITE_POINTING_UI_CLASS_NAME =
+ "set-satellite-pointing-ui-class-name";
+ private static final String SET_SATELLITE_DEVICE_ALIGNED_TIMEOUT_DURATION =
+ "set-satellite-device-aligned-timeout-duration";
private static final String INVALID_ENTRY_ERROR = "An emergency number (only allow '0'-'9', "
+ "'*', '#' or '+') needs to be specified after -a in the command ";
@@ -366,8 +372,14 @@
return clearCarrierServicePackageOverride();
case SET_SATELLITE_SERVICE_PACKAGE_NAME:
return handleSetSatelliteServicePackageNameCommand();
+ case SET_SATELLITE_GATEWAY_SERVICE_PACKAGE_NAME:
+ return handleSetSatelliteGatewayServicePackageNameCommand();
case SET_SATELLITE_LISTENING_TIMEOUT_DURATION:
return handleSetSatelliteListeningTimeoutDuration();
+ case SET_SATELLITE_POINTING_UI_CLASS_NAME:
+ return handleSetSatellitePointingUiClassNameCommand();
+ case SET_SATELLITE_DEVICE_ALIGNED_TIMEOUT_DURATION:
+ return handleSettSatelliteDeviceAlignedTimeoutDuration();
default: {
return handleDefaultCommands(cmd);
}
@@ -750,11 +762,23 @@
pw.println(" SERVICE_PACKAGE_NAME to be bound. Options are:");
pw.println(" -s: the satellite service package name that Telephony will bind to.");
pw.println(" If no option is specified, it will bind to the default.");
+ pw.println(" set-satellite-gateway-service-package-name [-s SERVICE_PACKAGE_NAME]");
+ pw.println(" Sets the package name of satellite gateway service defined in");
+ pw.println(" SERVICE_PACKAGE_NAME to be bound. Options are:");
+ pw.println(" -s: the satellite gateway service package name that Telephony will bind");
+ pw.println(" to. If no option is specified, it will bind to the default.");
pw.println(" set-satellite-listening-timeout-duration [-t TIMEOUT_MILLIS]");
pw.println(" Sets the timeout duration in millis that satellite will stay at listening");
pw.println(" mode. Options are:");
pw.println(" -t: the timeout duration in milliseconds.");
pw.println(" If no option is specified, it will use the default values.");
+ pw.println(" set-satellite-pointing-ui-class-name [-p PACKAGE_NAME -c CLASS_NAME]");
+ pw.println(" Sets the package and class name of satellite pointing UI app defined in");
+ pw.println(" PACKAGE_NAME and CLASS_NAME to be launched. Options are:");
+ pw.println(" -p: the satellite pointing UI app package name that Telephony will");
+ pw.println(" launch. If no option is specified, it will launch the default.");
+ pw.println(" -c: the satellite pointing UI app class name that Telephony will");
+ pw.println(" launch.");
}
private void onHelpImei() {
@@ -3125,6 +3149,74 @@
return 0;
}
+ private int handleSetSatelliteGatewayServicePackageNameCommand() {
+ PrintWriter errPw = getErrPrintWriter();
+ String serviceName = null;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-s": {
+ serviceName = getNextArgRequired();
+ break;
+ }
+ }
+ }
+ Log.d(LOG_TAG, "handleSetSatelliteGatewayServicePackageNameCommand: serviceName="
+ + serviceName);
+
+ try {
+ boolean result = mInterface.setSatelliteGatewayServicePackageName(serviceName);
+ if (VDBG) {
+ Log.v(LOG_TAG, "setSatelliteGatewayServicePackageName " + serviceName
+ + ", result = " + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG, "setSatelliteGatewayServicePackageName: " + serviceName
+ + ", error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
+ private int handleSetSatellitePointingUiClassNameCommand() {
+ PrintWriter errPw = getErrPrintWriter();
+ String packageName = null;
+ String className = null;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-p": {
+ packageName = getNextArgRequired();
+ break;
+ }
+ case "-c": {
+ className = getNextArgRequired();
+ break;
+ }
+ }
+ }
+ Log.d(LOG_TAG, "handleSetSatellitePointingUiClassNameCommand: packageName="
+ + packageName + ", className=" + className);
+
+ try {
+ boolean result = mInterface.setSatellitePointingUiClassName(packageName, className);
+ if (VDBG) {
+ Log.v(LOG_TAG, "setSatellitePointingUiClassName result =" + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, "setSatellitePointingUiClassName: " + packageName
+ + ", error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
private int handleSetSatelliteListeningTimeoutDuration() {
PrintWriter errPw = getErrPrintWriter();
long timeoutMillis = 0;
@@ -3157,6 +3249,38 @@
return 0;
}
+ private int handleSettSatelliteDeviceAlignedTimeoutDuration() {
+ PrintWriter errPw = getErrPrintWriter();
+ long timeoutMillis = 0;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-t": {
+ timeoutMillis = Long.parseLong(getNextArgRequired());
+ break;
+ }
+ }
+ }
+ Log.d(LOG_TAG, "handleSettSatelliteDeviceAlignedTimeoutDuration: timeoutMillis="
+ + timeoutMillis);
+
+ try {
+ boolean result = mInterface.setSatelliteDeviceAlignedTimeoutDuration(timeoutMillis);
+ if (VDBG) {
+ Log.v(LOG_TAG, "setSatelliteDeviceAlignedTimeoutDuration " + timeoutMillis
+ + ", result = " + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG, "setSatelliteDeviceAlignedTimeoutDuration: " + timeoutMillis
+ + ", error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
private int handleCarrierRestrictionStatusCommand() {
try {
String MOCK_MODEM_SERVICE_NAME = "android.telephony.mockmodem.MockModemService";
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index 4c29e65..8c4a343 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -39,7 +39,6 @@
import com.android.ims.ImsManager;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.phone.PhoneGlobals;
import com.android.phone.R;
@@ -184,12 +183,8 @@
// Update RTT config with IMS Manager if the always-on carrier config isn't set to true.
CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(
Context.CARRIER_CONFIG_SERVICE);
- int[] activeSubIds;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- activeSubIds = SubscriptionManagerService.getInstance().getActiveSubIdList(true);
- } else {
- activeSubIds = SubscriptionController.getInstance().getActiveSubIdList(true);
- }
+ int[] activeSubIds = SubscriptionManagerService.getInstance().getActiveSubIdList(true);
+
for (int subId : activeSubIds) {
if (!configManager.getConfigForSubId(subId).getBoolean(
CarrierConfigManager.KEY_IGNORE_RTT_MODE_SETTING_BOOL, false)) {
@@ -271,15 +266,7 @@
private boolean shouldShowRttSetting() {
// Go through all the subs -- if we want to display the RTT setting for any of them, do
// display it.
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- for (int subId : SubscriptionManagerService.getInstance().getActiveSubIdList(true)) {
- if (PhoneGlobals.getInstance().phoneMgr.isRttSupported(subId)) {
- return true;
- }
- }
- return false;
- }
- for (int subId : SubscriptionController.getInstance().getActiveSubIdList(true)) {
+ for (int subId : SubscriptionManagerService.getInstance().getActiveSubIdList(true)) {
if (PhoneGlobals.getInstance().phoneMgr.isRttSupported(subId)) {
return true;
}
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsActivity.java b/src/com/android/phone/settings/PhoneAccountSettingsActivity.java
index e15be39..12cc667 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsActivity.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsActivity.java
@@ -18,9 +18,10 @@
import android.app.ActionBar;
import android.os.Bundle;
+import android.os.UserManager;
import android.preference.PreferenceActivity;
import android.view.MenuItem;
-import android.view.WindowManager;
+import android.widget.Toast;
import com.android.phone.R;
@@ -29,6 +30,16 @@
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
+
+ // Make sure we are running as an admin/work user.
+ UserManager userManager = getSystemService(UserManager.class);
+ if (!userManager.isAdminUser() && !userManager.isManagedProfile()) {
+ Toast.makeText(this, R.string.phone_account_settings_user_restriction,
+ Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+
getWindow().addSystemFlags(
android.view.WindowManager.LayoutParams
.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
diff --git a/src/com/android/phone/vvm/RemoteVvmTaskManager.java b/src/com/android/phone/vvm/RemoteVvmTaskManager.java
index 7329854..daa5d67b 100644
--- a/src/com/android/phone/vvm/RemoteVvmTaskManager.java
+++ b/src/com/android/phone/vvm/RemoteVvmTaskManager.java
@@ -183,6 +183,7 @@
if (targetPackage != null && !TextUtils.equals(packageName, targetPackage)) {
VvmLog.w(TAG, "target package " + targetPackage
+ " is no longer the active VisualVoicemailService, ignoring");
+ continue;
}
ComponentInfo componentInfo = TelephonyUtils.getComponentInfo(info);
return new ComponentName(componentInfo.packageName, componentInfo.name);
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 587ac43..d36f8be 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -232,6 +232,7 @@
case android.telephony.DisconnectCause.IMS_ACCESS_BLOCKED:
case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL:
case android.telephony.DisconnectCause.MEDIA_TIMEOUT:
+ case android.telephony.DisconnectCause.SATELLITE_ENABLED:
return DisconnectCause.ERROR;
case android.telephony.DisconnectCause.DIALED_MMI:
@@ -418,6 +419,9 @@
case android.telephony.DisconnectCause.WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION:
resourceId = R.string.callFailed_wfc_service_not_available_in_this_location;
break;
+ case android.telephony.DisconnectCause.SATELLITE_ENABLED:
+ resourceId = R.string.incall_error_satellite_enabled;
+ break;
default:
break;
}
@@ -599,6 +603,9 @@
case android.telephony.DisconnectCause.OUT_OF_SERVICE:
resourceId = R.string.clh_incall_error_out_of_service_txt;
break;
+ case android.telephony.DisconnectCause.SATELLITE_ENABLED:
+ resourceId = R.string.clh_callFailed_satelliteEnabled_txt;
+ break;
default:
resourceId = R.string.clh_card_title_call_ended_txt;
break;
@@ -822,6 +829,9 @@
case android.telephony.DisconnectCause.WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION:
resourceId = R.string.callFailed_wfc_service_not_available_in_this_location;
break;
+ case android.telephony.DisconnectCause.SATELLITE_ENABLED:
+ resourceId = R.string.incall_error_satellite_enabled;
+ break;
default:
break;
}
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index 57e65ee..2b69b82 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -63,7 +63,6 @@
import com.android.internal.telephony.ExponentialBackoff;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.phone.PhoneGlobals;
import com.android.phone.PhoneUtils;
@@ -550,38 +549,22 @@
return false;
}
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- if (SubscriptionManagerService.getInstance() == null) {
- Log.d(this,
- "isEmergencyPreferredAccount: SubscriptionManagerService not "
- + "available.");
- return false;
- }
- // Only set an emergency preference on devices with multiple active subscriptions
- // (include opportunistic subscriptions) in this check.
- // API says never null, but this can return null in testing.
- int[] activeSubIds = SubscriptionManagerService.getInstance()
- .getActiveSubIdList(false);
- if (activeSubIds == null || activeSubIds.length <= 1) {
- Log.d(this, "isEmergencyPreferredAccount: one or less active subscriptions.");
- return false;
- }
- } else {
- SubscriptionController controller = SubscriptionController.getInstance();
- if (controller == null) {
- Log.d(this,
- "isEmergencyPreferredAccount: SubscriptionController not available.");
- return false;
- }
- // Only set an emergency preference on devices with multiple active subscriptions
- // (include opportunistic subscriptions) in this check.
- // API says never null, but this can return null in testing.
- int[] activeSubIds = controller.getActiveSubIdList(false);
- if (activeSubIds == null || activeSubIds.length <= 1) {
- Log.d(this, "isEmergencyPreferredAccount: one or less active subscriptions.");
- return false;
- }
+ if (SubscriptionManagerService.getInstance() == null) {
+ Log.d(this,
+ "isEmergencyPreferredAccount: SubscriptionManagerService not "
+ + "available.");
+ return false;
}
+ // Only set an emergency preference on devices with multiple active subscriptions
+ // (include opportunistic subscriptions) in this check.
+ // API says never null, but this can return null in testing.
+ int[] activeSubIds = SubscriptionManagerService.getInstance()
+ .getActiveSubIdList(false);
+ if (activeSubIds == null || activeSubIds.length <= 1) {
+ Log.d(this, "isEmergencyPreferredAccount: one or less active subscriptions.");
+ return false;
+ }
+
// Check to see if this PhoneAccount is associated with the default Data subscription.
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
Log.d(this, "isEmergencyPreferredAccount: provided subId " + subId + "is not "
@@ -591,17 +574,10 @@
int userDefaultData = SubscriptionManager.getDefaultDataSubscriptionId();
boolean isActiveDataValid = SubscriptionManager.isValidSubscriptionId(activeDataSubId);
- boolean isActiveDataOpportunistic;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- SubscriptionInfo subInfo;
- subInfo = SubscriptionManagerService.getInstance()
- .getSubscriptionInfo(activeDataSubId);
- isActiveDataOpportunistic = isActiveDataValid && subInfo != null
- && subInfo.isOpportunistic();
- } else {
- isActiveDataOpportunistic = isActiveDataValid
- && SubscriptionController.getInstance().isOpportunistic(activeDataSubId);
- }
+ SubscriptionInfo subInfo = SubscriptionManagerService.getInstance()
+ .getSubscriptionInfo(activeDataSubId);
+ boolean isActiveDataOpportunistic = isActiveDataValid && subInfo != null
+ && subInfo.isOpportunistic();
// compare the activeDataSubId to the subId specified only if it is valid and not an
// opportunistic subscription (only supports data). If not, use the current default
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 7c30bff..02c413e 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -43,8 +43,10 @@
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
+import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation.DisconnectCauses;
import android.telephony.CarrierConfigManager;
+import android.telephony.DataSpecificRegistrationInfo;
import android.telephony.DomainSelectionService;
import android.telephony.DomainSelectionService.SelectionAttributes;
import android.telephony.EmergencyRegResult;
@@ -56,6 +58,7 @@
import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsReasonInfo;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.text.TextUtils;
import android.util.Pair;
import android.view.WindowManager;
@@ -71,7 +74,6 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.RIL;
-import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.d2d.Communicator;
import com.android.internal.telephony.data.PhoneSwitcher;
import com.android.internal.telephony.domainselection.DomainSelectionConnection;
@@ -85,6 +87,7 @@
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneConnection;
import com.android.internal.telephony.imsphone.ImsPhoneMmiCode;
+import com.android.internal.telephony.satellite.SatelliteController;
import com.android.internal.telephony.satellite.SatelliteSOSMessageRecommender;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
@@ -123,9 +126,13 @@
// from the modem.
private static final int DEFAULT_DATA_SWITCH_TIMEOUT_MS = 1000;
+ // Timeout to start dynamic routing of normal routing emergency numbers.
+ @VisibleForTesting
+ public static final int TIMEOUT_TO_DYNAMIC_ROUTING_MS = 10000;
+
// Timeout before we terminate the outgoing DSDA call if HOLD did not complete in time on the
// existing call.
- private static final int DEFAULT_DSDA_OUTGOING_CALL_HOLD_TIMEOUT_MS = 1000;
+ private static final int DEFAULT_DSDA_OUTGOING_CALL_HOLD_TIMEOUT_MS = 2000;
private static final String KEY_DOMAIN_COMPARE_FEATURE_ENABLED_FLAG =
"is_domain_selection_compare_feature_enabled";
@@ -221,6 +228,7 @@
private ImsManager mImsManager = null;
private DomainSelectionConnection mDomainSelectionConnection;
private TelephonyConnection mNormalCallConnection;
+ private SatelliteController mSatelliteController;
/**
* Keeps track of the status of a SIM slot.
@@ -654,14 +662,14 @@
if (c != null) {
switch (c.getState()) {
case Connection.STATE_HOLDING: {
- Log.d(LOG_TAG, "Connection " + connection
+ Log.d(LOG_TAG, "Connection " + connection.getTelecomCallId()
+ " changed to STATE_HOLDING!");
mStateHoldingFuture.complete(true);
c.removeTelephonyConnectionListener(this);
}
break;
case Connection.STATE_DISCONNECTED: {
- Log.d(LOG_TAG, "Connection " + connection
+ Log.d(LOG_TAG, "Connection " + connection.getTelecomCallId()
+ " changed to STATE_DISCONNECTED!");
mStateHoldingFuture.complete(false);
c.removeTelephonyConnectionListener(this);
@@ -793,6 +801,7 @@
mIsTtyEnabled = mDeviceState.isTtyModeEnabled(this);
mDomainSelectionMainExecutor = getApplicationContext().getMainExecutor();
mDomainSelectionResolver = DomainSelectionResolver.getInstance();
+ mSatelliteController = SatelliteController.getInstance();
IntentFilter intentFilter = new IntentFilter(
TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
@@ -1054,6 +1063,7 @@
boolean needToTurnOnRadio = (isEmergencyNumber && (!isRadioOn() || isAirplaneModeOn))
|| isRadioPowerDownOnBluetooth();
+ boolean needToTurnOffSatellite = isSatelliteBlockingCall(isEmergencyNumber);
// Get the right phone object from the account data passed in.
final Phone phone = getPhoneForAccount(request.getAccountHandle(), isEmergencyNumber,
@@ -1071,7 +1081,7 @@
}
}
- if (needToTurnOnRadio) {
+ if (needToTurnOnRadio || needToTurnOffSatellite) {
final Uri resultHandle = handle;
final int originalPhoneType = phone.getPhoneType();
final Connection resultConnection = getTelephonyConnection(request, numberToDial,
@@ -1083,6 +1093,8 @@
if (isEmergencyNumber) {
mIsEmergencyCallPending = true;
}
+ int timeoutToOnTimeoutCallback = mDomainSelectionResolver.isDomainSelectionSupported()
+ ? TIMEOUT_TO_DYNAMIC_ROUTING_MS : 0;
mRadioOnHelper.triggerRadioOnAndListen(new RadioOnStateListener.Callback() {
@Override
public void onComplete(RadioOnStateListener listener, boolean isRadioReady) {
@@ -1091,46 +1103,58 @@
}
@Override
- public boolean isOkToCall(Phone phone, int serviceState) {
+ public boolean onTimeout(Phone phone, int serviceState, boolean imsVoiceCapable) {
+ if (mDomainSelectionResolver.isDomainSelectionSupported()) {
+ return isEmergencyNumber;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isOkToCall(Phone phone, int serviceState, boolean imsVoiceCapable) {
// HAL 1.4 introduced a new variant of dial for emergency calls, which includes
// an isTesting parameter. For HAL 1.4+, do not wait for IN_SERVICE, this will
// be handled at the RIL/vendor level by emergencyDial(...).
boolean waitForInServiceToDialEmergency = isTestEmergencyNumber
&& phone.getHalVersion(HAL_SERVICE_VOICE)
.less(RIL.RADIO_HAL_VERSION_1_4);
+ if (mDomainSelectionResolver.isDomainSelectionSupported()) {
+ if (isEmergencyNumber) {
+ // Since the domain selection service is enabled,
+ // dilaing normal routing emergency number only reaches here.
+ if (!isVoiceInService(phone, imsVoiceCapable)) {
+ // Wait for voice in service.
+ // That is, wait for IMS registration on PS only network.
+ serviceState = ServiceState.STATE_OUT_OF_SERVICE;
+ waitForInServiceToDialEmergency = true;
+ }
+ }
+ }
if (isEmergencyNumber && !waitForInServiceToDialEmergency) {
// We currently only look to make sure that the radio is on before dialing.
// We should be able to make emergency calls at any time after the radio has
// been powered on and isn't in the UNAVAILABLE state, even if it is
// reporting the OUT_OF_SERVICE state.
- return (phone.getState() == PhoneConstants.State.OFFHOOK)
- || phone.getServiceStateTracker().isRadioOn();
+ return phone.getState() == PhoneConstants.State.OFFHOOK
+ || (phone.getServiceStateTracker().isRadioOn()
+ && !mSatelliteController.isSatelliteEnabled());
} else {
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- SubscriptionInfoInternal subInfo = SubscriptionManagerService
- .getInstance().getSubscriptionInfoInternal(phone.getSubId());
- // Wait until we are in service and ready to make calls. This can happen
- // when we power down the radio on bluetooth to save power on watches or
- // if it is a test emergency number and we have to wait for the device
- // to move IN_SERVICE before the call can take place over normal
- // routing.
- return (phone.getState() == PhoneConstants.State.OFFHOOK)
- // Do not wait for voice in service on opportunistic SIMs.
- || (subInfo != null && subInfo.isOpportunistic())
- || serviceState == ServiceState.STATE_IN_SERVICE;
- }
+ SubscriptionInfoInternal subInfo = SubscriptionManagerService
+ .getInstance().getSubscriptionInfoInternal(phone.getSubId());
// Wait until we are in service and ready to make calls. This can happen
- // when we power down the radio on bluetooth to save power on watches or if
- // it is a test emergency number and we have to wait for the device to move
- // IN_SERVICE before the call can take place over normal routing.
- return (phone.getState() == PhoneConstants.State.OFFHOOK)
+ // when we power down the radio on bluetooth to save power on watches or
+ // if it is a test emergency number and we have to wait for the device
+ // to move IN_SERVICE before the call can take place over normal
+ // routing.
+ return phone.getState() == PhoneConstants.State.OFFHOOK
// Do not wait for voice in service on opportunistic SIMs.
- || SubscriptionController.getInstance().isOpportunistic(
- phone.getSubId())
- || serviceState == ServiceState.STATE_IN_SERVICE;
+ || subInfo != null && subInfo.isOpportunistic()
+ || (serviceState == ServiceState.STATE_IN_SERVICE
+ && !isSatelliteBlockingCall(isEmergencyNumber));
}
}
- }, isEmergencyNumber && !isTestEmergencyNumber, phone, isTestEmergencyNumber);
+ }, isEmergencyNumber && !isTestEmergencyNumber, phone, isTestEmergencyNumber,
+ timeoutToOnTimeoutCallback);
// Return the still unconnected GsmConnection and wait for the Radios to boot before
// connecting it to the underlying Phone.
return resultConnection;
@@ -1147,6 +1171,13 @@
}
if (!isEmergencyNumber) {
+ if (mSatelliteController.isSatelliteEnabled()) {
+ Log.d(this, "onCreateOutgoingConnection, cannot make call in satellite mode.");
+ return Connection.createFailedConnection(
+ mDisconnectCauseFactory.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.SATELLITE_ENABLED,
+ "Call failed because satellite modem is enabled."));
+ }
final Connection resultConnection = getTelephonyConnection(request, numberToDial,
false, handle, phone);
if (isAdhocConference) {
@@ -1157,29 +1188,56 @@
return resultConnection;
} else {
if (mTelephonyManagerProxy.isConcurrentCallsPossible()) {
- delayDialForOtherSubHold(phone, request.getAccountHandle(), (result) -> {
- Log.d(this,
- "onCreateOutgoingConn - delayDialForOtherSubHold result = "
- + result);
- if (result) {
- placeOutgoingConnection(request, resultConnection, phone);
- } else {
- ((TelephonyConnection) resultConnection).hangup(
- android.telephony.DisconnectCause.LOCAL);
- }
- });
- return resultConnection;
+ Conferenceable c = maybeHoldCallsOnOtherSubs(request.getAccountHandle());
+ if (c != null) {
+ delayDialForOtherSubHold(phone, c, (success) -> {
+ Log.d(this,
+ "onCreateOutgoingConn - delayDialForOtherSubHold"
+ + " success = " + success);
+ if (success) {
+ placeOutgoingConnection(request, resultConnection,
+ phone);
+ } else {
+ ((TelephonyConnection) resultConnection).hangup(
+ android.telephony.DisconnectCause.LOCAL);
+ }
+ });
+ return resultConnection;
+ }
}
- // The standard case.
return placeOutgoingConnection(request, resultConnection, phone);
}
} else {
final Connection resultConnection = getTelephonyConnection(request, numberToDial,
true, handle, phone);
- delayDialForDdsSwitch(phone, (result) -> {
- Log.i(this, "onCreateOutgoingConn - delayDialForDdsSwitch result = " + result);
- placeOutgoingConnection(request, resultConnection, phone);
- });
+
+ CompletableFuture<Void> maybeHoldFuture = CompletableFuture.completedFuture(null);
+ if (mTelephonyManagerProxy.isConcurrentCallsPossible()
+ && shouldHoldForEmergencyCall(phone)) {
+ // If the PhoneAccountHandle was adjusted on building the TelephonyConnection,
+ // the relevant PhoneAccountHandle will be updated in resultConnection.
+ PhoneAccountHandle phoneAccountHandle =
+ resultConnection.getPhoneAccountHandle() == null
+ ? request.getAccountHandle() : resultConnection.getPhoneAccountHandle();
+ Conferenceable c = maybeHoldCallsOnOtherSubs(phoneAccountHandle);
+ if (c != null) {
+ maybeHoldFuture = delayDialForOtherSubHold(phone, c, (success) -> {
+ Log.i(this, "onCreateOutgoingConn emergency-"
+ + " delayDialForOtherSubHold success = " + success);
+ if (!success) {
+ // Terminates the existing call to make way for the emergency call.
+ hangup(c, android.telephony.DisconnectCause
+ .OUTGOING_EMERGENCY_CALL_PLACED);
+ }
+ });
+ }
+ }
+ Consumer<Boolean> ddsSwitchConsumer = (result) -> {
+ Log.i(this, "onCreateOutgoingConn emergency-"
+ + " delayDialForDdsSwitch result = " + result);
+ placeOutgoingConnection(request, resultConnection, phone);
+ };
+ maybeHoldFuture.thenRun(() -> delayDialForDdsSwitch(phone, ddsSwitchConsumer));
return resultConnection;
}
}
@@ -1269,11 +1327,19 @@
});
}
} else {
- Log.w(this, "onCreateOutgoingConnection, failed to turn on radio");
- closeOrDestroyConnection(originalConnection,
- mDisconnectCauseFactory.toTelecomDisconnectCause(
- android.telephony.DisconnectCause.POWER_OFF,
- "Failed to turn on radio."));
+ if (isSatelliteBlockingCall(isEmergencyNumber)) {
+ Log.w(LOG_TAG, "handleOnComplete, failed to turn off satellite modem");
+ closeOrDestroyConnection(originalConnection,
+ mDisconnectCauseFactory.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.SATELLITE_ENABLED,
+ "Failed to turn off satellite modem."));
+ } else {
+ Log.w(LOG_TAG, "handleOnComplete, failed to turn on radio");
+ closeOrDestroyConnection(originalConnection,
+ mDisconnectCauseFactory.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.POWER_OFF,
+ "Failed to turn on radio."));
+ }
mIsEmergencyCallPending = false;
}
}
@@ -1294,16 +1360,9 @@
// Notify Telecom of the new Connection type.
// TODO: Switch out the underlying connection instead of creating a new
// one and causing UI Jank.
- boolean noActiveSimCard;
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- noActiveSimCard = SubscriptionManagerService.getInstance()
- .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
- phone.getContext().getAttributionTag()) == 0;
- } else {
- noActiveSimCard = SubscriptionController.getInstance()
- .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
- phone.getContext().getAttributionTag()) == 0;
- }
+ boolean noActiveSimCard = SubscriptionManagerService.getInstance()
+ .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
+ phone.getContext().getAttributionTag()) == 0;
// If there's no active sim card and the device is in emergency mode, use E account.
addExistingConnection(mPhoneUtilsProxy.makePstnPhoneAccountHandleWithPrefix(
phone, "", isEmergencyNumber && noActiveSimCard), repConnection);
@@ -1921,6 +1980,14 @@
return result;
}
+ private boolean isSatelliteBlockingCall(boolean isEmergencyNumber) {
+ if (isEmergencyNumber) {
+ return mSatelliteController.isSatelliteEnabled();
+ } else {
+ return mSatelliteController.isDemoModeEnabled();
+ }
+ }
+
private Pair<WeakReference<TelephonyConnection>, Queue<Phone>> makeCachedConnectionPhonePair(
TelephonyConnection c) {
Queue<Phone> phones = new LinkedList<>(Arrays.asList(mPhoneFactoryProxy.getPhones()));
@@ -2518,6 +2585,44 @@
return false;
}
+ private boolean isVoiceInService(Phone phone, boolean imsVoiceCapable) {
+ // Dialing normal call is available.
+ if (phone.isWifiCallingEnabled()) {
+ Log.i(this, "isVoiceInService VoWi-Fi available");
+ return true;
+ }
+
+ ServiceState ss = phone.getServiceStateTracker().getServiceState();
+ if (ss.getState() != ServiceState.STATE_IN_SERVICE) return false;
+
+ NetworkRegistrationInfo regState = ss.getNetworkRegistrationInfo(
+ NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
+ if (regState != null) {
+ int registrationState = regState.getRegistrationState();
+ if (registrationState != NetworkRegistrationInfo.REGISTRATION_STATE_HOME
+ && registrationState != NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING) {
+ return true;
+ }
+
+ int networkType = regState.getAccessNetworkTechnology();
+ if (networkType == TelephonyManager.NETWORK_TYPE_LTE) {
+ DataSpecificRegistrationInfo regInfo = regState.getDataSpecificInfo();
+ if (regInfo.getLteAttachResultType()
+ == DataSpecificRegistrationInfo.LTE_ATTACH_TYPE_COMBINED) {
+ Log.i(this, "isVoiceInService combined attach");
+ return true;
+ }
+ }
+
+ if (networkType == TelephonyManager.NETWORK_TYPE_NR
+ || networkType == TelephonyManager.NETWORK_TYPE_LTE) {
+ Log.i(this, "isVoiceInService PS only network, IMS available " + imsVoiceCapable);
+ return imsVoiceCapable;
+ }
+ }
+ return true;
+ }
+
private boolean maybeReselectDomainForNormalCall(
final TelephonyConnection c, int callFailCause, ImsReasonInfo reasonInfo) {
@@ -2942,7 +3047,7 @@
}
/**
- * If needed, block until the the default data is is switched for outgoing emergency call, or
+ * If needed, block until the default data is switched for outgoing emergency call, or
* timeout expires.
* @param phone The Phone to switch the DDS on.
* @param completeConsumer The consumer to call once the default data subscription has been
@@ -3097,37 +3202,30 @@
return future;
}
- // If there are any live calls on the other subscription, sends a hold request for the live call
- // and waits for the STATE_HOLDING confirmation, to sequence the dial of the outgoing call.
- private void delayDialForOtherSubHold(Phone phone, PhoneAccountHandle phoneAccountHandle,
+ // Returns a future that waits for the STATE_HOLDING confirmation on the input
+ // {@link Conferenceable}, or times out.
+ private CompletableFuture<Void> delayDialForOtherSubHold(Phone phone, Conferenceable c,
Consumer<Boolean> completeConsumer) {
- Conferenceable c = maybeHoldCallsOnOtherSubs(phoneAccountHandle);
- if (c == null) {
- // Nothing to hold.
- completeConsumer.accept(true);
- return;
- }
-
- if (phone == null) {
+ if (c == null || phone == null) {
+ // Unexpected inputs
completeConsumer.accept(false);
- return;
+ return CompletableFuture.completedFuture(null);
}
try {
- // We have dispatched a 'hold' command to a live call (Connection or Conference) on the
- // other sub. Listen to state changed events to see if this entered hold state.
CompletableFuture<Boolean> stateHoldingFuture = listenForHoldStateChanged(c);
// a timeout that will complete the future to not block the outgoing call indefinitely.
CompletableFuture<Boolean> timeout = new CompletableFuture<>();
phone.getContext().getMainThreadHandler().postDelayed(
() -> timeout.complete(false), DEFAULT_DSDA_OUTGOING_CALL_HOLD_TIMEOUT_MS);
// Ensure that the Consumer is completed on the main thread.
- stateHoldingFuture.acceptEitherAsync(timeout, completeConsumer,
+ return stateHoldingFuture.acceptEitherAsync(timeout, completeConsumer,
phone.getContext().getMainExecutor());
} catch (Exception e) {
Log.w(this, "delayDialForOtherSubHold - exception= "
+ e.getMessage());
completeConsumer.accept(false);
+ return CompletableFuture.completedFuture(null);
}
}
@@ -3366,6 +3464,13 @@
* Returns true if the state of the Phone is IN_SERVICE or available for emergency calling only.
*/
private boolean isAvailableForEmergencyCalls(Phone phone) {
+ if (phone.getImsRegistrationTech() == ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM) {
+ // When a Phone is registered to Cross-SIM calling, there must always be a Phone on the
+ // other sub which is registered to cellular, so that must be selected.
+ Log.d(this, "isAvailableForEmergencyCalls: skipping over phone "
+ + phone + " as it is registered to CROSS_SIM");
+ return false;
+ }
return ServiceState.STATE_IN_SERVICE == phone.getServiceState().getState() ||
phone.getServiceState().isEmergencyOnly();
}
@@ -3774,6 +3879,16 @@
}
}
+ private static void hangup(Conferenceable conferenceable, int code) {
+ if (conferenceable instanceof TelephonyConnection) {
+ ((TelephonyConnection) conferenceable).hangup(code);
+ } else if (conferenceable instanceof Conference) {
+ ((Conference) conferenceable).onDisconnect();
+ } else {
+ Log.w(LOG_TAG, "hangup(): Unexpected conferenceable! " + conferenceable);
+ }
+ }
+
/**
* Evaluates whether a connection or conference exists on subscriptions other than the one
* corresponding to the existing {@link PhoneAccountHandle}.
@@ -3801,6 +3916,9 @@
currentHandle))
.toList();
if (!otherSubConferences.isEmpty()) {
+ Log.i(LOG_TAG, "maybeGetFirstConferenceable: found "
+ + otherSubConferences.get(0).getTelecomCallId() + " on "
+ + otherSubConferences.get(0).getPhoneAccountHandle());
return otherSubConferences.get(0);
}
@@ -3818,6 +3936,9 @@
Log.w(LOG_TAG, "Unexpected number of connections: "
+ otherSubConnections.size() + " on other sub!");
}
+ Log.i(LOG_TAG, "maybeGetFirstConferenceable: found "
+ + otherSubConnections.get(0).getTelecomCallId() + " on "
+ + otherSubConnections.get(0).getPhoneAccountHandle());
return otherSubConnections.get(0);
}
return null;
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index b1c288c..3388c97 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -42,6 +42,7 @@
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_REQUIRES_VOLTE_ENABLED_BOOL;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_SCAN_TIMER_SEC_INT;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_VOWIFI_REQUIRES_CONDITION_INT;
+import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_MAXIMUM_NUMBER_OF_EMERGENCY_TRIES_OVER_VOWIFI_INT;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_PREFER_IMS_EMERGENCY_WHEN_VOICE_CALLS_ON_CS_BOOL;
import static android.telephony.CarrierConfigManager.ImsEmergency.SCAN_TYPE_FULL_SERVICE_FOLLOWED_BY_LIMITED_SERVICE;
@@ -82,6 +83,7 @@
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsMmTelManager;
+import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ProvisioningManager;
import android.text.TextUtils;
import android.util.LocalLog;
@@ -108,6 +110,8 @@
@VisibleForTesting
public static final int MSG_NETWORK_SCAN_TIMEOUT = 12;
private static final int MSG_NETWORK_SCAN_RESULT = 13;
+ @VisibleForTesting
+ public static final int MSG_MAX_CELLULAR_TIMEOUT = 14;
private static final int NOT_SUPPORTED = -1;
@@ -179,6 +183,7 @@
private boolean mIsMonitoringConnectivity;
private boolean mWiFiAvailable;
private int mScanTimeout;
+ private int mMaxCellularTimeout;
private int mMaxNumOfVoWifiTries;
private boolean mVoWifiOverEmergencyPdn;
private @CarrierConfigManager.ImsEmergency.EmergencyScanType int mPreferredNetworkScanType;
@@ -198,6 +203,8 @@
private boolean mDomainSelected = false;
/** Indicates whether the cross sim redialing timer has expired. */
private boolean mCrossStackTimerExpired = false;
+ /** Indicates whether max cellular timer expired. */
+ private boolean mMaxCellularTimerExpired = false;
/**
* Indicates whether {@link #selectDomain(SelectionAttributes, TransportSelectionCallback)}
@@ -242,6 +249,10 @@
handleScanResult((EmergencyRegResult) msg.obj);
break;
+ case MSG_MAX_CELLULAR_TIMEOUT:
+ handleMaxCellularTimeout();
+ break;
+
default:
super.handleMessage(msg);
break;
@@ -361,6 +372,18 @@
}
}
+ if (mMaxCellularTimerExpired) {
+ if (mLastTransportType == TRANSPORT_TYPE_WWAN
+ && maybeDialOverWlan()) {
+ // Cellular call failed and max cellular search timer expired, so redial on Wi-Fi.
+ // If this VoWi-Fi fails, the timer shall be restarted on next reselectDomain().
+ return;
+ } else if (mLastTransportType == TRANSPORT_TYPE_WLAN) {
+ // Since VoWi-Fi failed, allow for requestScan to restart max cellular timer.
+ mMaxCellularTimerExpired = false;
+ }
+ }
+
if (mLastTransportType == TRANSPORT_TYPE_WLAN) {
// Dialing over Wi-Fi failed. Try scanning cellular networks.
onWwanSelected(this::reselectDomainInternal);
@@ -476,6 +499,7 @@
KEY_PREFER_IMS_EMERGENCY_WHEN_VOICE_CALLS_ON_CS_BOOL);
mVoWifiRequiresCondition = b.getInt(KEY_EMERGENCY_VOWIFI_REQUIRES_CONDITION_INT);
mScanTimeout = b.getInt(KEY_EMERGENCY_SCAN_TIMER_SEC_INT) * 1000;
+ mMaxCellularTimeout = b.getInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT) * 1000;
mMaxNumOfVoWifiTries = b.getInt(KEY_MAXIMUM_NUMBER_OF_EMERGENCY_TRIES_OVER_VOWIFI_INT);
mVoWifiOverEmergencyPdn = b.getBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL);
mPreferredNetworkScanType = b.getInt(KEY_EMERGENCY_NETWORK_SCAN_TYPE_INT);
@@ -511,6 +535,7 @@
+ ", preferImsOnCs=" + mPreferImsWhenCallsOnCs
+ ", voWifiRequiresCondition=" + mVoWifiRequiresCondition
+ ", scanTimeout=" + mScanTimeout
+ + ", maxCellularTimeout=" + mMaxCellularTimeout
+ ", maxNumOfVoWifiTries=" + mMaxNumOfVoWifiTries
+ ", voWifiOverEmergencyPdn=" + mVoWifiOverEmergencyPdn
+ ", preferredScanType=" + carrierConfigNetworkScanTypeToString(
@@ -669,7 +694,8 @@
mCancelSignal = new CancellationSignal();
// In case dialing over Wi-Fi has failed, do not the change the domain preference.
if (!wifiFailed) {
- mLastPreferredNetworks = getNextPreferredNetworks(csPreferred, mTryEpsFallback);
+ mLastPreferredNetworks = getNextPreferredNetworks(csPreferred, mTryEpsFallback,
+ !startVoWifiTimer);
}
mTryEpsFallback = false;
@@ -697,6 +723,9 @@
registerForConnectivityChanges();
}
}
+ if (!mMaxCellularTimerExpired && !hasMessages(MSG_MAX_CELLULAR_TIMEOUT)) {
+ startMaxCellularTimer();
+ }
}
/**
@@ -704,11 +733,13 @@
*
* @param csPreferred Indicates whether CS preferred scan is requested.
* @param tryEpsFallback Indicates whether scan requested for EPS fallback.
+ * @param lastScanFailed Indicates whether this a scan request due to the failure of last scan
+ * request.
* @return The list of preferred network types.
*/
@VisibleForTesting
public @RadioAccessNetworkType List<Integer> getNextPreferredNetworks(boolean csPreferred,
- boolean tryEpsFallback) {
+ boolean tryEpsFallback, boolean lastScanFailed) {
if (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled()) {
// Emergency call over IMS is not supported.
logi("getNextPreferredNetworks VoLte setting is not enabled.");
@@ -778,6 +809,23 @@
}
}
+ // There can be cases that dialing IMS call failed but the modem doesn't know this
+ // situation with some vendor solutions. For example, dialing failure due to the
+ // emergency registration failure.
+ // Remove the current RAT from the scan list to avoid modem select current PLMN.
+ // If the scan fails, the next scan will include this RAT again.
+ //
+ // TODO (b/278183420) Replace this with a better solution by adding indication
+ // of call setup failure to the scan request.
+ ImsReasonInfo reasonInfo = mSelectionAttributes.getPsDisconnectCause();
+ if (!lastScanFailed && reasonInfo != null
+ && reasonInfo.getCode() == ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED) {
+ logi("getNextPreferredNetworks remove " + mLastNetworkType);
+ if (preferredNetworks.size() > 1) {
+ preferredNetworks.remove(Integer.valueOf(mLastNetworkType));
+ }
+ }
+
return preferredNetworks;
}
@@ -790,8 +838,33 @@
return preferredNetworks;
}
+ private void handleMaxCellularTimeout() {
+ logi("handleMaxCellularTimeout");
+ if (mVoWifiTrialCount >= mMaxNumOfVoWifiTries) {
+ logi("handleMaxCellularTimeout already tried maximum");
+ return;
+ }
+
+ mMaxCellularTimerExpired = true;
+
+ if (mDomainSelected) {
+ // Dialing is already requested.
+ logi("handleMaxCellularTimeout wait for reselectDomain");
+ return;
+ }
+
+ if (!maybeDialOverWlan()) {
+ logd("handleMaxCellularTimeout VoWi-Fi is not available");
+ }
+ }
+
private void handleNetworkScanTimeout() {
- logi("handleNetworkScanTimeout overEmergencyPdn=" + mVoWifiOverEmergencyPdn
+ logi("handleNetworkScanTimeout");
+ maybeDialOverWlan();
+ }
+
+ private boolean maybeDialOverWlan() {
+ logi("maybeDialOverWlan overEmergencyPdn=" + mVoWifiOverEmergencyPdn
+ ", wifiAvailable=" + mWiFiAvailable);
boolean available = mWiFiAvailable;
if (mVoWifiOverEmergencyPdn) {
@@ -816,7 +889,7 @@
available = isImsRegisteredWithVoiceCapability() && isImsRegisteredOverWifi();
}
- logi("handleNetworkScanTimeout VoWi-Fi available=" + available);
+ logi("maybeDialOverWlan VoWi-Fi available=" + available);
if (available) {
if (mCancelSignal != null) {
mCancelSignal.cancel();
@@ -824,6 +897,8 @@
}
onWlanSelected();
}
+
+ return available;
}
/**
@@ -962,7 +1037,11 @@
private boolean isEmcOverWifiSupported() {
if (SubscriptionManager.isValidSubscriptionId(getSubId())) {
List<Integer> domains = getDomainPreference();
- return domains.contains(DOMAIN_PS_NON_3GPP);
+ boolean ret = domains.contains(DOMAIN_PS_NON_3GPP);
+ logi("isEmcOverWifiSupported " + ret);
+ return ret;
+ } else {
+ logi("isEmcOverWifiSupported invalid subId");
}
return false;
}
@@ -1163,6 +1242,8 @@
mVoWifiTrialCount++;
mTransportSelectorCallback.onWlanSelected(mVoWifiOverEmergencyPdn);
mWwanSelectorCallback = null;
+ removeMessages(MSG_NETWORK_SCAN_TIMEOUT);
+ removeMessages(MSG_MAX_CELLULAR_TIMEOUT);
}
private void onWwanSelected(Runnable runnable) {
@@ -1230,6 +1311,19 @@
}
}
+ /** Starts the max cellular timer. */
+ private void startMaxCellularTimer() {
+ logd("startMaxCellularTimer tried=" + mVoWifiTrialCount
+ + ", max=" + mMaxNumOfVoWifiTries);
+ if (isEmcOverWifiSupported()
+ && (mMaxCellularTimeout > 0)
+ && (mVoWifiTrialCount < mMaxNumOfVoWifiTries)) {
+ logi("startMaxCellularTimer start timer");
+ sendEmptyMessageDelayed(MSG_MAX_CELLULAR_TIMEOUT, mMaxCellularTimeout);
+ registerForConnectivityChanges();
+ }
+ }
+
private boolean allowEmergencyCalls(EmergencyRegResult regResult) {
if (mModemCount < 2) return true;
if (regResult == null) {
diff --git a/testapps/GbaTestApp/res/values-am/strings.xml b/testapps/GbaTestApp/res/values-am/strings.xml
index b78cd6c..b9be9d5 100644
--- a/testapps/GbaTestApp/res/values-am/strings.xml
+++ b/testapps/GbaTestApp/res/values-am/strings.xml
@@ -16,7 +16,7 @@
<string name="title_activity_test_config" msgid="7585204485536359713">"TestConfigActivity"</string>
<string name="service_package_name" msgid="7204809439090483315">"የGBA አገልግሎት የጥቅል ስም"</string>
<string name="service_release_time" msgid="532937496122890892">"ጥሪ ከተደረገ በኋላ አገልግሎት የሚለቀቅበት ጊዜ"</string>
- <string name="request_app_type" msgid="3975978141673475612">"UICC የመተግበሪያ አይነት"</string>
+ <string name="request_app_type" msgid="3975978141673475612">"UICC የመተግበሪያ ዓይነት"</string>
<string name="request_naf_url" msgid="4487793541217737042">"የአውታረ መረብ የመተግበሪያ ተግባር (NAF) ዩአርኤል"</string>
<string name="request_force_bootstrapping" msgid="206043602616214325">"በማስነሻ ተገዶ ይነሳ?"</string>
<string name="request_org" msgid="8416693445448308975">"የድርጅት ኮድ"</string>
diff --git a/tests/src/com/android/phone/CarrierConfigLoaderTest.java b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
index f29c123..b6f8ed8 100644
--- a/tests/src/com/android/phone/CarrierConfigLoaderTest.java
+++ b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
@@ -40,7 +40,6 @@
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
-import android.os.Message;
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.service.carrier.CarrierIdentifier;
@@ -55,8 +54,6 @@
import com.android.TelephonyTestBase;
import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.SubscriptionInfoUpdater;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import org.junit.After;
@@ -90,7 +87,6 @@
@Mock Resources mResources;
@Mock PackageManager mPackageManager;
@Mock PackageInfo mPackageInfo;
- @Mock SubscriptionInfoUpdater mSubscriptionInfoUpdater;
@Mock SubscriptionManagerService mSubscriptionManagerService;
@Mock SharedPreferences mSharedPreferences;
@Mock TelephonyRegistryManager mTelephonyRegistryManager;
@@ -136,8 +132,7 @@
mHandlerThread.start();
mTestableLooper = new TestableLooper(mHandlerThread.getLooper());
- mCarrierConfigLoader = new CarrierConfigLoader(mContext, mSubscriptionInfoUpdater,
- mTestableLooper.getLooper());
+ mCarrierConfigLoader = new CarrierConfigLoader(mContext, mTestableLooper.getLooper());
mHandler = mCarrierConfigLoader.getHandler();
// Clear all configs to have the same starting point.
@@ -279,15 +274,9 @@
mTestableLooper.processAllMessages();
assertThat(mCarrierConfigLoader.getOverrideConfig(DEFAULT_PHONE_ID).isEmpty()).isTrue();
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- verify(mSubscriptionManagerService).updateSubscriptionByCarrierConfig(
- eq(DEFAULT_PHONE_ID), eq(PLATFORM_CARRIER_CONFIG_PACKAGE),
- any(PersistableBundle.class), any(Runnable.class));
- } else {
- verify(mSubscriptionInfoUpdater).updateSubscriptionByCarrierConfigAndNotifyComplete(
- eq(DEFAULT_PHONE_ID), eq(PLATFORM_CARRIER_CONFIG_PACKAGE),
- any(PersistableBundle.class), any(Message.class));
- }
+ verify(mSubscriptionManagerService).updateSubscriptionByCarrierConfig(
+ eq(DEFAULT_PHONE_ID), eq(PLATFORM_CARRIER_CONFIG_PACKAGE),
+ any(PersistableBundle.class), any(Runnable.class));
}
/**
@@ -308,15 +297,9 @@
assertThat(mCarrierConfigLoader.getOverrideConfig(DEFAULT_PHONE_ID).getInt(
CARRIER_CONFIG_EXAMPLE_KEY)).isEqualTo(CARRIER_CONFIG_EXAMPLE_VALUE);
- if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
- verify(mSubscriptionManagerService).updateSubscriptionByCarrierConfig(
- eq(DEFAULT_PHONE_ID), eq(PLATFORM_CARRIER_CONFIG_PACKAGE),
- any(PersistableBundle.class), any(Runnable.class));
- } else {
- verify(mSubscriptionInfoUpdater).updateSubscriptionByCarrierConfigAndNotifyComplete(
- eq(DEFAULT_PHONE_ID), eq(PLATFORM_CARRIER_CONFIG_PACKAGE),
- any(PersistableBundle.class), any(Message.class));
- }
+ verify(mSubscriptionManagerService).updateSubscriptionByCarrierConfig(
+ eq(DEFAULT_PHONE_ID), eq(PLATFORM_CARRIER_CONFIG_PACKAGE),
+ any(PersistableBundle.class), any(Runnable.class));
}
/**
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 49b9c98..4f9b879 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -27,6 +27,7 @@
import static android.telephony.ims.ImsReasonInfo.CODE_SIP_ALTERNATE_EMERGENCY_CALL;
import static com.android.internal.telephony.RILConstants.GSM_PHONE;
+import static com.android.services.telephony.TelephonyConnectionService.TIMEOUT_TO_DYNAMIC_ROUTING_MS;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
@@ -62,8 +63,11 @@
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
+import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
+import android.telephony.DataSpecificRegistrationInfo;
import android.telephony.DomainSelectionService;
+import android.telephony.NetworkRegistrationInfo;
import android.telephony.RadioAccessFamily;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
@@ -95,6 +99,7 @@
import com.android.internal.telephony.emergency.RadioOnStateListener;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.imsphone.ImsPhone;
+import com.android.internal.telephony.satellite.SatelliteController;
import com.android.internal.telephony.satellite.SatelliteSOSMessageRecommender;
import org.junit.After;
@@ -188,7 +193,7 @@
@Mock TelephonyConnectionService.PhoneNumberUtilsProxy mPhoneNumberUtilsProxy;
@Mock TelephonyConnectionService.PhoneUtilsProxy mPhoneUtilsProxy;
@Mock TelephonyConnectionService.DisconnectCauseFactory mDisconnectCauseFactory;
- @Mock Handler mMockHandler;
+ @Mock SatelliteController mSatelliteController;
@Mock EmergencyNumberTracker mEmergencyNumberTracker;
@Mock PhoneSwitcher mPhoneSwitcher;
@Mock RadioOnHelper mRadioOnHelper;
@@ -201,9 +206,8 @@
@Mock EmergencyCallDomainSelectionConnection mEmergencyCallDomainSelectionConnection;
@Mock NormalCallDomainSelectionConnection mNormalCallDomainSelectionConnection;
@Mock ImsPhone mImsPhone;
- @Mock
- private SatelliteSOSMessageRecommender mSatelliteSOSMessageRecommender;
- private EmergencyStateTracker mEmergencyStateTracker;
+ @Mock private SatelliteSOSMessageRecommender mSatelliteSOSMessageRecommender;
+ @Mock private EmergencyStateTracker mEmergencyStateTracker;
private Phone mPhone0;
private Phone mPhone1;
@@ -243,16 +247,18 @@
mTestConnectionService.setPhoneUtilsProxy(mPhoneUtilsProxy);
mTestConnectionService.setDeviceState(mDeviceState);
mTestConnectionService.setRadioOnHelper(mRadioOnHelper);
- doReturn(new DisconnectCause(DisconnectCause.UNKNOWN)).when(mDisconnectCauseFactory)
- .toTelecomDisconnectCause(anyInt(), any());
- doReturn(new DisconnectCause(DisconnectCause.UNKNOWN)).when(mDisconnectCauseFactory)
- .toTelecomDisconnectCause(anyInt(), any(), anyInt());
+ doAnswer(invocation -> DisconnectCauseUtil.toTelecomDisconnectCause(
+ invocation.getArgument(0), invocation.getArgument(1)))
+ .when(mDisconnectCauseFactory).toTelecomDisconnectCause(anyInt(), any());
+ doAnswer(invocation -> DisconnectCauseUtil.toTelecomDisconnectCause(
+ invocation.getArgument(0), invocation.getArgument(1),
+ (int) invocation.getArgument(2)))
+ .when(mDisconnectCauseFactory).toTelecomDisconnectCause(anyInt(), any(), anyInt());
mTestConnectionService.setDisconnectCauseFactory(mDisconnectCauseFactory);
mTestConnectionService.onCreate();
mTestConnectionService.setTelephonyManagerProxy(mTelephonyManagerProxy);
replaceInstance(TelephonyConnectionService.class, "mDomainSelectionResolver",
mTestConnectionService, mDomainSelectionResolver);
- mEmergencyStateTracker = Mockito.mock(EmergencyStateTracker.class);
replaceInstance(TelephonyConnectionService.class, "mEmergencyStateTracker",
mTestConnectionService, mEmergencyStateTracker);
replaceInstance(TelephonyConnectionService.class, "mSatelliteSOSMessageRecommender",
@@ -268,6 +274,8 @@
doReturn(false).when(mDomainSelectionResolver).isDomainSelectionSupported();
doReturn(null).when(mDomainSelectionResolver).getDomainSelectionConnection(
any(), anyInt(), anyBoolean());
+ replaceInstance(TelephonyConnectionService.class,
+ "mSatelliteController", mTestConnectionService, mSatelliteController);
mBinderStub = (IConnectionService.Stub) mTestConnectionService.onBind(null);
}
@@ -594,7 +602,7 @@
*/
@Test
@SmallTest
- public void testSlot1HigherCapablity() {
+ public void testSlot1HigherCapability() {
Phone slot0Phone = makeTestPhone(SLOT_0_PHONE_ID, ServiceState.STATE_OUT_OF_SERVICE,
false /*isEmergencyOnly*/);
Phone slot1Phone = makeTestPhone(SLOT_1_PHONE_ID, ServiceState.STATE_OUT_OF_SERVICE,
@@ -1240,11 +1248,13 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false));
+ eq(testPhone), eq(false), eq(0));
- assertFalse(callback.getValue().isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE));
+ assertFalse(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
when(mSST.isRadioOn()).thenReturn(true);
- assertTrue(callback.getValue().isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE));
+ assertTrue(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
mConnection.setDisconnected(null);
callback.getValue().onComplete(null, true);
@@ -1266,11 +1276,49 @@
ArgumentCaptor<RadioOnStateListener.Callback> callback =
ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
- eq(testPhone), eq(false));
+ eq(testPhone), eq(false), eq(0));
- assertFalse(callback.getValue().isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE));
+ assertFalse(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
when(mSST.isRadioOn()).thenReturn(true);
- assertTrue(callback.getValue().isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE));
+ assertTrue(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
+
+ callback.getValue().onComplete(null, true);
+
+ try {
+ doAnswer(invocation -> null).when(mContext).startActivity(any());
+ verify(testPhone).dial(anyString(), any(), any());
+ } catch (CallStateException e) {
+ // This shouldn't happen
+ fail();
+ }
+ verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), any());
+ }
+
+ /**
+ * Test that the TelephonyConnectionService successfully turns satellite off before placing the
+ * emergency call.
+ */
+ @Test
+ @SmallTest
+ public void testCreateOutgoingEmergencyConnection_exitingSatellite_placeCall() {
+ when(mSatelliteController.isSatelliteEnabled()).thenReturn(true);
+ Phone testPhone = setupConnectionServiceInApm();
+
+ ArgumentCaptor<RadioOnStateListener.Callback> callback =
+ ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+ verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+ eq(testPhone), eq(false), eq(0));
+
+ assertFalse(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
+ when(mSST.isRadioOn()).thenReturn(true);
+ assertFalse(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
+ when(mSatelliteController.isSatelliteEnabled()).thenReturn(false);
+ assertTrue(callback.getValue()
+ .isOkToCall(testPhone, ServiceState.STATE_OUT_OF_SERVICE, false));
callback.getValue().onComplete(null, true);
@@ -1703,6 +1751,110 @@
assertTrue(tc1.wasHeld);
}
+ // For 'Virtual DSDA' devices, if there is an existing call on sub1, an outgoing call on sub2
+ // will place the sub1 call on hold.
+ @Test
+ @SmallTest
+ public void testOutgoingCallOnOtherSubPutsFirstCallOnHoldForVirtualDsdaDevice()
+ throws Exception {
+ setupForCallTest();
+ when(mTelephonyManagerProxy.isConcurrentCallsPossible()).thenReturn(true);
+ doNothing().when(mContext).startActivity(any());
+
+ mBinderStub.createConnection(PHONE_ACCOUNT_HANDLE_1, "TC@1",
+ new ConnectionRequest(PHONE_ACCOUNT_HANDLE_1, Uri.parse("tel:16505551212"),
+ new Bundle()),
+ true, false, null);
+ waitForHandlerAction(mTestConnectionService.getHandler(), TIMEOUT_MS);
+ assertEquals(1, mTestConnectionService.getAllConnections().size());
+
+ TelephonyConnection connection1 = (TelephonyConnection)
+ mTestConnectionService.getAllConnections().toArray()[0];
+
+ TelephonyConnection connection2 = (TelephonyConnection) mTestConnectionService
+ .onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_2,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_2, "1234", "TC@2"));
+ assertNotNull("test connection was not set up correctly.", connection2);
+
+ // Simulates that connection1 is placed on HOLD.
+ connection1.setTelephonyConnectionOnHold();
+
+ verify(mPhone1).dial(anyString(), any(), any());
+ assertEquals(connection1.getState(), android.telecom.Connection.STATE_HOLDING);
+ }
+
+ // For 'Virtual DSDA' devices, if the carrier config 'KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL'
+ // is not configured, or set to true, an outgoing emergency call will place the existing call on
+ // a different sub on hold.
+ @Test
+ @SmallTest
+ public void testEmergencyCallOnOtherSubPutsFirstCallOnHoldForVirtualDsdaDevice()
+ throws Exception {
+ setupForCallTest();
+ when(mTelephonyManagerProxy.isConcurrentCallsPossible()).thenReturn(true);
+ doNothing().when(mContext).startActivity(any());
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ mBinderStub.createConnection(PHONE_ACCOUNT_HANDLE_1, "TC@1",
+ new ConnectionRequest(PHONE_ACCOUNT_HANDLE_1, Uri.parse("tel:16505551212"),
+ new Bundle()),
+ true, false, null);
+ waitForHandlerAction(mTestConnectionService.getHandler(), TIMEOUT_MS);
+ assertEquals(1, mTestConnectionService.getAllConnections().size());
+
+ TelephonyConnection connection1 = (TelephonyConnection)
+ mTestConnectionService.getAllConnections().toArray()[0];
+
+ // Simulates an outgoing emergency call.
+ TelephonyConnection connection2 = (TelephonyConnection) mTestConnectionService
+ .onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_2,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_2,
+ TEST_EMERGENCY_NUMBER, "TC@2"));
+ assertNotNull("test connection was not set up correctly.", connection2);
+
+ // Simulates that connection1 is placed on HOLD.
+ connection1.setTelephonyConnectionOnHold();
+
+ verify(mPhone1).dial(anyString(), any(), any());
+ assertEquals(connection1.getState(), android.telecom.Connection.STATE_HOLDING);
+ }
+
+ // For 'Virtual DSDA' devices If the carrier config 'KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL'
+ // is explicitly configured false, an outgoing emergency call will disconnect all existing
+ // calls, across subscriptions.
+ @Test
+ @SmallTest
+ public void testEmergencyCallOnOtherSubDisconnectsExistingCallForVirtualDsdaDevice()
+ throws Exception {
+ setupForCallTest();
+ when(mTelephonyManagerProxy.isConcurrentCallsPossible()).thenReturn(true);
+ doNothing().when(mContext).startActivity(any());
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ getTestContext().getCarrierConfig(0 /*subId*/).putBoolean(
+ CarrierConfigManager.KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL, false);
+
+ mBinderStub.createConnection(PHONE_ACCOUNT_HANDLE_1, "TC@1",
+ new ConnectionRequest(PHONE_ACCOUNT_HANDLE_1, Uri.parse("tel:16505551212"),
+ new Bundle()),
+ true, false, null);
+ waitForHandlerAction(mTestConnectionService.getHandler(), TIMEOUT_MS);
+ assertEquals(1, mTestConnectionService.getAllConnections().size());
+
+ TelephonyConnection connection1 = (TelephonyConnection)
+ mTestConnectionService.getAllConnections().toArray()[0];
+
+ // Simulates an outgoing emergency call.
+ TelephonyConnection connection2 = (TelephonyConnection) mTestConnectionService
+ .onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_2,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_2,
+ TEST_EMERGENCY_NUMBER, "TC@2"));
+ assertNotNull("test connection was not set up correctly.", connection2);
+
+ verify(mPhone1).dial(anyString(), any(), any());
+ assertEquals(connection1.getState(), android.telecom.Connection.STATE_DISCONNECTED);
+ }
+
/**
* Verifies that TelephonyManager is used to determine whether a connection is Emergency when
* creating an outgoing connection.
@@ -1906,6 +2058,255 @@
}
@Test
+ public void testDomainSelectionNormalRoutingEmergencyNumber_exitingApm_InService()
+ throws Exception {
+ setupForCallTest();
+
+ doReturn(false).when(mPhone0).isRadioOn();
+ ServiceState ss = new ServiceState();
+ ss.setState(ServiceState.STATE_POWER_OFF);
+ when(mPhone0.getServiceState()).thenReturn(ss);
+ when(mSST.getServiceState()).thenReturn(ss);
+
+ setupForDialForDomainSelection(mPhone0, DOMAIN_CS, false);
+
+ EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+ Collections.emptyList(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+
+ when(mDeviceState.isAirplaneModeOn(any())).thenReturn(true);
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ ArgumentCaptor<RadioOnStateListener.Callback> callback =
+ ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+ verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+ any(), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+
+ assertFalse(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_OUT_OF_SERVICE, false));
+
+ when(mSST.isRadioOn()).thenReturn(true);
+
+ assertFalse(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_OUT_OF_SERVICE, false));
+
+ ss.setState(ServiceState.STATE_IN_SERVICE);
+
+ assertTrue(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_IN_SERVICE, false));
+ }
+
+ @Test
+ public void testDomainSelectionNormalRoutingEmergencyNumber_exitingApm_Timeout()
+ throws Exception {
+ setupForCallTest();
+
+ doReturn(false).when(mPhone0).isRadioOn();
+ ServiceState ss = new ServiceState();
+ ss.setState(ServiceState.STATE_POWER_OFF);
+ when(mPhone0.getServiceState()).thenReturn(ss);
+ when(mSST.getServiceState()).thenReturn(ss);
+
+ setupForDialForDomainSelection(mPhone0, DOMAIN_CS, false);
+
+ EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+ Collections.emptyList(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+
+ when(mDeviceState.isAirplaneModeOn(any())).thenReturn(true);
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ ArgumentCaptor<RadioOnStateListener.Callback> callback =
+ ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+ verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+ any(), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+
+ when(mSST.isRadioOn()).thenReturn(true);
+
+ assertFalse(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_OUT_OF_SERVICE, false));
+ assertTrue(callback.getValue()
+ .onTimeout(mPhone0, ServiceState.STATE_OUT_OF_SERVICE, false));
+ }
+
+ @Test
+ public void testDomainSelectionNormalRoutingEmergencyNumber_exitingApm_CombinedAttach()
+ throws Exception {
+ setupForCallTest();
+
+ doReturn(false).when(mPhone0).isRadioOn();
+ ServiceState ss = new ServiceState();
+ ss.setState(ServiceState.STATE_POWER_OFF);
+ when(mPhone0.getServiceState()).thenReturn(ss);
+ when(mSST.getServiceState()).thenReturn(ss);
+
+ setupForDialForDomainSelection(mPhone0, DOMAIN_CS, false);
+
+ EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+ Collections.emptyList(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+
+ when(mDeviceState.isAirplaneModeOn(any())).thenReturn(true);
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ ArgumentCaptor<RadioOnStateListener.Callback> callback =
+ ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+ verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+ any(), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+
+ when(mSST.isRadioOn()).thenReturn(true);
+ ss.setState(ServiceState.STATE_IN_SERVICE);
+
+ DataSpecificRegistrationInfo dsri = new DataSpecificRegistrationInfo.Builder(3)
+ .setLteAttachResultType(DataSpecificRegistrationInfo.LTE_ATTACH_TYPE_COMBINED)
+ .build();
+
+ NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+ .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
+ .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
+ .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
+ .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME)
+ .setDataSpecificInfo(dsri)
+ .build();
+ ss.addNetworkRegistrationInfo(nri);
+
+ assertTrue(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_IN_SERVICE, false));
+ }
+
+ @Test
+ public void testDomainSelectionNormalRoutingEmergencyNumber_exitingApm_PsOnly()
+ throws Exception {
+ setupForCallTest();
+
+ doReturn(false).when(mPhone0).isRadioOn();
+ ServiceState ss = new ServiceState();
+ ss.setState(ServiceState.STATE_POWER_OFF);
+ when(mPhone0.getServiceState()).thenReturn(ss);
+ when(mSST.getServiceState()).thenReturn(ss);
+
+ setupForDialForDomainSelection(mPhone0, DOMAIN_CS, false);
+
+ EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+ Collections.emptyList(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+
+ when(mDeviceState.isAirplaneModeOn(any())).thenReturn(true);
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ ArgumentCaptor<RadioOnStateListener.Callback> callback =
+ ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+ verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+ any(), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+
+ when(mSST.isRadioOn()).thenReturn(true);
+ ss.setState(ServiceState.STATE_IN_SERVICE);
+
+ DataSpecificRegistrationInfo dsri = new DataSpecificRegistrationInfo.Builder(3)
+ .build();
+
+ NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+ .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
+ .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
+ .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
+ .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME)
+ .setDataSpecificInfo(dsri)
+ .build();
+ ss.addNetworkRegistrationInfo(nri);
+
+ assertFalse(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_IN_SERVICE, false));
+ assertTrue(callback.getValue()
+ .onTimeout(mPhone0, ServiceState.STATE_IN_SERVICE, false));
+ }
+
+ @Test
+ public void testDomainSelectionNormalRoutingEmergencyNumber_exitingApm_PsOnly_ImsRegistered()
+ throws Exception {
+ setupForCallTest();
+
+ doReturn(false).when(mPhone0).isRadioOn();
+ ServiceState ss = new ServiceState();
+ ss.setState(ServiceState.STATE_POWER_OFF);
+ when(mPhone0.getServiceState()).thenReturn(ss);
+ when(mSST.getServiceState()).thenReturn(ss);
+
+ setupForDialForDomainSelection(mPhone0, DOMAIN_CS, false);
+
+ EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+ Collections.emptyList(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+
+ when(mDeviceState.isAirplaneModeOn(any())).thenReturn(true);
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ ArgumentCaptor<RadioOnStateListener.Callback> callback =
+ ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+ verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+ any(), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+
+ when(mSST.isRadioOn()).thenReturn(true);
+ ss.setState(ServiceState.STATE_IN_SERVICE);
+
+ DataSpecificRegistrationInfo dsri = new DataSpecificRegistrationInfo.Builder(3)
+ .build();
+
+ NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+ .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
+ .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
+ .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
+ .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME)
+ .setDataSpecificInfo(dsri)
+ .build();
+ ss.addNetworkRegistrationInfo(nri);
+
+ assertFalse(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_IN_SERVICE, false));
+ assertTrue(callback.getValue()
+ .isOkToCall(mPhone0, ServiceState.STATE_IN_SERVICE, true));
+ }
+
+ @Test
public void testDomainSelectionNormalToEmergencyCs() throws Exception {
setupForCallTest();
@@ -2487,6 +2888,17 @@
selectedDomain, dialArgs.intentExtras.getInt(PhoneConstants.EXTRA_DIAL_DOMAIN, -1));
}
+ @Test
+ public void testNormalCallSatelliteEnabled() {
+ setupForCallTest();
+ doReturn(true).when(mSatelliteController).isSatelliteEnabled();
+ mConnection = mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1, "1234", TELECOM_CALL_ID1));
+ DisconnectCause disconnectCause = mConnection.getDisconnectCause();
+ assertEquals(android.telephony.DisconnectCause.SATELLITE_ENABLED,
+ disconnectCause.getTelephonyDisconnectCause());
+ }
+
private void setupForDialForDomainSelection(Phone mockPhone, int domain, boolean isEmergency) {
if (isEmergency) {
doReturn(mEmergencyCallDomainSelectionConnection).when(mDomainSelectionResolver)
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 0821943..9be85ed 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -37,6 +37,7 @@
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_REQUIRES_VOLTE_ENABLED_BOOL;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_SCAN_TIMER_SEC_INT;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_VOWIFI_REQUIRES_CONDITION_INT;
+import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_MAXIMUM_NUMBER_OF_EMERGENCY_TRIES_OVER_VOWIFI_INT;
import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_PREFER_IMS_EMERGENCY_WHEN_VOICE_CALLS_ON_CS_BOOL;
import static android.telephony.CarrierConfigManager.ImsEmergency.SCAN_TYPE_FULL_SERVICE;
@@ -52,6 +53,7 @@
import static android.telephony.NetworkRegistrationInfo.REGISTRATION_STATE_HOME;
import static android.telephony.NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN;
+import static com.android.services.telephony.domainselection.EmergencyCallDomainSelector.MSG_MAX_CELLULAR_TIMEOUT;
import static com.android.services.telephony.domainselection.EmergencyCallDomainSelector.MSG_NETWORK_SCAN_TIMEOUT;
import static junit.framework.Assert.assertEquals;
@@ -97,6 +99,7 @@
import android.telephony.WwanSelectorCallback;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsMmTelManager;
+import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ProvisioningManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.TestableLooper;
@@ -1268,7 +1271,7 @@
setupForScanListTest(bundle);
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@Test
@@ -1282,7 +1285,7 @@
setupForScanListTest(bundle);
- verifyPsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyPsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@Test
@@ -1297,7 +1300,7 @@
setupForScanListTest(bundle);
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@Test
@@ -1312,7 +1315,7 @@
setupForScanListTest(bundle);
- verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@@ -1327,7 +1330,7 @@
setupForScanListTest(bundle);
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1341,7 +1344,7 @@
setupForScanListTest(bundle);
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1357,7 +1360,7 @@
setupForScanListTest(bundle);
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1372,7 +1375,7 @@
setupForScanListTest(bundle);
- verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1389,7 +1392,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@Test
@@ -1406,7 +1409,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@Test
@@ -1424,7 +1427,7 @@
bindImsService();
processAllMessages();
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
}
@Test
@@ -1441,7 +1444,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1458,7 +1461,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1477,7 +1480,7 @@
bindImsService();
processAllMessages();
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
}
@Test
@@ -1493,7 +1496,7 @@
setupForScanListTest(bundle);
- List<Integer> networks = mDomainSelector.getNextPreferredNetworks(false, true);
+ List<Integer> networks = mDomainSelector.getNextPreferredNetworks(false, true, false);
assertFalse(networks.isEmpty());
assertTrue(networks.contains(EUTRAN));
@@ -1648,6 +1651,202 @@
.onSelectionTerminated(eq(DisconnectCause.EMERGENCY_TEMP_FAILURE));
}
+ @Test
+ public void testDefaultEpsImsRegisteredSelectPsEmergencyRegFailed() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_HOME,
+ NetworkRegistrationInfo.DOMAIN_PS,
+ true, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsService();
+
+ verifyPsDialed();
+
+ attr = new SelectionAttributes.Builder(SLOT_0, SLOT_0_SUB_ID, SELECTOR_TYPE_CALLING)
+ .setEmergency(true)
+ .setEmergencyRegResult(regResult)
+ .setPsDisconnectCause(
+ new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, 0, null))
+ .build();
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+ any(), anyInt(), any(), any());
+ assertFalse(mAccessNetwork.contains(EUTRAN));
+ }
+
+ @Test
+ public void testMaxCellularTimeout() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+ bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, 20);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+ setupForHandleScanResult();
+
+ assertTrue(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ assertTrue(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+
+ // Wi-Fi is connected.
+ mNetworkCallback.onAvailable(null);
+
+ // Max cellular timer expired
+ mDomainSelector.removeMessages(MSG_MAX_CELLULAR_TIMEOUT);
+ mDomainSelector.handleMessage(mDomainSelector.obtainMessage(MSG_MAX_CELLULAR_TIMEOUT));
+
+ assertFalse(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
+ }
+
+
+ @Test
+ public void testMaxCellularTimeoutScanTimeout() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+ bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, 20);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+ setupForHandleScanResult();
+
+ assertTrue(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ assertTrue(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+
+ // Wi-Fi is connected.
+ mNetworkCallback.onAvailable(null);
+
+ // Scan timer expired
+ mDomainSelector.removeMessages(MSG_NETWORK_SCAN_TIMEOUT);
+ mDomainSelector.handleMessage(mDomainSelector.obtainMessage(MSG_NETWORK_SCAN_TIMEOUT));
+
+ assertFalse(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+ verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
+ }
+
+ @Test
+ public void testMaxCellularTimeoutWhileDialingOnCellular() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+ bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, 5);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(UTRAN, REGISTRATION_STATE_HOME,
+ NetworkRegistrationInfo.DOMAIN_CS,
+ true, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyCsDialed();
+
+ assertFalse(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ assertFalse(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ assertTrue(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ assertTrue(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ // Wi-Fi is connected.
+ mNetworkCallback.onAvailable(null);
+ processAllMessages();
+
+ verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+
+ // Max cellular timer expired
+ mDomainSelector.removeMessages(MSG_MAX_CELLULAR_TIMEOUT);
+ mDomainSelector.handleMessage(mDomainSelector.obtainMessage(MSG_MAX_CELLULAR_TIMEOUT));
+ processAllMessages();
+
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ assertFalse(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+ verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
+ }
+
+ @Test
+ public void testMaxCellularTimeoutWileDialingOnWlan() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+ bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, 20);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+ setupForHandleScanResult();
+
+ assertTrue(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ assertTrue(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+
+ // Wi-Fi is connected.
+ mNetworkCallback.onAvailable(null);
+
+ // Network scan timer expired
+ mDomainSelector.removeMessages(MSG_NETWORK_SCAN_TIMEOUT);
+ mDomainSelector.handleMessage(mDomainSelector.obtainMessage(MSG_NETWORK_SCAN_TIMEOUT));
+
+ verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
+ assertFalse(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+ }
+
+ @Test
+ public void testMaxCellularTimeoutWileDialingOnWlanAllowMultipleTries() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+ bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, 20);
+ bundle.putInt(KEY_MAXIMUM_NUMBER_OF_EMERGENCY_TRIES_OVER_VOWIFI_INT, 2);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+ setupForHandleScanResult();
+
+ assertTrue(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+ assertTrue(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+
+ // Wi-Fi is connected.
+ mNetworkCallback.onAvailable(null);
+
+ // Network scan timer expired
+ mDomainSelector.removeMessages(MSG_NETWORK_SCAN_TIMEOUT);
+ mDomainSelector.handleMessage(mDomainSelector.obtainMessage(MSG_NETWORK_SCAN_TIMEOUT));
+
+ verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
+ assertFalse(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ EmergencyRegResult regResult = getEmergencyRegResult(UTRAN, REGISTRATION_STATE_HOME,
+ NetworkRegistrationInfo.DOMAIN_CS,
+ true, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ assertTrue(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+
+ // Max cellular timer expired
+ mDomainSelector.removeMessages(MSG_MAX_CELLULAR_TIMEOUT);
+ mDomainSelector.handleMessage(mDomainSelector.obtainMessage(MSG_MAX_CELLULAR_TIMEOUT));
+ processAllMessages();
+
+ verify(mTransportSelectorCallback, times(2)).onWlanSelected(anyBoolean());
+ }
+
private void setupForScanListTest(PersistableBundle bundle) throws Exception {
setupForScanListTest(bundle, false);
}
@@ -1820,6 +2019,7 @@
int voWifiRequiresCondition = VOWIFI_REQUIRES_NONE;
int maxRetriesOverWiFi = 1;
int cellularScanTimerSec = 10;
+ int maxCellularTimerSec = 0;
boolean voWifiOverEmergencyPdn = false;
int scanType = SCAN_TYPE_NO_PREFERENCE;
boolean requiresImsRegistration = false;
@@ -1830,7 +2030,7 @@
return getPersistableBundle(imsRats, csRats, imsRoamRats, csRoamRats,
domainPreference, roamDomainPreference, imsWhenVoiceOnCs,
voWifiRequiresCondition, maxRetriesOverWiFi, cellularScanTimerSec,
- scanType, voWifiOverEmergencyPdn, requiresImsRegistration,
+ maxCellularTimerSec, scanType, voWifiOverEmergencyPdn, requiresImsRegistration,
requiresVoLteEnabled, ltePreferredAfterNrFailed, cdmaPreferredNumbers);
}
@@ -1839,7 +2039,8 @@
@Nullable int[] imsRoamRats, @Nullable int[] csRoamRats,
@Nullable int[] domainPreference, @Nullable int[] roamDomainPreference,
boolean imsWhenVoiceOnCs, int voWifiRequiresCondition,
- int maxRetriesOverWiFi, int cellularScanTimerSec, int scanType,
+ int maxRetriesOverWiFi, int cellularScanTimerSec,
+ int maxCellularTimerSec, int scanType,
boolean voWifiOverEmergencyPdn, boolean requiresImsRegistration,
boolean requiresVoLteEnabled, boolean ltePreferredAfterNrFailed,
@Nullable String[] cdmaPreferredNumbers) {
@@ -1874,6 +2075,7 @@
bundle.putInt(KEY_EMERGENCY_VOWIFI_REQUIRES_CONDITION_INT, voWifiRequiresCondition);
bundle.putInt(KEY_MAXIMUM_NUMBER_OF_EMERGENCY_TRIES_OVER_VOWIFI_INT, maxRetriesOverWiFi);
bundle.putInt(KEY_EMERGENCY_SCAN_TIMER_SEC_INT, cellularScanTimerSec);
+ bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, maxCellularTimerSec);
bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, voWifiOverEmergencyPdn);
bundle.putInt(KEY_EMERGENCY_NETWORK_SCAN_TYPE_INT, scanType);
bundle.putBoolean(KEY_EMERGENCY_REQUIRES_IMS_REGISTRATION_BOOL, requiresImsRegistration);