Merge "Send CALL intent directly to Telecom CallIntentProcessor." into pi-dev
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 80754b8..b3f8d1e 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"به دلیل تماسی در برنامه دیگر، نمیتوان تماسی برقرار کرد."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"تماسهای ورودی"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"تماسهای بیپاسخ"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"مسدود کردن تماس"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"اگر این تماس را برقرار کنید، تماس <xliff:g id="OTHER_APP">%1$s</xliff:g> شما قطع میشود."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"مسدود کردن تماس"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"شمارههایی که در «مخاطبین» نیستند"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"مسدود کردن شمارههایی که در «مخاطبین» شما نیستند"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"خصوصی"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"مسدود کردن تماسگیرندگانی که شمارهشان را افشا نمیکنند"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"تلفن عمومی"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"مسدود کردن تماسها از تلفنهای عمومی"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"ناشناس"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"مسدودن تماسهای تماسگیرندگان ناشناس"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"مسدود کردن تماس"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"مسدود کردن تماس غیرفعال شد"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"تماس اضطراری برقرار شد"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"مسدود کردن تماس غیرفعال شده است تا پاسخدهندگان اضطراری بتوانند با شما تماس بگیرند."</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d65e584..73cb390 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Puhelua ei voi soittaa, koska toisessa sovelluksessa on puhelu käynnissä."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Saapuvat puhelut"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Vastaamattomat puhelut"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Puhelujen esto"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Tämän puhelun soittaminen päättää puhelun sovelluksessa <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Puhelujen esto"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numerot eivät ole yhteystiedoissa"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Toiminto estää numerot, jotka eivät ole yhteystiedoissasi"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Yksityinen"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Estä soittajat, jotka ovat estäneet oman numeronsa näkymisen"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Yleisöpuhelin"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Estä yleisöpuhelimista soitetut puhelut"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Tuntematon"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Estä tuntemattomien soittajien puhelut"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Puhelujen esto"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Puhelujen esto poistettu käytöstä"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Hätäpuhelu soitettu"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Puhelujen esto on poistettu käytöstä, jotta pelastusviranomaiset voivat soittaa puhelimeesi."</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 6889507..1b46287 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Poziv se ne može uspostaviti zbog poziva u drugoj aplikaciji."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Dolazni pozivi"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Propušteni pozivi"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blokiranje poziva"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Upućivanjem ovog poziva prekinut ćete poziv u aplikaciji <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blokiranje poziva"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Brojevi koji nisu u kontaktima"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Blokirajte brojeve koje nemate u kontaktima"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Privatno"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokirajte pozivatelje koji ne žele otkriti svoj broj"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telefonska govornica"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokirajte pozive s telefonskih govornica"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Nepoznato"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokirajte pozive nepoznatih pozivatelja"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Blokiranje poziva"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Blokiranje poziva je onemogućeno"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Hitni je poziv upućen"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Blokiranje poziva onemogućeno je da bi vas mogli kontaktirati djelatnici hitnih službi."</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 743aa5a..c41f657 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Ekki er hægt að hringja sökum símtals í öðru forriti."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Móttekin símtöl"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Ósvöruð símtöl"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Lokað fyrir símtöl"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ef þú hringir mun þessu símtali í <xliff:g id="OTHER_APP">%1$s</xliff:g> ljúka."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Lokað fyrir símtöl"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Númer sem eru ekki í tengiliðum"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Loka fyrir númer sem eru ekki á tengiliðalista"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Lokað"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Loka á hringjendur sem birta ekki símanúmer"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Almenningssími"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Loka fyrir símtöl úr almenningssímum"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Óþekkt"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Loka fyrir símtöl frá óþekktum hringjendum"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Lokað fyrir símtöl"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Ekki er lokað fyrir símtöl"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Neyðarsímtal var hringt"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Slökkt hefur verið á „Lokað fyrir símtöl“ svo neyðarþjónustuaðilar geti haft samband við þig."</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 45f125c..4891114 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Negalima skambinti dėl skambučio kitoje programoje."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Gaunamieji skambučiai"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Praleisti skambučiai"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Skambučių blokavimas"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Atliekant šį skambutį bus užbaigtas „<xliff:g id="OTHER_APP">%1$s</xliff:g>“ skambutis."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Skambučių blokavimas"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numerių nėra Kontaktuose"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Blokuoti Kontaktuose nepateiktus numerius"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Privatus"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokuoti skambintojus, neatskleidžiančius savo numerių"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Taksofonas"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokuoti skambučius iš taksofonų"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Nežinomas"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokuoti skambučius nuo nenustatytų skambintojų"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Skambučių blokavimas"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Skambučių blokavimas išjungtas"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Atliktas skambutis pagalbos numeriu"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Skambučių blokavimas išjungtas, kad pagalbos numeriu atsiliepusiems žmonėms būtų leidžiama su jumis susisiekti."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index cd5b1cd..6e63c1e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Kan ikke ringe ut på grunn av en samtale i en annen app."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Innkommende anrop"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Tapte anrop"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Anropsblokkering"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Samtalen din i <xliff:g id="OTHER_APP">%1$s</xliff:g> avsluttes hvis du foretar dette anropet."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Anropsblokkering"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numre som ikke står i Kontakter"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Blokkér numre som ikke står i kontaktene mine"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Privat"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokkér oppringere som ikke viser telefonnummeret sitt"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telefonkiosk"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokkér anrop fra telefonkiosker"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Ukjent"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokkér anrop fra oppringere som ikke er identifisert"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Anropsblokkering"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Anropsblokkering er slått av"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Nødanrop utført"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Anropsblokkering er slått av for å gjøre det mulig for nødtjenester å kontakte deg."</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 324b5fb..c23cbb7 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Oproep kan niet worden gestart vanwege een oproep in een andere app."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Inkomende oproepen"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Gemiste oproepen"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Oproepen blokkeren"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Als je deze oproep start, wordt je <xliff:g id="OTHER_APP">%1$s</xliff:g>-oproep beëindigd."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Oproepen blokkeren"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nummers die niet op je contactenlijst staan"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Blokkeer nummers die niet op je contactenlijst staan"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Privé"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Bellers met een anoniem nummer blokkeren"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Betaaltelefoon"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Oproepen van betaaltelefoons blokkeren"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Onbekend"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Oproepen van onbekende bellers blokkeren"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Oproepen blokkeren"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Oproepen blokkeren uitgeschakeld"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Noodoproep geplaatst"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Oproepen blokkeren is uitgeschakeld zodat nooddiensten je kunnen bereiken."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 597e75e..e2afb4c 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Não é possível ligar com uma chamada em andamento em outro aplicativo."</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Chamadas recebidas"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Chamadas perdidas"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bloqueio de chamadas"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Se você ligar agora, sua chamada será encerrada no <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Bloqueio de chamadas"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Números que não estão nos contatos"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Bloquear os números que não estão nos seus contatos"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Particular"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Bloquear os autores das chamadas que não divulgam o número"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Orelhão"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Bloquear chamadas de orelhão"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Desconhecido"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Bloquear chamadas de autores não identificados"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Bloqueio de chamadas"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Bloqueio de chamadas desativado"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"A chamada de emergência foi feita"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"O bloqueio de chamadas foi desativado para permitir que a equipe de emergência entre em contato com você."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index d1a7a56..8b56d7b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -82,5 +82,19 @@
<string name="cant_call_due_to_ongoing_unknown_call" msgid="149091978697302211">"Вы не можете отправить новый вызов, пока не завершите текущий в другом приложении"</string>
<string name="notification_channel_incoming_call" msgid="3513761697082968084">"Входящие вызовы"</string>
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Пропущенные вызовы"</string>
+ <string name="notification_channel_call_blocking" msgid="2943358779746676070">"Блокировка вызовов"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Если вы начнете этот звонок, вызов в <xliff:g id="OTHER_APP">%1$s</xliff:g> будет завершен."</string>
+ <string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Блокировка вызовов"</string>
+ <string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Незнакомые номера"</string>
+ <string name="phone_settings_number_not_in_contact_summary_txt" msgid="9043147855140079119">"Блокировать номера, которых нет в ваших контактах"</string>
+ <string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Скрытые номера"</string>
+ <string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Блокировать вызовы со скрытых номеров"</string>
+ <string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Телефоны-автоматы"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Блокировать вызовы с телефонов-автоматов"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Неизвестные номера"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Блокировать вызовы с неопределяемых номеров"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Блокировка вызовов"</string>
+ <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Блокировка вызовов отключена"</string>
+ <string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Выполнен экстренный вызов"</string>
+ <string name="phone_strings_emergency_call_made_dialog_call_blocking_text_txt" msgid="4083285098613193052">"Блокировка вызовов отключена, чтобы у экстренных служб была возможность позвонить вам."</string>
</resources>
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 334667c..90ee652 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -1469,34 +1469,7 @@
// Hold or disconnect the active call and request call focus for the incoming call.
Call activeCall = (Call) mConnectionSvrFocusMgr.getCurrentFocusCall();
Log.d(this, "Incoming call = %s Ongoing call %s", call, activeCall);
- if (activeCall != null && activeCall != call) {
- // We purposely don't check if the active call CAN current hold, but rather we check
- // whether it CAN support hold. Consider this scenario:
- // Call A - Active (CAPABILITY_SUPPORT_HOLD, but not CAPABILITY_HOLD)
- // Call B - Held (CAPABILITY_SUPPORT_HOLD, but not CAPABILITY_HOLD)
- // Call C - Incoming call
- // In this scenario we are going to first disconnect the held call (Call B), which
- // will mean that the active call (Call A) will now support hold.
- if (supportsHold(activeCall)) {
- Call heldCall = getHeldCall();
- if (heldCall != null) {
- Log.i(this, "Disconnecting held call %s before holding active call.",
- heldCall);
- heldCall.disconnect();
- }
-
- Log.d(this, "Answer %s, hold %s", call, activeCall);
- activeCall.hold();
- } else {
- // This call does not support hold. If it is from a different connection
- // service, then disconnect it, otherwise allow the connection service to
- // figure out the right states.
- if (activeCall.getConnectionService() != call.getConnectionService()) {
- activeCall.disconnect("Can't hold when answering " + call.getId());
- }
- }
- }
-
+ holdActiveCallForNewCall(call);
mConnectionSvrFocusMgr.requestFocus(
call,
new RequestCallback(new ActionAnswerCall(call, videoState)));
@@ -1932,11 +1905,43 @@
maybeMoveToSpeakerPhone(call);
}
- void markCallAsActive(Call call) {
+ /**
+ * Returns true if the active call is held.
+ */
+ boolean holdActiveCallForNewCall(Call call) {
+ Call activeCall = (Call) mConnectionSvrFocusMgr.getCurrentFocusCall();
+ if (activeCall != null && activeCall != call) {
+ if (canHold(activeCall)) {
+ activeCall.hold();
+ return true;
+ } else if (supportsHold(call)) {
+ Call heldCall = getHeldCallByConnectionService(call.getConnectionService());
+ if (heldCall != null) {
+ heldCall.disconnect();
+ Log.i(this, "Disconnecting held call %s before holding active call.", heldCall);
+ }
+ activeCall.hold();
+ return true;
+ } else {
+ // This call does not support hold. If it is from a different connection
+ // service, then disconnect it, otherwise allow the connection service to
+ // figure out the right states.
+ if (activeCall.getConnectionService() != call.getConnectionService()) {
+ activeCall.disconnect();
+ }
+ }
+ }
+ return false;
+ }
+
+ @VisibleForTesting
+ public void markCallAsActive(Call call) {
if (call.isSelfManaged()) {
// backward compatibility, the self-managed connection service will set the call state
- // to active directly. We should request the call focus for self-managed call before
- // the state change
+ // to active directly. We should hold or disconnect the current active call based on the
+ // holdability, and request the call focus for the self-managed call before the state
+ // change.
+ holdActiveCallForNewCall(call);
mConnectionSvrFocusMgr.requestFocus(
call,
new RequestCallback(new ActionSetCallState(
@@ -2168,6 +2173,14 @@
return getFirstCallWithState(CallState.ON_HOLD);
}
+ public Call getHeldCallByConnectionService(ConnectionServiceWrapper connSvr) {
+ Optional<Call> heldCall = mCalls.stream()
+ .filter(call -> call.getConnectionService() == connSvr
+ && call.getState() == CallState.ON_HOLD)
+ .findFirst();
+ return heldCall.isPresent() ? heldCall.get() : null;
+ }
+
@VisibleForTesting
public int getNumHeldCalls() {
int count = 0;
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index 6bba7af..ed2f6b1 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -23,8 +23,6 @@
import static org.mockito.ArgumentMatchers.anyChar;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -421,6 +419,7 @@
// GIVEN a CallsManager with ongoing call, and this call can be held
Call ongoingCall = addSpyCall();
doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
when(mConnectionSvrFocusMgr.getCurrentFocusCall()).thenReturn(ongoingCall);
// and a held call
@@ -430,11 +429,11 @@
mCallsManager.unholdCall(heldCall);
// THEN the ongoing call is held, and the focus request for incoming call is sent
- verify(ongoingCall).hold();
+ verify(ongoingCall).hold(any());
verifyFocusRequestAndExecuteCallback(heldCall);
// and held call is unhold now
- verify(heldCall).unhold();
+ verify(heldCall).unhold(any());
}
@SmallTest
@@ -446,6 +445,7 @@
// GIVEN a CallsManager with ongoing call, and this call can not be held
Call ongoingCall = addSpyCallWithConnectionService(connSvr1);
doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
when(mConnectionSvrFocusMgr.getCurrentFocusCall()).thenReturn(ongoingCall);
// and a held call which has different ConnectionService
@@ -455,13 +455,14 @@
mCallsManager.unholdCall(heldCall);
// THEN the ongoing call is disconnected, and the focus request for incoming call is sent
- verify(ongoingCall).disconnect();
+ verify(ongoingCall).disconnect(any());
verifyFocusRequestAndExecuteCallback(heldCall);
// and held call is unhold now
- verify(heldCall).unhold();
+ verify(heldCall).unhold(any());
}
+ @SmallTest
@Test
public void testUnholdCallWhenOngoingCallCanNotBeHeldAndHasSameConnectionService() {
ConnectionServiceWrapper connSvr = Mockito.mock(ConnectionServiceWrapper.class);
@@ -469,6 +470,7 @@
// GIVEN a CallsManager with ongoing call, and this call can not be held
Call ongoingCall = addSpyCallWithConnectionService(connSvr);
doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
when(mConnectionSvrFocusMgr.getCurrentFocusCall()).thenReturn(ongoingCall);
// and a held call which has different ConnectionService
@@ -478,11 +480,11 @@
mCallsManager.unholdCall(heldCall);
// THEN the ongoing call is held
- verify(ongoingCall).hold();
+ verify(ongoingCall).hold(any());
verifyFocusRequestAndExecuteCallback(heldCall);
// and held call is unhold now
- verify(heldCall).unhold();
+ verify(heldCall).unhold(any());
}
@SmallTest
@@ -491,6 +493,7 @@
// GIVEN a CallsManager with ongoing call, and this call can be held
Call ongoingCall = addSpyCall();
doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
when(mConnectionSvrFocusMgr.getCurrentFocusCall()).thenReturn(ongoingCall);
// WHEN answer an incoming call
@@ -528,13 +531,14 @@
@SmallTest
@Test
- public void testANswerCallWhenOngoingHasDifferentConnectionService() {
+ public void testAnswerCallWhenOngoingHasDifferentConnectionService() {
ConnectionServiceWrapper connSvr1 = Mockito.mock(ConnectionServiceWrapper.class);
ConnectionServiceWrapper connSvr2 = Mockito.mock(ConnectionServiceWrapper.class);
// GIVEN a CallsManager with ongoing call, and this call can not be held
Call ongoingCall = addSpyCallWithConnectionService(connSvr1);
doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
when(mConnectionSvrFocusMgr.getCurrentFocusCall()).thenReturn(ongoingCall);
// WHEN answer an incoming call
@@ -551,6 +555,44 @@
@SmallTest
@Test
+ public void testAnswerCallWhenMultipleHeldCallsExisted() {
+ ConnectionServiceWrapper connSvr1 = Mockito.mock(ConnectionServiceWrapper.class);
+ ConnectionServiceWrapper connSvr2 = Mockito.mock(ConnectionServiceWrapper.class);
+
+ // Given an ongoing call and held call with the ConnectionService connSvr1. The
+ // ConnectionService connSvr1 can handle one held call
+ Call ongoingCall = addSpyCallWithConnectionService(connSvr1);
+ doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ Call heldCall = addSpyCallWithConnectionService(connSvr1);
+ doReturn(CallState.ON_HOLD).when(heldCall).getState();
+
+ // and other held call has difference ConnectionService
+ Call heldCall2 = addSpyCallWithConnectionService(connSvr2);
+ doReturn(CallState.ON_HOLD).when(heldCall2).getState();
+
+ // WHEN answer an incoming call which ConnectionService is connSvr1
+ Call incomingCall = addSpyCallWithConnectionService(connSvr1);
+ mCallsManager.answerCall(incomingCall, VideoProfile.STATE_AUDIO_ONLY);
+
+ // THEN the previous held call is disconnected
+ verify(heldCall).disconnect();
+
+ // and the ongoing call is held
+ verify(ongoingCall).hold();
+
+ // and the heldCall2 is not disconnected
+ verify(heldCall2, never()).disconnect();
+
+ // and the focus request is sent
+ verifyFocusRequestAndExecuteCallback(incomingCall);
+
+ // and the incoming call is answered
+ verify(incomingCall).answer(VideoProfile.STATE_AUDIO_ONLY);
+ }
+
+ @SmallTest
+ @Test
public void testAnswerCallWhenNoOngoingCallExisted() {
// GIVEN a CallsManager with no ongoing call.
@@ -565,6 +607,83 @@
verify(incomingCall).answer(VideoProfile.STATE_AUDIO_ONLY);
}
+ @SmallTest
+ @Test
+ public void testSetActiveCallWhenOngoingCallCanNotBeHeldAndFromDifferentConnectionService() {
+ ConnectionServiceWrapper connSvr1 = Mockito.mock(ConnectionServiceWrapper.class);
+ ConnectionServiceWrapper connSvr2 = Mockito.mock(ConnectionServiceWrapper.class);
+
+ // GIVEN a CallsManager with ongoing call, and this call can not be held
+ Call ongoingCall = addSpyCallWithConnectionService(connSvr1);
+ doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ doReturn(ongoingCall).when(mConnectionSvrFocusMgr).getCurrentFocusCall();
+
+ // and a new self-managed call which has different ConnectionService
+ Call newCall = addSpyCallWithConnectionService(connSvr2);
+ doReturn(true).when(newCall).isSelfManaged();
+
+ // WHEN active the new call
+ mCallsManager.markCallAsActive(newCall);
+
+ // THEN the ongoing call is disconnected, and the focus request for the new call is sent
+ verify(ongoingCall).disconnect();
+ verifyFocusRequestAndExecuteCallback(newCall);
+
+ // and the new call is active
+ assertEquals(CallState.ACTIVE, newCall.getState());
+ }
+
+ @SmallTest
+ @Test
+ public void testSetActiveCallWhenOngoingCallCanNotBeHeldAndHasSameConnectionService() {
+ ConnectionServiceWrapper connSvr = Mockito.mock(ConnectionServiceWrapper.class);
+
+ // GIVEN a CallsManager with ongoing call, and this call can not be held
+ Call ongoingCall = addSpyCallWithConnectionService(connSvr);
+ doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(false).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ when(mConnectionSvrFocusMgr.getCurrentFocusCall()).thenReturn(ongoingCall);
+
+ // and a new self-managed call which has the same ConnectionService
+ Call newCall = addSpyCallWithConnectionService(connSvr);
+ doReturn(true).when(newCall).isSelfManaged();
+
+ // WHEN active the new call
+ mCallsManager.markCallAsActive(newCall);
+
+ // THEN the ongoing call isn't disconnected
+ verify(ongoingCall, never()).disconnect();
+ verifyFocusRequestAndExecuteCallback(newCall);
+
+ // and the new call is active
+ assertEquals(CallState.ACTIVE, newCall.getState());
+ }
+
+ @SmallTest
+ @Test
+ public void testSetActiveCallWhenOngoingCallCanBeHeld() {
+ // GIVEN a CallsManager with ongoing call, and this call can be held
+ Call ongoingCall = addSpyCall();
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_HOLD);
+ doReturn(true).when(ongoingCall).can(Connection.CAPABILITY_SUPPORT_HOLD);
+ doReturn(ongoingCall).when(mConnectionSvrFocusMgr).getCurrentFocusCall();
+
+ // and a new self-managed call
+ Call newCall = addSpyCall();
+ doReturn(true).when(newCall).isSelfManaged();
+
+ // WHEN active the new call
+ mCallsManager.markCallAsActive(newCall);
+
+ // THEN the ongoing call is held
+ verify(ongoingCall).hold();
+ verifyFocusRequestAndExecuteCallback(newCall);
+
+ // and the new call is active
+ assertEquals(CallState.ACTIVE, newCall.getState());
+ }
+
private Call addSpyCallWithConnectionService(ConnectionServiceWrapper connSvr) {
Call call = addSpyCall();
doReturn(connSvr).when(call).getConnectionService();