Merge "Add Video API unit tests, fix auto speakerphone logic."
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 0e0b5b0..c7eaf22 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Vinnige antwoord"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Boodskap gestuur na <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Oproeprekeninge"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Net noodoproepe word toegelaat."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Hierdie program kan nie uitgaande oproepe maak sonder die foon se toestemming nie."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Voer \'n geldige nommer in om \'n oproep te maak."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Oproep kan nie op die oomblik bygevoeg word nie."</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 853729d..d15621d 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ፈጣን ምላሽ"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"ለ <xliff:g id="PHONE_NUMBER">%s</xliff:g> የተላከ መልዕክት"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"የመደወያ መለያዎች"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"የድንገተኛ አደጋ ጥሪዎች ብቻ ናቸው የሚፈቀዱት።"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ይህ መተግበሪያ ያለስልኩ ፈቃድ ወጪ ጥሪዎችን ማድረግ አይችልም።"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"አንድ ጥሪ ለማድረግ የሚሰራ ቁጥር ያስገቡ።"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"ጥሪ በዚህ ጊዜ ላይ ሊታከል አይችልም።"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..1c4ce56
--- /dev/null
+++ b/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="telecommAppLabel" product="default" msgid="9166784827254469057">"Upravljanje telefonskim pozivima"</string>
+ <string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"Telefon"</string>
+ <string name="unknown" msgid="6878797917991465859">"Nepoznato"</string>
+ <string name="notification_missedCallTitle" msgid="7554385905572364535">"Propušten poziv"</string>
+ <string name="notification_missedCallsTitle" msgid="1361677948941502522">"Propušteni pozivi"</string>
+ <string name="notification_missedCallsMsg" msgid="4575787816055205600">"Broj propuštenih poziva: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
+ <string name="notification_missedCallTicker" msgid="504686252427747209">"Propušten poziv od: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
+ <string name="notification_missedCall_call_back" msgid="2684890353590890187">"Uzvrati poziv"</string>
+ <string name="notification_missedCall_message" msgid="3049928912736917988">"Poruka"</string>
+ <string name="accessibility_call_muted" msgid="2776111226185342220">"Zvuk poziva je isključen."</string>
+ <string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Spikerfon je omogućen."</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"U gužvi sam. O čemu se radi?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Pozvaću te uskoro."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Pozvaću te kasnije."</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"U gužvi sam. Da se čujemo kasnije?"</string>
+ <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Brzi odgovori"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Izmena brzih odgovora"</string>
+ <string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
+ <string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Brzi odgovor"</string>
+ <string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Poruka je poslata na broj <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
+ <string name="enable_account_preference_title" msgid="2021848090086481720">"Nalozi za pozivanje"</string>
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Dozvoljeni su samo hitni pozivi."</string>
+ <string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Ova aplikacija ne može da poziva bez dozvole za telefoniranje."</string>
+ <string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Da biste uputili poziv, unesite važeći broj."</string>
+ <string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Trenutno nije moguće dodati poziv."</string>
+ <string name="video_call_not_allowed_if_tty_enabled" msgid="7593649283571253283">"Onemogućite TTY režim da biste upućivali video pozive."</string>
+ <string name="no_vm_number" msgid="4164780423805688336">"Nedostaje broj za govornu poštu"</string>
+ <string name="no_vm_number_msg" msgid="1300729501030053828">"Nije uskladišten nijedan broj govorne pošte na SIM kartici."</string>
+ <string name="add_vm_number_str" msgid="4676479471644687453">"Dodaj broj"</string>
+ <string name="change_default_dialer_dialog_title" msgid="4430590714918044425">"Promeniti podrazumevanu aplikaciju Telefon?"</string>
+ <string name="change_default_dialer_with_previous_app_set_text" msgid="3213396537499337949">"Želite li da koristite aplikaciju <xliff:g id="NEW_APP">%1$s</xliff:g> umesto aplikacije <xliff:g id="CURRENT_APP">%2$s</xliff:g> kao podrazumevanu aplikaciju za pozivanje telefonskih brojeva?"</string>
+ <string name="change_default_dialer_no_previous_app_set_text" msgid="7608426684114545221">"Želite li da koristite aplikaciju <xliff:g id="NEW_APP">%s</xliff:g> kao podrazumevanu aplikaciju za pozivanje telefonskih brojeva?"</string>
+</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index ff406db..384aa35 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"দ্রুত প্রতিক্রিয়া"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> এ বার্তা পাঠানো হয়েছে৷"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"কলিং অ্যাকাউন্টগুলি"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"শুধুমাত্র জরুরি কলগুলিকে অনুমোদিত।"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"এই অ্যাপ্লিকেশানটি ফোনের অনুমতি ছাড়া আউটগোয়িং কলগুলি করতে পারবে না।"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"কোনো কল স্থাপন করতে, একটি বৈধ নম্বর লিখুন৷"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"এই মুহূর্তে কল যোগ করা যাবে না৷"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index f297dab..f5a570f 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Resposta ràpida"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Missatge enviat a <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Comptes de trucades"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Només es permeten les trucades d\'emergència."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Aquesta aplicació no pot fer trucades sortints sense el permís del telèfon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Per realitzar una trucada, introdueix un número vàlid."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"En aquest moment no es pot afegir la trucada."</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 56c5c76..4a5c9e0 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Rychlá odpověď"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Zpráva byla odeslána na číslo <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Účty pro volání"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Jsou povolena pouze tísňová volání."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Tato aplikace nemůže provádět odchozí hovory bez oprávnění k použití telefonu."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Chcete-li uskutečnit hovor, zadejte platné telefonní číslo."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Hovor aktuálně nelze přidat."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 5d8fa36..787cfe0 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Hurtigt svar"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Meddelelsen er sendt til <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Opkaldskonti"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Kun nødopkald er tilladt."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Denne app kan ikke foretage udgående opkald uden opkaldstilladelse."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Indtast et gyldigt nummer for at foretage et opkald."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Opkaldet kan ikke tilføjes på nuværende tidspunkt."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index fc8e9ae..74c24fb 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Kurzantwort"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Nachricht an <xliff:g id="PHONE_NUMBER">%s</xliff:g> gesendet"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Anrufkonten"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Es sind nur Notrufe erlaubt."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Diese App darf ohne die Berechtigung \"Standard-App für Telefonie\" keine ausgehenden Anrufe tätigen."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Geben Sie eine gültige Nummer ein."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Der Anruf kann momentan nicht hinzugefügt werden."</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 1d0d773..ec44361 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Γρήγορη απάντηση"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Το μήνυμα εστάλη στο <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Λογαριασμοί κλήσης"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Επιτρέπονται μόνο κλήσεις έκτακτης ανάγκης."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Αυτή η εφαρμογή δεν μπορεί να πραγματοποιήσει εξερχόμενες κλήσεις χωρίς την άδεια \"Τηλέφωνο\"."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Για να πραγματοποιήσετε μια κλήση, εισαγάγετε έναν έγκυρο αριθμό."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Δεν είναι δυνατή η προσθήκη κλήσης αυτήν τη στιγμή."</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 4285c28..0ad7c1b 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Respuesta rápida"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mensaje enviado a <xliff:g id="PHONE_NUMBER">%s</xliff:g>"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Cuentas telefónicas"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Solo se permiten llamadas de emergencia."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Esta aplicación no puede realizar llamadas salientes sin permiso del teléfono."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Para realizar una llamada, ingresa un número válido."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"No se puede agregar la llamada en este momento."</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 071ddba..1fb18a6 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Respuestas rápidas"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mensaje enviado a <xliff:g id="PHONE_NUMBER">%s</xliff:g>"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Cuentas de llamadas"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Solo se permiten llamadas de emergencia."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Esta aplicación no puede hacer llamadas sin permiso del teléfono."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Para realizar una llamada, introduce un número válido."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"No se puede añadir la llamada en este momento."</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index b6090f3..04206c7 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Kiirvastus"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Sõnum on saadetud numbrile <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Kõnekontod"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Lubatud on ainult hädaabikõned."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"See rakendus ei saa ilma telefoni kasutamise loata välja helistada."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Helistamiseks sisestage kehtiv number."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Kõnet ei saa praegu lisada."</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 654f115..88f8a8e 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Erantzun bizkorra"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mezua bidali da <xliff:g id="PHONE_NUMBER">%s</xliff:g> zenbakira."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Deiak egiteko kontuak"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Larrialdi-deiak bakarrik egin daitezke."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Aplikazioak irteerako deiak egin ahal izan ditzan, telefonoaren eginbidea erabiltzeko baimena behar du."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Deitzeko, idatzi balio duen zenbaki bat."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Une honetan ezin da deirik gehitu."</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 25e380a..fa8028c 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"پاسخ سریع"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"پیام به <xliff:g id="PHONE_NUMBER">%s</xliff:g> ارسال شد."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"حسابهای تماس"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"فقط تماسهای اضطراری مجاز است."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"این برنامه نمیتواند بدون اجازه تلفن، تماسهای خروجی برقرار کند."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"برای برقراری تماس، یک شماره معتبر وارد کنید."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"در این زمان نمیتوان تماسی اضافه کرد."</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index f253000..2f73a26 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Pikavastaukset"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Viesti lähetetty numeroon <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Puhelutilit"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Vain hätäpuhelut sallittu"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Tämä sovellus ei voi soittaa puheluita ilman Puhelin-lupaa."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Soita antamalla kelvollinen numero."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Puhelua ei voi lisätä juuri nyt."</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index bffa229..4bf6b52 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Réponse rapide"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Message envoyé à <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Comptes d\'appel"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Seuls les appels d\'urgence sont autorisés."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Cette application ne peut pas faire d\'appels sans l\'autorisation de l\'application Téléphone."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Pour faire un appel, entrez un numéro valide."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Impossible d\'ajouter l\'appel pour le moment."</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index e8ee088..247b528 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Réponse rapide"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Message envoyé à <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Comptes téléphoniques"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Seuls les appels d\'urgence sont autorisés."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Cette application ne peut pas passer d\'appels sortants sans l\'autorisation de l\'application Téléphone."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Pour émettre un appel, veuillez saisir un numéro valide."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Impossible d\'ajouter un appel pour le moment."</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index f64da11..fc726a6 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Resposta rápida"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mensaxe enviada ao <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Contas de chamadas"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Só se permiten chamadas de emerxencia."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Esta aplicación non pode facer chamadas saíntes sen permiso do teléfono."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Para realizar unha chamada, introduce un número válido."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Neste momento non se pode engadir a chamada."</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 12e163c..5c3078e 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ઝડપી પ્રતિસાદ"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> પર સંદેશ મોકલ્યો."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"કૉલિંગ એકાઉન્ટ્સ"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"ફક્ત કટોકટીના કૉલ્સને મંજૂરી છે."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ફોન પરવાનગી વિના આ એપ્લિકેશન આઉટગોઇંગ કૉલ્સ કરી શકતી નથી."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"કૉલ કરવા માટે, માન્ય નંબર દાખલ કરો."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"આ સમયે કૉલ ઉમેરી શકાતો નથી."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index cf9a5e9..2a47df9 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Brzi odgovor"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Poruka poslana na broj <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Računi za pozivanje"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Dopušteni su samo hitni pozivi."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Ova aplikacija ne može uspostavljati odlazne pozive bez dopuštenja za telefon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Unesite važeći broj da biste uspostavili poziv."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Poziv trenutačno nije moguć."</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 05a7746..6ff22a7 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Արագ պատասխան"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Հաղորդագրությունն ուղարկվել է <xliff:g id="PHONE_NUMBER">%s</xliff:g>-ին:"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Հաշիվներ զանգերի համար"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Միայն արտակարգ իրավիճակների զանգերն են թույլատրվում:"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Առանց Հեռախոսի թույլտվության այս ծրագիրը չի կարող ելքային զանգեր կատարել:"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Զանգ կատարելու համար մուտքագրեք ճիշտ համար:"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Հնարավոր չէ ևս մեկ զանգ ավելացնել այս պահին:"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 59e37ac..f9516dc 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Snarsvar"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Skilaboð send til <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Símtalareikningar"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Aðeins neyðarsímöl eru leyfð."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Þetta forrit getur ekki hringt án heimildar í símanum."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Sláðu inn gilt númer til að hringja símtal."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Ekki er hægt að bæta símtali við sem stendur."</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index aa42c41..3df48c1 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Risposta rapida"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Messaggio inviato a <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Account di chiamata"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Sono consentite soltanto le chiamate di emergenza."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Non è possibile effettuare chiamate tramite questa applicazione senza l\'autorizzazione sul telefono."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Per effettuare una chiamata, inserisci un numero valido."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Al momento non è possibile aggiungere la chiamata."</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 0a9506f..ae002ff 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"クイック返信"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g>にメッセージを送信しました。"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"通話アカウント"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"許可されているのは緊急通報のみです。"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"このアプリは、電話権限がないため発信できません。"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"発信するには、有効な番号を入力してください。"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"通話は現在追加できません。"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 50d9375..66c7eb0 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"სწრაფი პასუხი"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"შეტყობინება გაიგზავნა <xliff:g id="PHONE_NUMBER">%s</xliff:g>-თან."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"დარეკვის ანგარიშები"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"შესაძლებელია მხოლოდ გადაუდებელი ზარების განხორციელება."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ეს აპლიკაცია ტელეფონის ნებართვის გარეშე გამავალ ზარებს ვერ განახორციელებს."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"ზარის განხორციელებისათვის, შეიყვანეთ მოქმედი ნომერი."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"ამ ეტაპზე ზარის დამატება ვერ ხერხდება."</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 37da2d4..165dcf7 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ತ್ವರಿತ ಪ್ರತಿಕ್ರಿಯೆ"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಲಾಗಿದೆ."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"ಕರೆ ಮಾಡುವ ಖಾತೆಗಳು"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"ತುರ್ತು ಕರೆಗಳನ್ನು ಮಾಡಲು ಮಾತ್ರ ಅವಕಾಶವಿದೆ."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಫೋನ್ ಅನುಮತಿಯಿಲ್ಲದೆ ಹೊರಹೋಗುವ ಕರೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"ಕರೆಯನ್ನು ಮಾಡಲು, ಮಾನ್ಯವಾದ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"ಕರೆಯನ್ನು ಈ ಸಮಯದಲ್ಲಿ ಸೇರಿಸಲಾಗುವುದಿಲ್ಲ."</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 5080f15..ff26e46 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"빠른 응답"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g>(으)로 메시지를 보냈습니다."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"통화 계정"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"긴급 전화만 허용됩니다."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"전화 권한이 없으므로 애플리케이션에서 발신 전화를 걸 수 없습니다."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"전화를 걸려면 올바른 번호를 입력하세요."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"현재 통화를 추가할 수 없습니다."</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index a65db25..c2d8260 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Тез жооп"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> номуруна билдирүү жөнөтүлдү."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Чалуу каттоо эсептери"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Шашылыш чалууларга гана уруксат берилген."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Бул колдонмо тийиштүү уруксатсыз чалууларды жасай албайт."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Чалуу үчүн, жарактуу номер киргизиңиз."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Бул жолу чалууну кошуу мүмкүн эмес."</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 6c41d65..effc21f 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ຕອບກັບດ່ວນ"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"ສົ່ງຂໍ້ຄວາມຫາ <xliff:g id="PHONE_NUMBER">%s</xliff:g> ແລ້ວ."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"ບັນຊີໂທ"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"ອະນຸຍາດໃຫ້ໂທສຸກເສີນເທົ່ານັ້ນ."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ແອັບພລິເຄຊັນນີ້ບໍ່ສາມາດໂທອອກໄດ້ ໂດຍບໍ່ມີການອະນຸຍາດຂອງໂທລະສັບ."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"ເພື່ອທີ່ຈະໂທ, ປ້ອນເບີໂທທີ່ໃຊ້ໄດ້ເຂົ້າໄປ."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"ບໍ່ສາມາດເພີ່ມການໂທໄດ້ໃນເວລານີ້."</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index bac3368..ccc7270 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Ātrā atbilde"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Ziņojums nosūt. uz šādu tālr. nr.: <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Zvanu konti"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Ir atļauti tikai ārkārtas zvani."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Šajā lietojumprogrammā nevar veikt izejošos zvanus bez tālruņa atļaujas."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Lai veiktu zvanu, ievadiet derīgu numuru."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Šobrīd nevar pievienot zvanu."</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 3c87169..8d7ebce 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Брз одговор"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Порака е испратена на <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Сметки за повици"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Дозволени се само итни повици."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Оваа апликација не може да прави појдовни повици без дозволата Телефон."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"За да повикате, внесете важечки број."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Повикот не може да се додаде во моментов."</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 1ecabc4..f722b92 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Шуурхай хариу"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Зурвасыг <xliff:g id="PHONE_NUMBER">%s</xliff:g> руу илгээв."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Дуудлагын эрхтэй бүртгэлүүд"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Зөвхөн яаралтай тусламжийн дуудлага хийх боломжтой."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Энэ апп нь утасны зөвшөөрөлгүйгээр дуудлага хийх боломжгүй."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Дуудлага хийхийн тулд хүчин төгөлдөр дугаар оруулна уу."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Одоо дуудлага нэмэх боломжгүй."</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index d75cf36..2d31e88 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Respons pantas"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mesej dihantar ke <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Akaun panggilan"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Panggilan kecemasan sahaja dibenarkan."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Aplikasi ini tidak boleh membuat panggilan keluar tanpa kebenaran Telefon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Untuk membuat panggilan, masukkan nombor yang sah."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Panggilan tidak boleh ditambahkan pada masa ini."</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 7f37bf0..e37f856 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Hurtigsvar"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Melding er sendt til <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Ringekontoer"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Kun nødanrop er mulig."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Denne appen kan ikke ringe uten tillatelse fra telefonen."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Skriv inn et gyldig nummer for å plassere en samtale."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Anrop kan ikke legges til akkurat nå."</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 6e49d64..ce7c88c 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ਤਤਕਾਲ ਜਵਾਬ"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"ਸੁਨੇਹਾ <xliff:g id="PHONE_NUMBER">%s</xliff:g> ਨੂੰ ਭੇਜਿਆ ਗਿਆ।"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"ਕਾਲਿੰਗ ਖਾਤੇ"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"ਸਿਰਫ਼ ਸੰਕਟ ਕਾਲਾਂ ਨੂੰ ਮਨਜ਼ੂਰੀ ਹੈ।"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਫੋਨ ਅਨੁਮਤੀ ਦੇ ਬਿਨਾਂ ਆਉਟਗੋਇੰਗ ਕਾਲਾਂ ਨਹੀਂ ਕਰ ਸਕਦੀ।"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ, ਇੱਕ ਪ੍ਰਮਾਣਿਕ ਨੰਬਰ ਦਰਜ ਕਰੋ।"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"ਇਸ ਵੇਲੇ ਕਾਲ ਨਹੀਂ ਜੋੜੀ ਸਕਦੀ।"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 4d44cb1..a2243bc 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Szybka odpowiedź"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Wiadomość wysłano na numer <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Konta telefoniczne"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Dozwolone są tylko połączenia alarmowe."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Ta aplikacja nie może wykonywać połączeń bez uprawnienia Telefon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Aby zadzwonić, wybierz prawidłowy numer."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Nie można w tej chwili dodać połączenia."</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d167aff..1727b2a 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Resposta rápida"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mensagem enviada para <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Contas de chamadas"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Somente chamadas de emergência são permitidas."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Este aplicativo não pode fazer chamadas sem a permissão do smartphone."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Para realizar uma chamada, digite um número válido."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"No momento, não é possível adicionar a chamada."</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index c4464b8..79cc111 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Răspuns rapid"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mesajul a fost trimis la <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Conturi pentru apelare"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Sunt permise doar apelurile de urgență."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Această aplicație nu poate efectua apeluri fără permisiunea Telefon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Pentru a apela, introduceți un număr valid."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Apelul nu poate fi adăugat în acest moment."</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 8d43a8c..4d53bc0 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Быстрый ответ"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Сообщение отправлено на номер <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Аккаунты для звонков"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Только экстренные вызовы"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Приложение не может совершать звонки без соответствующего разрешения."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Недействительный номер."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Невозможно позвонить в данный момент"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 9c21e26..39d2298 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"ක්ෂණික ප්රතිචාරය"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> හට පණිවිඩය යවන්න."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"ඇමතීමේ ගිණුම්"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"හදිසි ඇමතුම්වලට පමණක් ඉඩ දේ."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"දුරකථන අවසරයෙන් තොරව මෙම යෙදුමට පිටතට යන ඇමතුම් සිදු කළ නොහැකිය."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"ඇමතුමක් ලබාගැනීමට, වලංගු අංකයක් ලබාගන්න."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"මේ වේලාවේ ඇමතුම එකතු කළ නොහැක."</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index c8036ee..fcaaea1 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Hiter odgovor"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"SMS poslan na številko <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Računi za klicanje"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Dovoljeno je samo opravljanje klicev v sili."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Ta aplikacija lahko opravlja odhodne klice brez dovoljenja za telefon."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Če želite opraviti klic, vnesite veljavno številko."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Klica trenutno ni mogoče dodati."</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index aa6b3c4..e684eff 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Përgjigje e shpejtë"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mesazhi u dërgua te <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Llogaritë e telefonatave"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Lejohen vetëm telefonatat e urgjencës."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Ky aplikacion nuk mund të kryejë telefonata dalëse pa lejen e Telefonit."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Për të kryer një telefonatë, fut një numër të vlefshëm."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Telefonata nuk mund të shtohet këtë herë."</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ad9e9e3..07b1327 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Брзи одговор"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Порука је послата на број <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Налози за позивање"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Дозвољени су само хитни позиви."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Ова апликација не може да позива без дозволе за телефонирање."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Да бисте упутили позив, унесите важећи број."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Тренутно није могуће додати позив."</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 6298b4f..4d5cff7 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Majibu ya haraka"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Ujumbe uliotumwa kwa <xliff:g id="PHONE_NUMBER">%s</xliff:g> ."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Akaunti za simu"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Piga simu za dharura pekee."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Programu hii haiwezi kupiga simu bila ruhusa ya Simu."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Ili upige simu, weka nambari sahihi."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Hangout ya video haiwezi kuongezwa kwa wakati huu."</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 106a1b5..117d656 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"คำตอบด่วน"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"ส่งข้อความไปยัง <xliff:g id="PHONE_NUMBER">%s</xliff:g> แล้ว"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"บัญชีการโทร"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"อนุญาตเฉพาะหมายเลขฉุกเฉิน"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"แอปพลิเคชันนี้ไม่สามารถโทรออกโดยไม่มีสิทธิ์ใช้โทรศัพท์"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"หากต้องการโทรออก โปรดป้อนหมายเลขที่ถูกต้อง"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"ไม่สามารถเพิ่มสายได้ในขณะนี้"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index ea350ab..728ad6b 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Mabilisang tugon"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Naipadala ang mensahe sa <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Account sa pagtawag"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Ang mga pang-emergency na tawag lang ang pinapayagan."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Hindi makakapagsagawa ng mga papalabas na tawag ang application na ito nang wala ang pahintulot ng Telepono."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Upang tumawag, maglagay ng wastong numero."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Hindi maidadagdag ang tawag sa oras na ito."</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 0ef8a03..dd5c6bd 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Hızlı yanıt"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Mesaj, <xliff:g id="PHONE_NUMBER">%s</xliff:g> numaralı telefona gönderildi."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Çağrı hesapları"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Yalnızca acil durum çağrılarına izin veriliyor."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Bu uygulama, Telefonun izni olmadan giden çağrılar yapamaz."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Telefon etmek için geçerli bir numara girin."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Çağrı şu anda eklenemiyor."</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 6144a70..9774c7e 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"فوری جواب"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"پیغام <xliff:g id="PHONE_NUMBER">%s</xliff:g> کو بھیج دیا گیا۔"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"کالنگ اکاؤنٹس"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"صرف ہنگامی کالز کی اجازت ہے۔"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"یہ ایپلی کیشن فون کی اجازت کے بغیر باہر جانے والی کالیں نہیں کر سکتی۔"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"کال کرنے کیلئے، ایک درست نمبر درج کریں۔"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"اس وقت کال شامل نہیں کی جا سکتی ہے۔"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 3ad9cf5..1a84603 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Tezkor javob"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Xabar <xliff:g id="PHONE_NUMBER">%s</xliff:g>ga jo‘natildi."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Qo‘ng‘iroq hisoblari"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Faqat favqulodda qo‘ng‘iroqlarga ruxsat berilgan."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Bu ilova Telefon ruxsatnomasisiz chiquvchi qo‘ng‘iroqlarni amalga oshira olmaydi."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Qo‘ng‘iroq qilish uchun raqamni to‘g‘ri kiriting."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Hozirgi vaqtda qo‘ng‘iroq qo‘shib bo‘lmaydi."</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c6752ad..4c30166 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"快速回复"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"讯息已发送至 <xliff:g id="PHONE_NUMBER">%s</xliff:g>。"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"通话帐号"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"只能拨打紧急呼救电话。"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"此应用没有电话权限,无法拨出电话。"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"要拨打电话,请输入有效的电话号码。"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"目前无法添加通话。"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index a06b76f..6468859 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"快速回應"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"訊息已傳送至 <xliff:g id="PHONE_NUMBER">%s</xliff:g>。"</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"通話帳戶"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"只能撥打緊急電話。"</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"這個應用程式不具備電話應用程式存取權限,無法撥出電話。"</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"如要撥打電話,請輸入有效的號碼。"</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"目前無法新增通話。"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 70188be..d8e5757 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -37,8 +37,7 @@
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Izimpendulo ezisheshayo"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Umlayezo othunyelwe ku <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Ama-akhawunti wokushaya"</string>
- <!-- no translation found for outgoing_call_not_allowed_user_restriction (6872406278300131364) -->
- <skip />
+ <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Amakholi aphuthumayo kuphela avunyelwe."</string>
<string name="outgoing_call_not_allowed_no_permission" msgid="1996571596464271228">"Lolu hlelo lokusebenza alikwazi ukwenza amakhli aphumayo ngaphandle kwemvume yefoni."</string>
<string name="outgoing_call_error_no_phone_number_supplied" msgid="1940125199802007505">"Ukuze wenze ikholi, faka inombolo evumelekile."</string>
<string name="duplicate_video_call_not_allowed" msgid="3749211605014548386">"Ikholi ayikwazi ukungezwa ngalesi sikhathi."</string>
diff --git a/scripts/telecom_testing.sh b/scripts/telecom_testing.sh
new file mode 100644
index 0000000..efae9fc
--- /dev/null
+++ b/scripts/telecom_testing.sh
@@ -0,0 +1,92 @@
+lite_test_telecom() {
+ usage="
+ Usage: lite_test_telecom [-c CLASSNAME] [-d] [-a | -i] [-e], where
+
+ -c CLASSNAME Run tests only for the specified class/method. CLASSNAME
+ should be of the form SomeClassTest or SomeClassTest#testMethod.
+ -d Waits for a debugger to attach before starting to run tests.
+ -i Rebuild and reinstall the test apk before running tests (mmm).
+ -a Rebuild all dependencies and reinstall the test apk before/
+ running tests (mmma).
+ -e Run code coverage. Coverage will be output into the coverage/
+ directory in the repo root.
+ -h This help message.
+ "
+
+ OPTIND=1
+ class=
+ install=false
+ installwdep=false
+ debug=false
+ coverage=false
+
+ while getopts "c:hadie" opt; do
+ case "$opt" in
+ h)
+ echo "$usage"
+ return 0;;
+ \?)
+ echo "$usage"
+ return 0;;
+ c)
+ class=$OPTARG;;
+ d)
+ debug=true;;
+ i)
+ install=true;;
+ a)
+ install=true
+ installwdep=true;;
+ e)
+ coverage=true;;
+ esac
+ done
+
+ T=$(gettop)
+
+ if [ $install = true ] ; then
+ olddir=$(pwd)
+ cd $T
+ if [ $coverage = true ] ; then
+ emma_opt="EMMA_INSTRUMENT_STATIC=true"
+ else
+ emma_opt="EMMA_INSTRUMENT_STATIC=false"
+ fi
+ # Build and exit script early if build fails
+ if [ $installwdep = true ] ; then
+ ANDROID_COMPILE_WITH_JACK=false mmma "packages/services/Telecomm/tests" ${emma_opt}
+ else
+ ANDROID_COMPILE_WITH_JACK=false mmm "packages/services/Telecomm/tests" ${emma_opt}
+ fi
+ if [ $? -ne 0 ] ; then
+ echo "Make failed! try using -a instead of -i if building with coverage"
+ return
+ fi
+
+ adb install -r -t "out/target/product/$TARGET_PRODUCT/data/app/TelecomUnitTests/TelecomUnitTests.apk"
+ if [ $? -ne 0 ] ; then
+ cd "$olddir"
+ return $?
+ fi
+ cd "$olddir"
+ fi
+
+ e_options=""
+ if [ -n "$class" ] ; then
+ e_options="${e_options} -e class com.android.server.telecom.tests.${class}"
+ fi
+ if [ $debug = true ] ; then
+ e_options="${e_options} -e debug 'true'"
+ fi
+ if [ $coverage = true ] ; then
+ e_options="${e_options} -e coverage 'true'"
+ fi
+ adb shell am instrument ${e_options} -w com.android.server.telecom.tests/android.test.InstrumentationTestRunner
+
+ if [ $coverage = true ] ; then
+ adb root
+ adb wait-for-device
+ adb pull /data/user/0/com.android.server.telecom.tests/files/coverage.ec /tmp/
+ java -cp external/emma/lib/emma.jar emma report -r html -sp packages/services/Telecomm/src -in out/target/common/obj/APPS/TelecomUnitTests_intermediates/coverage.em -in /tmp/coverage.ec
+ fi
+}
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 8555c20..5971f7b 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -1141,14 +1141,16 @@
}
}
- void disconnect() {
+ @VisibleForTesting
+ public void disconnect() {
disconnect(false);
}
/**
* Attempts to disconnect the call through the connection service.
*/
- void disconnect(boolean wasViaNewOutgoingCallBroadcaster) {
+ @VisibleForTesting
+ public void disconnect(boolean wasViaNewOutgoingCallBroadcaster) {
Log.event(this, Log.Events.REQUEST_DISCONNECT);
// Track that the call is now locally disconnecting.
@@ -1209,7 +1211,8 @@
*
* @param videoState The video state in which to answer the call.
*/
- void answer(int videoState) {
+ @VisibleForTesting
+ public void answer(int videoState) {
Preconditions.checkNotNull(mConnectionService);
// Check to verify that the call is still in the ringing state. A call can change states
@@ -1230,7 +1233,8 @@
* @param rejectWithMessage Whether to send a text message as part of the call rejection.
* @param textMessage An optional text message to send as part of the rejection.
*/
- void reject(boolean rejectWithMessage, String textMessage) {
+ @VisibleForTesting
+ public void reject(boolean rejectWithMessage, String textMessage) {
Preconditions.checkNotNull(mConnectionService);
// Check to verify that the call is still in the ringing state. A call can change states
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
index a774130..05586ee 100644
--- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
@@ -90,6 +90,9 @@
public static final int SWITCH_FOCUS = 4001;
+ // Used in testing to execute verifications. Not compatible with subsessions.
+ public static final int RUN_RUNNABLE = 9001;
+
/** Valid values for mAudioFocusType */
public static final int NO_FOCUS = 1;
public static final int HAS_FOCUS = 2;
@@ -923,7 +926,6 @@
mRouteCodeToQuiescentState.put(ROUTE_BLUETOOTH, mQuiescentBluetoothRoute);
mRouteCodeToQuiescentState.put(ROUTE_SPEAKER, mQuiescentSpeakerRoute);
mRouteCodeToQuiescentState.put(ROUTE_WIRED_HEADSET, mQuiescentHeadsetRoute);
- initialize();
}
/**
@@ -964,7 +966,7 @@
}
/**
- * This is for state-independent changes in audio route (i.e. muting)
+ * This is for state-independent changes in audio route (i.e. muting or runnables)
* @param msg that couldn't be handled.
*/
@Override
@@ -994,12 +996,20 @@
sendInternalMessage(MUTE_ON);
}
return;
+ case RUN_RUNNABLE:
+ Runnable r = (Runnable) msg.obj;
+ r.run();
+ return;
default:
Log.e(this, new IllegalStateException(),
"Unexpected message code");
}
}
+ public void quitStateMachine() {
+ quitNow();
+ }
+
private void setSpeakerphoneOn(boolean on) {
if (mAudioManager.isSpeakerphoneOn() != on) {
Log.i(this, "turning speaker phone %s", on);
diff --git a/src/com/android/server/telecom/CallIntentProcessor.java b/src/com/android/server/telecom/CallIntentProcessor.java
index 831b708..9150084 100644
--- a/src/com/android/server/telecom/CallIntentProcessor.java
+++ b/src/com/android/server/telecom/CallIntentProcessor.java
@@ -139,7 +139,8 @@
// process will be running throughout the duration of the phone call and should never
// be killed.
NewOutgoingCallIntentBroadcaster broadcaster = new NewOutgoingCallIntentBroadcaster(
- context, callsManager, call, intent, isPrivilegedDialer);
+ context, callsManager, call, intent, new PhoneNumberUtilsAdapterImpl(),
+ isPrivilegedDialer);
final int result = broadcaster.processIntent();
final boolean success = result == DisconnectCause.NOT_DISCONNECTED;
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 6dc2039..1a80cfa 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -208,6 +208,8 @@
statusBarNotifier,
audioServiceFactory
);
+ callAudioRouteStateMachine.initialize();
+
CallAudioRoutePeripheralAdapter callAudioRoutePeripheralAdapter =
new CallAudioRoutePeripheralAdapter(
callAudioRouteStateMachine,
@@ -782,8 +784,9 @@
* @param speakerphoneOn Whether or not to turn the speakerphone on once the call connects.
* @param videoState The desired video state for the outgoing call.
*/
- void placeOutgoingCall(Call call, Uri handle, GatewayInfo gatewayInfo, boolean speakerphoneOn,
- int videoState) {
+ @VisibleForTesting
+ public void placeOutgoingCall(Call call, Uri handle, GatewayInfo gatewayInfo,
+ boolean speakerphoneOn, int videoState) {
if (call == null) {
// don't do anything if the call no longer exists
Log.i(this, "Canceling unknown call.");
@@ -1304,7 +1307,8 @@
return getFirstCallWithState(OUTGOING_CALL_STATES);
}
- Call getFirstCallWithState(int... states) {
+ @VisibleForTesting
+ public Call getFirstCallWithState(int... states) {
return getFirstCallWithState(null, states);
}
@@ -1583,9 +1587,7 @@
* MMI codes which can be dialed when one or more calls are in progress.
* <P>
* Checks for numbers formatted similar to the MMI codes defined in:
- * {@link com.android.internal.telephony.GsmCdmaPhone#handleInCallMmiCommands(String)}
- * and
- * {@link com.android.internal.telephony.imsphone.ImsPhone#handleInCallMmiCommands(String)}
+ * {@link com.android.internal.telephony.Phone#handleInCallMmiCommands(String)}
*
* @param handle The URI to call.
* @return {@code True} if the URI represents a number which could be an in-call MMI code.
diff --git a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
index d9c6c33..a842911 100644
--- a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
@@ -31,9 +31,10 @@
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.telephony.DisconnectCause;
-import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
+import com.android.internal.annotations.VisibleForTesting;
+
// TODO: Needed for move to system service: import com.android.internal.R;
/**
@@ -52,7 +53,8 @@
* Calls to emergency numbers are still broadcast for informative purposes. The call is placed
* prior to sending ACTION_NEW_OUTGOING_CALL and cannot be redirected nor prevented.
*/
-class NewOutgoingCallIntentBroadcaster {
+@VisibleForTesting
+public class NewOutgoingCallIntentBroadcaster {
private static final String EXTRA_ACTUAL_NUMBER_TO_DIAL =
"android.telecom.extra.ACTUAL_NUMBER_TO_DIAL";
@@ -72,6 +74,7 @@
private final Call mCall;
private final Intent mIntent;
private final Context mContext;
+ private final PhoneNumberUtilsAdapter mPhoneNumberUtilsAdapter;
/*
* Whether or not the outgoing call intent originated from the default phone application. If
@@ -79,12 +82,15 @@
*/
private final boolean mIsDefaultOrSystemPhoneApp;
- NewOutgoingCallIntentBroadcaster(Context context, CallsManager callsManager, Call call,
- Intent intent, boolean isDefaultPhoneApp) {
+ @VisibleForTesting
+ public NewOutgoingCallIntentBroadcaster(Context context, CallsManager callsManager, Call call,
+ Intent intent, PhoneNumberUtilsAdapter phoneNumberUtilsAdapter,
+ boolean isDefaultPhoneApp) {
mContext = context;
mCallsManager = callsManager;
mCall = call;
mIntent = intent;
+ mPhoneNumberUtilsAdapter = phoneNumberUtilsAdapter;
mIsDefaultOrSystemPhoneApp = isDefaultPhoneApp;
}
@@ -92,7 +98,7 @@
* Processes the result of the outgoing call broadcast intent, and performs callbacks to
* the OutgoingCallIntentBroadcasterListener as necessary.
*/
- private class NewOutgoingCallBroadcastIntentReceiver extends BroadcastReceiver {
+ public class NewOutgoingCallBroadcastIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
@@ -111,7 +117,7 @@
if (resultNumber == null) {
Log.v(this, "Call cancelled (null number), returning...");
endEarly = true;
- } else if (PhoneNumberUtils.isPotentialLocalEmergencyNumber(
+ } else if (mPhoneNumberUtilsAdapter.isPotentialLocalEmergencyNumber(
mContext, resultNumber)) {
Log.w(this, "Cannot modify outgoing call to emergency number %s.",
resultNumber);
@@ -125,8 +131,10 @@
return;
}
- Uri resultHandleUri = Uri.fromParts(PhoneNumberUtils.isUriNumber(resultNumber) ?
- PhoneAccount.SCHEME_SIP : PhoneAccount.SCHEME_TEL, resultNumber, null);
+ Uri resultHandleUri = Uri.fromParts(
+ mPhoneNumberUtilsAdapter.isUriNumber(resultNumber) ?
+ PhoneAccount.SCHEME_SIP : PhoneAccount.SCHEME_TEL,
+ resultNumber, null);
Uri originalUri = mIntent.getData();
@@ -166,7 +174,8 @@
* @return {@link DisconnectCause#NOT_DISCONNECTED} if the call succeeded, and an appropriate
* {@link DisconnectCause} if the call did not, describing why it failed.
*/
- int processIntent() {
+ @VisibleForTesting
+ public int processIntent() {
Log.v(this, "Processing call intent in OutgoingCallIntentBroadcaster.");
Intent intent = mIntent;
@@ -198,16 +207,16 @@
}
}
- String number = PhoneNumberUtils.getNumberFromIntent(intent, mContext);
+ String number = mPhoneNumberUtilsAdapter.getNumberFromIntent(intent, mContext);
if (TextUtils.isEmpty(number)) {
Log.w(this, "Empty number obtained from the call intent.");
return DisconnectCause.NO_PHONE_NUMBER_SUPPLIED;
}
- boolean isUriNumber = PhoneNumberUtils.isUriNumber(number);
+ boolean isUriNumber = mPhoneNumberUtilsAdapter.isUriNumber(number);
if (!isUriNumber) {
- number = PhoneNumberUtils.convertKeypadLettersToDigits(number);
- number = PhoneNumberUtils.stripSeparators(number);
+ number = mPhoneNumberUtilsAdapter.convertKeypadLettersToDigits(number);
+ number = mPhoneNumberUtilsAdapter.stripSeparators(number);
}
final boolean isPotentialEmergencyNumber = isPotentialEmergencyNumber(number);
@@ -394,8 +403,8 @@
*/
private boolean isPotentialEmergencyNumber(String number) {
Log.v(this, "Checking restrictions for number : %s", Log.pii(number));
- return (number != null) && PhoneNumberUtils.isPotentialLocalEmergencyNumber(mContext,
- number);
+ return (number != null)
+ && mPhoneNumberUtilsAdapter.isPotentialLocalEmergencyNumber(mContext, number);
}
/**
diff --git a/src/com/android/server/telecom/PhoneNumberUtilsAdapter.java b/src/com/android/server/telecom/PhoneNumberUtilsAdapter.java
new file mode 100644
index 0000000..41284cb
--- /dev/null
+++ b/src/com/android/server/telecom/PhoneNumberUtilsAdapter.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2015 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.server.telecom;
+
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * Interface to avoid static calls to PhoneNumberUtils. Add methods to this interface as needed for
+ * refactoring.
+ */
+public interface PhoneNumberUtilsAdapter {
+ boolean isPotentialLocalEmergencyNumber(Context context, String number);
+ boolean isUriNumber(String number);
+ String getNumberFromIntent(Intent intent, Context context);
+ String convertKeypadLettersToDigits(String number);
+ String stripSeparators(String number);
+}
diff --git a/src/com/android/server/telecom/PhoneNumberUtilsAdapterImpl.java b/src/com/android/server/telecom/PhoneNumberUtilsAdapterImpl.java
new file mode 100644
index 0000000..640d814
--- /dev/null
+++ b/src/com/android/server/telecom/PhoneNumberUtilsAdapterImpl.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2015 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.server.telecom;
+
+import android.content.Context;
+import android.content.Intent;
+import android.telephony.PhoneNumberUtils;
+
+public class PhoneNumberUtilsAdapterImpl implements PhoneNumberUtilsAdapter {
+ @Override
+ public boolean isPotentialLocalEmergencyNumber(Context context, String number) {
+ return PhoneNumberUtils.isPotentialLocalEmergencyNumber(context, number);
+ }
+
+ @Override
+ public boolean isUriNumber(String number) {
+ return PhoneNumberUtils.isUriNumber(number);
+ }
+
+ @Override
+ public String getNumberFromIntent(Intent intent, Context context) {
+ return PhoneNumberUtils.getNumberFromIntent(intent, context);
+ }
+
+ @Override
+ public String convertKeypadLettersToDigits(String number) {
+ return PhoneNumberUtils.convertKeypadLettersToDigits(number);
+ }
+
+ @Override
+ public String stripSeparators(String number) {
+ return PhoneNumberUtils.stripSeparators(number);
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 10e2844..d6fffcc 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -81,8 +81,19 @@
public boolean isDefaultOrSystemDialer(Context context, String packageName) {
return DefaultDialerManager.isDefaultOrSystemDialer(context, packageName);
}
-
}
+
+ public interface SubscriptionManagerAdapter {
+ int getDefaultVoiceSubId();
+ }
+
+ static class SubscriptionManagerAdapterImpl implements SubscriptionManagerAdapter {
+ @Override
+ public int getDefaultVoiceSubId() {
+ return SubscriptionManager.getDefaultVoiceSubId();
+ }
+ }
+
private static final String PERMISSION_PROCESS_PHONE_ACCOUNT_REGISTRATION =
"android.permission.PROCESS_PHONE_ACCOUNT_REGISTRATION";
private static final int DEFAULT_VIDEO_STATE = -1;
@@ -489,7 +500,7 @@
accountHandle);
return null;
}
- int subId = SubscriptionManager.getDefaultVoiceSubId();
+ int subId = mSubscriptionManagerAdapter.getDefaultVoiceSubId();
if (accountHandle != null) {
subId = mPhoneAccountRegistrar
.getSubscriptionIdForPhoneAccount(accountHandle);
@@ -1159,6 +1170,7 @@
private final CallIntentProcessor.Adapter mCallIntentProcessorAdapter;
private final UserCallIntentProcessorFactory mUserCallIntentProcessorFactory;
private final DefaultDialerManagerAdapter mDefaultDialerManagerAdapter;
+ private final SubscriptionManagerAdapter mSubscriptionManagerAdapter;
private final TelecomSystem.SyncRoot mLock;
public TelecomServiceImpl(
@@ -1168,6 +1180,7 @@
CallIntentProcessor.Adapter callIntentProcessorAdapter,
UserCallIntentProcessorFactory userCallIntentProcessorFactory,
DefaultDialerManagerAdapter defaultDialerManagerAdapter,
+ SubscriptionManagerAdapter subscriptionManagerAdapter,
TelecomSystem.SyncRoot lock) {
mContext = context;
mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
@@ -1181,6 +1194,7 @@
mUserCallIntentProcessorFactory = userCallIntentProcessorFactory;
mDefaultDialerManagerAdapter = defaultDialerManagerAdapter;
mCallIntentProcessorAdapter = callIntentProcessorAdapter;
+ mSubscriptionManagerAdapter = subscriptionManagerAdapter;
}
public ITelecomService.Stub getBinder() {
diff --git a/src/com/android/server/telecom/TelecomSystem.java b/src/com/android/server/telecom/TelecomSystem.java
index d28a9d7..9e253ff 100644
--- a/src/com/android/server/telecom/TelecomSystem.java
+++ b/src/com/android/server/telecom/TelecomSystem.java
@@ -170,6 +170,7 @@
}
},
new TelecomServiceImpl.DefaultDialerManagerAdapterImpl(),
+ new TelecomServiceImpl.SubscriptionManagerAdapterImpl(),
mLock);
}
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
index b12ef8d..e91a45b 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
@@ -38,9 +38,11 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.same;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
@@ -55,6 +57,19 @@
private static final int ON = 1;
private static final int OFF = 2;
+ private class StateMachineWaiter {
+ private boolean mAreStateMachineActionsComplete = false;
+
+ public void setStateMachineActionsComplete() {
+ mAreStateMachineActionsComplete = true;
+ super.notify();
+ }
+
+ public boolean areStateMachineActionsComplete() {
+ return mAreStateMachineActionsComplete;
+ }
+ }
+
private class TestParameters {
public String name;
public int initialRoute;
@@ -104,6 +119,7 @@
private CallAudioManager.AudioServiceFactory mAudioServiceFactory;
private static final int TEST_TIMEOUT = 500;
private AudioManager mockAudioManager;
+
@Override
public void setUp() throws Exception {
super.setUp();
@@ -133,7 +149,9 @@
} catch (Throwable e) {
String newMessage = "Failed at parameters: \n" + params.toString() + '\n'
+ e.getMessage();
- throw(new Throwable(newMessage, e));
+ Throwable t = new Throwable(newMessage, e);
+ t.setStackTrace(e.getStackTrace());
+ throw t;
}
}
}
@@ -146,7 +164,9 @@
} catch (Throwable e) {
String newMessage = "Failed at parameters: \n" + params.toString() + '\n'
+ e.getMessage();
- throw(new Throwable(newMessage, e));
+ Throwable t = new Throwable(newMessage, e);
+ t.setStackTrace(e.getStackTrace());
+ throw t;
}
}
}
@@ -184,7 +204,8 @@
verifyNewSystemCallAudioState(initState, expectedMiddleState);
resetMocks();
- stateMachine.sendMessageWithSessionInfo(CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET);
+ stateMachine.sendMessageWithSessionInfo(
+ CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET);
verifyNewSystemCallAudioState(expectedMiddleState, initState);
}
@@ -417,7 +438,7 @@
params.add(new TestParameters(
"Disconnect bluetooth during earpiece", // name
CallAudioState.ROUTE_EARPIECE, // initialRoute
- CallAudioState.ROUTE_EARPIECE| CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
NONE, // speakerInteraction
NONE, // bluetoothInteraction
CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
@@ -516,11 +537,11 @@
return params;
}
- private void runParametrizedTestCaseWithFocus(TestParameters params) {
+ private void runParametrizedTestCaseWithFocus(final TestParameters params) throws Throwable {
resetMocks();
// Construct a fresh state machine on every case
- CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
+ final CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
mContext,
mockCallsManager,
mockBluetoothManager,
@@ -538,7 +559,7 @@
params.initialRoute == CallAudioState.ROUTE_SPEAKER);
// Set the initial CallAudioState object
- CallAudioState initState = new CallAudioState(false,
+ final CallAudioState initState = new CallAudioState(false,
params.initialRoute, (params.availableRoutes | CallAudioState.ROUTE_SPEAKER));
stateMachine.initialize(initState);
// Make the state machine have focus so that we actually do something
@@ -546,19 +567,24 @@
CallAudioRouteStateMachine.HAS_FOCUS);
stateMachine.sendMessageWithSessionInfo(params.action);
+ waitForStateMachineActionCompletion(stateMachine);
+
+ stateMachine.quitStateMachine();
+
// Verify interactions with the speakerphone and bluetooth systems
- switch(params.bluetoothInteraction) {
+ switch (params.bluetoothInteraction) {
case NONE:
verify(mockBluetoothManager, never()).disconnectBluetoothAudio();
verify(mockBluetoothManager, never()).connectBluetoothAudio();
break;
case ON:
- verify(mockBluetoothManager, timeout(TEST_TIMEOUT)).connectBluetoothAudio();
+ verify(mockBluetoothManager).connectBluetoothAudio();
+
verify(mockBluetoothManager, never()).disconnectBluetoothAudio();
break;
case OFF:
verify(mockBluetoothManager, never()).connectBluetoothAudio();
- verify(mockBluetoothManager, timeout(TEST_TIMEOUT)).disconnectBluetoothAudio();
+ verify(mockBluetoothManager).disconnectBluetoothAudio();
}
switch (params.speakerInteraction) {
@@ -567,8 +593,7 @@
break;
case ON: // fall through
case OFF:
- verify(mockAudioManager, timeout(TEST_TIMEOUT)).setSpeakerphoneOn(
- params.speakerInteraction == ON);
+ verify(mockAudioManager).setSpeakerphoneOn(params.speakerInteraction == ON);
}
// Verify the end state
@@ -577,11 +602,11 @@
verifyNewSystemCallAudioState(initState, expectedState);
}
- private void runParametrizedTestCaseWithoutFocus(TestParameters params) {
+ private void runParametrizedTestCaseWithoutFocus(final TestParameters params) throws Throwable {
resetMocks();
// Construct a fresh state machine on every case
- CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
+ final CallAudioRouteStateMachine stateMachine = new CallAudioRouteStateMachine(
mContext,
mockCallsManager,
mockBluetoothManager,
@@ -602,14 +627,13 @@
stateMachine.initialize(initState);
// Omit the focus-getting statement
stateMachine.sendMessageWithSessionInfo(params.action);
- try {
- Thread.sleep(100L);
- } catch (InterruptedException e) {
- // Just a pause to make sure the state machine handler thread has a chance to update
- // its state. Do nothing.
- }
- // Verify that no substantive interactions have taken place with the rest of the system
+ waitForStateMachineActionCompletion(stateMachine);
+
+ stateMachine.quitStateMachine();
+
+ // Verify that no substantive interactions have taken place with the
+ // rest of the system
verify(mockBluetoothManager, never()).disconnectBluetoothAudio();
verify(mockBluetoothManager, never()).connectBluetoothAudio();
verify(mockAudioManager, never()).setSpeakerphoneOn(any(Boolean.class));
@@ -624,6 +648,24 @@
assertEquals(expectedState, stateMachine.getCurrentCallAudioState());
}
+ private void waitForStateMachineActionCompletion(CallAudioRouteStateMachine stateMachine) {
+ final CountDownLatch lock = new CountDownLatch(1);
+ Runnable actionComplete = new Runnable() {
+ @Override
+ public void run() {
+ lock.countDown();
+ }
+ };
+ stateMachine.sendMessage(CallAudioRouteStateMachine.RUN_RUNNABLE, actionComplete);
+ while (lock.getCount() > 0) {
+ try {
+ lock.await();
+ } catch (InterruptedException e) {
+ // do nothing
+ }
+ }
+ }
+
private void verifyNewSystemCallAudioState(CallAudioState expectedOldState,
CallAudioState expectedNewState) {
ArgumentCaptor<CallAudioState> oldStateCaptor = ArgumentCaptor.forClass(
diff --git a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
index d16f86b..b6ce48a 100644
--- a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
+++ b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
@@ -283,10 +283,11 @@
// Don't bother enforcing anything in mock.
}
- /**
- * Used to work around a Mockito/ART bug. If you remove any of these, tests will fail.
- */
- };
+ @Override
+ public void startActivityAsUser(Intent intent, UserHandle userHandle) {
+ // For capturing
+ }
+ }
public class FakeAudioManager extends AudioManager {
diff --git a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
new file mode 100644
index 0000000..462593b
--- /dev/null
+++ b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
@@ -0,0 +1,401 @@
+/*
+ * Copyright (C) 2015 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.server.telecom.tests;
+
+import android.Manifest;
+import android.app.Activity;
+import android.app.AppOpsManager;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.telecom.GatewayInfo;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
+import android.telephony.DisconnectCause;
+
+import com.android.server.telecom.Call;
+import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.NewOutgoingCallIntentBroadcaster;
+import com.android.server.telecom.PhoneNumberUtilsAdapter;
+import com.android.server.telecom.PhoneNumberUtilsAdapterImpl;
+
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isNotNull;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+public class NewOutgoingCallIntentBroadcasterTest extends TelecomTestCase {
+ private static class ReceiverIntentPair {
+ public BroadcastReceiver receiver;
+ public Intent intent;
+
+ public ReceiverIntentPair(BroadcastReceiver receiver, Intent intent) {
+ this.receiver = receiver;
+ this.intent = intent;
+ }
+ }
+
+ @Mock private CallsManager mCallsManager;
+ @Mock private Call mCall;
+
+ private PhoneNumberUtilsAdapter mPhoneNumberUtilsAdapterSpy;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ mContext = mComponentContextFixture.getTestDouble().getApplicationContext();
+ mPhoneNumberUtilsAdapterSpy = spy(new PhoneNumberUtilsAdapterImpl());
+ }
+
+ public void testNullHandle() {
+ Intent intent = new Intent(Intent.ACTION_CALL, null);
+ int result = processIntent(intent, true);
+ assertEquals(DisconnectCause.INVALID_NUMBER, result);
+ verifyNoBroadcastSent();
+ verifyNoCallPlaced();
+ }
+
+ public void testVoicemailCall() {
+ String voicemailNumber = "voicemail:18005551234";
+ Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(voicemailNumber));
+ intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, true);
+
+ int result = processIntent(intent, true);
+
+ assertEquals(DisconnectCause.NOT_DISCONNECTED, result);
+ verify(mCallsManager).placeOutgoingCall(eq(mCall), eq(Uri.parse(voicemailNumber)),
+ any(GatewayInfo.class), eq(true), eq(VideoProfile.STATE_AUDIO_ONLY));
+ }
+
+ public void testVoicemailCallWithBadAction() {
+ badCallActionHelper(Uri.parse("voicemail:18005551234"), DisconnectCause.OUTGOING_CANCELED);
+ }
+
+ public void testTelCallWithBadCallAction() {
+ badCallActionHelper(Uri.parse("tel:6505551234"), DisconnectCause.INVALID_NUMBER);
+ }
+
+ public void testSipCallWithBadCallAction() {
+ badCallActionHelper(Uri.parse("sip:testuser@testsite.com"), DisconnectCause.INVALID_NUMBER);
+ }
+
+ private void badCallActionHelper(Uri handle, int expectedCode) {
+ Intent intent = new Intent(Intent.ACTION_ALARM_CHANGED, handle);
+
+ int result = processIntent(intent, true);
+
+ assertEquals(expectedCode, result);
+ verifyNoBroadcastSent();
+ verifyNoCallPlaced();
+ }
+
+ public void testNoNumberSupplied() {
+ Uri handle = Uri.parse("tel:");
+ Intent intent = new Intent(Intent.ACTION_CALL, handle);
+
+ int result = processIntent(intent, true);
+
+ assertEquals(DisconnectCause.NO_PHONE_NUMBER_SUPPLIED, result);
+ verifyNoBroadcastSent();
+ verifyNoCallPlaced();
+ }
+
+
+ public void testEmergencyCallWithNonDefaultDialer() {
+ Uri handle = Uri.parse("tel:6505551911");
+ doReturn(true).when(mPhoneNumberUtilsAdapterSpy).isPotentialLocalEmergencyNumber(
+ any(Context.class), eq(handle.getSchemeSpecificPart()));
+ Intent intent = new Intent(Intent.ACTION_CALL, handle);
+
+ String ui_package_string = "sample_string_1";
+ String dialer_default_class_string = "sample_string_2";
+ mComponentContextFixture.putResource(R.string.ui_default_package, ui_package_string);
+ mComponentContextFixture.putResource(R.string.dialer_default_class,
+ dialer_default_class_string);
+
+ int result = processIntent(intent, false);
+
+ assertEquals(DisconnectCause.OUTGOING_CANCELED, result);
+ verifyNoBroadcastSent();
+ verifyNoCallPlaced();
+
+ ArgumentCaptor<Intent> dialerIntentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mContext).startActivityAsUser(dialerIntentCaptor.capture(), any(UserHandle.class));
+ Intent dialerIntent = dialerIntentCaptor.getValue();
+ assertEquals(new ComponentName(ui_package_string, dialer_default_class_string),
+ dialerIntent.getComponent());
+ assertEquals(Intent.ACTION_DIAL, dialerIntent.getAction());
+ assertEquals(handle, dialerIntent.getData());
+ assertEquals(Intent.FLAG_ACTIVITY_NEW_TASK, dialerIntent.getFlags());
+ }
+
+ public void testActionCallEmergencyCall() {
+ Uri handle = Uri.parse("tel:6505551911");
+ Intent intent = buildIntent(handle, Intent.ACTION_CALL, null);
+ emergencyCallTestHelper(intent, null);
+ }
+
+ public void testActionEmergencyWithEmergencyNumber() {
+ Uri handle = Uri.parse("tel:6505551911");
+ Intent intent = buildIntent(handle, Intent.ACTION_CALL_EMERGENCY, null);
+ emergencyCallTestHelper(intent, null);
+ }
+
+ public void testActionPrivCallWithEmergencyNumber() {
+ Uri handle = Uri.parse("tel:6505551911");
+ Intent intent = buildIntent(handle, Intent.ACTION_CALL_PRIVILEGED, null);
+ emergencyCallTestHelper(intent, null);
+ }
+
+ public void testEmergencyCallWithGatewayExtras() {
+ Uri handle = Uri.parse("tel:6505551911");
+ Bundle gatewayExtras = new Bundle();
+ gatewayExtras.putString(NewOutgoingCallIntentBroadcaster.EXTRA_GATEWAY_PROVIDER_PACKAGE,
+ "sample1");
+ gatewayExtras.putString(NewOutgoingCallIntentBroadcaster.EXTRA_GATEWAY_URI, "sample2");
+
+ Intent intent = buildIntent(handle, Intent.ACTION_CALL, gatewayExtras);
+ emergencyCallTestHelper(intent, gatewayExtras);
+ }
+
+ public void testActionEmergencyWithNonEmergencyNumber() {
+ Uri handle = Uri.parse("tel:6505551911");
+ doReturn(false).when(mPhoneNumberUtilsAdapterSpy).isPotentialLocalEmergencyNumber(
+ any(Context.class), eq(handle.getSchemeSpecificPart()));
+ Intent intent = new Intent(Intent.ACTION_CALL_EMERGENCY, handle);
+ int result = processIntent(intent, true);
+
+ assertEquals(DisconnectCause.OUTGOING_CANCELED, result);
+ verifyNoCallPlaced();
+ verifyNoBroadcastSent();
+ }
+
+ private void emergencyCallTestHelper(Intent intent, Bundle expectedAdditionalExtras) {
+ Uri handle = intent.getData();
+ int videoState = VideoProfile.STATE_BIDIRECTIONAL;
+ boolean isSpeakerphoneOn = true;
+ doReturn(true).when(mPhoneNumberUtilsAdapterSpy).isPotentialLocalEmergencyNumber(
+ any(Context.class), eq(handle.getSchemeSpecificPart()));
+ intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, isSpeakerphoneOn);
+ intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, videoState);
+ int result = processIntent(intent, true);
+
+ assertEquals(DisconnectCause.NOT_DISCONNECTED, result);
+ verify(mCallsManager).placeOutgoingCall(eq(mCall), eq(handle), isNull(GatewayInfo.class),
+ eq(isSpeakerphoneOn), eq(videoState));
+
+ Bundle expectedExtras = createNumberExtras(handle.getSchemeSpecificPart());
+ if (expectedAdditionalExtras != null) {
+ expectedExtras.putAll(expectedAdditionalExtras);
+ }
+ BroadcastReceiver receiver = verifyBroadcastSent(handle.getSchemeSpecificPart(),
+ expectedExtras).receiver;
+ assertNull(receiver);
+ }
+
+ public void testUnmodifiedRegularCall() {
+ Uri handle = Uri.parse("tel:6505551234");
+ Intent callIntent = buildIntent(handle, Intent.ACTION_CALL, null);
+ ReceiverIntentPair result = regularCallTestHelper(callIntent, null);
+
+ result.receiver.setResultData(
+ result.intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
+
+ result.receiver.onReceive(mContext, result.intent);
+
+ verify(mCallsManager).placeOutgoingCall(eq(mCall), eq(handle), isNull(GatewayInfo.class),
+ eq(true), eq(VideoProfile.STATE_BIDIRECTIONAL));
+ }
+
+ public void testUnmodifiedSipCall() {
+ Uri handle = Uri.parse("sip:test@test.com");
+ Intent callIntent = buildIntent(handle, Intent.ACTION_CALL, null);
+ ReceiverIntentPair result = regularCallTestHelper(callIntent, null);
+
+ result.receiver.setResultData(
+ result.intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
+
+ result.receiver.onReceive(mContext, result.intent);
+
+ Uri encHandle = Uri.fromParts(handle.getScheme(),
+ handle.getSchemeSpecificPart(), null);
+ verify(mCallsManager).placeOutgoingCall(eq(mCall), eq(encHandle), isNull(GatewayInfo.class),
+ eq(true), eq(VideoProfile.STATE_BIDIRECTIONAL));
+ }
+
+ public void testCallWithGatewayInfo() {
+ Uri handle = Uri.parse("tel:6505551234");
+ Intent callIntent = buildIntent(handle, Intent.ACTION_CALL, null);
+
+ callIntent.putExtra(NewOutgoingCallIntentBroadcaster
+ .EXTRA_GATEWAY_PROVIDER_PACKAGE, "sample1");
+ callIntent.putExtra(NewOutgoingCallIntentBroadcaster.EXTRA_GATEWAY_URI, "sample2");
+ ReceiverIntentPair result = regularCallTestHelper(callIntent, callIntent.getExtras());
+
+ result.receiver.setResultData(
+ result.intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
+
+ result.receiver.onReceive(mContext, result.intent);
+
+ verify(mCallsManager).placeOutgoingCall(eq(mCall), eq(handle),
+ isNotNull(GatewayInfo.class), eq(true), eq(VideoProfile.STATE_BIDIRECTIONAL));
+ }
+
+ public void testCallNumberModifiedToNull() {
+ Uri handle = Uri.parse("tel:6505551234");
+ Intent callIntent = buildIntent(handle, Intent.ACTION_CALL, null);
+ ReceiverIntentPair result = regularCallTestHelper(callIntent, null);
+
+ result.receiver.setResultData(null);
+
+ result.receiver.onReceive(mContext, result.intent);
+ verifyNoCallPlaced();
+ verify(mCall).disconnect(true);
+ }
+
+ public void testCallModifiedToEmergency() {
+ Uri handle = Uri.parse("tel:6505551234");
+ Intent callIntent = buildIntent(handle, Intent.ACTION_CALL, null);
+ ReceiverIntentPair result = regularCallTestHelper(callIntent, null);
+
+ String newEmergencyNumber = "1234567890";
+ result.receiver.setResultData(newEmergencyNumber);
+
+ doReturn(true).when(mPhoneNumberUtilsAdapterSpy).isPotentialLocalEmergencyNumber(
+ any(Context.class), eq(newEmergencyNumber));
+ result.receiver.onReceive(mContext, result.intent);
+ verify(mCall).disconnect(true);
+ }
+
+ private ReceiverIntentPair regularCallTestHelper(Intent intent,
+ Bundle expectedAdditionalExtras) {
+ Uri handle = intent.getData();
+ int videoState = VideoProfile.STATE_BIDIRECTIONAL;
+ boolean isSpeakerphoneOn = true;
+ intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, isSpeakerphoneOn);
+ intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, videoState);
+
+ int result = processIntent(intent, true);
+
+ assertEquals(DisconnectCause.NOT_DISCONNECTED, result);
+ Bundle expectedExtras = createNumberExtras(handle.getSchemeSpecificPart());
+ if (expectedAdditionalExtras != null) {
+ expectedExtras.putAll(expectedAdditionalExtras);
+ }
+ return verifyBroadcastSent(handle.getSchemeSpecificPart(), expectedExtras);
+ }
+
+ private Intent buildIntent(Uri handle, String action, Bundle extras) {
+ Intent i = new Intent(action, handle);
+ if (extras != null) {
+ i.putExtras(extras);
+ }
+ return i;
+ }
+
+ private int processIntent(Intent intent,
+ boolean isDefaultPhoneApp) {
+ NewOutgoingCallIntentBroadcaster b = new NewOutgoingCallIntentBroadcaster(
+ mContext, mCallsManager, mCall, intent, mPhoneNumberUtilsAdapterSpy,
+ isDefaultPhoneApp);
+ return b.processIntent();
+ }
+
+ private ReceiverIntentPair verifyBroadcastSent(String number, Bundle expectedExtras) {
+ ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+ ArgumentCaptor<BroadcastReceiver> receiverCaptor =
+ ArgumentCaptor.forClass(BroadcastReceiver.class);
+
+ verify(mContext).sendOrderedBroadcastAsUser(
+ intentCaptor.capture(),
+ eq(UserHandle.CURRENT),
+ eq(Manifest.permission.PROCESS_OUTGOING_CALLS),
+ eq(AppOpsManager.OP_PROCESS_OUTGOING_CALLS),
+ receiverCaptor.capture(),
+ isNull(Handler.class),
+ eq(Activity.RESULT_OK),
+ eq(number),
+ isNull(Bundle.class));
+
+ Intent capturedIntent = intentCaptor.getValue();
+ assertEquals(Intent.ACTION_NEW_OUTGOING_CALL, capturedIntent.getAction());
+ assertEquals(Intent.FLAG_RECEIVER_FOREGROUND, capturedIntent.getFlags());
+ assertTrue(areBundlesEqual(expectedExtras, capturedIntent.getExtras()));
+
+ BroadcastReceiver receiver = receiverCaptor.getValue();
+ if (receiver != null) {
+ receiver.setPendingResult(
+ new BroadcastReceiver.PendingResult(0, "", null, 0, true, false, null, 0, 0));
+ }
+
+ return new ReceiverIntentPair(receiver, capturedIntent);
+ }
+
+ private Bundle createNumberExtras(String number) {
+ Bundle b = new Bundle();
+ b.putString(Intent.EXTRA_PHONE_NUMBER, number);
+ return b;
+ }
+
+ private void verifyNoCallPlaced() {
+ verify(mCallsManager, never()).placeOutgoingCall(any(Call.class), any(Uri.class),
+ any(GatewayInfo.class), anyBoolean(), anyInt());
+ }
+
+ private void verifyNoBroadcastSent() {
+ verify(mContext, never()).sendOrderedBroadcastAsUser(
+ any(Intent.class),
+ any(UserHandle.class),
+ anyString(),
+ anyInt(),
+ any(BroadcastReceiver.class),
+ any(Handler.class),
+ anyInt(),
+ anyString(),
+ any(Bundle.class));
+ }
+
+ private static boolean areBundlesEqual(Bundle b1, Bundle b2) {
+ for (String key1 : b1.keySet()) {
+ if (!b1.get(key1).equals(b2.get(key1))) {
+ return false;
+ }
+ }
+
+ for (String key2 : b2.keySet()) {
+ if (!b2.get(key2).equals(b1.get(key2))) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
index faeb34f..d725b1d 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
@@ -36,9 +36,13 @@
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
+import android.telephony.TelephonyManager;
import com.android.internal.telecom.ITelecomService;
+import com.android.server.telecom.Call;
import com.android.server.telecom.CallIntentProcessor;
+import com.android.server.telecom.CallState;
import com.android.server.telecom.CallsManager;
import com.android.server.telecom.PhoneAccountRegistrar;
import com.android.server.telecom.TelecomServiceImpl;
@@ -62,9 +66,11 @@
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -107,6 +113,14 @@
}
}
+ public static class SubscriptionManagerAdapterFake
+ implements TelecomServiceImpl.SubscriptionManagerAdapter {
+ @Override
+ public int getDefaultVoiceSubId() {
+ return 0;
+ }
+ }
+
private static class AnyStringIn extends ArgumentMatcher<String> {
private Collection<String> mStrings;
public AnyStringIn(Collection<String> strings) {
@@ -130,6 +144,8 @@
spy(new CallIntentProcessAdapterFake());
private TelecomServiceImpl.DefaultDialerManagerAdapter mDefaultDialerManagerAdapter =
spy(new DefaultDialerManagerAdapterFake());
+ private TelecomServiceImpl.SubscriptionManagerAdapter mSubscriptionManagerAdapter =
+ spy(new SubscriptionManagerAdapterFake());
@Mock private UserCallIntentProcessor mUserCallIntentProcessor;
private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { };
@@ -168,6 +184,7 @@
}
},
mDefaultDialerManagerAdapter,
+ mSubscriptionManagerAdapter,
mLock);
mTSIBinder = telecomServiceImpl.getBinder();
mComponentContextFixture.setTelecomManager(mTelecomManager);
@@ -685,7 +702,7 @@
setDefaultDialerFailureTestHelper();
}
- public void testSetDefaultDialerNoWriteSecureSetingsPermission() throws Exception {
+ public void testSetDefaultDialerNoWriteSecureSettingsPermission() throws Exception {
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
eq(WRITE_SECURE_SETTINGS), anyString());
setDefaultDialerFailureTestHelper();
@@ -704,6 +721,128 @@
verify(mContext, never()).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class));
}
+ public void testIsVoicemailNumber() throws Exception {
+ String vmNumber = "010";
+ makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT);
+
+ doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT,
+ vmNumber);
+ assertTrue(mTSIBinder.isVoiceMailNumber(TEL_PA_HANDLE_CURRENT,
+ vmNumber, DEFAULT_DIALER_PACKAGE));
+ }
+
+ public void testIsVoicemailNumberAccountNotVisibleFailure() throws Exception {
+ String vmNumber = "010";
+
+ doReturn(true).when(mFakePhoneAccountRegistrar).isVoiceMailNumber(TEL_PA_HANDLE_CURRENT,
+ vmNumber);
+
+ when(mFakePhoneAccountRegistrar.getPhoneAccount(TEL_PA_HANDLE_CURRENT,
+ Binder.getCallingUserHandle())).thenReturn(null);
+ assertFalse(mTSIBinder
+ .isVoiceMailNumber(TEL_PA_HANDLE_CURRENT, vmNumber, DEFAULT_DIALER_PACKAGE));
+ }
+
+ public void testGetVoicemailNumberWithNullAccountHandle() throws Exception {
+ when(mFakePhoneAccountRegistrar.getPhoneAccount(isNull(PhoneAccountHandle.class),
+ eq(Binder.getCallingUserHandle())))
+ .thenReturn(makePhoneAccount(TEL_PA_HANDLE_CURRENT).build());
+ int subId = 58374;
+ String vmNumber = "543";
+ doReturn(subId).when(mSubscriptionManagerAdapter).getDefaultVoiceSubId();
+
+ TelephonyManager mockTelephonyManager =
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ when(mockTelephonyManager.getVoiceMailNumber(subId)).thenReturn(vmNumber);
+
+ assertEquals(vmNumber, mTSIBinder.getVoiceMailNumber(null, DEFAULT_DIALER_PACKAGE));
+ }
+
+ public void testGetVoicemailNumberWithNonNullAccountHandle() throws Exception {
+ when(mFakePhoneAccountRegistrar.getPhoneAccount(eq(TEL_PA_HANDLE_CURRENT),
+ eq(Binder.getCallingUserHandle())))
+ .thenReturn(makePhoneAccount(TEL_PA_HANDLE_CURRENT).build());
+ int subId = 58374;
+ String vmNumber = "543";
+
+ TelephonyManager mockTelephonyManager =
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ when(mockTelephonyManager.getVoiceMailNumber(subId)).thenReturn(vmNumber);
+ when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT))
+ .thenReturn(subId);
+
+ assertEquals(vmNumber,
+ mTSIBinder.getVoiceMailNumber(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE));
+ }
+
+ public void testGetLine1Number() throws Exception {
+ int subId = 58374;
+ String line1Number = "9482752023479";
+ makeAccountsVisibleToAllUsers(TEL_PA_HANDLE_CURRENT);
+ when(mFakePhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(TEL_PA_HANDLE_CURRENT))
+ .thenReturn(subId);
+ TelephonyManager mockTelephonyManager =
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ when(mockTelephonyManager.getLine1NumberForSubscriber(subId)).thenReturn(line1Number);
+
+ assertEquals(line1Number,
+ mTSIBinder.getLine1Number(TEL_PA_HANDLE_CURRENT, DEFAULT_DIALER_PACKAGE));
+ }
+
+ public void testEndCallWithRingingForegroundCall() throws Exception {
+ Call call = mock(Call.class);
+ when(call.getState()).thenReturn(CallState.RINGING);
+ when(mFakeCallsManager.getForegroundCall()).thenReturn(call);
+ assertTrue(mTSIBinder.endCall());
+ verify(call).reject(false, null);
+ }
+
+ public void testEndCallWithNonRingingForegroundCall() throws Exception {
+ Call call = mock(Call.class);
+ when(call.getState()).thenReturn(CallState.ACTIVE);
+ when(mFakeCallsManager.getForegroundCall()).thenReturn(call);
+ assertTrue(mTSIBinder.endCall());
+ verify(call).disconnect();
+ }
+
+ public void testEndCallWithNoForegroundCall() throws Exception {
+ Call call = mock(Call.class);
+ when(call.getState()).thenReturn(CallState.ACTIVE);
+ when(mFakeCallsManager.getFirstCallWithState(anyInt(), anyInt(), anyInt(), anyInt()))
+ .thenReturn(call);
+ assertTrue(mTSIBinder.endCall());
+ verify(call).disconnect();
+ }
+
+ public void testEndCallWithNoCalls() throws Exception {
+ assertFalse(mTSIBinder.endCall());
+ }
+
+ public void testAcceptRingingCall() throws Exception {
+ Call call = mock(Call.class);
+ when(mFakeCallsManager.getFirstCallWithState(any(int[].class)))
+ .thenReturn(call);
+ // Not intended to be a real video state. Here to ensure that the call will be answered
+ // with whatever video state it's currently in.
+ int fakeVideoState = 29578215;
+ when(call.getVideoState()).thenReturn(fakeVideoState);
+ mTSIBinder.acceptRingingCall();
+ verify(call).answer(fakeVideoState);
+ }
+
+ public void testAcceptRingingCallWithValidVideoState() throws Exception {
+ Call call = mock(Call.class);
+ when(mFakeCallsManager.getFirstCallWithState(any(int[].class)))
+ .thenReturn(call);
+ // Not intended to be a real video state. Here to ensure that the call will be answered
+ // with the video state passed in to acceptRingingCallWithVideoState
+ int fakeVideoState = 29578215;
+ int realVideoState = VideoProfile.STATE_RX_ENABLED | VideoProfile.STATE_TX_ENABLED;
+ when(call.getVideoState()).thenReturn(fakeVideoState);
+ mTSIBinder.acceptRingingCallWithVideoState(realVideoState);
+ verify(call).answer(realVideoState);
+ }
+
/**
* Register phone accounts for the supplied PhoneAccountHandles to make them
* visible to all users (via the isVisibleToCaller method in TelecomServiceImpl.
@@ -716,6 +855,9 @@
when(mFakePhoneAccountRegistrar
.getPhoneAccount(eq(ph), any(UserHandle.class), anyBoolean()))
.thenReturn(makeMultiUserPhoneAccount(ph).build());
+ when(mFakePhoneAccountRegistrar
+ .getPhoneAccount(eq(ph), any(UserHandle.class)))
+ .thenReturn(makeMultiUserPhoneAccount(ph).build());
}
}