Merge "Adding unit test for ImsConferenceController"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7ab138c..76a7b61 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -144,6 +144,7 @@
<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.WRITE_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />
+ <uses-permission android:name="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"/>
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" />
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
<uses-permission android:name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" />
@@ -623,7 +624,9 @@
<action android:name="android.content.action.SEARCH_INDEXABLES_PROVIDER" />
</intent-filter>
</provider>
- <receiver android:name="com.android.phone.vvm.omtp.sms.OmtpMessageReceiver"
+
+ <receiver
+ android:name="com.android.phone.vvm.VvmSmsReceiver"
android:exported="false"
androidprv:systemUserOnly="true">
<intent-filter>
@@ -683,14 +686,22 @@
</intent-filter>
</receiver>
- <service
- android:name="com.android.phone.vvm.omtp.sms.OmtpProvisioningService"
- android:exported="false" />
<service
android:name="com.android.phone.vvm.omtp.scheduling.TaskSchedulerService"
android:exported="false" />
+ <receiver
+ android:name="com.android.phone.vvm.VvmSimStateTracker"
+ android:exported="false"
+ androidprv:systemUserOnly="true">
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED"/>
+ <action android:name="android.telephony.action.CARRIER_CONFIG_CHANGED"/>
+ <action android:name="android.intent.action.SIM_STATE_CHANGED"/>
+ </intent-filter>
+ </receiver>
+
<receiver android:name="com.android.phone.vvm.omtp.VvmPackageInstallReceiver"
androidprv:systemUserOnly="true">
<intent-filter>
@@ -700,10 +711,15 @@
</intent-filter>
</receiver>
- <activity android:name=".settings.VoicemailChangePinActivity"
- android:exported="false"
- android:theme="@style/DialerSettingsLight"
- android:windowSoftInputMode="stateVisible|adjustResize">
- </activity>
+ <activity
+ android:name="com.android.phone.settings.VoicemailChangePinActivity"
+ android:exported="false"
+ android:theme="@style/DialerSettingsLight"
+ android:windowSoftInputMode="stateVisible|adjustResize">
+ </activity>
+
+ <service
+ android:name="com.android.phone.vvm.RemoteVvmTaskManager"
+ android:exported="false"/>
</application>
</manifest>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 3da539d..a719f0a 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Kon nie die boodskap dekodeer nie."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"\'n SIM-kaart het jou diens geaktiveer en jou foon se swerwingvermoëns opgedateer."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Daar is te veel aktiewe oproepe. Beëindig of voeg asseblief bestaande oproepe saam voordat jy \'n nuwe een maak."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Kan nie koppel nie, sit asseblief \'n geldige SIM-kaart in."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Verander stemboodskap-PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Gaan voort"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Kanselleer"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 29e8a1d..ffef3d0 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"መልዕክቱን በማመሳጠር ላይ ስህተት ነበር።"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"አንድ ሲም ካርድ አገልግሎትዎን ገቢር አድርጎታል፣ እንዲሁም የስልክዎን የማስተላለፍ ችሎታዎችን አዘምኗል።"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"እጅግ በጣም ብዙ ንቁ ጥሪዎች አሉ። እባክዎ አዲስ ከማስቀመጥዎ በፊት ያሉትን ጥሪዎች ይጨርሱ ወይም ያዋህዱ።"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"መገናኘት አልተቻለም፣ እባክዎ ትክክል የሆነ SIM ካርድ ያስገቡ።"</string>
<string name="change_pin_title" msgid="7790232089699034029">"የድምፅ መልዕክት ፒን ለውጥ"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ቀጥል"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ይቅር"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 690104c..37e2884 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -585,6 +585,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"حدث خطأ أثناء فك ترميز الرسالة."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"نشطت شريحة SIM خدمتك وحدّثت إمكانات التجوال لهاتفك."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"هناك الكثير من المكالمات النشطة. يرجى إنهاء أو دمج المكالمات الموجودة قبل إجراء مكالمة جديدة."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"يتعذر الاتصال، يُرجى إدخال شريحة SIM صالحة."</string>
<string name="change_pin_title" msgid="7790232089699034029">"تغيير رقم التعريف الشخصي للبريد الصوتي"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"متابعة"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"إلغاء"</string>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index b886197..dddeb38 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Mesaj dekod edilən zaman xəta oldu."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kart xidmətinizi aktivləşdirdi və telefonunuzun rominq imkanlarını güncəlləşdi."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Burada həddindən çox aktiv zəng var. Yeni birini yerləşdirmək üçün mövcud zəngləri sonlandırın və ya birləşdirin."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Qoşulmaq olmadı, etibarlı SİM kart daxil edin."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Səsli poçtun PIN kodunu dəyişin"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Davam edin"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Ləğv edin"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 89af012..9355fc6 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -576,6 +576,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Došlo je do greške pri dekodiranju poruke."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kartica je aktivirala uslugu i ažurirala funkcije rominga na telefonu."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Ima previše aktivnih poziva. Završite ili objedinite postojeće pozive pre nego što uputite novi."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Povezivanje nije uspelo, ubacite važeću SIM karticu."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Promenite PIN kôd govorne pošte"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Nastavi"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Otkaži"</string>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index f8ec0fa..fe0b9fa 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Памылка расшыфравання паведамлення."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM-карта актывавала вашу службу і абнавіла функцыі роўмінгу вашага тэлефона."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Занадта шмат актыўных выклікаў. Скончыце ці аб\'яднайце існуючыя выклікі, перш чым рабіць новы выклік."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Немагчыма падключыцца, устаўце сапраўдную SIM-карту."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Змяніць PIN-код галасавой пошты"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Працягнуць"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Скасаваць"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 07a0b4c..aa278f1 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"При декодирането на съобщението възникна грешка."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM картата е активирала клетъчните ви услуги и е актуализирала възможностите за роуминг на телефона ви."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Активните обаждания са твърде много. Моля, завършете или обединете съществуващи обаждания, преди да започнете ново."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Не може да се установи връзка. Моля, поставете валидна SIM карта."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Промяна на ПИН за гласовата поща"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Напред"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Отказ"</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 4acd204..a11baf7 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"বার্তাটি ডিকোড করার সময় একটি ত্রুটি ঘটেছে৷"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"একটি SIM কার্ড আপনার পরিষেবা সক্রিয় করেছে এবং আপনার ফোনের রোমিং ক্ষমতা আপডেট করা হয়েছে৷"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"অনেকগুলি কল সক্রিয় রয়েছে। অনুগ্রহ করে একটি নতুন কল করার আগে বিদ্যমান কলগুলি কেটে দিন বা এটিকে সেই কলগুলিতে অন্তর্ভুক্ত করুন।"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"সংযোগ করা যায়নি, অনুগ্রহ করে একটি বৈধ SIM কার্ড ঢোকান৷"</string>
<string name="change_pin_title" msgid="7790232089699034029">"ভয়েসমেলের PIN পরিবর্তন করুন"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"চালিয়ে যান"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"বাতিল করুন"</string>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index 5ed0d59..4ab191f 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -576,6 +576,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Došlo je do greške prilikom dekodiranja poruke."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kartica je aktivirala vašu uslugu i ažurirala mogućnosti rominga za telefon."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Previše aktivnih poziva. Prekinite ili spojite postojeće pozive prije upućivanja novog poziva."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Povezivanje nije moguće, umetnite važeću SIM karticu."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Promijeni PIN govorne pošte"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Nastavi"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Otkaži"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 1f8ef42..e08c4cb 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"S\'ha produït un error en descodificar el missatge."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Una targeta SIM ha activat el servei, i s\'ha actualitzat la funció d\'itinerància del telèfon."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Hi ha massa trucades actives. Finalitza\'n alguna o combina-les abans de fer-ne una de nova."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"No es pot establir la connexió. Insereix una targeta SIM vàlida."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Canvia el PIN per a la bústia de veu"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continua"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancel·la"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 85e6264..8a41107 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Při dekódování zprávy došlo k chybě."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM karta aktivovala vaši službu a byly aktualizovány roamingové možnosti telefonu."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Máte příliš mnoho aktivních hovorů. Ukončete nebo spojte stávající hovory, než zahájíte nový."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Připojení se nezdařilo, vložte prosím platnou SIM kartu."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Změňte kód PIN hlasové schránky"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Pokračovat"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Zrušit"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 4cf585b..13c1093 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Der opstod en fejl under afkodning af beskeden."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Et SIM-kort har aktiveret din tjeneste og opdateret telefonens roamingmuligheder."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Der er for mange aktive opkald. Afslut et opkald, eller flet eksisterende opkald, inden du foretager et nyt."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Forbindelsen kunne ikke oprettes. Indsæt et gyldigt SIM-kort."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Skift pinkode til din telefonsvarer"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Fortsæt"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Annuller"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index cecd8b3..c735d30 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Beim Entschlüsseln der Nachricht ist ein Fehler aufgetreten."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Eine SIM-Karte hat deinen Dienst aktiviert und die Roamingfunktionen deines Smartphones aktualisiert."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Zu viele aktive Anrufe. Beende aktive Anrufe oder führe sie zusammen, bevor du einen neuen Anruf tätigst."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Verbindung kann nicht hergestellt werden. Lege eine gültige SIM-Karte ein."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Mailbox-PIN ändern"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Weiter"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Abbrechen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 25e1579..e6c0fc9 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Παρουσιάστηκε κάποιο σφάλμα κατά την αποκωδικοποίηση του μηνύματος."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Μια κάρτα SIM ενεργοποίησε την υπηρεσία σας και ενημέρωσε τις δυνατότητες περιαγωγής του τηλεφώνου σας."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Υπάρχουν πάρα πολλές ενεργές κλήσεις. Τερματίστε ή να συγχωνεύστε τις υπάρχουσες κλήσεις πριν πραγματοποιήσετε νέα."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Δεν είναι δυνατή η σύνδεση. Τοποθετήστε μια έγκυρη κάρτα SIM."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Αλλαγή PIN αυτόματου τηλεφωνητή"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Συνέχεια"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Ακύρωση"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index f952871..eb898b0 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"There was an error while decoding the message."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"A SIM card has activated your service and updated your phone\'s roaming capabilities."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"There are too many active calls. Please end or merge existing calls before placing a new one."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Unable to connect. Please insert a valid SIM card."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Change Voicemail PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continue"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancel"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index f952871..eb898b0 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"There was an error while decoding the message."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"A SIM card has activated your service and updated your phone\'s roaming capabilities."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"There are too many active calls. Please end or merge existing calls before placing a new one."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Unable to connect. Please insert a valid SIM card."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Change Voicemail PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continue"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancel"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index f952871..eb898b0 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"There was an error while decoding the message."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"A SIM card has activated your service and updated your phone\'s roaming capabilities."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"There are too many active calls. Please end or merge existing calls before placing a new one."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Unable to connect. Please insert a valid SIM card."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Change Voicemail PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continue"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancel"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index a5a9410..b1278f0 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Se produjo un error al decodificar el mensaje."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Una tarjeta SIM activó tu servicio y actualizó las capacidades de roaming del teléfono."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Hay demasiadas llamadas activas. Finaliza o combina las llamadas existentes antes de realizar una llamada nueva."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"No se pudo conectar. Inserta una tarjeta SIM válida."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Cambiar el PIN del buzón de voz"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuar"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancelar"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 731396a..6b06442 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Se ha producido un error al decodificar el mensaje."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Una tarjeta SIM ha activado tu servicio y actualizado la función de itinerancia del teléfono."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Hay demasiadas llamadas activas. Finaliza o combina las llamadas que tienes antes de iniciar otra."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"No se puede establecer la conexión. Inserta una tarjeta SIM válida."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Cambiar el PIN del buzón de voz"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuar"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancelar"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index d2e3fc2..36dc4e8 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Sõnumi dekodeerimisel ilmnes viga."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM-kaart aktiveeris teenuse ja värskendas telefoni rändlusvõimeid."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Liiga palju aktiivseid kõnesid. Enne uue kõne tegemist lõpetage mõni olemasolev kõne või ühendage mitu kõnet omavahel."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Ühendust ei saa luua, sisestage kehtiv SIM-kaart."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Muutke kõneposti PIN-koodi"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Jätka"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Tühista"</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 6f735d5..1473236 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -152,7 +152,7 @@
<string name="vm_change_pin_progress_message" msgid="3977357361934350336">"Itxaron, mesedez."</string>
<string name="vm_change_pin_error_too_short" msgid="5974971097302710497">"Laburregia da PIN kode berria."</string>
<string name="vm_change_pin_error_too_long" msgid="8476870806115051865">"Luzeegia da PIN kode berria."</string>
- <string name="vm_change_pin_error_too_weak" msgid="7883744811891784882">"Ahulegia da PIN kode berria. Pasahitza sendoa izan dadin, ez du izan behar zenbaki-segidarik edo errepikatutako zenbakirik."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="7883744811891784882">"Ahulegia da PIN kode berria. Pasahitza segurua izan dadin, ez du izan behar zenbaki-segidarik edo errepikatutako zenbakirik."</string>
<string name="vm_change_pin_error_mismatch" msgid="2754685537970757317">"PIN kode zaharra ez dator bat."</string>
<string name="vm_change_pin_error_invalid" msgid="3972205462701668653">"Balio ez duten karaktereak ditu PIN kode berriak."</string>
<string name="vm_change_pin_error_system_error" msgid="6610603326230000207">"Ezin da aldatu PIN kodea"</string>
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Errore bat gertatu mezua deskodetzean."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM txartel batek zerbitzua aktibatu du eta telefonoaren ibiltaritza-gaitasunak aldatu ditu."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Dei gehiegi daude aktibo. Amaitu edo bateratu abian diren deiak beste bat egin aurretik."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Ezin da konektatu. Erabili balio duen SIM txartel bat."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Aldatu erantzungailuaren PIN kodea"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Jarraitu"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Utzi"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 5bf8ea4..b76dabf 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"هنگام رمزگشایی پیام، خطایی روی داد."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"یک سیمکارت سرویس شما را فعال کرده است و قابلیتهای رومینگ تلفنتان را بهروز کرده است."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"تعداد زیادی تماس فعال وجود دارد. قبل از برقراری تماس جدید، لطفاً به تماسهای موجود پایان دهید یا آنها را ادغام کنید."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"مرتبط نشد، لطفاً سیم کارت معتبری را وارد کنید."</string>
<string name="change_pin_title" msgid="7790232089699034029">"تغییر پین پست صوتی"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ادامه"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"لغو"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3d5c880..2182c63 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Virhe purettaessa viestiä."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM-kortti on aktivoinut palvelusi ja päivittänyt puhelimesi roaming-toiminnot."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Aktiivisia puheluja on liian monta. Lopeta puheluita tai yhdistä niitä ennen uuden puhelun aloittamista."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Yhdistäminen epäonnistui. Aseta kelvollinen SIM-kortti."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Vaihda vastaajan PIN-koodi."</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Jatka"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Peruuta"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 8c84ad9..2ca9534 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Une erreur s\'est produite lors du décodage du message."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Une carte SIM a activé votre service et mis à jour les fonctionnalités d\'itinérance de votre téléphone."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Il y a trop d\'appels actifs. Veuillez mettre fin aux appels existants ou les fusionner avant d\'en passer un nouveau."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Échec de la connexion. Veuillez insérer une carte SIM valide."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Modifier le NIP de la messagerie vocale"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuer"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Annuler"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 0d60be5..72fbe64 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Une erreur s\'est produite lors du décodage du message."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Votre service a été activé et les fonctionnalités d\'itinérance de votre téléphone ont été mises à jour via une carte SIM."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Il y a trop d\'appels actifs. Pour passer un autre appel, vous devez mettre fin aux appels existants ou fusionner ces derniers."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Connexion impossible. Veuillez insérer une carte SIM valide."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Modifier le code de la boîte vocale"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuer"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Annuler"</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 5f65254..77faf92 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Produciuse un erro durante a descodificación da mensaxe."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"A tarxeta SIM activou o teu servizo e actualizou as funcións de itinerancia do teléfono."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Hai moitas chamadas activas. Finaliza as chamadas existentes ou combínaas antes de facer unha nova."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Non se pode conectar. Insire unha tarxeta SIM válida."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Cambiar PIN do correo de voz"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuar"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancelar"</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 3a350da..286cc84 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -428,7 +428,7 @@
<string name="card_title_dialing" msgid="5769417478498348054">"ડાયલ કરી રહ્યાં છે"</string>
<string name="card_title_redialing" msgid="8253487008234167266">"ફરી ડાયલ કરી રહ્યાં છે"</string>
<string name="card_title_conf_call" msgid="1162980346189744501">"કોન્ફરન્સ કૉલ"</string>
- <string name="card_title_incoming_call" msgid="7364539451234646909">"આવનાર કૉલ"</string>
+ <string name="card_title_incoming_call" msgid="7364539451234646909">"ઇનકમિંગ કૉલ"</string>
<string name="card_title_call_ended" msgid="5544730338889702298">"કૉલ સમાપ્ત થયો"</string>
<string name="card_title_on_hold" msgid="821463117892339942">"હોલ્ડ પર"</string>
<string name="card_title_hanging_up" msgid="3999101620995182450">"સમાપ્ત કરી રહ્યાં છે"</string>
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"સંદેશ ડીકોડિંગ કરતી વખતે ભૂલ આવી હતી."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"એક SIM કાર્ડ એ તમારી સેવા સક્રિય કરી છે અને તમારા ફોનની રોમિંગ ક્ષમતાઓને અપડેટ કરી છે."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"અહીં ઘણા બધા સક્રિય કૉલ્સ છે. કૃપા કરીને એક નવો કૉલ કરવા પહેલાં અસ્તિત્વમાંના કૉલ્સને સમાપ્ત કરો અથવા મર્જ કરો."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"કનેક્ટ કરવામાં અસમર્થ, કૃપા કરીને એક માન્ય SIM કાર્ડ દાખલ કરો."</string>
<string name="change_pin_title" msgid="7790232089699034029">"વૉઇસમેઇલ PIN બદલો"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ચાલુ રાખો"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"રદ કરો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 88db7a0..9c1828a 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"संदेश डीकोड करते समय कोई त्रुटि हुई थी."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"सिम कार्ड द्वारा आपकी सेवा को सक्रिय किया गया है और आपके फ़ोन की रोमिंग क्षमताओं को अपडेट किया गया है."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"बहुत अधिक कॉल सक्रिय हैं. नया कॉल करने से पहले कृपया मौजूदा कॉल समाप्त करें या उन्हें मिला दें."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"कनेक्ट नहीं हो पा रहा है, कृपया कोई मान्य SIM कार्ड डालें."</string>
<string name="change_pin_title" msgid="7790232089699034029">"वॉइसमेल पिन बदलें"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"जारी रखें"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"अभी नहीं"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index c9fa149..87ce1d2 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -576,6 +576,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Došlo je do pogreške prilikom dekodiranja poruke."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kartica aktivirala je vašu uslugu i ažurirala mogućnosti telefona za roaming."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Postoji previše aktivnih poziva. Prekinite ili spojite postojeće pozive prije uspostavljanja novog poziva."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Povezivanje nije moguće, umetnite važeću SIM karticu."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Promjena PIN-a govorne pošte"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Nastavi"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Odustani"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 9b575ec..7451ce3 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Hiba történt az üzenet dekódolása közben."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Egy SIM kártya aktiválta a szolgáltatást, valamint frissítette a telefon barangolási képességeit."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Túl sok aktív hívás van. Új hívás indítása előtt fejezzen be vagy vonjon össze meglévő hívásokat."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Sikertelen csatlakozás. Helyezzen be egy működő SIM-kártyát."</string>
<string name="change_pin_title" msgid="7790232089699034029">"A hangposta PIN-kódjának módosítása"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Folytatás"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Mégse"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 9ba3f75..4634591 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -52,7 +52,7 @@
<string name="requesting_unlock" msgid="6412629401033249351">"Հայցվում է ցանցի ապակողպում..."</string>
<string name="unlock_failed" msgid="6490531697031504225">"Ցանցի ապակողպման հարցումը խափանվեց:"</string>
<string name="unlock_success" msgid="6770085622238180152">"Ցանցի ապակողպումը խափանվեց"</string>
- <string name="mobile_network_settings_not_available" msgid="3831911315358856062">"Բջջային ցանցի կարգավորումներն անհասանելի են այս օգտվողի համար"</string>
+ <string name="mobile_network_settings_not_available" msgid="3831911315358856062">"Բջջային ցանցի կարգավորումներն անհասանելի են այս օգտատիրոջ"</string>
<string name="labelGSMMore" msgid="5930842194056092106">"GSM զանգերի կարգավորումներ"</string>
<string name="labelGsmMore_with_label" msgid="2674012918829238901">"GSM զանգի կարգավորումներ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="labelCDMAMore" msgid="1630676740428229339">"CDMA զանգերի կարգավորումներ"</string>
@@ -118,7 +118,7 @@
<string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Անջատված է"</string>
<string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Ձեր սպասարկողը չի աջակցում զանգի վերահասցեավորման կասեցում, երբ ձեր հեռախոսն անհասանելի է:"</string>
<string name="updating_title" msgid="6146755386174019046">"Զանգի կարգավորումներ"</string>
- <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Զանգի կարգավորումները կարող է փոխել միայն ադմինիստրատոր հանդիսացող օգտվողը:"</string>
+ <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Զանգի կարգավորումները կարող է փոխել միայն ադմինիստրատոր հանդիսացող օգտատերը:"</string>
<string name="call_settings_with_label" msgid="3401177261468593519">"Կարգավորումներ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="error_updating_title" msgid="7970259216988931777">"Զանգի կարգավորումների սխալ"</string>
<string name="reading_settings" msgid="1920291699287055284">"Ընթերցման կարգավորումներ..."</string>
@@ -557,8 +557,8 @@
<string name="selectContact" msgid="781975788478987237">"ընտրել կոնտակտ"</string>
<string name="not_voice_capable" msgid="2739898841461577811">"Ձայնային զանգերը չեն սպասարկվում"</string>
<string name="description_dial_button" msgid="7459705245418435351">"համարհավաքել"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Թրթռալ"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Թրթռալ"</string>
+ <string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Թրթռոց"</string>
+ <string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Թրթռոց"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Տեսանելի ձայնային փոստ"</string>
<string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"Ընտրեք PIN"</string>
<string name="voicemail_change_pin_dialog_title" msgid="6035421908626121564">"Փոխել PIN-ը"</string>
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Հաղորդագրությունն ապակոդավորելիս սխալ առաջացավ:"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM քարտն ակտիվացրել է ծառայությունը և թարմացրել ձեր հեռախոսի ռոումինգի հնարավորությունները:"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Չափազանց շատ ընթացիկ զանգեր կան: Ավարտեք կամ միավորեք առկա զանգերը՝ նախքան նորն զանգ կատարելը:"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Չհաջողվեց միանալ, տեղադրեք վավեր SIM քարտ:"</string>
<string name="change_pin_title" msgid="7790232089699034029">"Փոխել ձայնային փոստի PIN-ը"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Շարունակել"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Չեղարկել"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index f32fbb5..a37b01a 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Terjadi kesalahan saat mendekode pesan."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Kartu SIM telah mengaktifkan layanan dan memperbarui kemampuan roaming ponsel."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Ada terlalu banyak panggilan aktif. Akhiri atau gabungkan panggilan yang ada sebelum melakukan panggilan baru."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Tidak dapat tersambung, masukkan kartu SIM yang valid."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Ubah PIN Pesan Suara"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Lanjutkan"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Batal"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 07d42ce..72ac402 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Villa kom upp við að afkóða skeytið."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM-kort hefur virkjað þjónustuna þína og uppfært reikigetu símans."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Of mörg símtöl eru virk. Ljúktu eða sameinaðu fyrirliggjandi símtöl áður en þú hringir nýtt."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Ekki var hægt að tengjast, notaðu gilt SIM-kort."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Breyta PIN-númeri talhólfs"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Halda áfram"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Hætta við"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2e03b96..06fc662 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Si è verificato un errore durante la decodifica del messaggio."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Una scheda SIM ha attivato il tuo servizio e ha aggiornato le funzionalità di roaming del telefono."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Ci sono troppe chiamate attive. Termina o unisci le chiamate esistenti prima di effettuarne una nuova."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Impossibile collegarsi. Inserisci una scheda SIM valida."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Cambia PIN segreteria"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continua"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Annulla"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 8814cfc..556dcc6 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"אירעה שגיאה בעת פענוח ההודעה."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"כרטיס SIM הפעיל את השירות שלך ועדכן את יכולות הנדידה של הטלפון."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"יש יותר מדי שיחות פעילות. כדי להתחיל שיחה חדשה עליך לסיים או למזג חלק מהשיחות הפעילות."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"לא ניתן להתחבר. הכנס כרטיס SIM תקין."</string>
<string name="change_pin_title" msgid="7790232089699034029">"שינוי של קוד הגישה לדואר הקולי"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"המשך"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ביטול"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 96a94b0..577e9fb 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"メッセージのデコード中にエラーが発生しました。"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIMカードでサービスが有効になり、スマートフォンのローミング機能が更新されています。"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"通話中の電話の数が多すぎます。新しく通話を発信するには、まず既存の通話を終了するか、統合してグループ通話にしてください。"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"接続できません。有効な SIM カードを挿入してください。"</string>
<string name="change_pin_title" msgid="7790232089699034029">"ボイスメール PIN の変更"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"続行"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"キャンセル"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 1410f55..efb401e 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"შეტყობინების გაშიფრვისას წარმოიშვა შეცდომა."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM ბარათმა გაააქტიურა თქვენი სერვისი და თქვენი ტელეფონის როუმინგის შესაძლებლობები განაახლა."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"ძალიან ბევრი აქტიური ზარია. გთხოვთ, დაასრულოთ ან გააერთიანოთ არსებული ზარები ახალი ზარის განხორციელებამდე."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"დაკავშირება შეუძლებელია, გთხოვთ, ჩადოთ მოქმედი SIM ბარათი."</string>
<string name="change_pin_title" msgid="7790232089699034029">"ხმოვანი ფოსტის PIN-კოდის შეცვლა"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"გაგრძელება"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"გაუქმება"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 3152964..73a2d47 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Хабарды кодтан шығару кезінде қате пайда болды."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM карта қызметті белсендіріп, телефонның роуминг мүмкіндіктерін жаңартты."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Белсенді қоңыраулар тым көп. Жаңа қоңырау шалудан бұрын бар қоңырауларды аяқтаңыз немесе біріктіріңіз."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Қосылу мүмкін болмады. Жарамды SIM картасын енгізіңіз."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Дауыстық пошта PIN кодын өзгерту"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Жалғастыру"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Тоқтату"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 55a1bfc..dbaa377 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"មានកំហុសខណៈពេលឌិកូដសារ។"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ស៊ីមកាតបានធ្វើឲ្យសេវាកម្មរបស់អ្នកសកម្ម និងបានធ្វើបច្ចុប្បន្នភាពសមត្ថភាពរ៉ូមីងសម្រាប់ទូរស័ព្ទរបស់អ្នក។"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"មានការហៅដែលសកម្មច្រើនពេក។ សូមបញ្ចប់ ឬដាក់បញ្ចូលគ្នាការហៅដែលមានស្រាប់មុនពេលដាក់ការហៅថ្មី។"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"មិនអាចតភ្ជាប់បានទេ សូមបញ្ចូលស៊ីមកាតដែលប្រើបាន។"</string>
<string name="change_pin_title" msgid="7790232089699034029">"ប្ដូរលេខកូដ PIN ជាសារសំឡេង"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"បន្ត"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"បោះបង់"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 2f08407..72cea8b 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"ಸಂದೇಶವನ್ನು ಡೀಕೋಡ್ ಮಾಡುವಾಗ ದೋಷವುಂಟಾಗಿದೆ."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ನಿಮ್ಮ ಸೇವೆಯನ್ನು ಸಿಮ್ ಕಾರ್ಡ್ ಸಕ್ರಿಯಗೊಳಿಸಿದೆ ಮತ್ತು ನಿಮ್ಮ ಫೋನ್ನ ರೋಮಿಂಗ್ ಸಾಮರ್ಥ್ಯವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"ಹಲವಾರು ಸಕ್ರಿಯ ಕರೆಗಳು. ಹೊಸ ಕರೆ ಮಾಡುವ ಮೊದಲು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕರೆಗಳನ್ನು ಅಂತ್ಯಗೊಳಿಸಿ ಅಥವಾ ವಿಲೀನಗೊಳಿಸಿ."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ ಸಿಮ್ ಕಾರ್ಡ್ ಸೇರಿಸಿ."</string>
<string name="change_pin_title" msgid="7790232089699034029">"ಧ್ವನಿಮೇಲ್ ಪಿನ್ ಬದಲಾಯಿಸಿ"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ಮುಂದುವರಿಸು"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ರದ್ದುಮಾಡಿ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 17140f3..ec45487 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"메시지를 디코딩하는 중에 오류가 발생했습니다."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM 카드로 서비스가 활성화되었으며 휴대전화 로밍 기능이 업데이트되었습니다."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"활성화된 통화가 너무 많습니다. 새로운 전화를 걸기 전에 기존의 통화를 끝내거나 합치세요."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"연결할 수 없습니다. 유효한 SIM 카드를 삽입하세요."</string>
<string name="change_pin_title" msgid="7790232089699034029">"음성사서함 PIN 변경"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"계속"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"취소"</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 22e4a7f..9faa6d2 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Билдирүү дешифрленип жатканда ката кеткен."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM-карта кызматыңызды жандырып, телефонуңуздун роуминг мүмкүнчүлүктөрүн жаңыртты."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Учурда жигердүү чалуулар өтө көп. Чалуу үчүн учурдагы чалууларды бүтүрүңүз же бириктириңиз."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Байланышуу мумкүн эмес. Жарактуу SIM-картаны салыңыз."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Үн почтасынын PIN кодун өзгөртүү"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Улантуу"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Жокко чыгаруу"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 51ccb97..9d13124 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"ມີຂໍ້ຜິດພາດໃນລະຫວ່າງຖອດລະຫັດຂໍ້ຄວາມດັ່ງກ່າວ."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ແຜ່ນ SIM ໄດ້ເປີດໃຊ້ງານການບໍລິການຂອງທ່ານ ແລະອັບເດດຄວາມສາມາດໃຊ້ງານຂ້າມເຂດຂອງໂທລະສັບຂອງທ່ານແລ້ວ."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"ມີສາຍຫຼາຍເກີນໄປ. ກະລຸນາວາງສາຍ ຫຼື ຮວມສາຍທີ່ກຳລັງໂທກ່ອນໂທສາຍໃໝ່."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້, ກະລຸນາໃສ່ຊິມກາດທີ່ຖືກຕ້ອງ."</string>
<string name="change_pin_title" msgid="7790232089699034029">"ປ່ຽນລະຫັດ PIN ຂໍ້ຄວາມສຽງ"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ດຳເນີນການຕໍ່"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ຍົກເລີກ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 5a909e8..612de87 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Iškoduojant pranešimą įvyko klaida."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kortelė suaktyvino paslaugą ir atnaujino telefono tarptinklinio duomenų ryšio funkcijas."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Yra per daug aktyvių skambučių. Prieš skambindami kitu numeriu, užbaikite ar sujunkite esamus skambučius."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Nepavyko užmegzti ryšio. Įdėkite tinkamą SIM kortelę."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Balso pašto PIN kodo keitimas"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Tęsti"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Atšaukti"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 981a082..12645b8 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -578,6 +578,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Atšifrējot ziņojumu, radās kļūda."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kartē ir aktivizēts jūsu pakalpojums un atjauninātas tālruņa viesabonēšanas iespējas."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Ir pārāk daudz aktīvu zvanu. Pirms jauna zvana veikšanas pabeidziet vai apvienojiet esošos zvanus."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Nevar izveidot savienojumu. Lūdzu, ievietojiet derīgu SIM karti."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Balss pasta PIN koda mainīšana"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Turpināt"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Atcelt"</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 3e4d323..f7eac77 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Настана грешка при дешифрирање на пораката."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Вашата СИМ-картичка ја активираше услугата и ги ажурираше способностите за роаминг на вашиот телефон."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Има премногу активни повици. Завршете или спојте ги постоечките повици пред да започнете нов."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Не може да се поврзе. Внесете важечка SIM-картичка."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Променете PIN на говорната пошта"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Продолжи"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Откажи"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index 6249b5d..9b22e64 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"സന്ദേശം ഡീകോഡുചെയ്യുമ്പോൾ ഒരു പിശകുണ്ടായി."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ഒരു SIM കാർഡ് നിങ്ങളുടെ സേവനം സജീവമാക്കി, ഫോണിന്റെ റോമിംഗ് ശേഷികൾ അപ്ഡേറ്റ് ചെയ്തു."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"നിരവധി കോളുകൾ നിലവിൽ സജീവമായുണ്ട്. പുതിയ കോൾ വിളിക്കുന്നതിനുമുമ്പ് നിലവിലുള്ള കോളുകൾ അവസാനിപ്പിക്കുകയോ ലയിപ്പിക്കുകയോ ചെയ്യുക."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"കണക്റ്റുചെയ്യാനാകുന്നില്ല, ഉപയോഗിക്കാനാകുന്ന ഒരു സിം കാർഡ് ഇടുക."</string>
<string name="change_pin_title" msgid="7790232089699034029">"വോയ്സ്മെയിൽ പിൻ മാറ്റുക"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"തുടരുക"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"റദ്ദാക്കുക"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 29dd3dd..ef7f0cf 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Зурвасын кодыг тайлах явцад алдаа гарсан."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM карт таны үйлчилгээг идэвхжүүлж, утасны роаминг багтаамжийг шинэчиллээ."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Хэт олон идэвхтэй дуудлага байна. Шинэ дуудлага хийхийн өмнө одоогийн дуудлагуудыг таслах буюу нэгтгэнэ үү."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Холбох боломжгүй, хүчинтэй SIM карт оруулна уу."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Дуут шуудангийн PIN-г өөрчлөх"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Үргэлжлүүлэх"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Цуцлах"</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index f044a4e..1d0cd00 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -456,7 +456,7 @@
<string name="incall_error_supp_service_transfer" msgid="7235952238189391438">"हस्तांतर करू शकत नाही."</string>
<string name="incall_error_supp_service_conference" msgid="2505727299596357312">"परिषद कॉल करण्यात अक्षम."</string>
<string name="incall_error_supp_service_reject" msgid="8998568661508655638">"कॉल नाकारू शकत नाही."</string>
- <string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"कॉल रिलीझ करू शकत नाही."</string>
+ <string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"कॉल रिलीज करू शकत नाही."</string>
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"कॉल सुरु ठेवू शकत नाही."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"कॉल करण्यासाठी वायरलेस नेटवर्कशी कनेक्ट करा."</string>
<string name="incall_error_promote_wfc" msgid="106510757624022064">"कॉल करण्यासाठी वाय-फाय कॉलिंग सक्षम करा."</string>
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"संदेश डीकोड करताना एक त्रुटी आली."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"सिम कार्डने आपली सेवा सक्रिय केली आहे आणि आपल्या फोनच्या रोमिंग क्षमता अद्यतनित केल्या."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"बरेच सक्रिय कॉल आहेत. कृपया नवीन एक कॉल करण्यापूर्वी विद्यमान कॉल समाप्त करा किंवा विलीन करा."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"कनेक्ट करण्यात अक्षम, कृपया एक वैध सिम कार्ड घाला."</string>
<string name="change_pin_title" msgid="7790232089699034029">"व्हॉइसमेल पिन बदला"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"सुरू ठेवा"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"रद्द करा"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 7861beb..65cd8b1 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Terdapat ralat semasa menyahkodkan mesej."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Kad SIM telah mengaktifkan perkhidmatan anda dan mengemas kini keupayaan perayauan telefon anda."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Terlalu banyak panggilan aktif. Sila tamatkan atau gabungkan panggilan yang sedia ada sebelum membuat panggilan baharu."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Tidak dapat bersambung, sila masukkan kad SIM yang sah."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Tukar PIN Mel Suara"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Teruskan"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Batal"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index ba2759d..cda02d0 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"စာကို ကုဒ်ဖွင့်နေစဉ် အမှားရှိခဲ့သည်။"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM ကဒ်သည် သင့် ဖုန်းဝန်ဆောင်မှုအား အသက်သွင်းခဲ့ပြီး သင့်ဖုန်း၏ ကွန်ယက်ပြင်ပဒေတာသုံးနိုင်စွမ်းအား ပြင်ဆင်မွမ်းမံပြီးဖြစ်၏။"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"လက်ရှိခေါ်ဆိုမှုများ အလွန်များနေပါသည်။ ခေါ်ဆိုမှုအသစ်တစ်ခု မပြုလုပ်ခင် လက်ရှိဖုန်းခေါ်ဆိုမှုများကို အဆုံးသတ် (သို့) ပေါင်း လိုက်ပါ။"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"ချိတ်ဆက် မရပါ၊ ကျေးဇူးပြုပြီး မှန်ကန်သည့် SIM ကဒ်ကို ထည့်ပေးပါ။"</string>
<string name="change_pin_title" msgid="7790232089699034029">"အသံမေးလ်ပင်နံပါတ် ပြောင်းရန်"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ဆက်လုပ်ရန်"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"မလုပ်တော့"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index de4d9e4..6ee45ab 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Det oppsto en feil under dekoding av meldingen."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Et SIM-kort har aktivert tjenesten din og oppdatert roamingfunksjonene for telefonen din."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Du har for mange aktive samtaler. Avslutt eller slå sammen eksisterende samtaler før du starter en ny samtale."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Kunne ikke koble til. Sett inn et gyldig SIM-kort."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Endre PIN-kode for talemeldinger"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Fortsett"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Avbryt"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 16e495a..561f399 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"सन्देश डिकोड गर्दा एउटा समस्या भयो।"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM कार्डले तपाईँको सेवा सक्रिय गर्नुका तथा फोनको रोमिङ क्षमताहरू पनि अद्यावधिक गरिदिएको छ।"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"धेरै सक्रिय कलहरू छन्। कृपया कुनै नयाँ राख्नु अघि विद्यमान कलहरूलाई अन्त्य वा मर्ज गर्नुहोस्।"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"जडान गर्न सकिएन, कृपया मान्य SIM कार्ड सम्मिलित गर्नुहोस्।"</string>
<string name="change_pin_title" msgid="7790232089699034029">"भ्वाइस मेलको PIN परिवर्तन गर्नुहोस्"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"जारी राख्नुहोस्"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"रद्द गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 4e3f030..90c1d3b 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -228,9 +228,9 @@
<string name="throttle_help" msgid="243651091785169900">"Meer informatie"</string>
<string name="throttle_status_subtext" msgid="1657318943142085170">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) van periodemaximum van <xliff:g id="USED_2">%3$s</xliff:g>\nDe volgende periode start over<xliff:g id="USED_3">%4$d</xliff:g> dagen (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
<string name="throttle_data_usage_subtext" msgid="6029276011123694701">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) van periodemaximum van <xliff:g id="USED_2">%3$s</xliff:g>"</string>
- <string name="throttle_data_rate_reduced_subtext" msgid="7492763592720107737">"Maximum van <xliff:g id="USED_0">%1$s</xliff:g> overschreden\nGegevenssnelheid verlaagd tot <xliff:g id="USED_1">%2$d</xliff:g> kB/s"</string>
+ <string name="throttle_data_rate_reduced_subtext" msgid="7492763592720107737">"Maximum van <xliff:g id="USED_0">%1$s</xliff:g> overschreden\nGegevenssnelheid verlaagd tot <xliff:g id="USED_1">%2$d</xliff:g> KB/s"</string>
<string name="throttle_time_frame_subtext" msgid="7732763021560399960">" ٪<xliff:g id="USED_0">%1$d</xliff:g>van cyclus verstreken\nDe volgende periode start over <xliff:g id="USED_1">%2$d</xliff:g> dagen (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
- <string name="throttle_rate_subtext" msgid="2149102656120726855">"Gegevenssnelheid wordt verlaagd tot <xliff:g id="USED">%1$d</xliff:g> kB/s als de limiet voor gegevensgebruik wordt overschreden"</string>
+ <string name="throttle_rate_subtext" msgid="2149102656120726855">"Gegevenssnelheid wordt verlaagd tot <xliff:g id="USED">%1$d</xliff:g> KB/s als de limiet voor gegevensgebruik wordt overschreden"</string>
<string name="throttle_help_subtext" msgid="3633091498168446044">"Meer informatie over het beleid voor gegevensgebruik van je mobiele provider"</string>
<string name="cell_broadcast_sms" msgid="5584192824053625842">"Infodienstbericht"</string>
<string name="enable_disable_cell_bc_sms" msgid="4851147873691392255">"SMS Infodienstbericht"</string>
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Er is een fout opgetreden tijdens het decoderen van het bericht."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Een simkaart heeft je service geactiveerd en heeft de roaming-mogelijkheden van je telefoon geüpdatet."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Er zijn te veel actieve oproepen. Beëindig bestaande oproepen of voeg ze samen voordat je een nieuwe oproep start."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Kan geen verbinding maken. Plaats een geldige simkaart."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Voicemailpincode wijzigen"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Doorgaan"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Annuleren"</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 9fbb746..c222da5 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"ਸੁਨੇਹਾ ਡੀਕੋਡ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਅਸ਼ੁੱਧੀ ਹੋਈ ਸੀ।"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ਇੱਕ SIM ਕਾਰਡ ਨੇ ਤੁਹਾਡੀ ਸੇਵਾ ਸਕਿਰਿਆ ਕੀਤੀ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਫੋਨ ਦੀਆਂ ਰੋਮਿੰਗ ਸਮਰੱਥਤਾਵਾਂ ਅਪਡੇਟ ਕੀਤੀਆਂ ਹਨ।"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"ਇੱਥੇ ਬਹੁਤ ਸਾਰੀਆਂ ਕਿਰਿਆਸ਼ੀਲ ਕਾਲਾਂ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਨਵੀਂ ਕਾਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਮੌਜੂਦਾ ਕਾਲਾਂ ਨੂੰ ਸਮਾਪਤ ਜਾਂ ਮਿਲਾਓ।"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"ਕਨੈਕਟ ਕਰਨ ਦੇ ਅਯੋਗ, ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਵੈਧ ਸਿਮ ਕਾਰਡ ਦਾਖਲ ਕਰੋ।"</string>
<string name="change_pin_title" msgid="7790232089699034029">"ਵੌਇਸਮੇਲ PIN ਬਦਲੋ"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ਜਾਰੀ ਰੱਖੋ"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ਰੱਦ ਕਰੋ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 1496902..e689f1a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -86,7 +86,7 @@
<string name="sum_cdma_call_settings" msgid="284753265979035549">"Dodatkowe ustawienia tylko połączenia CDMA"</string>
<string name="labelNwService" msgid="4699970172021870983">"Ustawienia usługi sieciowej"</string>
<string name="labelCallerId" msgid="3888899447379069198">"Nazwa rozmówcy"</string>
- <string name="sum_loading_settings" msgid="1826692909391168620">"Wczytywanie ustawień…"</string>
+ <string name="sum_loading_settings" msgid="1826692909391168620">"Wczytuję ustawienia…"</string>
<string name="sum_hide_caller_id" msgid="1071407020290873782">"Ukrycie numeru podczas rozmów wychodzących"</string>
<string name="sum_show_caller_id" msgid="6768534125447290401">"Numer wyświetlany w połączeniach wychodzących"</string>
<string name="sum_default_caller_id" msgid="1954518825510901365">"Do wyświetlania mojego numeru w połączeniach wychodzących używaj domyślnych ustawień operatora"</string>
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Podczas dekodowania wiadomości wystąpił błąd."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Karta SIM aktywowała usługę i zaktualizowała funkcje roamingowe telefonu."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Masz za dużo aktywnych połączeń. Scal lub zakończ istniejące połączenia, aby nawiązać nowe."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Nie udało się nawiązać połączenia. Włóż prawidłową kartę SIM."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Zmień kod PIN poczty głosowej"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Dalej"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Anuluj"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index d59ad14..cf05bbb 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Ocorreu um erro durante a descodificação da mensagem."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Um cartão SIM ativou o seu serviço e atualizou as capacidades de roaming do seu telemóvel."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Existem demasiadas chamadas ativas. Termine ou intercale as chamadas existentes antes de efetuar uma nova chamada."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Não é possível estabelecer ligação, introduza um cartão SIM válido."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Alterar o PIN do correio de voz"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuar"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancelar"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index b778a0b..37d9fb0 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Ocorreu um erro ao decodificar a mensagem."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Um cartão SIM ativou seu serviço e atualizou os recursos de roaming do smartphone."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Há muitas chamadas ativas. Finalize ou mescle as chamadas existentes antes de fazer uma nova."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Não é possível conectar-se, insira um cartão SIM válido."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Alterar o PIN do correio de voz"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuar"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Cancelar"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 897da81..f2ec525 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -576,6 +576,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"A apărut o eroare la decodificarea mesajului."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Un card SIM a activat serviciul și a actualizat funcțiile de roaming ale telefonului."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Prea multe apeluri active. Încheiați sau îmbinați apeluri existente înainte de a iniția unul nou."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Nu v-ați conectat. Inserați un card SIM valid."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Schimbați codul PIN pentru mesageria vocală"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Continuați"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Anulați"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 58f7001..0351ae0 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -581,6 +581,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"При расшифровке сообщения произошла ошибка."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"В вашем телефоне уже настроен роуминг и активирована SIM-карта."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Слишком много активных вызовов. Чтобы выполнить новый вызов, завершите или объедините существующие."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Ошибка подключения. Вставьте поддерживаемую SIM-карту."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Сменить PIN-код голосовой почты"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Продолжить"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Отмена"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 773b98c..2a44593 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"පණිවිඩය විකේතනය කරන අතරතුර දෝෂයක් සිදු විය."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM කාඩ්පතක් ඔබේ සේවාව සක්රිය කර ඔබේ දුරකථනයේ රෝමිං හැකියා යාවත්කාලීන කර තිබේ."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"සක්රිය ඇමතුම් ඉතා විශාල ගණනක් ඇත. කරුණාකර නව ඇමතුමක් ගැනීමට පෙර පවතින ඇමතුම් අවසන් හෝ ඒකාබද්ධ කරන්න."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"සම්බන්ධ වීමට නොහැකිය, කරුණාකර වලංගු SIM කාඩ්පතක් ඇතුළු කරන්න."</string>
<string name="change_pin_title" msgid="7790232089699034029">"හඬ තැපැල් PIN අංකය වෙනස් කරන්න"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"දිගටම කර ගෙන යන්න"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"අවලංගු කරන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 4b65a2e..3a6d17b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Pri dekódovaní správy sa vyskytla chyba"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM karta aktivovala vašu službu a aktualizovala možnosti roamingu vášho telefónu"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Prebieha príliš veľa aktívnych hovorov. Skôr ako uskutočníte nový hovor, ukončite existujúce hovory alebo ich zlúčte."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Nedá sa pripojiť, vložte platnú SIM kartu."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Zmena kódu PIN hlasovej schránky"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Pokračovať"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Zrušiť"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 737baf2..8187a2b 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Napaka pri dekodiranju sporočila."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Kartica SIM je aktivirala vašo storitev in posodobila zmožnosti telefona za gostovanje."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Preveč aktivnih klicev. Preden začnete nov klic, končajte ali združite obstoječe klice."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Povezave ni mogoče vzpostaviti, vstavite veljavno kartico SIM."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Sprememba kode PIN za sporočila v odzivniku"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Naprej"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Prekliči"</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index d0333a0..e28ddfd 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Ndodhi një gabim gjatë dekodimit të mesazhit."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Një kartë SIM ka aktivizuar shërbimin tënd dhe ka përditësuar aftësitë e roaming-ut të telefonit tënd."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Ka shumë thirrje aktive. Përfundo ose të bashko thirrjet ekzistuese para kryerjes së një thirrjeje të re."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Nuk mund të lidhet. Fut një kartë SIM të vlefshme."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Ndrysho kodin PIN të postës zanore"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Vazhdo"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Anulo"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 77a0bbf..43174d4 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -576,6 +576,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Дошло је до грешке при декодирању поруке."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM картица је активирала услугу и ажурирала функције роминга на телефону."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Има превише активних позива. Завршите или обједините постојеће позиве пре него што упутите нови."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Повезивање није успело, убаците важећу SIM картицу."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Промените PIN кôд говорне поште"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Настави"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Откажи"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 359d9bb..e54a48a 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Ett fel inträffade när meddelandet avkodades."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Ett SIM-kort har använts för att aktivera tjänsten och uppdatera roamingfunktionerna i mobilen."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Det finns för många aktiva samtal. Avsluta eller slå samman pågående samtal innan du ringer ett nytt."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Det går inte att ansluta. Sätt i ett giltigt SIM-kort."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Ändra röstbrevlådans pinkod"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Fortsätt"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Avbryt"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index bcefb51..3f7ae85 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Hitilafu imetokea wakati wa usimbuaji wa ujumbe."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kadi yako imeanzisha huduma yako na kusasisha uwezo wa simu yako wa kutumia mitandao mingine."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Kuna simu nyingi mno zinazoendelea. Tafadhali kata au uunganishe simu zinazoendelea kabla hujapiga nyingine."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Imeshindwa kuunganisha, tafadhali ingiza SIM kadi sahihi."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Badilisha PIN ya Ujumbe wa Sauti"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Endelea"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Ghairi"</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 8484728..2a85138 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"செய்தியைக் குறிவிலக்கும்போது பிழை ஏற்பட்டது."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ஏற்கனவே சிம் கார்டைப் பயன்படுத்தி சேவை இயக்கப்பட்டது மற்றும் மொபைலின் ரோமிங் செயல்திறன்கள் புதுப்பிக்கப்பட்டன."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"மிகவும் அதிக அளவிலான அழைப்புகள் செயலில் உள்ளன. புதிய அழைப்பை மேற்கொள்ளும் முன், ஏற்கனவேயுள்ள அழைப்புகளைத் துண்டிக்கவும் அல்லது ஒன்றாகப் பிணைக்கவும்."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"இணைக்க முடியவில்லை, சரியான சிம் கார்டைச் செருகவும்."</string>
<string name="change_pin_title" msgid="7790232089699034029">"குரலஞ்சல் பின்னை மாற்றவும்"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"தொடர்க"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ரத்துசெய்"</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 415449b..cc4799b 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"సందేశాన్ని డీకోడ్ చేస్తున్నప్పుడు లోపం సంభవించింది."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM కార్డ్ మీ సేవను సక్రియం చేసింది మరియు మీ ఫోన్ రోమింగ్ సామర్థ్యాలను నవీకరించింది."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"చాలా ఎక్కువ కాల్లు సక్రియంగా ఉన్నాయి. దయచేసి మరొక కొత్త కాల్ చేసే ముందు ఇప్పటికే ఉన్న కాల్లను ముగించండి లేదా విలీనం చేయండి."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"కనెక్ట్ చేయడం సాధ్యపడలేదు, దయచేసి చెల్లుబాటు అయ్యే SIM కార్డ్ను చొప్పించండి."</string>
<string name="change_pin_title" msgid="7790232089699034029">"వాయిస్ మెయిల్ PINని మార్చండి"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"కొనసాగించు"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"రద్దు చేయి"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 7f3c811..ec9691b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"เกิดข้อผิดพลาดขณะถอดรหัสข้อความ"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ซิมการ์ดได้เปิดใช้บริการของคุณและอัปเดตความสามารถในการโรมมิ่งของโทรศัพท์"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"มีสายที่ใช้งานอยู่มากเกินไป โปรดวางสายหรือรวมสายที่มีก่อนโทรออกครั้งใหม่"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"ไม่สามารถเชื่อมต่อ โปรดใส่ซิมการ์ดที่ถูกต้อง"</string>
<string name="change_pin_title" msgid="7790232089699034029">"เปลี่ยน PIN ข้อความเสียง"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"ดำเนินการต่อ"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"ยกเลิก"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 6a8996b..f8e9c6c 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Nagkaroon ng error habang dine-decode ang mensahe."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Na-activate ng isang SIM card ang iyong serbisyo at na-update ang mga kakayahang roaming ng iyong telepono."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Masyadong maraming aktibong tawag. Mangyaring tapusin o pagsamahin ang mga umiiral na tawag bago gumawa ng bago."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Hindi nakakonekta, pakipasok ang isang wastong SIM card."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Baguhin ang PIN sa Voicemail"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Magpatuloy"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Kanselahin"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 88ca017..1d58d89 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"İletinin kodu çözülürken bir hata oluştu."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Bir SIM kart, hizmetinizi etkinleştirdi ve telefonunuzun dolaşım özelliklerini güncelledi."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Etkin çağrıların sayısı çok fazla. Yeni bir çağrı yapmadan önce lütfen mevcut çağrıları sonlandırın veya birleştirin."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Bağlantı kurulamadı. Lütfen geçerli bir SIM kart takın."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Sesli Mesaj PIN\'ini Değiştirin"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Devam"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"İptal"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index b2e2068..3da1bbc 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Під час розшифрування повідомлення сталася помилка."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Коли ви вставили SIM-карту, було активовано мобільний зв’язок і оновлено можливості роумінгу вашого телефона."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Забагато активних викликів. Перш ніж зателефонувати новому абоненту, завершіть або об’єднайте поточні виклики."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Не вдається підключитися. Вставте дійсну SIM-карту."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Змінити PIN-код голосової пошти"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Продовжити"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Скасувати"</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 8baf289..f1b10b3 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"پیغام کو ڈیکوڈ کرتے وقت ایک خرابی پیش آ گئی۔"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"ایک SIM کارڈ نے آپ کی سروس فعال کر دی ہے اور آپ کے فون کی رومنگ اہلیتیں اپ ڈیٹ کر دی ہیں۔"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"بہت زیادہ فعال کالیں ہیں۔ براہ کرم نئی کال کرنے سے پہلے موجودہ کالوں کو ضم کریں یا ختم کریں۔"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"منسلک کرنے سے قاصر، براہ کرم ایک درست SIM کارڈ داخل کریں۔"</string>
<string name="change_pin_title" msgid="7790232089699034029">"صوتی میل PIN تبدیل کریں"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"جاری رکھیں"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"منسوخ کریں"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 73037e0..4d3333a 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Xabarni kodsizlashda xatolik yuz berdi."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Telefoningizda rouming xizmati sozlangan va SIM karta faollashtirilgan."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Hozir bir nechta qo‘ng‘iroqlar amalda. Boshqa abonentga qo‘ng‘iroq qilishdan avval, amaldagi qo‘ng‘iroqlarni tugating yoki ularni konferens-aloqaga birlashtiring."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Ulanib bo‘lmadi. Ishlaydigan SIM kartani joylang."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Ovozli pochta PIN kodini o‘zgartirish"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Davom etish"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Bekor qilish"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index e0fa94d..a4ebfd5 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Đã xảy ra lỗi khi giải mã tin nhắn."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Thẻ SIM đã kích hoạt dịch vụ của bạn và đã cập nhật chức năng chuyển vùng của điện thoại."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Có quá nhiều cuộc gọi hiện hoạt. Vui lòng kết thúc hoặc hợp nhất các cuộc gọi hiện có trước khi thực hiện cuộc gọi mới."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Không thể kết nối, vui lòng lắp thẻ SIM hợp lệ."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Thay đổi mã PIN thư thoại"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Tiếp tục"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Hủy"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e8a56ce..bdd5a9e 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -573,6 +573,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"对邮件解码时出错。"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM 卡已启用您的服务,并更新了您手机的漫游功能。"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"进行中的通话过多。请结束现有通话或将其合并,然后再拨打新的电话。"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"无法连接,请插入有效的 SIM 卡。"</string>
<string name="change_pin_title" msgid="7790232089699034029">"更改语音信箱 PIN 码"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"继续"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"取消"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index fa4179e..6d27653 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -145,7 +145,7 @@
<string name="fw_change_failed" msgid="5298103228470214665">"無法更改轉接號碼。\n如果問題持續發生,請與流動網絡供應商聯絡。"</string>
<string name="fw_get_in_vm_failed" msgid="8862896836093833973">"無法擷取和儲存目前的轉接號碼設定。\n您仍要轉到新的供應商嗎?"</string>
<string name="no_change" msgid="3186040086622435212">"沒有更改。"</string>
- <string name="sum_voicemail_choose_provider" msgid="59911196126278922">"選擇語音信箱服務"</string>
+ <string name="sum_voicemail_choose_provider" msgid="59911196126278922">"選擇留言信箱服務"</string>
<string name="voicemail_default" msgid="2001233554889016880">"您的流動網絡供應商"</string>
<string name="vm_change_pin_old_pin" msgid="7295220109886682573">"舊的 PIN"</string>
<string name="vm_change_pin_new_pin" msgid="5412922262839438097">"新的 PIN"</string>
@@ -579,16 +579,17 @@
<string name="message_decode_error" msgid="3456481534066924855">"為訊息解碼時發生錯誤。"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM 卡已啟動您的服務,並更新了您的手機漫遊功能。"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"進行中的通話過多。請先結束或合併現有通話,再重新撥打。"</string>
- <string name="change_pin_title" msgid="7790232089699034029">"變更語音信箱 PIN 碼"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"無法連線,請插入有效的 SIM 卡。"</string>
+ <string name="change_pin_title" msgid="7790232089699034029">"變更留言信箱 PIN"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"繼續"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"取消"</string>
<string name="change_pin_ok_label" msgid="6204308560844889926">"確認"</string>
<string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"確認舊 PIN 碼"</string>
- <string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"請輸入您的語音信箱 PIN 碼,然後繼續操作。"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"請輸入留言信箱 PIN 以繼續操作。"</string>
<string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"設定新 PIN 碼"</string>
<string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN 碼長度必須介乎 <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> 個數字。"</string>
<string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"確認 PIN 碼"</string>
<string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN 碼不符"</string>
- <string name="change_pin_succeeded" msgid="2022852286442211151">"已更新語音信箱 PIN 碼"</string>
+ <string name="change_pin_succeeded" msgid="2022852286442211151">"已更新留言信箱 PIN"</string>
<string name="change_pin_system_error" msgid="8308462387154257840">"無法設定 PIN 碼"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index f9256fd..df9cbe0 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -579,6 +579,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"為郵件解碼時發生錯誤。"</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM 卡已啟用您的服務並更新了手機的漫遊功能。"</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"進行中的通話過多。請先結束或合併現有通話,再撥打新的電話。"</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"無法連線,請插入有效的 SIM 卡。"</string>
<string name="change_pin_title" msgid="7790232089699034029">"變更語音信箱密碼"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"繼續"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"取消"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 65226cc..2882141 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -577,6 +577,7 @@
<string name="message_decode_error" msgid="3456481534066924855">"Kube nephutha ngenkathi kukhishwa ikhodi kumlayezo."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"Ikhadi le-SIM lenze kwasebenza isevisi yakho laphinde labuyekeza amakhono okuzula wefoni yakho."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Kunamakholi amaningi asebenzayo. Sicela uphelise noma uhlanganise amakholi akhona ngaphambi kokubeka eyodwa."</string>
+ <string name="callFailed_imei_not_accepted" msgid="132192626901238542">"Ayikwazi ukuxhumeka, sicela ufake i-SIM card evumelekile."</string>
<string name="change_pin_title" msgid="7790232089699034029">"Shintsha IPHINI yevoyisimeyili"</string>
<string name="change_pin_continue_label" msgid="2135088662420163447">"Qhubeka"</string>
<string name="change_pin_cancel_label" msgid="353535488390948596">"Khansela"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bcad6f7..965a214 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1363,6 +1363,11 @@
There are too many active calls. Please end or merge existing calls before placing a new one.
</string>
+ <!-- Call failure reason: If the network does not accept the emergency call request, e.g., because IMEI was used as identification and this capability is not supported -->
+ <string name="callFailed_imei_not_accepted">
+ Unable to connect, please insert a valid SIM card.
+ </string>
+
<!-- The title for the change voicemail PIN activity -->
<string name="change_pin_title">Change Voicemail PIN</string>
<!-- The label for the continue button in change voicemail PIN activity -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 057352d..ad62959 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -179,7 +179,8 @@
<item name="android:textColor">?android:attr/textColorPrimaryInverseDisableOnly</item>
</style>
- <style name="NetworkOperatorsSettingsTheme" parent="@android:style/Theme.DeviceDefault.Settings" />
+ <style name="NetworkOperatorsSettingsTheme"
+ parent="@*android:style/Theme.DeviceDefault.Settings.LightActionBar" />
<style name="Empty" parent="@android:style/Theme.Material.Light">
<item name="android:windowIsTranslucent">true</item>
diff --git a/src/com/android/phone/Assert.java b/src/com/android/phone/Assert.java
index 143e66f..37ccda8 100644
--- a/src/com/android/phone/Assert.java
+++ b/src/com/android/phone/Assert.java
@@ -49,7 +49,11 @@
}
public static void fail() {
- throw new AssertionError("Fail");
+ fail("Fail");
+ }
+
+ public static void fail(String reason) {
+ throw new AssertionError(reason);
}
/**
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index d1192e9..a87c0c9 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -58,6 +58,7 @@
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.FastXmlSerializer;
+import com.android.internal.util.IndentingPrintWriter;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -71,6 +72,9 @@
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/**
@@ -716,9 +720,41 @@
}
pw.println("CarrierConfigLoader: " + this);
for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
- pw.println(" Phone Id=" + i);
- pw.println(" mConfigFromDefaultApp=" + mConfigFromDefaultApp[i]);
- pw.println(" mConfigFromCarrierApp=" + mConfigFromCarrierApp[i]);
+ pw.println("Phone Id = " + i);
+ // display default values in CarrierConfigManager
+ printConfig(CarrierConfigManager.getDefaultConfig(), pw,
+ "Default Values from CarrierConfigManager");
+ pw.println("");
+ // display ConfigFromDefaultApp
+ printConfig(mConfigFromDefaultApp[i], pw, "mConfigFromDefaultApp");
+ pw.println("");
+ // display ConfigFromCarrierApp
+ printConfig(mConfigFromCarrierApp[i], pw, "mConfigFromCarrierApp");
+ }
+ }
+
+ private void printConfig(PersistableBundle configApp, PrintWriter pw, String name) {
+ IndentingPrintWriter indentPW = new IndentingPrintWriter(pw, " ");
+ if (configApp == null) {
+ indentPW.increaseIndent();
+ indentPW.println(name + " : null ");
+ return;
+ }
+ indentPW.increaseIndent();
+ indentPW.println(name + " : ");
+ List<String> sortedKeys = new ArrayList<String>(configApp.keySet());
+ Collections.sort(sortedKeys);
+ indentPW.increaseIndent();
+ indentPW.increaseIndent();
+ for (String key : sortedKeys) {
+ if (configApp.get(key) != null && configApp.get(key) instanceof Object[]) {
+ indentPW.println(key + " = " +
+ Arrays.toString((Object[]) configApp.get(key)));
+ } else if (configApp.get(key) != null && configApp.get(key) instanceof int[]) {
+ indentPW.println(key + " = " + Arrays.toString((int[]) configApp.get(key)));
+ } else {
+ indentPW.println(key + " = " + configApp.get(key));
+ }
}
}
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 56b6390..6593e3d 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -16,12 +16,14 @@
package com.android.phone;
+import android.app.DialogFragment;
import com.android.ims.ImsManager;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
+import com.android.phone.RoamingDialogFragment.RoamingDialogListener;
import com.android.settingslib.RestrictedLockUtils;
import java.util.ArrayList;
@@ -29,10 +31,8 @@
import java.util.List;
import android.app.ActionBar;
-import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -76,8 +76,7 @@
* available from the Phone app (see CallFeaturesSetting for that.)
*/
public class MobileNetworkSettings extends PreferenceActivity
- implements DialogInterface.OnClickListener,
- DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener{
+ implements Preference.OnPreferenceChangeListener, RoamingDialogListener {
// debug data
private static final String LOG_TAG = "NetworkSettings";
@@ -87,6 +86,9 @@
// Number of active Subscriptions to show tabs
private static final int TAB_THRESHOLD = 2;
+ // fragment tag for roaming data dialog
+ private static final String ROAMING_TAG = "RoamingDialogFragment";
+
//String keys for preference lookup
private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
@@ -154,6 +156,12 @@
private final BroadcastReceiver mPhoneChangeReceiver = new PhoneChangeReceiver();
+ @Override
+ public void onPositiveButtonClick(DialogFragment dialog) {
+ mPhone.setDataRoamingEnabled(true);
+ mButtonDataRoam.setChecked(true);
+ }
+
private class PhoneChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
@@ -165,24 +173,6 @@
}
}
- //This is a method implemented for DialogInterface.OnClickListener.
- // Used to dismiss the dialogs when they come up.
- public void onClick(DialogInterface dialog, int which) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- mPhone.setDataRoamingEnabled(true);
- mOkClicked = true;
- } else {
- // Reset the toggle
- mButtonDataRoam.setChecked(false);
- }
- }
-
- @Override
- public void onDismiss(DialogInterface dialog) {
- // Assuming that onClick gets called first
- mButtonDataRoam.setChecked(mOkClicked);
- }
-
/**
* Invoked on each preference click in this hierarchy, overrides
* PreferenceActivity's implementation. Used to make sure we track the
@@ -925,14 +915,10 @@
if (!mButtonDataRoam.isChecked()) {
// First confirm with a warning dialog about charges
mOkClicked = false;
- new AlertDialog.Builder(this).setMessage(
- getResources().getString(R.string.roaming_warning))
- .setTitle(R.string.roaming_alert_title)
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setPositiveButton(android.R.string.yes, this)
- .setNegativeButton(android.R.string.no, this)
- .show()
- .setOnDismissListener(this);
+ RoamingDialogFragment fragment = new RoamingDialogFragment();
+ fragment.show(getFragmentManager(), ROAMING_TAG);
+ // Don't update the toggle unless the confirm button is actually pressed.
+ return false;
} else {
mPhone.setDataRoamingEnabled(false);
}
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 3e5438f..407d050 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -18,8 +18,10 @@
import static com.android.internal.telephony.PhoneConstants.SUBSCRIPTION_KEY;
+import android.Manifest.permission;
import android.app.ActivityManager;
import android.app.AppOpsManager;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -53,6 +55,7 @@
import android.telephony.NeighboringCellInfo;
import android.telephony.RadioAccessFamily;
import android.telephony.ServiceState;
+import android.telephony.SmsManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyHistogram;
@@ -63,6 +66,7 @@
import android.util.Log;
import android.util.Pair;
import android.util.Slog;
+
import com.android.ims.ImsManager;
import com.android.internal.telephony.CallManager;
import com.android.internal.telephony.CellNetworkScanResult;
@@ -86,8 +90,11 @@
import com.android.internal.util.HexDump;
import com.android.phone.settings.VisualVoicemailSettingsUtil;
import com.android.phone.settings.VoicemailNotificationSettingsUtil;
+
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -1985,11 +1992,33 @@
}
@Override
- public VisualVoicemailSmsFilterSettings getSystemVisualVoicemailSmsFilterSettings(
- String packageName, int subId) {
+ public VisualVoicemailSmsFilterSettings getActiveVisualVoicemailSmsFilterSettings(int subId) {
enforceReadPrivilegedPermission();
return VisualVoicemailSmsFilterConfig
- .getVisualVoicemailSmsFilterSettings(mPhone.getContext(), packageName, subId);
+ .getActiveVisualVoicemailSmsFilterSettings(mPhone.getContext(), subId);
+ }
+
+ @Override
+ public void sendVisualVoicemailSmsForSubscriber(String callingPackage, int subId,
+ String number, int port, String text, PendingIntent sentIntent) {
+ mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
+ enforceDefaultDialer(callingPackage);
+ enforceSendSmsPermission();
+ // Make the calls as the phone process.
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(subId);
+ if (port == 0) {
+ smsManager.sendTextMessageWithSelfPermissions(number, null, text,
+ sentIntent, null, false);
+ } else {
+ byte[] data = text.getBytes(StandardCharsets.UTF_8);
+ smsManager.sendDataMessageWithSelfPermissions(number, null,
+ (short) port, data, sentIntent, null);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
* Returns the unread count of voicemails
@@ -3239,6 +3268,28 @@
}
/**
+ * Make sure either called from same process as self (phone) or IPC caller has send SMS
+ * permission.
+ *
+ * @throws SecurityException if the caller does not have the required permission
+ */
+ private void enforceSendSmsPermission() {
+ mApp.enforceCallingOrSelfPermission(permission.SEND_SMS, null);
+ }
+
+ /**
+ * Make sure called from the default dialer
+ *
+ * @throws SecurityException if the caller is not the default dialer
+ */
+ private void enforceDefaultDialer(String callingPackage) {
+ TelecomManager telecomManager = mPhone.getContext().getSystemService(TelecomManager.class);
+ if (!callingPackage.equals(telecomManager.getDefaultDialerPackage())) {
+ throw new SecurityException("Caller not default dialer.");
+ }
+ }
+
+ /**
* Return the application ID for the app type.
*
* @param subId the subscription ID that this request applies to.
diff --git a/src/com/android/phone/RoamingDialogFragment.java b/src/com/android/phone/RoamingDialogFragment.java
new file mode 100644
index 0000000..ec2967f
--- /dev/null
+++ b/src/com/android/phone/RoamingDialogFragment.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.phone;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.os.Bundle;
+
+/**
+ * A dialog fragment that asks the user if they are sure they want to turn on data roaming
+ * to avoid accidental charges.
+ */
+public class RoamingDialogFragment extends DialogFragment implements OnClickListener {
+
+ /**
+ * The interface we expect a host activity to implement.
+ */
+ public interface RoamingDialogListener {
+ void onPositiveButtonClick(DialogFragment dialog);
+ }
+
+ // the host activity which implements the listening interface
+ private RoamingDialogListener mListener;
+
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ // Verify host activity implemented callback interface
+ try {
+ mListener = (RoamingDialogListener) getActivity();
+ } catch (ClassCastException e) {
+ throw new ClassCastException(getActivity().toString() +
+ "must implement RoamingDialogListener");
+ }
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(getResources().getString(R.string.roaming_warning))
+ .setTitle(R.string.roaming_alert_title)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setPositiveButton(android.R.string.yes, this)
+ .setNegativeButton(android.R.string.no, this);
+ return builder.create();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // let the host know that the positive button has been clicked
+ if (which == dialog.BUTTON_POSITIVE) {
+ mListener.onPositiveButtonClick(this);
+ }
+ }
+}
diff --git a/src/com/android/phone/VisualVoicemailSmsFilterConfig.java b/src/com/android/phone/VisualVoicemailSmsFilterConfig.java
index 2b2e2f5..2ffb477 100644
--- a/src/com/android/phone/VisualVoicemailSmsFilterConfig.java
+++ b/src/com/android/phone/VisualVoicemailSmsFilterConfig.java
@@ -16,12 +16,15 @@
package com.android.phone;
import android.annotation.Nullable;
+import android.content.ComponentName;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.telephony.VisualVoicemailSmsFilterSettings;
import android.util.ArraySet;
+import com.android.phone.vvm.RemoteVvmTaskManager;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -39,6 +42,7 @@
private static final String PREFIX_KEY = "_prefix";
private static final String ORIGINATING_NUMBERS_KEY = "_originating_numbers";
private static final String DESTINATION_PORT_KEY = "_destination_port";
+ private static final String DEFAULT_PACKAGE = "com.android.phone";
public static void enableVisualVoicemailSmsFilter(Context context, String callingPackage,
int subId,
@@ -58,6 +62,21 @@
.apply();
}
+ public static VisualVoicemailSmsFilterSettings getActiveVisualVoicemailSmsFilterSettings(
+ Context context, int subId) {
+ ComponentName componentName = RemoteVvmTaskManager.getRemotePackage(context);
+ String packageName;
+ if (componentName == null) {
+ packageName = DEFAULT_PACKAGE;
+ } else {
+ packageName = componentName.getPackageName();
+ }
+ return getVisualVoicemailSmsFilterSettings(
+ context,
+ packageName,
+ subId);
+ }
+
@Nullable
public static VisualVoicemailSmsFilterSettings getVisualVoicemailSmsFilterSettings(
Context context,
@@ -75,6 +94,7 @@
VisualVoicemailSmsFilterSettings.DEFAULT_DESTINATION_PORT))
.build();
}
+
private static SharedPreferences getSharedPreferences(Context context) {
return PreferenceManager
.getDefaultSharedPreferences(context.createDeviceProtectedStorageContext());
diff --git a/src/com/android/phone/vvm/RemoteVvmTaskManager.java b/src/com/android/phone/vvm/RemoteVvmTaskManager.java
new file mode 100644
index 0000000..ce6fce6
--- /dev/null
+++ b/src/com/android/phone/vvm/RemoteVvmTaskManager.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.vvm;
+
+import android.annotation.Nullable;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.VisualVoicemailService;
+import android.telephony.VisualVoicemailSms;
+
+import com.android.phone.Assert;
+import com.android.phone.vvm.omtp.VvmLog;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+/**
+ * Service to manage tasks issued to the {@link VisualVoicemailService}. This service will bind to
+ * the default dialer on a visual voicemail event if it implements the VisualVoicemailService. The
+ * service will hold all resource for the VisualVoicemailService until {@link
+ * VisualVoicemailService.VisualVoicemailTask#finish()} has been called on all issued tasks.
+ *
+ * If the service is already running it will be reused for new events. The service will stop itself
+ * after all events are handled.
+ */
+public class RemoteVvmTaskManager extends Service {
+
+ private static final String TAG = "RemoteVvmTaskManager";
+
+ private static final String ACTION_START_CELL_SERVICE_CONNECTED =
+ "ACTION_START_CELL_SERVICE_CONNECTED";
+ private static final String ACTION_START_SMS_RECEIVED = "ACTION_START_SMS_RECEIVED";
+ private static final String ACTION_START_SIM_REMOVED = "ACTION_START_SIM_REMOVED";
+
+ // TODO(twyen): track task individually to have time outs.
+ private int mTaskReferenceCount;
+
+ private RemoteServiceConnection mConnection;
+
+ /**
+ * Handles incoming messages from the VisualVoicemailService.
+ */
+ private Messenger mMessenger;
+
+ public static void startCellServiceConnected(Context context,
+ PhoneAccountHandle phoneAccountHandle) {
+ Intent intent = new Intent(ACTION_START_CELL_SERVICE_CONNECTED, null, context,
+ RemoteVvmTaskManager.class);
+ intent.putExtra(VisualVoicemailService.DATA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+ context.startService(intent);
+ }
+
+ public static void startSmsReceived(Context context, VisualVoicemailSms sms) {
+ Intent intent = new Intent(ACTION_START_SMS_RECEIVED, null, context,
+ RemoteVvmTaskManager.class);
+ intent.putExtra(VisualVoicemailService.DATA_PHONE_ACCOUNT_HANDLE,
+ sms.getPhoneAccountHandle());
+ intent.putExtra(VisualVoicemailService.DATA_SMS, sms);
+ context.startService(intent);
+ }
+
+ public static void startSimRemoved(Context context, PhoneAccountHandle phoneAccountHandle) {
+ Intent intent = new Intent(ACTION_START_SIM_REMOVED, null, context,
+ RemoteVvmTaskManager.class);
+ intent.putExtra(VisualVoicemailService.DATA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+ context.startService(intent);
+ }
+
+ public static boolean hasRemoteService(Context context) {
+ return getRemotePackage(context) != null;
+ }
+
+ public static ComponentName getRemotePackage(Context context) {
+
+ ResolveInfo info = context.getPackageManager()
+ .resolveService(newBindIntent(context), PackageManager.MATCH_ALL);
+ if (info == null) {
+ return null;
+ }
+ return info.getComponentInfo().getComponentName();
+ }
+
+ @Override
+ public void onCreate() {
+ Assert.isMainThread();
+ mMessenger = new Messenger(new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ Assert.isMainThread();
+ switch (msg.what) {
+ case VisualVoicemailService.MSG_TASK_ENDED:
+ mTaskReferenceCount--;
+ checkReference();
+ break;
+ default:
+ VvmLog.wtf(TAG, "unexpected message " + msg.what);
+ }
+ }
+ });
+ }
+
+ @Override
+ public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
+ Assert.isMainThread();
+ mTaskReferenceCount++;
+ switch (intent.getAction()) {
+ case ACTION_START_CELL_SERVICE_CONNECTED:
+ send(VisualVoicemailService.MSG_ON_CELL_SERVICE_CONNECTED, intent.getExtras());
+ break;
+ case ACTION_START_SMS_RECEIVED:
+ send(VisualVoicemailService.MSG_ON_SMS_RECEIVED, intent.getExtras());
+ break;
+ case ACTION_START_SIM_REMOVED:
+ send(VisualVoicemailService.MSG_ON_SIM_REMOVED, intent.getExtras());
+ break;
+ default:
+ Assert.fail("Unexpected action +" + intent.getAction());
+ break;
+ }
+ // Don't rerun service if processed is killed.
+ return START_NOT_STICKY;
+ }
+
+ @Override
+ @Nullable
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ private int getTaskId() {
+ // TODO(twyen): generate unique IDs. Reference counting is used now so it doesn't matter.
+ return 1;
+ }
+
+ /**
+ * Class for interacting with the main interface of the service.
+ */
+ private class RemoteServiceConnection implements ServiceConnection {
+
+ private final Queue<Message> mTaskQueue = new LinkedList<>();
+
+ private boolean mConnected;
+
+ /**
+ * A handler in the VisualVoicemailService
+ */
+ private Messenger mRemoteMessenger;
+
+ public void enqueue(Message message) {
+ mTaskQueue.add(message);
+ if (mConnected) {
+ runQueue();
+ }
+ }
+
+ public boolean isConnected() {
+ return mConnected;
+ }
+
+ public void onServiceConnected(ComponentName className,
+ IBinder service) {
+ mRemoteMessenger = new Messenger(service);
+ mConnected = true;
+ runQueue();
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ mConnection = null;
+ mConnected = false;
+ mRemoteMessenger = null;
+ VvmLog.e(TAG, "Service disconnected, " + mTaskReferenceCount + " tasks dropped.");
+ mTaskReferenceCount = 0;
+ checkReference();
+ }
+
+ private void runQueue() {
+ Assert.isMainThread();
+ Message message = mTaskQueue.poll();
+ while (message != null) {
+ message.replyTo = mMessenger;
+ message.arg1 = getTaskId();
+
+ try {
+ mRemoteMessenger.send(message);
+ } catch (RemoteException e) {
+ VvmLog.e(TAG, "Error sending message to remote service", e);
+ }
+ message = mTaskQueue.poll();
+ }
+ }
+ }
+
+ private void send(int what, Bundle extras) {
+ Assert.isMainThread();
+ Message message = Message.obtain();
+ message.what = what;
+ message.setData(new Bundle(extras));
+ if (mConnection == null) {
+ mConnection = new RemoteServiceConnection();
+ }
+ mConnection.enqueue(message);
+
+ if (!mConnection.isConnected()) {
+ Intent intent = newBindIntent(this);
+ intent.setComponent(getRemotePackage(this));
+ bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+ }
+ }
+
+ private void checkReference() {
+ if (mTaskReferenceCount == 0) {
+ unbindService(mConnection);
+ mConnection = null;
+ }
+ }
+
+ private static Intent newBindIntent(Context context) {
+ Intent intent = new Intent();
+ intent.setAction(VisualVoicemailService.SERVICE_INTERFACE);
+ TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
+ intent.setPackage(telecomManager.getDefaultDialerPackage());
+ return intent;
+ }
+}
diff --git a/src/com/android/phone/vvm/VvmSimStateTracker.java b/src/com/android/phone/vvm/VvmSimStateTracker.java
new file mode 100644
index 0000000..df9b8a6
--- /dev/null
+++ b/src/com/android/phone/vvm/VvmSimStateTracker.java
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.vvm;
+
+import android.annotation.Nullable;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.SystemProperties;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.CarrierConfigManager;
+import android.telephony.PhoneStateListener;
+import android.telephony.ServiceState;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+
+import com.android.internal.telephony.IccCardConstants;
+import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.phone.PhoneUtils;
+import com.android.phone.vvm.omtp.VvmLog;
+import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tracks the status of all inserted SIMs. Will notify {@link RemoteVvmTaskManager} of when a SIM
+ * connected to the service for the first time after it was inserted or the system booted, and when
+ * the SIM is removed. Losing cell signal or entering airplane mode will not cause the connected
+ * event to be triggered again. Reinserting the SIM will trigger the connected event. Changing the
+ * carrier config will also trigger the connected event. Events will be delayed until the device has
+ * been fully booted (and left FBE mode).
+ */
+public class VvmSimStateTracker extends BroadcastReceiver {
+
+ private static final String TAG = "VvmSimStateTracker";
+
+ /**
+ * Map to keep track of currently inserted SIMs. If the SIM hasn't been connected to the service
+ * before the value will be a {@link ServiceStateListener} that is still waiting for the
+ * connection. A value of {@code null} means the SIM has been connected to the service before.
+ */
+ private static Map<PhoneAccountHandle, ServiceStateListener> sListeners = new ArrayMap<>();
+
+ /**
+ * Accounts that has events before the device is booted. The events should be regenerated after
+ * the device has fully booted.
+ */
+ private static Set<PhoneAccountHandle> sPreBootHandles = new ArraySet<>();
+
+ /**
+ * Waits for the account to become {@link ServiceState#STATE_IN_SERVICE} and notify the
+ * connected event. Will unregister itself once the event has been triggered.
+ */
+ private class ServiceStateListener extends PhoneStateListener {
+
+ private final PhoneAccountHandle mPhoneAccountHandle;
+ private final Context mContext;
+
+ public ServiceStateListener(Context context, PhoneAccountHandle phoneAccountHandle) {
+ mContext = context;
+ mPhoneAccountHandle = phoneAccountHandle;
+ }
+
+ public void listen() {
+ getTelephonyManager(mContext, mPhoneAccountHandle)
+ .listen(this, PhoneStateListener.LISTEN_SERVICE_STATE);
+ }
+
+ public void unlisten() {
+ getTelephonyManager(mContext, mPhoneAccountHandle)
+ .listen(this, PhoneStateListener.LISTEN_NONE);
+ sListeners.put(mPhoneAccountHandle, null);
+ }
+
+ @Override
+ public void onServiceStateChanged(ServiceState serviceState) {
+ if (serviceState.getState() == ServiceState.STATE_IN_SERVICE) {
+ VvmLog.i(TAG, "in service");
+ sendConnected(mContext, mPhoneAccountHandle);
+ unlisten();
+ }
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ final String action = intent.getAction();
+ if (action == null) {
+ VvmLog.w(TAG, "Null action for intent.");
+ return;
+ }
+ VvmLog.i(TAG, action);
+ switch (action) {
+ case Intent.ACTION_BOOT_COMPLETED:
+ onBootCompleted(context);
+ break;
+ case TelephonyIntents.ACTION_SIM_STATE_CHANGED:
+ if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(
+ intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE))) {
+ // onSimRemoved will scan all known accounts with isPhoneAccountActive() to find
+ // which SIM is removed.
+ // ACTION_SIM_STATE_CHANGED only provides subId which cannot be converted to a
+ // PhoneAccountHandle when the SIM is absent.
+ onSimRemoved(context);
+ }
+ break;
+ case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED:
+ int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+
+ if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+ VvmLog.i(TAG, "Received SIM change for invalid subscription id.");
+ return;
+ }
+
+ PhoneAccountHandle phoneAccountHandle =
+ PhoneAccountHandleConverter.fromSubId(subId);
+
+ if ("null".equals(phoneAccountHandle.getId())) {
+ VvmLog.e(TAG,
+ "null phone account handle ID, possible modem crash."
+ + " Ignoring carrier config changed event");
+ return;
+ }
+ onCarrierConfigChanged(context, phoneAccountHandle);
+ }
+ }
+
+ private void onBootCompleted(Context context) {
+ for (PhoneAccountHandle phoneAccountHandle : sPreBootHandles) {
+ TelephonyManager telephonyManager = getTelephonyManager(context, phoneAccountHandle);
+ if (telephonyManager == null) {
+ continue;
+ }
+ if (telephonyManager.getServiceState().getState() == ServiceState.STATE_IN_SERVICE) {
+ sListeners.put(phoneAccountHandle, null);
+ sendConnected(context, phoneAccountHandle);
+ } else {
+ listenToAccount(context, phoneAccountHandle);
+ }
+ }
+ sPreBootHandles.clear();
+ }
+
+ private void sendConnected(Context context, PhoneAccountHandle phoneAccountHandle) {
+ VvmLog.i(TAG, "Service connected on " + phoneAccountHandle);
+ RemoteVvmTaskManager.startCellServiceConnected(context, phoneAccountHandle);
+ }
+
+ private void onSimRemoved(Context context) {
+ SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
+ if (!isBootCompleted()) {
+ for (PhoneAccountHandle phoneAccountHandle : sPreBootHandles) {
+ if (!PhoneUtils.isPhoneAccountActive(subscriptionManager, phoneAccountHandle)) {
+ sPreBootHandles.remove(phoneAccountHandle);
+ }
+ }
+ return;
+ }
+ Set<PhoneAccountHandle> removeList = new ArraySet<>();
+ for (PhoneAccountHandle phoneAccountHandle : sListeners.keySet()) {
+ if (!PhoneUtils.isPhoneAccountActive(subscriptionManager, phoneAccountHandle)) {
+ removeList.add(phoneAccountHandle);
+ ServiceStateListener listener = sListeners.get(phoneAccountHandle);
+ if (listener != null) {
+ listener.unlisten();
+ }
+ sendSimRemoved(context, phoneAccountHandle);
+ }
+ }
+
+ for (PhoneAccountHandle phoneAccountHandle : removeList) {
+ sListeners.remove(phoneAccountHandle);
+ }
+ }
+
+ private boolean isBootCompleted() {
+ return SystemProperties.getBoolean("sys.boot_completed", false);
+ }
+
+ private void sendSimRemoved(Context context, PhoneAccountHandle phoneAccountHandle) {
+ VvmLog.i(TAG, "Sim removed on " + phoneAccountHandle);
+ RemoteVvmTaskManager.startSimRemoved(context, phoneAccountHandle);
+ }
+
+ private void onCarrierConfigChanged(Context context, PhoneAccountHandle phoneAccountHandle) {
+ if (!isBootCompleted()) {
+ sPreBootHandles.add(phoneAccountHandle);
+ return;
+ }
+ TelephonyManager telephonyManager = getTelephonyManager(context, phoneAccountHandle);
+ if(telephonyManager == null){
+ int subId = context.getSystemService(TelephonyManager.class).getSubIdForPhoneAccount(
+ context.getSystemService(TelecomManager.class)
+ .getPhoneAccount(phoneAccountHandle));
+ VvmLog.e(TAG, "Cannot create TelephonyManager from " + phoneAccountHandle + ", subId="
+ + subId);
+ // TODO(b/33945549): investigate more why this is happening. The PhoneAccountHandle was
+ // just converted from a valid subId so createForPhoneAccountHandle shouldn't really
+ // return null.
+ return;
+ }
+ if (telephonyManager.getServiceState().getState()
+ == ServiceState.STATE_IN_SERVICE) {
+ sendConnected(context, phoneAccountHandle);
+ sListeners.put(phoneAccountHandle, null);
+ } else {
+ listenToAccount(context, phoneAccountHandle);
+ }
+ }
+
+ private void listenToAccount(Context context, PhoneAccountHandle phoneAccountHandle) {
+ ServiceStateListener listener = new ServiceStateListener(context, phoneAccountHandle);
+ listener.listen();
+ sListeners.put(phoneAccountHandle, listener);
+ }
+
+ @Nullable
+ private static TelephonyManager getTelephonyManager(Context context,
+ PhoneAccountHandle phoneAccountHandle) {
+ return context.getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ }
+}
diff --git a/src/com/android/phone/vvm/VvmSmsReceiver.java b/src/com/android/phone/vvm/VvmSmsReceiver.java
new file mode 100644
index 0000000..91e7933
--- /dev/null
+++ b/src/com/android/phone/vvm/VvmSmsReceiver.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.vvm;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.VoicemailContract;
+import android.telephony.VisualVoicemailSms;
+
+import com.android.phone.vvm.omtp.VvmLog;
+import com.android.phone.vvm.omtp.sms.OmtpMessageReceiver;
+
+/**
+ * Receives the SMS filtered by {@link com.android.internal.telephony.VisualVoicemailSmsFilter} and
+ * redirect it to the visual voicemail client. The redirection is required to let telephony service
+ * handle tasks with {@link RemoteVvmTaskManager}
+ */
+public class VvmSmsReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "VvmSmsReceiver";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ VisualVoicemailSms sms = intent.getExtras()
+ .getParcelable(VoicemailContract.EXTRA_VOICEMAIL_SMS);
+
+ if (sms.getPhoneAccountHandle() == null) {
+ // This should never happen
+ VvmLog.e(TAG, "Received message for null phone account");
+ return;
+ }
+
+ if (RemoteVvmTaskManager.hasRemoteService(context)) {
+ VvmLog.i(TAG, "Sending SMS received event to remote service");
+ RemoteVvmTaskManager.startSmsReceived(context, sms);
+ return;
+ }
+
+ OmtpMessageReceiver
+ .onReceive(context, sms);
+ }
+}
diff --git a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
index 5b201aa..e305879 100644
--- a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
+++ b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
@@ -31,6 +31,7 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.phone.settings.VisualVoicemailSettingsUtil;
+import com.android.phone.vvm.RemoteVvmTaskManager;
import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
@@ -54,6 +55,10 @@
return;
}
+ if (RemoteVvmTaskManager.hasRemoteService(context)) {
+ return;
+ }
+
switch (action) {
case TelephonyIntents.ACTION_SIM_STATE_CHANGED:
if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(
@@ -90,6 +95,7 @@
}
VvmLog.d(TAG, "Carrier config changed");
+
if (UserManager.get(context).isUserUnlocked() && !isCryptKeeperMode()) {
processSubId(context, subId);
} else {
diff --git a/src/com/android/phone/vvm/omtp/VvmBootCompletedReceiver.java b/src/com/android/phone/vvm/omtp/VvmBootCompletedReceiver.java
index 9809c64..21cce31 100644
--- a/src/com/android/phone/vvm/omtp/VvmBootCompletedReceiver.java
+++ b/src/com/android/phone/vvm/omtp/VvmBootCompletedReceiver.java
@@ -22,6 +22,7 @@
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.SubscriptionManager;
+import com.android.phone.vvm.RemoteVvmTaskManager;
import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
/**
@@ -45,6 +46,10 @@
return;
}
+ if (RemoteVvmTaskManager.hasRemoteService(context)) {
+ return;
+ }
+
VvmLog.v(TAG, "processing subId list");
for (PhoneAccountHandle handle : TelecomManager.from(context)
.getCallCapablePhoneAccounts()) {
diff --git a/src/com/android/phone/vvm/omtp/VvmPhoneStateListener.java b/src/com/android/phone/vvm/omtp/VvmPhoneStateListener.java
index 7e2472b..31c173d 100644
--- a/src/com/android/phone/vvm/omtp/VvmPhoneStateListener.java
+++ b/src/com/android/phone/vvm/omtp/VvmPhoneStateListener.java
@@ -20,9 +20,9 @@
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
-
import com.android.phone.PhoneUtils;
import com.android.phone.VoicemailStatus;
+import com.android.phone.vvm.RemoteVvmTaskManager;
import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
import com.android.phone.vvm.omtp.sync.OmtpVvmSyncService;
import com.android.phone.vvm.omtp.sync.SyncTask;
@@ -55,6 +55,10 @@
return;
}
+ if (RemoteVvmTaskManager.hasRemoteService(mContext)) {
+ return;
+ }
+
int state = serviceState.getState();
if (state == mPreviousState || (state != ServiceState.STATE_IN_SERVICE
&& mPreviousState != ServiceState.STATE_IN_SERVICE)) {
@@ -67,6 +71,7 @@
OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(mContext, subId);
if (state == ServiceState.STATE_IN_SERVICE) {
+
VoicemailStatusQueryHelper voicemailStatusQueryHelper =
new VoicemailStatusQueryHelper(mContext);
if (voicemailStatusQueryHelper.isVoicemailSourceConfigured(mPhoneAccount)) {
diff --git a/src/com/android/phone/vvm/omtp/sms/LegacyModeSmsHandler.java b/src/com/android/phone/vvm/omtp/sms/LegacyModeSmsHandler.java
index ba5bd70..6a5f349 100644
--- a/src/com/android/phone/vvm/omtp/sms/LegacyModeSmsHandler.java
+++ b/src/com/android/phone/vvm/omtp/sms/LegacyModeSmsHandler.java
@@ -17,10 +17,8 @@
package com.android.phone.vvm.omtp.sms;
import android.content.Context;
-import android.content.Intent;
import android.os.Bundle;
-import android.provider.VoicemailContract;
-import android.telecom.PhoneAccountHandle;
+import android.telephony.VisualVoicemailSms;
import com.android.internal.telephony.Phone;
import com.android.phone.PhoneUtils;
@@ -37,15 +35,14 @@
private static final String TAG = "LegacyModeSmsHandler";
- public static void handle(Context context, Intent intent, PhoneAccountHandle handle) {
+ public static void handle(Context context, VisualVoicemailSms sms) {
VvmLog.v(TAG, "processing VVM SMS on legacy mode");
- String eventType = intent.getExtras()
- .getString(VoicemailContract.EXTRA_VOICEMAIL_SMS_PREFIX);
- Bundle data = intent.getExtras().getBundle(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS);
+ String eventType = sms.getPrefix();
+ Bundle data = sms.getFields();
if (eventType.equals(OmtpConstants.SYNC_SMS_PREFIX)) {
SyncMessage message = new SyncMessage(data);
- VvmLog.v(TAG, "Received SYNC sms for " + handle.getId() +
+ VvmLog.v(TAG, "Received SYNC sms for " + sms.getPhoneAccountHandle() +
" with event " + message.getSyncTriggerEvent());
switch (message.getSyncTriggerEvent()) {
@@ -56,7 +53,8 @@
// For some carriers new message count could be set to 0 even if there are still
// unread messages, to clear the message waiting indicator.
VvmLog.v(TAG, "updating MWI");
- Phone phone = PhoneUtils.getPhoneForPhoneAccountHandle(handle);
+ Phone phone = PhoneUtils.getPhoneForPhoneAccountHandle(
+ sms.getPhoneAccountHandle());
// Setting voicemail message count to non-zero will show the telephony voicemail
// notification, and zero will clear it.
phone.setVoiceMessageCount(message.getNewMessageCount());
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
index 397caf8..d42e70e 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
@@ -15,7 +15,6 @@
*/
package com.android.phone.vvm.omtp.sms;
-import android.content.BroadcastReceiver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
@@ -25,6 +24,8 @@
import android.provider.VoicemailContract;
import android.telecom.PhoneAccountHandle;
import android.telecom.Voicemail;
+import android.telephony.VisualVoicemailSms;
+
import com.android.phone.settings.VisualVoicemailSettingsUtil;
import com.android.phone.vvm.omtp.ActivationTask;
import com.android.phone.vvm.omtp.OmtpConstants;
@@ -40,46 +41,35 @@
/**
* Receive SMS messages and send for processing by the OMTP visual voicemail source.
*/
-public class OmtpMessageReceiver extends BroadcastReceiver {
+public class OmtpMessageReceiver {
private static final String TAG = "OmtpMessageReceiver";
- private Context mContext;
+ public static void onReceive(Context context, VisualVoicemailSms sms) {
- @Override
- public void onReceive(Context context, Intent intent) {
- mContext = context;
- int subId = intent.getExtras().getInt(VoicemailContract.EXTRA_VOICEMAIL_SMS_SUBID);
- PhoneAccountHandle phone = PhoneAccountHandleConverter.fromSubId(subId);
-
- if (phone == null) {
- // This should never happen
- VvmLog.i(TAG, "Received message for null phone account on subId " + subId);
- return;
- }
-
+ PhoneAccountHandle phone = sms.getPhoneAccountHandle();
+ int subId = PhoneAccountHandleConverter.toSubId(phone);
if (!UserManager.get(context).isUserUnlocked()) {
VvmLog.i(TAG, "Received message on locked device");
// LegacyModeSmsHandler can handle new message notifications without storage access
- LegacyModeSmsHandler.handle(context, intent, phone);
+ LegacyModeSmsHandler.handle(context, sms);
// A full sync will happen after the device is unlocked, so nothing else need to be
// done.
return;
}
- OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(mContext, subId);
- if (!VisualVoicemailSettingsUtil.isEnabled(mContext, phone)) {
+ OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(context, subId);
+ if (!VisualVoicemailSettingsUtil.isEnabled(context, phone)) {
if (helper.isLegacyModeEnabled()) {
- LegacyModeSmsHandler.handle(context, intent, phone);
+ LegacyModeSmsHandler.handle(context, sms);
} else {
VvmLog.i(TAG, "Received vvm message for disabled vvm source.");
}
return;
}
- String eventType = intent.getExtras()
- .getString(VoicemailContract.EXTRA_VOICEMAIL_SMS_PREFIX);
- Bundle data = intent.getExtras().getBundle(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS);
+ String eventType = sms.getPrefix();
+ Bundle data = sms.getFields();
if (eventType == null || data == null) {
VvmLog.e(TAG, "Unparsable VVM SMS received, ignoring");
@@ -91,7 +81,7 @@
VvmLog.v(TAG, "Received SYNC sms for " + subId +
" with event " + message.getSyncTriggerEvent());
- processSync(phone, message);
+ processSync(context, phone, message);
} else if (eventType.equals(OmtpConstants.STATUS_SMS_PREFIX)) {
VvmLog.v(TAG, "Received Status sms for " + subId);
// If the STATUS SMS is initiated by ActivationTask the TaskSchedulerService will reject
@@ -122,7 +112,8 @@
*
* @param message The sync message to extract data from.
*/
- private void processSync(PhoneAccountHandle phone, SyncMessage message) {
+ private static void processSync(Context context, PhoneAccountHandle phone,
+ SyncMessage message) {
Intent serviceIntent = null;
switch (message.getSyncTriggerEvent()) {
case OmtpConstants.NEW_MESSAGE:
@@ -137,18 +128,18 @@
.setPhoneAccount(phone)
.setSourceData(message.getId())
.setDuration(message.getLength())
- .setSourcePackage(mContext.getPackageName());
+ .setSourcePackage(context.getPackageName());
Voicemail voicemail = builder.build();
- VoicemailsQueryHelper queryHelper = new VoicemailsQueryHelper(mContext);
+ VoicemailsQueryHelper queryHelper = new VoicemailsQueryHelper(context);
if (queryHelper.isVoicemailUnique(voicemail)) {
- Uri uri = VoicemailContract.Voicemails.insert(mContext, voicemail);
+ Uri uri = VoicemailContract.Voicemails.insert(context, voicemail);
voicemail = builder.setId(ContentUris.parseId(uri)).setUri(uri).build();
- SyncOneTask.start(mContext, phone, voicemail);
+ SyncOneTask.start(context, phone, voicemail);
}
break;
case OmtpConstants.MAILBOX_UPDATE:
- SyncTask.start(mContext, phone, OmtpVvmSyncService.SYNC_DOWNLOAD_ONLY);
+ SyncTask.start(context, phone, OmtpVvmSyncService.SYNC_DOWNLOAD_ONLY);
break;
case OmtpConstants.GREETINGS_UPDATE:
// Not implemented in V1
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpProvisioningService.java b/src/com/android/phone/vvm/omtp/sms/OmtpProvisioningService.java
deleted file mode 100644
index 154eeeb..0000000
--- a/src/com/android/phone/vvm/omtp/sms/OmtpProvisioningService.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.phone.vvm.omtp.sms;
-
-import android.app.IntentService;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.VoicemailContract;
-import android.telecom.PhoneAccountHandle;
-
-import com.android.phone.PhoneUtils;
-import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
-import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
-
-/**
- * Performs visual voicemail provisioning in background thread. Not exported.
- */
-public class OmtpProvisioningService extends IntentService {
-
- public OmtpProvisioningService() {
- super("OmtpProvisioningService");
- }
-
- /**
- * Create an intent to start OmtpProvisioningService from a {@link
- * VoicemailContract.ACTION_VOICEMAIL_SMS_RECEIVED} intent.
- */
- public static Intent getProvisionIntent(Context context, Intent messageIntent) {
- Intent serviceIntent = new Intent(context, OmtpProvisioningService.class);
-
- serviceIntent.putExtra(VoicemailContract.EXTRA_VOICEMAIL_SMS_SUBID,
- messageIntent.getExtras().getInt(VoicemailContract.EXTRA_VOICEMAIL_SMS_SUBID));
- serviceIntent.putExtra(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS,
- messageIntent.getExtras().getBundle(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS));
-
- return serviceIntent;
- }
-
- @Override
- public void onHandleIntent(Intent intent) {
- int subId = intent.getExtras().getInt(VoicemailContract.EXTRA_VOICEMAIL_SMS_SUBID);
- PhoneAccountHandle phone = PhoneAccountHandleConverter.fromSubId(subId);
-
- Bundle data = intent.getExtras().getBundle(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS);
-
- StatusMessage message = new StatusMessage(data);
- startProvisioning(phone, message, data);
- }
-
- private void startProvisioning(PhoneAccountHandle phone, StatusMessage message, Bundle data) {
- OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(this,
- PhoneUtils.getSubIdForPhoneAccountHandle(phone));
-
- }
-}
diff --git a/src/com/android/phone/vvm/omtp/sms/StatusSmsFetcher.java b/src/com/android/phone/vvm/omtp/sms/StatusSmsFetcher.java
index 69e4f5f..adaa2f4 100644
--- a/src/com/android/phone/vvm/omtp/sms/StatusSmsFetcher.java
+++ b/src/com/android/phone/vvm/omtp/sms/StatusSmsFetcher.java
@@ -27,13 +27,16 @@
import android.content.IntentFilter;
import android.os.Bundle;
import android.provider.VoicemailContract;
+import android.telecom.PhoneAccountHandle;
import android.telephony.SmsManager;
+import android.telephony.VisualVoicemailSms;
import com.android.phone.Assert;
import com.android.phone.vvm.omtp.OmtpConstants;
import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
import com.android.phone.vvm.omtp.VvmLog;
import com.android.phone.vvm.omtp.protocol.VisualVoicemailProtocol;
+import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
import java.io.Closeable;
import java.io.IOException;
@@ -107,16 +110,17 @@
return;
}
- int subId = intent.getExtras().getInt(VoicemailContract.EXTRA_VOICEMAIL_SMS_SUBID);
-
+ VisualVoicemailSms sms = intent.getExtras()
+ .getParcelable(VoicemailContract.EXTRA_VOICEMAIL_SMS);
+ PhoneAccountHandle phoneAccountHandle = sms.getPhoneAccountHandle();
+ int subId = PhoneAccountHandleConverter.toSubId(phoneAccountHandle);
if (mSubId != subId) {
return;
}
- String eventType = intent.getExtras()
- .getString(VoicemailContract.EXTRA_VOICEMAIL_SMS_PREFIX);
+ String eventType = sms.getPrefix();
if (eventType.equals(OmtpConstants.STATUS_SMS_PREFIX)) {
- mFuture.complete(intent.getBundleExtra(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS));
+ mFuture.complete(sms.getFields());
return;
}
@@ -132,7 +136,7 @@
return;
}
Bundle translatedBundle = protocol.translateStatusSmsBundle(helper, eventType,
- intent.getBundleExtra(VoicemailContract.EXTRA_VOICEMAIL_SMS_FIELDS));
+ sms.getFields());
if (translatedBundle != null) {
VvmLog.i(TAG, "Translated to STATUS SMS");
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 05e5afa..75c6b31 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -127,6 +127,8 @@
case android.telephony.DisconnectCause.DATA_DISABLED:
case android.telephony.DisconnectCause.DATA_LIMIT_REACHED:
case android.telephony.DisconnectCause.DIALED_ON_WRONG_SLOT:
+ case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING:
+ case android.telephony.DisconnectCause.IMEI_NOT_ACCEPTED:
return DisconnectCause.ERROR;
case android.telephony.DisconnectCause.DIALED_MMI:
@@ -378,6 +380,13 @@
case android.telephony.DisconnectCause.DATA_LIMIT_REACHED:
resourceId = R.string.callFailed_data_limit_reached_description;
break;
+ case android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING:
+ resourceId = com.android.internal.R.string.mmiErrorWhileRoaming;
+ break;
+
+ case android.telephony.DisconnectCause.IMEI_NOT_ACCEPTED:
+ resourceId = R.string.callFailed_imei_not_accepted;
+ break;
default:
break;
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index ccc39f2..8fba7ff 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -568,6 +568,15 @@
return failedConnection;
}
+ // Check roaming status to see if we should block custom call forwarding codes
+ if (blockCallForwardingNumberWhileRoaming(phone, number)) {
+ return Connection.createFailedConnection(
+ DisconnectCauseUtil.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.DIALED_CALL_FORWARDING_WHILE_ROAMING,
+ "Call forwarding while roaming"));
+ }
+
+
final TelephonyConnection connection =
createConnectionFor(phone, null, true /* isOutgoing */, request.getAccountHandle(),
request.getTelecomCallId(), request.getAddress(), request.getVideoState());
@@ -779,6 +788,28 @@
}
}
+ private boolean blockCallForwardingNumberWhileRoaming(Phone phone, String number) {
+ if (phone == null || TextUtils.isEmpty(number) || !phone.getServiceState().getRoaming()) {
+ return false;
+ }
+ String[] blockPrefixes = null;
+ CarrierConfigManager cfgManager = (CarrierConfigManager)
+ phone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (cfgManager != null) {
+ blockPrefixes = cfgManager.getConfigForSubId(phone.getSubId()).getStringArray(
+ CarrierConfigManager.KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY);
+ }
+
+ if (blockPrefixes != null) {
+ for (String prefix : blockPrefixes) {
+ if (number.startsWith(prefix)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private boolean isRadioOn() {
boolean result = false;
for (Phone phone : mPhoneFactoryProxy.getPhones()) {
diff --git a/tests/Android.mk b/tests/Android.mk
index 322dad2..ba6944d 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -31,6 +31,8 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-test \
- mockito-target-minus-junit4
+ mockito-target-minus-junit4 \
+ espresso-core \
+ truth-prebuilt
include $(BUILD_PACKAGE)
diff --git a/tests/src/com/android/phone/RoamingDialogFragmentTest.java b/tests/src/com/android/phone/RoamingDialogFragmentTest.java
new file mode 100644
index 0000000..96a3fda
--- /dev/null
+++ b/tests/src/com/android/phone/RoamingDialogFragmentTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.phone;
+
+import android.app.Activity;
+import android.content.pm.ActivityInfo;
+import android.provider.Settings.Global;
+import android.provider.Settings.SettingNotFoundException;
+import android.support.test.espresso.matcher.PreferenceMatchers;
+import android.support.test.rule.ActivityTestRule;
+import com.google.common.truth.Truth;
+import junit.framework.AssertionFailedError;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static android.support.test.espresso.Espresso.onData;
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
+import static android.support.test.espresso.matcher.ViewMatchers.isChecked;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import static com.google.common.truth.Truth.assertThat;
+
+/**
+ * Espresso tests to check some properties of the dialog that appears when a user
+ * tries to turn on data roaming.
+ */
+public class RoamingDialogFragmentTest {
+
+ @Rule
+ public ActivityTestRule<MobileNetworkSettings> mRule =
+ new ActivityTestRule<>(MobileNetworkSettings.class);
+ private Activity mActivity;
+
+ /**
+ * Make sure roaming is off before we start a test since this checks the dialog that only
+ * shows up when we try to turn it on.
+ */
+ @Before
+ public void disableRoaming() {
+ mActivity = mRule.getActivity();
+
+ // turn off data roaming if it is on
+ try {
+ onData(PreferenceMatchers.withTitle(R.string.roaming))
+ .check(matches(hasDescendant(isChecked())))
+ .perform(click());
+ } catch (AssertionFailedError e) {
+ // don't click the switch if it is already off.
+ }
+ }
+
+ @Test
+ public void dataRoamingDialogPersistsOnRotation() {
+ // click on the data roaming preference to trigger warning dialog
+ onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
+
+ // request both orientations to ensure at least one rotation occurs
+ mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+
+ // verify the title of the dialog is visible
+ onView(withText(R.string.roaming_alert_title)).check(matches(isDisplayed()));
+
+ }
+
+ @Test
+ public void dataRoamingEnabledWhenPositiveButtonClicked() throws SettingNotFoundException {
+ // click on the data roaming preference to trigger warning dialog
+ onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
+
+ // click to confirm we want to turn on data roaming
+ onView(withId(android.R.id.button1)).perform(click());
+
+ // verify that the the setting has actually been changed
+ assertThat(Global.getInt(mActivity.getApplicationContext().getContentResolver(),
+ Global.DATA_ROAMING)).isEqualTo(1);
+ }
+
+ @Test
+ public void dialogDismissedOnNegativeButtonClicked() {
+ // click on the data roaming preference to trigger warning dialog
+ onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
+
+ // click to cancel turning on data roaming
+ onView(withId(android.R.id.button2)).perform(click());
+
+ // verify the title of the dialog is gone
+ onView(withText(R.string.roaming_alert_title)).check(doesNotExist());
+ }
+
+ @Test
+ public void dataRoamingStaysDisabledWhenDialogCanceled() throws SettingNotFoundException {
+ // click on the data roaming preference to trigger warning dialog
+ onData(PreferenceMatchers.withTitle(R.string.roaming)).perform(click());
+
+ // click to cancel turning on data roaming
+ onView(withId(android.R.id.button2)).perform(click());
+
+ // verify that the the setting has not been changed
+ assertThat(Global.getInt(mActivity.getApplicationContext().getContentResolver(),
+ Global.DATA_ROAMING)).isEqualTo(0);
+
+ }
+}