Merge "User cannot reject a waiting call after a switch call fails"
diff --git a/Android.bp b/Android.bp
index a4cb2ca..50a41d0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,7 +1,6 @@
// Build the Telecom service.
android_app {
name: "Telecom",
- libs: ["telephony-common"],
srcs: [
"src/**/*.java",
"proto/**/*.proto",
@@ -53,7 +52,6 @@
"android.test.mock",
"android.test.base",
"android.test.runner",
- "telephony-common",
],
jni_libs: ["libdexmakerjvmtiagent"],
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 07ee6fa..3003aad 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -35,6 +35,7 @@
<uses-permission android:name="android.permission.BROADCAST_PHONE_ACCOUNT_REGISTRATION" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.HANDLE_CALL_INTENT" />
+ <uses-permission android:name="android.permission.HANDLE_CAR_MODE_CHANGES" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
diff --git a/TEST_MAPPING b/TEST_MAPPING
new file mode 100644
index 0000000..75feeb6
--- /dev/null
+++ b/TEST_MAPPING
@@ -0,0 +1,20 @@
+{
+ "presubmit": [
+ {
+ "name": "TelecomUnitTests",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
+ },
+ {
+ "name": "TeleServiceTests",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index a253efa..ad6bfec 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Gemiste oproepe"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Oproepblokkering"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"As jy hierdie oproep maak, sal dit jou <xliff:g id="OTHER_APP">%1$s</xliff:g>-oproep beëindig."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Kies hoe om hierdie oproep te maak"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Herlei oproep deur <xliff:g id="OTHER_APP">%1$s</xliff:g> te gebruik"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Bel deur my foonnommer te gebruik"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Laat <xliff:g id="OTHER_APP">%1$s</xliff:g> toe om \'n oproep te maak deur \'n ander nommer of rekening te gebruik."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Oproep kan nie deur <xliff:g id="OTHER_APP">%1$s</xliff:g> geplaas word nie. Probeer om \'n ander oproepherlei-toepassing te gebruik of die ontwikkelaar vir hulp te kontak."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Oproepblokkering"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nommers nie in Kontakte nie"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 711baed..70b5b0e 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ይህን ጥሪ እንዴት እንደሚያደርጉ ይምረጡ"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g>ን በመጠቀም አዘዋውር"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"የእኔን ስልክ ቁጥር በመጠቀም ደውል"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ሌላ ቁጥር ወይም መለያ በመጠቀም ጥሪ እንዲያደርግ ይፍቀዱ።"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"ጥሪ በ <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>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 293361e..a0025a1 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -56,7 +56,7 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"التحديد كتطبيق تلقائي"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"إلغاء"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"الأرقام المحظورة"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"لن تتلقّى أي مكالمات أو مراسلات نصية من الأرقام المحظورة."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"لن تتلقى أي مكالمات أو مراسلات نصية من الأرقام المحظورة."</string>
<string name="block_number" msgid="1101252256321306179">"إضافة رقم"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"هل تريد إلغاء حظر <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>؟"</string>
<string name="unblock_button" msgid="3078048901972674170">"إلغاء الحظر"</string>
@@ -68,7 +68,7 @@
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"تم إيقاف الحظر مؤقتًا"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"بعد الاتصال الهاتفي أو إرسال رسالة نصية إلى رقم طوارئ، يتم إيقاف تشغيل الحظر لضمان تمكن خدمات الطوارئ من الاتصال بك."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"إعادة تفعيل الآن"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"تم حظر <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> محظور"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"تم إلغاء حظر <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g>"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"غير قادر على حظر رقم الطوارئ."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"تم حظر <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> بالفعل."</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"اختيار كيفية إجراء هذه المكالمة"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"إعادة توجيه المكالمة باستخدام <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"الاتصال باستخدام رقم هاتفي"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"اسمح لتطبيق <xliff:g id="OTHER_APP">%1$s</xliff:g> بإجراء المكالمة باستخدام رقم آخر أو حساب مختلف."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"لا يمكن إجراء المكالمة بواسطة <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>
@@ -103,7 +101,7 @@
<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_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>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index d04115b..8c5ac87 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"এই কলটো কেনেকৈ কৰা হ’ব সেয়া বাছনি কৰক"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ব্যৱহাৰ কৰি কল ৰিডাইৰেক্ট কৰক"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"মোৰ ফ’ন নম্বৰ ব্যৱহাৰ কৰি কল কৰক"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"বেলেগ এটা নম্বৰ বা একাউণ্ট ব্যৱহাৰ কৰি <xliff:g id="OTHER_APP">%1$s</xliff:g>ক কল কৰিবলৈ অনুমতি দিয়ক।"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index f496ce8..f7a7edb 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Buraxılmış zənglər"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Zəngi Bloklama"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Bu zəngin yerləşdirilməsi <xliff:g id="OTHER_APP">%1$s</xliff:g> zəngini sonlandıracaq."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Bu zəngi necə etməyi seçin"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> istifadə edərək zəngi yönləndirin"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Telefon nömrəmdən istifadə edərək zəng edin"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Başqa nömrə və ya hesabdan istifadə etməklə zəng etmək üçün <xliff:g id="OTHER_APP">%1$s</xliff:g> tətbiqinə icazə verin."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ilə zəng etmək mümkün deyil. Başqa zəng yönləndirmə tətbiqindən istifadə edin və ya yardım üçün developerlə əlaqə saxlayın."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Zəngi Bloklama"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Kontaktda olmayan nömrələr"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index ea7c9d8..b9caec2 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -57,7 +57,7 @@
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Otkaži"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Blokirani brojevi"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"Nećete primati pozive ni SMS-ove sa blokiranih brojeva."</string>
- <string name="block_number" msgid="1101252256321306179">"Dodajte broj"</string>
+ <string name="block_number" msgid="1101252256321306179">"Dodaj broj"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Želite li da deblokirate <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Deblokiraj"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokirajte pozive i SMS-ove od"</string>
@@ -91,9 +91,7 @@
<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">"Ako uputite ovaj poziv, završićete <xliff:g id="OTHER_APP">%1$s</xliff:g> poziv."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Izaberite kako želite da uputite ovaj poziv"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Preusmeri poziv pomoću: <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Pozovi pomoću mog broja telefona"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Dozvolite da <xliff:g id="OTHER_APP">%1$s</xliff:g> uputi poziv pomoću drugog broja ili naloga."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ne može da uputi poziv. Probajte pomoću druge aplikacije za preusmeravanje poziva ili zatražite pomoć od programera."</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>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 0b9de4c..0263ffe 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -29,9 +29,9 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Выклік сцішаны."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Уключаная гучная сувязь."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Не магу гаварыць. У чым справа?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Я выклікаю цябе праз момант."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Я выклікаю цябе пазней."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Не магу адказаць. Пагаворым пазней?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Зараз перазваню."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Я патэлефаную пазней."</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Не магу гаварыць. Патэлефануеце пазней?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Хуткія адказы"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Рэдагаваць хуткія адказы"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Выберыце, праз які нумар зрабіць выклік"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Перанакіраваць выклік, выкарыстоўваючы нумар \"<xliff:g id="OTHER_APP">%1$s</xliff:g>\""</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Зрабіць выклік, выкарыстоўваючы мой нумар тэлефона"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Дазвольце праграме \"<xliff:g id="OTHER_APP">%1$s</xliff:g>\" зрабіць выклік, выкарыстоўваючы іншы нумар ці ўліковы запіс."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Не ўдалося зрабіць выклік праз праграму \"<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>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 6bc19cb..78d36a5 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -29,8 +29,8 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Обаждането бе спряно."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Високоговорителят бе активиран."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Сега не мога да говоря. Какво има?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ще се обадя веднага обратно."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ще се обадя по-късно."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ще ви се обадя веднага обратно."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ще ви се обадя по-късно."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Сега не мога да говоря. По-късно?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Бързи отговори"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Редакт. на бързи отговори"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Изберете как да се извърши обаждането"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Пренасочване на обаждането през <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Обаждане през телефонния ми номер"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Разрешаване на <xliff:g id="OTHER_APP">%1$s</xliff:g> да извърши обаждането с друг номер или профил."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Не може да се извърши от <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>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 50cf6d9..a5a3d2d 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -58,18 +58,18 @@
<string name="blocked_numbers" msgid="2751843139572970579">"ব্লক করা নম্বরগুলি"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"ব্লক করা নম্বরগুলি থেকে আপনি কল বা এসএমএস পাবেন না।"</string>
<string name="block_number" msgid="1101252256321306179">"একটি নম্বর যোগ করুন"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> আনব্লক করবেন?"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> অবরোধ মুক্ত করবেন?"</string>
<string name="unblock_button" msgid="3078048901972674170">"অবরোধ মুক্ত করুন"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"এর থেকে কল এবং এসএমএস ব্লক করুন"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"ফোন নম্বর"</string>
- <string name="block_button" msgid="8822290682524373357">"ব্লক করুন"</string>
+ <string name="block_button" msgid="8822290682524373357">"অবরোধ করুন"</string>
<string name="non_primary_user" msgid="5180129233352533459">"শুধুমাত্র ডিভাইসের মালিক এই অবরুদ্ধ নম্বরগুলিকে দেখতে এবং পরিচালনা করতে পারেন৷"</string>
<string name="delete_icon_description" msgid="8903995728252556724">"অবরোধ মুক্ত করুন"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"অবরুদ্ধ করা সাময়িকভাবে বন্ধ আছে"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"আপনি কোনো জরুরি নম্বরে ডায়াল করার বা এসএমএস পাঠানোর পরে, জরুরি পরিষেবাগুলি যাতে আপনাকে কল করতে পারে সেই বিষয়টি নিশ্চিত করতে অবরুদ্ধ করার ব্যবস্থাটিকে বন্ধ করা হয়৷"</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"এখনই পুনরায় সক্ষম করুন"</string>
<string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> অবরোধ করা হয়েছে"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> আনব্লক করা হয়েছে"</string>
+ <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> অবরোধ মুক্ত করা হয়েছে"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"জরুরি নম্বর অবরোধ করতে অক্ষম৷"</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ইতিমধ্যেই অবরোধ করা রয়েছে৷"</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"কল করার জন্য ব্যক্তিগত ডায়ালার ব্যবহার করা হচ্ছে"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"এই কলটি কীভাবে করবেন বেছে নিন"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ব্যবহার করে কল রিডাইরেক্ট করুন"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"আমার ফোন নম্বর দিয়ে কল করুন"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"অন্য কোনও নম্বর বা অ্যাকাউন্ট থেকে কল করার জন্য <xliff:g id="OTHER_APP">%1$s</xliff:g>-কে অনুমতি দিন।"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index dc5145f..b81567c 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -60,7 +60,7 @@
<string name="block_number" msgid="1101252256321306179">"Dodaj broj"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Deblokirati <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Deblokiraj"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokirajte pozive i SMS-ove od"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokiraj pozive i poruke od"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Broj telefona"</string>
<string name="block_button" msgid="8822290682524373357">"Blokiraj"</string>
<string name="non_primary_user" msgid="5180129233352533459">"Samo vlasnik uređaja može pregledati i upravljati blokiranim brojevima."</string>
@@ -91,9 +91,7 @@
<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ćivanje ovog poziva će prekinuti poziv: <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Odaberite kako želite uputiti ovaj poziv"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Preusmjeri poziv pomoću aplikacije <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Pozovi putem mobilnog telefona"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Dozvolite aplikaciji <xliff:g id="OTHER_APP">%1$s</xliff:g> uspostavljanje poziva putem drugog broja ili računa."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Nije moguće uspostaviti poziv putem aplikacije <xliff:g id="OTHER_APP">%1$s</xliff:g>. Isprobajte drugu aplikaciju za preusmjeravanje poziva ili kontaktirajte programera za pomoć."</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>
@@ -102,7 +100,7 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokirajte pozivaoce koji ne otkrivaju 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_txt" msgid="5836407031508172721">"Nepoznat"</string>
<string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokirajte pozive neidentificiranih pozivalaca"</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>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index d834a2e..c4ff4b1 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Trucades perdudes"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bloqueig de trucades"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"En fer aquesta trucada, finalitzarà la de l\'aplicació <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Tria com vols fer aquesta trucada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Desvia la trucada amb <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Truca amb el meu número de telèfon"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Permet que <xliff:g id="OTHER_APP">%1$s</xliff:g> faci la trucada amb un compte o un número diferent."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> no pot fer la trucada. Prova d\'utilitzar una altra aplicació de redirecció de trucades o bé contacta amb el desenvolupador per obtenir ajuda."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Bloqueig de trucades"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Números que no surten a Contactes"</string>
@@ -102,8 +100,8 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Bloqueja les trucades que tinguin el número ocult"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telèfons públics"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Bloqueja les trucades de telèfons públics"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Desconeguts"</string>
- <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Bloqueja les trucades de números no identificats"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Desconegudes"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Bloqueja les trucades de números desconeguts"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Bloqueig de trucades"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"El bloqueig de trucades s\'ha desactivat"</string>
<string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"S\'ha fet una trucada d\'emergència"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 2166c40..ece0925 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Zpráva"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Hovor ztlumen."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Reproduktor je zapnutý."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Teď nemůžu mluvit, o co jde?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Teď nemůžu telefonovat, o co jde?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Zavolám zpátky."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Zavolám později."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nemůžu telefonovat. Zavoláš později?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Nemůžu telefonovat. Zavoláte později?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Rychlé odpovědi"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Upravit rychlé odpovědi"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Zmeškané hovory"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blokování hovorů"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Uskutečněním tohoto hovoru ukončíte hovor <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Vyberte, jak chcete tento hovor provést"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Přesměrovat hovor přes aplikaci <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Zavolat prostřednictvím mého telefonního čísla"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Povolte aplikaci <xliff:g id="OTHER_APP">%1$s</xliff:g> provést hovor přes jiné číslo nebo účet."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Aplikace <xliff:g id="OTHER_APP">%1$s</xliff:g> nemůže hovor provést. Zkuste jinou aplikaci na přesměrování hovorů nebo požádejte o pomoc vývojáře."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blokování hovorů"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Čísla, která nejsou v kontaktech"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 98f9d43..9cedcdd 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -50,9 +50,9 @@
<string name="change_default_dialer_dialog_affirmative" msgid="8606546663509166276">"Indstil standard"</string>
<string name="change_default_dialer_dialog_negative" msgid="9078144617060173845">"Annuller"</string>
<string name="change_default_dialer_warning_message" msgid="1417671460801684999">"<xliff:g id="NEW_APP">%s</xliff:g> kan foretage og administrere alle aspekter af opkald. Du bør kun indstille en app til din standardapp til opkald, hvis du har tillid til den."</string>
- <string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"Vil du gøre <xliff:g id="NEW_APP">%s</xliff:g> til din standardapp til screening?"</string>
- <string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="5128397581530600941">"<xliff:g id="OLD_APP">%s</xliff:g> kan ikke længere screene opkald."</string>
- <string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> kan se oplysninger om opringere, når de ikke er i dine kontakter, og kan blokere disse opkald. Du bør kun angive en app som din standardapp til screening, hvis du har tillid til den."</string>
+ <string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"Vil du gøre <xliff:g id="NEW_APP">%s</xliff:g> til din standardapp til opkaldsvalg?"</string>
+ <string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="5128397581530600941">"<xliff:g id="OLD_APP">%s</xliff:g> kan ikke længere vælge opkald."</string>
+ <string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> kan se oplysninger om opringere, når de ikke er i dine kontakter, og kan blokere disse opkald. Du bør kun angive en app som din standardapp til opkaldsvalg, hvis du har tillid til den."</string>
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Angiv som standard"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Annuller"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Blokerede telefonnumre"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Ubesvarede opkald"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Opkaldsblokering"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Hvis du foretager dette opkald, afsluttes dit opkald i <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Vælg, hvordan du vil foretage dette opkald"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Omdiriger opkaldet ved hjælp af <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Ring via mit telefonnummer"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Tillad, at <xliff:g id="OTHER_APP">%1$s</xliff:g> kan foretage opkald ved at bruge et andet nummer eller en anden konto."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> kan ikke foretage opkaldet. Prøv at bruge en anden app til omdirigering af opkald eller kontakte udvikleren for at få hjælp."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Opkaldsblokering"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numre er ikke i Kontakter"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index c06314c..394764c 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -31,7 +31,7 @@
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Kann jetzt nicht sprechen. Was gibt\'s?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ich rufe gleich zurück."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ich rufe später zurück."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kann jetzt nicht. Später nochmal?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Kann jetzt nicht sprechen. Später?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Kurzantworten"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Kurzantworten bearbeiten"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Entgangene Anrufe"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Anrufblockierung"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Durch diesen Anruf wird der Anruf in <xliff:g id="OTHER_APP">%1$s</xliff:g> beendet."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Wie möchtest du anrufen?"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Mit <xliff:g id="OTHER_APP">%1$s</xliff:g> weiterleiten"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Mit meiner Telefonnummer anrufen"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Erlaube <xliff:g id="OTHER_APP">%1$s</xliff:g>, den Anruf über eine andere Nummer oder ein anderes Konto zu tätigen."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Anruf kann nicht mit <xliff:g id="OTHER_APP">%1$s</xliff:g> getätigt werden. Bitte verwende eine andere App zur Anrufweiterleitung oder wende dich an den Entwickler, um Hilfe zu erhalten."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Anrufblockierung"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nicht in den Kontakten gespeicherte Telefonnummern"</string>
@@ -101,9 +99,9 @@
<string name="phone_settings_private_num_txt" msgid="8623574188879134262">"Privat"</string>
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Anrufer mit unterdrückter Nummer werden blockiert"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Öffentliche Telefone"</string>
- <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Anrufe von öffentlichen Telefonen blockieren"</string>
+ <string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Anrufe von öffentlichen Telefonen werden blockiert"</string>
<string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Unbekannt"</string>
- <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Anrufe von nicht identifizierten Anrufern blockieren"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Anrufe von nicht identifizierten Anrufern werden blockiert"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Anrufblockierung"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Anrufblockierung deaktiviert"</string>
<string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Notruf abgesetzt"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 350bdea..307564b 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Επιλέξτε πώς θα πραγματοποιήσετε την κλήση"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Ανακατεύθυνση της κλήσης μέσω <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Κλήση μέσω του αριθμού τηλεφώνου μου"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Να επιτραπεί στην εφαρμογή <xliff:g id="OTHER_APP">%1$s</xliff:g> η πραγματοποίηση κλήσης χρησιμοποιώντας διαφορετικό αριθμό ή λογαριασμό."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Δεν είναι δυνατή η πραγματοποίηση κλήσης από την εφαρμογή <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>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 68c7b6b..a0a7e82 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -28,8 +28,8 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Message"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Speakerphone enabled."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Can\'t talk now. What\'s going on?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"I\'ll call you back."</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Can\'t talk now. What\'s up?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"I\'ll call you right back."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"I\'ll call you later."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Can\'t talk now. Call me later?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Quick responses"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Missed calls"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Call Blocking"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Placing this call will end your <xliff:g id="OTHER_APP">%1$s</xliff:g> call."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Choose how to make this call"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirect call using <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Call using my phone number"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Allow <xliff:g id="OTHER_APP">%1$s</xliff:g> to place call using a different number or account."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Call can\'t be placed by <xliff:g id="OTHER_APP">%1$s</xliff:g>. Try using a different call redirecting app or contacting the developer for help."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Call Blocking"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numbers not in Contacts"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 68c7b6b..a0a7e82 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -28,8 +28,8 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Message"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Speakerphone enabled."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Can\'t talk now. What\'s going on?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"I\'ll call you back."</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Can\'t talk now. What\'s up?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"I\'ll call you right back."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"I\'ll call you later."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Can\'t talk now. Call me later?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Quick responses"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Missed calls"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Call Blocking"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Placing this call will end your <xliff:g id="OTHER_APP">%1$s</xliff:g> call."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Choose how to make this call"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirect call using <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Call using my phone number"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Allow <xliff:g id="OTHER_APP">%1$s</xliff:g> to place call using a different number or account."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Call can\'t be placed by <xliff:g id="OTHER_APP">%1$s</xliff:g>. Try using a different call redirecting app or contacting the developer for help."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Call Blocking"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numbers not in Contacts"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 68c7b6b..a0a7e82 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -28,8 +28,8 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Message"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Call muted."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Speakerphone enabled."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Can\'t talk now. What\'s going on?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"I\'ll call you back."</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Can\'t talk now. What\'s up?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"I\'ll call you right back."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"I\'ll call you later."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Can\'t talk now. Call me later?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Quick responses"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Missed calls"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Call Blocking"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Placing this call will end your <xliff:g id="OTHER_APP">%1$s</xliff:g> call."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Choose how to make this call"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirect call using <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Call using my phone number"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Allow <xliff:g id="OTHER_APP">%1$s</xliff:g> to place call using a different number or account."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Call can\'t be placed by <xliff:g id="OTHER_APP">%1$s</xliff:g>. Try using a different call redirecting app or contacting the developer for help."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Call Blocking"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numbers not in Contacts"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 65c747e..7bcea81 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -29,7 +29,7 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Llamada silenciada"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Altavoz habilitado"</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"No puedo hablar ahora. ¿Todo bien?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Te llamo enseguida."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Te llamo en seguida."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Te llamo más tarde."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"No puedo hablar ahora. ¿Me llamas más tarde?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Respuestas rápidas"</string>
@@ -58,7 +58,7 @@
<string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"No recibirás llamadas ni mensajes de texto de los números bloqueados."</string>
<string name="block_number" msgid="1101252256321306179">"Agregar un número"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"¿Quieres desbloquear el número <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"¿Quieres desbloquear el <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear llamadas y mensajes de texto de"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Número de teléfono"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Llamadas perdidas"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bloqueo de llamadas"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Si realizas esta llamada, finalizará la de <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Elige cómo quieres realizar esta llamada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redireccionar la llamada mediante <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Llamar mediante mi número de teléfono"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Permite que <xliff:g id="OTHER_APP">%1$s</xliff:g> realice llamadas con un número o una cuenta diferentes."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"No se puede realizar la llamada a través de <xliff:g id="OTHER_APP">%1$s</xliff:g>. Intenta usar otra app de derivación de llamadas o comunícate con el desarrollador para obtener ayuda."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Bloqueo de llamadas"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Números que no están en Contactos"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index cec693b..098a5eb 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -56,7 +56,7 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Configurar como predeterminada"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Cancelar"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"No recibirás llamadas ni mensajes de los números bloqueados."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"No recibirás llamadas ni SMS de los números bloqueados."</string>
<string name="block_number" msgid="1101252256321306179">"Añadir un número"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"¿Desbloquear el número <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Llamadas perdidas"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bloqueo de llamadas"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Si haces esta llamada, se finalizará la de <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Elige cómo quieres hacer esta llamada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirigir llamada con <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Llamar con mi número de teléfono"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Deja que <xliff:g id="OTHER_APP">%1$s</xliff:g> llame con otro número o cuenta diferente."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> no puede realizar la llamada. Prueba con otra aplicación de redirección de llamadas o ponte en contacto con el desarrollador para obtener ayuda."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Bloqueo de llamadas"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Números que no están en Contactos"</string>
@@ -102,7 +100,7 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Bloquea las llamadas que tengan el número oculto"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Teléfono público"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Bloquea las llamadas de teléfonos públicos"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Desconocidos"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Desconocida"</string>
<string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Bloquea las llamadas de números desconocidos"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Bloqueo de llamadas"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Se ha inhabilitado el bloqueo de llamadas"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index a5203f7..31a43de 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Vastamata kõned"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Kõnede blokeerimine"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Selle kõne tegemisel lõpetatakse pooleliolev kõne rakenduses <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Valige, kuidas soovite helistada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Suuna kõne ümber rakenduse <xliff:g id="OTHER_APP">%1$s</xliff:g> abil"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Helista minu telefoninumbri abil"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Lubage rakendusel <xliff:g id="OTHER_APP">%1$s</xliff:g> helistada, kasutades teist numbrit või kontot."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Rakendus <xliff:g id="OTHER_APP">%1$s</xliff:g> ei saa helistada. Proovige kasutada teist kõnede ümbersuunamise rakendust või võtke abi saamiseks arendajaga ühendust."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Kõnede blokeerimine"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numbrid, mis ei ole kontaktide hulgas"</string>
@@ -102,7 +100,7 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Nende helistajate blokeerimine, kes ei avalda oma numbrit"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telefoniautomaat"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Kõnede blokeerimine telefoniautomaatidest"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Tundmatud"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Tundmatu"</string>
<string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Kõnede blokeerimine tuvastamata helistajatelt"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Kõnede blokeerimine"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Kõnede blokeerimine on keelatud"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 7067507..159a846 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -24,12 +24,12 @@
<string name="notification_missedCallsTitle" msgid="1361677948941502522">"Dei galduak"</string>
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> dei galdu"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"Deitzaile honen dei galdua: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
- <string name="notification_missedCall_call_back" msgid="2684890353590890187">"Itzuli deia"</string>
+ <string name="notification_missedCall_call_back" msgid="2684890353590890187">"Erantzun deiari"</string>
<string name="notification_missedCall_message" msgid="3049928912736917988">"Mezua"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Deiaren audioa desaktibatu da."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Bozgorailua gaitu da."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Ezin dut hitz egin. Arazoren bat al dago?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Oraintxe itzuliko dizut deia."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Oraintxe deituko dizut bueltan."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Geroago deituko dizut."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ezin dut hitz egin. Deitu geroago, mesedez."</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Erantzun bizkorrak"</string>
@@ -57,7 +57,7 @@
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Utzi"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Blokeatutako zenbakiak"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"Ez duzu jasoko deirik edo testu-mezurik blokeatutako zenbakietatik."</string>
- <string name="block_number" msgid="1101252256321306179">"Gehitu zenbaki bat"</string>
+ <string name="block_number" msgid="1101252256321306179">"Gehitu zenbakia"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> desblokeatu nahi duzu?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Desblokeatu"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokeatu zenbaki honetatik jasotzen diren deiak eta testu-mezuak:"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Dei galduak"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Deiak blokeatzeko aukera"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Dei hau egiten baduzu, amaitu egingo da <xliff:g id="OTHER_APP">%1$s</xliff:g> aplikazioko deia."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Aukeratu dei hau egiteko modua"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Birbideratu deia <xliff:g id="OTHER_APP">%1$s</xliff:g> aplikazioaren bidez"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Erabili nire telefono-zenbakia deitzeko"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Eman baimena <xliff:g id="OTHER_APP">%1$s</xliff:g> aplikazioari zenbaki edo kontu desberdin baten bidez deiak egiteko."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> aplikazioak ezin du egin deia. Erabili deiak birbideratzeko beste aplikazio bat edo jarri harremanetan garatzailearekin laguntza lortzeko."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Deiak blokeatzeko aukera"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Kontaktuak zerbitzuan ez dauden zenbakiak"</string>
@@ -102,7 +100,7 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokeatu zenbakia erakusten ez duten deitzaileak"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telefono publikoa"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokeatu telefono publikoen deiak"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Ezezagunak"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Ezezaguna"</string>
<string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokeatu identifikatu gabeko deitzaileen deiak"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Deiak blokeatzeko aukera"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Desgaitu da deiak blokeatzeko aukera"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index ed754a6..d728309 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -28,8 +28,8 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"پیام"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"تماس نادیده گرفته شد."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"تلفن آیفوندار فعال شد."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"الآن نمیتوانم صحبت کنم. موضوع چیست؟"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"همین حالا با شما تماس میگیرم.."</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"اکنون نمیتوانم صحبت کنم. موضوع چیست؟"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"بیدرنگ با شما تماس میگیرم."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"بعداً با شما تماس میگیرم."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"اکنون نمیتوانم صحبت کنم. بعداً به من زنگ میزنید؟"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"پاسخهای سریع"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"انتخاب نحوه برقراری این تماس"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"هدایت تماس با استفاده از <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"تماس با استفاده از شماره تلفن من"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"به <xliff:g id="OTHER_APP">%1$s</xliff:g> اجازه دهید با شماره یا حساب دیگری تماس برقرار کند."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"نمیتوان با <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>
@@ -103,7 +101,7 @@
<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_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>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 5c973c6..892fa7f 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Valitse, miten puhelu soitetaan"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Uudelleenohjaa puhelu sovelluksella <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Soita puhelinnumerollani"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Salli sovelluksen <xliff:g id="OTHER_APP">%1$s</xliff:g> soittaa puhelu toisella numerolla tai tilillä."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ei voi soittaa puhelua. Kokeile jotakin toista soitonsiirtosovellusta tai ota yhteyttä kehittäjään."</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>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index f92fc45..26b6eca 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Appels manqués"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blocage des appels"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Si vous passez cet appel, vous mettrez fin à l\'appel <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Choisissez comment passer cet appel"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Rediriger l\'appel en utilisant <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Appeler en utilisant mon numéro de téléphone"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Autoriser l\'application <xliff:g id="OTHER_APP">%1$s</xliff:g> à passer l\'appel au moyen d\'un autre numéro ou d\'un autre compte."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Impossible de passer l\'appel au moyen de l\'application <xliff:g id="OTHER_APP">%1$s</xliff:g>. Essayez d\'utiliser une autre application de redirection d\'appels ou de communiquer avec le concepteur de l\'application pour obtenir de l\'aide."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blocage des appels"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numéros non répertoriés dans les contacts"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 4af49bd..c025a89 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Appels manqués"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blocage d\'appels"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Si vous passez cet appel, vous mettrez fin à celui qui est en cours dans l\'application <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Choisissez comment passer cet appel"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Rediriger l\'appel avec <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Appeler avec mon numéro de téléphone"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Autorisez <xliff:g id="OTHER_APP">%1$s</xliff:g> à passer un appel avec un numéro ou un compte différent."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ne peut pas passer d\'appel. Essayez d\'utiliser une autre application de redirection des appels ou contactez le développeur pour obtenir de l\'aide."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blocage d\'appels"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numéros non répertoriés dans Contacts"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index f1dfde5..b0404af 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -50,13 +50,13 @@
<string name="change_default_dialer_dialog_affirmative" msgid="8606546663509166276">"Establecer como predeterminada"</string>
<string name="change_default_dialer_dialog_negative" msgid="9078144617060173845">"Cancelar"</string>
<string name="change_default_dialer_warning_message" msgid="1417671460801684999">"<xliff:g id="NEW_APP">%s</xliff:g> poderá facer chamadas e controlar todo o referente a estas. Só deberías establecer como aplicación de teléfono predeterminada aplicacións nas que confíes."</string>
- <string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"Usar <xliff:g id="NEW_APP">%s</xliff:g> como app de filtrado de chamadas predeterminada?"</string>
+ <string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"Queres que <xliff:g id="NEW_APP">%s</xliff:g> sexa a app de filtro de chamadas predet.?"</string>
<string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="5128397581530600941">"<xliff:g id="OLD_APP">%s</xliff:g> xa non poderá filtrar chamadas."</string>
- <string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> poderá consultar a información sobre os emisores de chamadas, aínda que non figuren entre os teus contactos, así como bloquear as súas chamadas. Só deberías establecer como aplicación de filtrado de chamadas predeterminada aplicacións nas que confíes."</string>
+ <string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> poderá consultar a información sobre os emisores de chamadas, aínda que non figuren entre os teus contactos, así como bloquear as súas chamadas. Só deberías establecer como aplicación de filtro de chamadas predeterminada aplicacións nas que confíes."</string>
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Establecer como predeterminada"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Cancelar"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Números bloqueados"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Non recibirás chamadas nin mensaxes de texto dos números bloqueados."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"Non recibirás chamadas nin mensaxes de texto desde números bloqueados."</string>
<string name="block_number" msgid="1101252256321306179">"Engadir un número"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Queres desbloquear o <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Chamadas perdidas"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bloqueo de chamadas"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ao facer esta chamada, finalizarase o túa chamada de <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Escolle como facer esta chamada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirixir a chamada con <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Chamar co meu número de teléfono"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Deixa que <xliff:g id="OTHER_APP">%1$s</xliff:g> faga unha chamada cunha conta ou número diferente."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Non se pode realizar a chamada a través de <xliff:g id="OTHER_APP">%1$s</xliff:g>. Proba con outra aplicación de redirección de chamadas ou ponte en contacto co programador para obter axuda."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Bloqueo de chamadas"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Números que non aparezan nos contactos"</string>
@@ -103,7 +101,7 @@
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Teléfono público"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Bloquea as chamadas de teléfonos públicos"</string>
<string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Descoñecido"</string>
- <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Bloquear as chamadas de emisores non identificados"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Bloquea as chamadas de emisores non identificados"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Bloqueo de chamadas"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Desactivouse o bloqueo de chamadas"</string>
<string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Realizouse unha chamada de emerxencia"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index a7e4ec4..35b02c0 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -28,12 +28,12 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"સંદેશ"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"કૉલ મ્યૂટ કરેલ છે."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"સ્પીકરફોન પસંદ કરેલ છે."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"હમણાં વાત નહીં કરી શકું. શું હતું?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"હમણાં કામમાં છું. થોડી વારમાં કૉલ કરું તમને."</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"હમણાં વાત નહીં કરી શકું. શું ચાલે છે?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"હું તરત જ પાછો કૉલ કરીશ."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"હું પછીથી કૉલ કરીશ."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"હમણાં વાત નહીં કરી શકું. મને પછીથી કૉલ કરી શકશો?"</string>
- <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"હાજરજવાબ"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"હાજરજવાબમાં ફેરફાર કરો"</string>
+ <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"ઝડપી પ્રતિસાદ"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ઝડપી પ્રતિસાદ સંપાદિત કરો"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<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>
@@ -56,11 +56,11 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"ડિફૉલ્ટ સેટ કરો"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"રદ કરો"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"અવરોધિત નંબરો"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"બ્લૉક કરેલા નંબર પરથી કૉલ અથવા ટેક્સ્ટ તમને આવશે નહિ."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"તમે અવરોધિત નંબરોથી કૉલ્સ અથવા ટેક્સ્ટ પ્રાપ્ત કરશો નહીં."</string>
<string name="block_number" msgid="1101252256321306179">"એક નંબર ઉમેરો"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ને બ્લૉક કરીએ?"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ને અનાવરોધિત કરીએ?"</string>
<string name="unblock_button" msgid="3078048901972674170">"અનાવરોધિત કરો"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"આ નંબરના કૉલ અને ટેક્સ્ટને અવરોધિત કરો"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"આ નંબરના કૉલ્સ અને ટેક્સ્ટને અવરોધિત કરો"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"ફોન નંબર"</string>
<string name="block_button" msgid="8822290682524373357">"અવરોધિત કરો"</string>
<string name="non_primary_user" msgid="5180129233352533459">"ફક્ત ઉપકરણના માલિક અવરોધિત નંબરોને જોઈ અને સંચાલિત કરી શકે છે."</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"આ કૉલ કેવી રીતે કરવો તે પસંદ કરો"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g>નો ઉપયોગ કરીને કૉલ રીડાયરેક્ટ કરો"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"મારા ફોન નંબરનો ઉપયોગ કરીને કૉલ કરો"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g>ને કોઈ અલગ નંબર અથવા એકાઉન્ટનો ઉપયોગ કરીને કૉલ કરવાની મંજૂરી આપો."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index d70f1c0..b94be42 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -20,7 +20,7 @@
<string name="userCallActivityLabel" product="default" msgid="5415173590855187131">"फ़ोन"</string>
<string name="unknown" msgid="6878797917991465859">"अज्ञात"</string>
<string name="notification_missedCallTitle" msgid="7554385905572364535">"छूटी कॉल"</string>
- <string name="notification_missedWorkCallTitle" msgid="6242489980390803090">"दफ़्तर का छूटा हुआ कॉल"</string>
+ <string name="notification_missedWorkCallTitle" msgid="6242489980390803090">"कार्यस्थल का छूटा हुआ कॉल"</string>
<string name="notification_missedCallsTitle" msgid="1361677948941502522">"छूटी कॉल"</string>
<string name="notification_missedCallsMsg" msgid="4575787816055205600">"<xliff:g id="NUM_MISSED_CALLS">%s</xliff:g> छूटी कॉल"</string>
<string name="notification_missedCallTicker" msgid="504686252427747209">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> की कॉल छूटी"</string>
@@ -55,32 +55,32 @@
<string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> आपके उन कॉल करने वालों की जानकारी देख पाएगा जो आपकी संपर्क सूची में नहीं हैं और उन कॉल को ब्लॉक कर पाएगा. सिर्फ़ उन्हीं ऐप्लिकेशन को डिफ़ॉल्ट कॉल स्क्रीन करने वाले ऐप्लिकेशन के रूप में सेट करना चाहिए जिन पर आप भरोसा करते हैं."</string>
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"डिफ़ॉल्ट सेट करें"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"अभी नहीं"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ब्लॉक किए गए नंबर"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ब्लॉक किए गए नंबर से आपको कॉल या मैसेज नहीं मिलेंगे."</string>
+ <string name="blocked_numbers" msgid="2751843139572970579">"अवरोधित नंबर"</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"आपको ब्लॉक किए गए नंबर से कॉल या मैसेज नहीं मिलेंगे."</string>
<string name="block_number" msgid="1101252256321306179">"नंबर जोड़ें"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> को अनब्लॉक करें?"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> को अनवरोधित करें?"</string>
<string name="unblock_button" msgid="3078048901972674170">"अनवरोधित करें"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"इसके कॉल और मैसेज रोकें"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"फ़ोन नंबर"</string>
- <string name="block_button" msgid="8822290682524373357">"ब्लॉक करें"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"सिर्फ़ डिवाइस के मालिक रोके गए नंबर देख और प्रबंधित कर सकते हैं."</string>
+ <string name="block_button" msgid="8822290682524373357">"अवरुद्ध करें"</string>
+ <string name="non_primary_user" msgid="5180129233352533459">"केवल डिवाइस स्वामी अवरुद्ध किए गए नंबर देख और प्रबंधित कर सकते हैं."</string>
<string name="delete_icon_description" msgid="8903995728252556724">"अनवरोधित करें"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"अवरोधन अस्थायी रूप से बंद है"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"आपातकालीन नंबर डायल करने या उस पर लेख संदेश भेजने के बाद, अवरोधन बंद हो जाता है ताकि आपातकालीन सेवाएं आपसे संपर्क कर सकें."</string>
- <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"अभी फिर से सक्षम करें"</string>
+ <string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"अभी पुन: सक्षम करें"</string>
<string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> अवरोधित है"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> अनवरोधित है"</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"आपातकालीन नंबर ब्लॉक करने में असमर्थ."</string>
+ <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"आपातकालीन नंबर अवरुद्ध करने में असमर्थ."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> पहले से अवरोधित है."</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"कॉल करने के लिए व्यक्तिगत डायलर का उपयोग करना"</string>
<string name="notification_incoming_call" msgid="7713197997773986670">"<xliff:g id="CALL_FROM">%2$s</xliff:g> की ओर से <xliff:g id="CALL_VIA">%1$s</xliff:g> कॉल"</string>
<string name="notification_incoming_video_call" msgid="6638486071698373893">"<xliff:g id="CALL_FROM">%2$s</xliff:g> की ओर से <xliff:g id="CALL_VIA">%1$s</xliff:g> वीडियो कॉल"</string>
- <string name="answering_ends_other_call" msgid="8282145910153766401">"उत्तर देने से आपका <xliff:g id="CALL_VIA">%1$s</xliff:g> कॉल खत्म हो जाएगा"</string>
- <string name="answering_ends_other_calls" msgid="1198589551399049197">"उत्तर देने से आपके <xliff:g id="CALL_VIA">%1$s</xliff:g> कॉल खत्म हो जाएंगे"</string>
- <string name="answering_ends_other_video_call" msgid="8510410917384186360">"उत्तर देने से आपका <xliff:g id="CALL_VIA">%1$s</xliff:g> वीडियो कॉल खत्म हो जाएगा"</string>
- <string name="answering_ends_other_managed_call" msgid="5186137550267947785">"उत्तर देने से आपका जारी कॉल खत्म हो जाएगा"</string>
- <string name="answering_ends_other_managed_calls" msgid="6429838309560397988">"उत्तर देने से आपके जारी कॉल खत्म हो जाएंगे"</string>
- <string name="answering_ends_other_managed_video_call" msgid="1585423762458248435">"उत्तर देने से आपका जारी वीडियो कॉल खत्म हो जाएगा"</string>
+ <string name="answering_ends_other_call" msgid="8282145910153766401">"उत्तर देने से आपका <xliff:g id="CALL_VIA">%1$s</xliff:g> कॉल समाप्त हो जाएगा"</string>
+ <string name="answering_ends_other_calls" msgid="1198589551399049197">"उत्तर देने से आपके <xliff:g id="CALL_VIA">%1$s</xliff:g> कॉल समाप्त हो जाएंगे"</string>
+ <string name="answering_ends_other_video_call" msgid="8510410917384186360">"उत्तर देने से आपका <xliff:g id="CALL_VIA">%1$s</xliff:g> वीडियो कॉल समाप्त हो जाएगा"</string>
+ <string name="answering_ends_other_managed_call" msgid="5186137550267947785">"उत्तर देने से आपका जारी कॉल समाप्त हो जाएगा"</string>
+ <string name="answering_ends_other_managed_calls" msgid="6429838309560397988">"उत्तर देने से आपके जारी कॉल समाप्त हो जाएंगे"</string>
+ <string name="answering_ends_other_managed_video_call" msgid="1585423762458248435">"उत्तर देने से आपका जारी वीडियो कॉल समाप्त हो जाएगा"</string>
<string name="answer_incoming_call" msgid="4140530013111794587">"उत्तर दें"</string>
<string name="decline_incoming_call" msgid="806026168661598368">"अस्वीकार करें"</string>
<string name="cant_call_due_to_no_supported_service" msgid="5128162419227548372">"कॉल नहीं किया जा सकता क्योंकि कॉल करने के लिए ऐसा कोई खाता नहीं है जिस पर इस तरह के कॉल की सुविधा हो."</string>
@@ -90,10 +90,8 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"चुनें कि आप इस कॉल को कैसे करना चाहते हैं"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> का इस्तेमाल करके कॉल को दूसरे नंबर पर भेजें"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"मेरे फ़ोन नंबर का इस्तेमाल करके कॉल करें"</string>
+ <string name="alert_outgoing_call" msgid="982908156825958001">"इस कॉल को करने से आपका <xliff:g id="OTHER_APP">%1$s</xliff:g> कॉल समाप्त हो जाएगा."</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> को किसी और नंबर या खाते का इस्तेमाल करके कॉल करने की अनुमति दें."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index e400993..59d7817 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -57,10 +57,10 @@
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Otkaži"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Blokirani brojevi"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"Nećete primati ni pozive ni poruke s blokiranih brojeva."</string>
- <string name="block_number" msgid="1101252256321306179">"Dodajte broj"</string>
+ <string name="block_number" msgid="1101252256321306179">"Dodaj broj"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Želite li deblokirati <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Deblokiraj"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokiraj pozive i poruke koje upućuje"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokirajte pozive i poruke koje upućuje"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonski broj"</string>
<string name="block_button" msgid="8822290682524373357">"Blokiraj"</string>
<string name="non_primary_user" msgid="5180129233352533459">"Samo vlasnik uređaja može pregledavati i kontrolirati blokirane brojeve."</string>
@@ -68,7 +68,7 @@
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blokiranje je privremeno isključeno"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Nakon što nazovete broj hitne službe ili pošaljete poruku na njega, blokada će se isključiti kako bi vam se hitna služba mogla javiti."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Ponovno omogući sada"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Broj <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blokiran je"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Broj <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> je blokiran"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Broj <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> deblokiran je"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Broj hitne službe ne može se blokirati."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Broj <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> već je blokiran."</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Odaberite kako ćete uputiti poziv"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Preusmjeri poziv putem aplikacije <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Uputi poziv pomoću mog telefonskog broja"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Omogućite aplikaciji <xliff:g id="OTHER_APP">%1$s</xliff:g> upućivanje poziva na drugi broj ili račun."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Aplikacija <xliff:g id="OTHER_APP">%1$s</xliff:g> ne može uputiti poziv. Pokušajte s drugom aplikacijom za preusmjeravanje poziva ili se obratite razvojnom programeru za pomoć."</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>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index b608522..8941416 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Nem fogadott hívások"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Hívásletiltás"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ha hívást indít, azzal megszakítja a(z) <xliff:g id="OTHER_APP">%1$s</xliff:g>-hívást."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"A hívás módjának kiválasztása"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Hívás átirányítása a következővel: <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Hívás a saját telefonszámommal"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Más számmal vagy fiókkal való hívásindítás engedélyezése a(z) <xliff:g id="OTHER_APP">%1$s</xliff:g> számára."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"A(z) <xliff:g id="OTHER_APP">%1$s</xliff:g> nem tudja elindítani a hívást. Használjon másik hívásátirányítási alkalmazást, vagy forduljon az alkalmazás fejlesztőjéhez."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Hívásletiltás"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"A névjegyek között nem szereplő számok"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 5566c0b..3e350cd 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -29,9 +29,9 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Զանգը խլացված է:"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Բարձրախոսը միացված է:"</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Հիմա չեմ կարող խոսել: Ի՞նչ կա:"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Հիմա հետ կզանգեմ:"</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ավելի ուշ հետ կզանգեմ։"</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Հիմա չեմ կարող խոսել, խնդրում եմ ավելի ուշ զանգել։"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ես ձեզ հիմա հետ կզանգեմ:"</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Ես ձեզ մի փոքր ուշ կզանգեմ:"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Չեմ կարող խոսել հիմա: Կզանգե՞ք ավելի ուշ:"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Արագ պատասխաններ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Արագ պատասխաններ"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Ընտրեք, թե ինչպես եք ուզում կատարել այս զանգը"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Վերահասցեավորել զանգը <xliff:g id="OTHER_APP">%1$s</xliff:g> հավելվածով"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Զանգել իմ հեռախոսահամարով"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Թույլատրեք <xliff:g id="OTHER_APP">%1$s</xliff:g> հավելվածին զանգ կատարել մեկ այլ համարի կամ հաշվի միջոցով:"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Զանգը չի կարող կատարվել <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>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 8f2ead2..f3c7088 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -69,7 +69,7 @@
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Setelah Anda menelepon atau mengirim SMS ke nomor gawat darurat, blokir akan dinonaktifkan agar layanan gawat darurat tersebut dapat menghubungi Anda."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Aktifkan lagi sekarang"</string>
<string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> diblokir"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> dibatalkan blokirnya"</string>
+ <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> dibebaskan"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Tidak dapat memblokir nomor darurat."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> sudah diblokir."</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"Menggunakan telepon pribadi untuk melakukan panggilan"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Panggilan tak terjawab"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Pemblokiran Panggilan"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Melakukan panggilan ini akan mengakhiri panggilan <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Pilih cara melakukan panggilan ini"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Alihkan panggilan menggunakan <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Lakukan panggilan dengan nomor telepon saya"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Izinkan <xliff:g id="OTHER_APP">%1$s</xliff:g> untuk melakukan panggilan menggunakan nomor atau akun lain."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Tidak dapat melakukan panggilan melalui <xliff:g id="OTHER_APP">%1$s</xliff:g>. Coba gunakan aplikasi pengalihan panggilan lain atau hubungi developer untuk mendapatkan bantuan."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Pemblokiran Panggilan"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nomor yang tidak ada di Kontak"</string>
@@ -102,7 +100,7 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokir penelepon yang menyembunyikan nomornya"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telepon umum"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokir panggilan dari telepon umum"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Tidak dikenal"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Tidak tahu"</string>
<string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokir panggilan dari penelepon yang tidak dikenal"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Pemblokiran Panggilan"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Pemblokiran Panggilan dinonaktifkan"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 4d5fa7e..903d72f 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Veldu hvernig hringt er"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Framsenda símtal með <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Hringja með símanúmerinu mínu"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Leyfa <xliff:g id="OTHER_APP">%1$s</xliff:g> að hringja með öðru númeri eða reikningi."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Ekki er hægt að hringja símtal með <xliff:g id="OTHER_APP">%1$s</xliff:g>. Prófaðu að nota annað símtalaforrit eða hafðu samband við þróunaraðila til að fá aðstoð."</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>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2040837..a41e901 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Chiamate perse"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blocco delle chiamate"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Se effettui questa chiamata, la chiamata di <xliff:g id="OTHER_APP">%1$s</xliff:g> verrà terminata."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Scegli come effettuare questa chiamata"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Reindirizza la chiamata utilizzando <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Chiama utilizzando il mio numero di telefono"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Consenti all\'app <xliff:g id="OTHER_APP">%1$s</xliff:g> di effettuare una chiamata utilizzando un altro numero o account."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> non è in grado di effettuare la chiamata. Prova a utilizzare un\'altra app per il reindirizzamento delle chiamate o contatta lo sviluppatore per ricevere assistenza."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blocco delle chiamate"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numeri esterni ai Contatti"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 0604092..2a7f6bd 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -33,14 +33,14 @@
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"אני אתקשר אליך יותר מאוחר."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"לא נוח לי עכשיו. נדבר אחר כך?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"תגובות מהירות"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"עריכת תגובות מהירות"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"תגובות מהירות"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<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="respond_via_sms_failure_format" msgid="90791421289769504">"לא ניתן היה לשלוח את ההודעה ל-<xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"חשבונות לביצוע שיחות"</string>
<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_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>
<string name="no_vm_number" msgid="4164780423805688336">"חסר מספר של דואר קולי"</string>
@@ -53,7 +53,7 @@
<string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"רוצה להפוך את <xliff:g id="NEW_APP">%s</xliff:g> לאפליקציית ברירת המחדל שלך לסינון שיחות?"</string>
<string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="5128397581530600941">"אפליקציית <xliff:g id="OLD_APP">%s</xliff:g> לא תוכל לסנן שיחות עוד."</string>
<string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"אפליקציית <xliff:g id="NEW_APP">%s</xliff:g> תוכל לראות מידע על מתקשרים שאינם באנשי הקשר שלך ולחסום שיחות מהם. מומלץ לבחור רק אפליקציות שסומכים עליהן כברירת המחדל לסינון שיחות."</string>
- <string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"ברירת מחדל"</string>
+ <string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"הגדרה כברירת מחדל"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"ביטול"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"מספרים חסומים"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"לא יגיעו אליך שיחות או הודעות טקסט מהמספרים החסומים."</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"איך להתקשר?"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"ניתוב דרך <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ממספר הטלפון שלי"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"השיחה תנותב דרך <xliff:g id="OTHER_APP">%1$s</xliff:g> באמצעות מספר או חשבון אחר. להמשיך?"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"אי אפשר להתקשר דרך <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>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 8c953c0..0461797 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -63,7 +63,7 @@
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"次の発信元からの通話とテキスト メッセージをブロック"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"電話番号"</string>
<string name="block_button" msgid="8822290682524373357">"ブロック"</string>
- <string name="non_primary_user" msgid="5180129233352533459">"ブロックした番号を表示、管理できるのはデバイスの所有者のみです。"</string>
+ <string name="non_primary_user" msgid="5180129233352533459">"ブロックした番号を表示、管理できるのは端末の所有者のみです。"</string>
<string name="delete_icon_description" msgid="8903995728252556724">"ブロックを解除"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ブロックが一時的に OFF になっています"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"緊急通報番号に電話をかけたり、テキスト メッセージを送信したりすると、ブロックが OFF になり、緊急通報受理機関からの通話を着信できるようになります。"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"通話の発信方法を選択してください"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> を使用して通話をリダイレクト"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"自分の電話番号を使用して通話を発信"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"別の電話番号またはアカウントを使用して <xliff:g id="OTHER_APP">%1$s</xliff:g> から通話を発信することを許可してください。"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 79a907d..bad431d 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"აირჩიეთ, როგორ განათავსოთ ეს ზარი"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"ზარის გადამისამართება <xliff:g id="OTHER_APP">%1$s</xliff:g>-ის გამოყენებით"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"დარეკვა ჩემი ტელეფონის ნომრის გამოყენებით"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g>-ის დაშვება, განათავსოს ზარი სხვა ნომრის ან ანგარიშის გამოყენებით."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"ზარის განთავსება შეუძლებელია <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>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 9cd1698..4266223 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -39,7 +39,7 @@
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Хабар <xliff:g id="PHONE_NUMBER">%s</xliff:g> нөміріне жіберілді."</string>
<string name="respond_via_sms_failure_format" msgid="90791421289769504">"<xliff:g id="PHONE_NUMBER">%s</xliff:g> нөміріне хабар жіберілмеді."</string>
<string name="enable_account_preference_title" msgid="2021848090086481720">"Қоңырау шалу есептік жазбалары"</string>
- <string name="outgoing_call_not_allowed_user_restriction" msgid="6872406278300131364">"Құтқару қызметіне ғана қоңырау шалуға рұқсат етілген."</string>
+ <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>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Қоңырау шалу әдісін таңдаңыз."</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Қоңырау бағытын <xliff:g id="OTHER_APP">%1$s</xliff:g> арқылы ауыстыру"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Телефон нөміріммен қоңырау шалу"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> қолданбасының басқа нөмір немесе есептік жазба арқылы қоңырау шалуына рұқсат ету."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index ae7c80c..ade1187 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ជ្រើសរើសរបៀបធ្វើការហៅទូរសព្ទនេះ"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"បញ្ជូនការហៅទូរសព្ទបន្តដោយប្រើប្រាស់ <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ហៅទូរសព្ទដោយប្រើប្រាស់លេខទូរសព្ទ"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"អនុញ្ញាតឲ្យ <xliff:g id="OTHER_APP">%1$s</xliff:g> ធ្វើការហៅទូរសព្ទ ដោយប្រើប្រាស់គណនី ឬលេខផ្សេង។"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"មិនអាចធ្វើការហៅទូរសព្ទតាម <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>
@@ -103,7 +101,7 @@
<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_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>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 2888e50..f2036b5 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"ಸಂದೇಶ"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"ಕರೆಯನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"ಸ್ಪೀಕರ್ಫೋನ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ಕ್ಷಮಿಸಿ, ಈಗ ಮಾತನಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸಮಾಚಾರವೇನು?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ಈಗ ಮಾತನಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಏನು ವಿಷಯ?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ನಾನು ಮರಳಿ ನಿಮಗೆ ಕರೆ ಮಾಡುತ್ತೇನೆ."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ನಾನು ನಂತರ ನಿಮಗೆ ಕರೆ ಮಾಡುತ್ತೇನೆ."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ಈಗ ಮಾತನಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಂತರ ಮಾಡುವಿರಾ?"</string>
@@ -62,7 +62,7 @@
<string name="unblock_button" msgid="3078048901972674170">"ನಿರ್ಬಂಧ ತೆಗೆಯಿರಿ"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"ಇದರಿಂದ ಬರುವ ಕರೆಗಳು ಮತ್ತು ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"ಫೋನ್ ಸಂಖ್ಯೆ"</string>
- <string name="block_button" msgid="8822290682524373357">"ನಿರ್ಬಂಧಿಸಿ"</string>
+ <string name="block_button" msgid="8822290682524373357">"ನಿರ್ಬಂಧಿಸು"</string>
<string name="non_primary_user" msgid="5180129233352533459">"ಸಾಧನ ಮಾಲೀಕರು ಮಾತ್ರ ನಿರ್ಬಂಧಿಸಿದ ಸಂಖ್ಯೆಗಳನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು."</string>
<string name="delete_icon_description" msgid="8903995728252556724">"ನಿರ್ಬಂಧ ತೆಗೆಯಿರಿ"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ನಿರ್ಬಂಧಿಸುವಿಕೆ ತಾತ್ಕಾಲಿಕವಾಗಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ಈ ಕರೆ ಮಾಡುವುದು ಹೇಗೆ ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ಬಳಸಿಕೊಂಡು ಕರೆಯನ್ನು ಮರುನಿರ್ದೇರ್ಶಿಸಿ"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ನನ್ನ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಕರೆ ಮಾಡಿ"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"ಬೇರೆ ಸಂಖ್ಯೆ ಅಥವಾ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು <xliff:g id="OTHER_APP">%1$s</xliff:g> ಆ್ಯಪ್ಗೆ ಕರೆ ಮಾಡಲು ಅನುಮತಿಸಿ."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"ಕರೆಯನ್ನು <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>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index dfa3eb1..d994e55 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -56,7 +56,7 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"기본으로 설정"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"취소"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"차단된 번호"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"차단한 번호에서 걸려오는 전화나 문자는 더 이상 수신되지 않습니다."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"차단한 번호에서 걸려오는 전화나 문자를 더 이상 받지 않습니다."</string>
<string name="block_number" msgid="1101252256321306179">"번호 추가"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>번을 차단 해제하시겠습니까?"</string>
<string name="unblock_button" msgid="3078048901972674170">"차단 해제"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"전화 걸 방법 선택"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> 앱으로 전화 리디렉션"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"내 전화번호로 전화 걸기"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> 앱이 다른 번호나 계정을 사용하여 전화를 걸도록 허용합니다."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 21da1d4..602b06f 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Чалуу жолун тандаңыз"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> аркылуу чалуу багытын буруу"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Телефон номерим аркылуу чалуу"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g>башка номер же аккаунт колдонуп чалуусуна уруксат бериңиз."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 87a9ebd..d6cba22 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ເລືອກວິທີໂທສາຍນີ້"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"ປ່ຽນເສັ້ນທາງການໂທໂດຍໃຊ້ <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ໂທໂດຍໃຊ້ເບີໂທລະສັບຂອງຂ້ອຍ"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"ອະນຸຍາດໃຫ້ <xliff:g id="OTHER_APP">%1$s</xliff:g> ໂທໄດ້ໂດຍໃຊ້ເບີໂທ ຫຼື ບັນຊີອື່ນ."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"ບໍ່ສາມາດໂທດ້ວຍແອັບ <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>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 9b522d3..df12ca6 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Pasirinkite, kaip norite skambinti"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Peradresuoti skambutį naudojant programą „<xliff:g id="OTHER_APP">%1$s</xliff:g>“"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Skambinti naudojant mano telefono numerį"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Leisti „<xliff:g id="OTHER_APP">%1$s</xliff:g>“ skambinti naudojant kitą numerį ar paskyrą."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Negalima skambinti naudojant „<xliff:g id="OTHER_APP">%1$s</xliff:g>“. Pabandykite naudoti kitą skambučių peradresavimo programą arba susisiekite su kūrėju, jei reikia pagalbos."</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>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 4fae9fe..71d5343 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Neatbildētie zvani"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Zvanu bloķēšana"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Veicot šo zvanu, tiks beigts zvans lietotnē <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Izvēlieties, kā veikt šo zvanu"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Novirzīt zvanu, izmantojot lietotni <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Zvanīt, izmantojot manu tālruņa numuru"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Atļaujiet lietotnei <xliff:g id="OTHER_APP">%1$s</xliff:g> veikt zvanu, izmantojot citu numuru vai kontu."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Zvanu nevar veikt lietotnē <xliff:g id="OTHER_APP">%1$s</xliff:g>. Mēģiniet izmantot citu zvanu pāradresācijas lietotni vai sazināties ar izstrādātāju, lai saņemtu palīdzību."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Zvanu bloķēšana"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numuri, kas nav ietverti kontaktpersonu sarakstā"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 2a1fe48..67045ff 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Изберете како да се воспостави повиков"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Пренасочи го повикот со <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Повикај со мојот телефонски број"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Дозволи <xliff:g id="OTHER_APP">%1$s</xliff:g> да воспостави повик со друг број или сметка."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Не може да се воспостави повик со <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>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index caa12a4..1d9230a 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"സന്ദേശം"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"കോൾ നിശബ്ദമാക്കി."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"സ്പീക്കർഫോൺ പ്രവർത്തനക്ഷമമാക്കി."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ഇപ്പോൾ സംസാരിക്കാനാകില്ല. എന്താ വിളിച്ചത്?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ഇപ്പോൾ സംസാരിക്കാനാകില്ല. എന്തുചെയ്യുന്നു?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ഞാൻ നിങ്ങളെ ഉടൻ തിരിച്ചുവിളിക്കാം."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ഞാൻ നിങ്ങളെ പിന്നീട് വിളിക്കാം."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ഇപ്പോൾ സംസാരിക്കാനാകില്ല. എന്നെ പിന്നീട് വിളിക്കാമോ?"</string>
@@ -55,20 +55,20 @@
<string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g>-ന് നിങ്ങളുടെ കോൺടാക്റ്റുകളിൽ ഇല്ലാത്ത വിളിക്കുന്ന ആളുടെ, വിവരങ്ങൾ കാണാനും, ആ കോളുകളെ ബ്ലോക്കുചെയ്യാനുമാവും. വിശ്വസിക്കാവുന്ന ആപ്പുകൾ മാത്രം ഡിഫോൾട്ട് കോൾ സ്ക്രീനിംഗ് ആപ്പായി സജ്ജീകരിക്കുക."</string>
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"ഡിഫോൾട്ട് കോൾ സ്ക്രീനിംഗ് ആപ്പ് സജ്ജീകരിക്കുക"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"റദ്ദാക്കുക"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ബ്ലോക്ക് ചെയ്ത നമ്പറുകൾ"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ബ്ലോക്ക് ചെയ്ത നമ്പറുകളിൽ നിന്ന് നിങ്ങൾക്ക് കോളുകളോ സന്ദേശങ്ങളോ ലഭിക്കില്ല."</string>
+ <string name="blocked_numbers" msgid="2751843139572970579">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ"</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"ബ്ലോക്കുചെയ്ത നമ്പറുകളിൽ നിന്ന് നിങ്ങൾക്ക് കോളുകളോ സന്ദേശങ്ങളോ ലഭിക്കില്ല."</string>
<string name="block_number" msgid="1101252256321306179">"ഒരു നമ്പർ ചേർക്കുക"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> അൺബ്ലോക്ക് ചെയ്യണോ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"അൺബ്ലോക്ക് ചെയ്യുക"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ഈ നമ്പറിൽ നിന്നുള്ള കോളുകളും ടെക്സ്റ്റുകളും ബ്ലോക്ക് ചെയ്യുക"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> അൺബ്ലോക്കുചെയ്യണോ?"</string>
+ <string name="unblock_button" msgid="3078048901972674170">"അൺബ്ലോക്കുചെയ്യുക"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ഇനിപ്പറയുന്നതിൽ നിന്നുള്ള കോളുകളും ടെക്സ്റ്റുകളും ബ്ലോക്കുചെയ്യുക"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"ഫോൺ നമ്പർ"</string>
<string name="block_button" msgid="8822290682524373357">"ബ്ലോക്കുചെയ്യുക"</string>
<string name="non_primary_user" msgid="5180129233352533459">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ ഉപകരണ ഉടമയ്ക്ക് മാത്രമേ കാണാനും മാനേജുചെയ്യാനും കഴിയൂ."</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"അൺബ്ലോക്ക് ചെയ്യുക"</string>
+ <string name="delete_icon_description" msgid="8903995728252556724">"അൺബ്ലോക്കുചെയ്യുക"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ബ്ലോക്കുചെയ്യൽ താൽക്കാലികമായി ഓഫാണ്"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"നിങ്ങൾ ഒരു എമർജൻസി നമ്പർ ഡയൽ ചെയ്ത് കഴിയുമ്പോഴോ അതിലേക്ക് സന്ദേശമയച്ചുകഴിയുമ്പോഴോ, എമർജൻസി സേവനങ്ങൾ നിങ്ങളിലേക്ക് എത്തുമെന്ന് ഉറപ്പാക്കാൻ കോൾ ബ്ലോക്കിംഗ് ഓഫാക്കും."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ഇപ്പോൾ വീണ്ടും പ്രവർത്തനക്ഷമമാക്കുക"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ബ്ലോക്ക് ചെയ്തു"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ബ്ലോക്കുചെയ്തു"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> അൺബ്ലോക്കുചെയ്തു"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"അടിയന്തര നമ്പർ ബ്ലോക്കുചെയ്യാനാകുന്നില്ല."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> മുമ്പേതന്നെ ബ്ലോക്കുചെയ്തതാണ്."</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ഈ കോൾ എങ്ങനെ ചെയ്യണമെന്ന് തിരഞ്ഞെടുക്കുക"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ഉപയോഗിച്ച് കോൾ റീഡയറക്റ്റ് ചെയ്യുക"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"എന്റെ ഫോൺ നമ്പർ ഉപയോഗിച്ച് കോൾ ചെയ്യുക"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"മറ്റൊരു നമ്പറോ അക്കൗണ്ടോ ഉപയോഗിച്ച് <xliff:g id="OTHER_APP">%1$s</xliff:g>-നെ കോൾ ചെയ്യാൻ അനുവദിക്കുക."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index a1d9dd7..c1b382e 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -30,7 +30,7 @@
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Чанга яригчийг идэвхжүүлсэн."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Ярих боломжгүй байна. Сонин юу байна?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Би тань руу одоо буцаагаад залгая."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Би тань руу дараа залгая."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Би тань руу дараа залгана."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Ярих боломжгүй байна. Дараа залгах уу?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Шуурхай хариунууд"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Шуурхай хариуг засах"</string>
@@ -56,7 +56,7 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Үндсэн болгох"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Болих"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Блоклосон дугаар"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Та блоклосон дугаараас дуудлага, мессеж хүлээн авахгүй."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"Та хориглосон дугаараас дуудлага, мессеж хүлээн авахгүй."</string>
<string name="block_number" msgid="1101252256321306179">"Дугаар нэмэх"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>-г блокоос гаргах уу?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Блокоос гаргах"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Энэ дуудлагыг хэрхэн хийхийг сонгох"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g>-г ашиглан дуудлагыг дахин чиглүүлэх"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Миний дугаарыг ашиглаж буй дуудлага"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Өөр дугаар эсвэл бүртгэл ашиглан дуудлага хийхийн тулд <xliff:g id="OTHER_APP">%1$s</xliff:g>-г зөвшөөрнө үү."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
@@ -103,7 +101,7 @@
<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_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>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 7a44107..c4f274a 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"मेसेज"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"कॉल नि.शब्द केला."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"स्पीकरफोन सक्षम केला."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"आत्ता बोलू शकत नाही. कशासाठी कॉल केला होता?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"मी तुम्हाला परत कॉल करेन."</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"मी तुम्हाला नंतर कॉल करेन."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"आत्ता बोलू शकत नाही. नंतर कॉल कराल?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"आत्ता बोलू शकत नाही. काय चालले आहे?"</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"मी आपल्याला परत कॉल करेन."</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"मी आपल्याला नंतर कॉल करेन."</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"आत्ता बोलू शकत नाही. नंतर कॉल करा?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"द्रुत प्रतिसाद"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"द्रुत प्रतिसाद संपादित करा"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -56,20 +56,20 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"डीफॉल्ट सेट करा"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"रद्द करा"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"ब्लॉक केलेले नंबर"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ब्लॉक केलेल्या नंबरवरुन तुम्हाला कॉल किंवा एसएमएस येणार नाहीत."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"तुम्हाला ब्लॉक केलेल्या नंबरवरून कॉल किंवा मजकूर येणार नाहीत."</string>
<string name="block_number" msgid="1101252256321306179">"एक नंबर जोडा"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> अनब्लॉक करायचा?"</string>
<string name="unblock_button" msgid="3078048901972674170">"ब्लॉक करा"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"यावरील कॉल आणि एसएमएस ब्लॉक करा"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"यावरील कॉल आणि मजकूर ब्लॉक करा"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"फोन नंबर"</string>
- <string name="block_button" msgid="8822290682524373357">"ब्लॉक करा"</string>
+ <string name="block_button" msgid="8822290682524373357">"अवरोधित करा"</string>
<string name="non_primary_user" msgid="5180129233352533459">"फक्त डिव्हाइस मालक अवरोधित केलेले नंबर पाहू आणि व्यवस्थापित करू शकतो."</string>
<string name="delete_icon_description" msgid="8903995728252556724">"ब्लॉक करा"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"अवरोधित करणे तात्पुरते बंद आहे"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"तुम्ही एखादा आणीबाणी नंबर डायल केला किंवा त्यावर मजकूर पाठविल्यानंतर, आणीबाणी सेवा आपल्याशी संपर्क साधू शकतात हे सुनिश्चित करण्यासाठी अवरोधित करणे बंद करते."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"आता पुन्हा-सक्षम करा"</string>
<string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> अवरोधित केला"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> अनब्लॉक केला"</string>
+ <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> अनावरोधित केला"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"आणीबाणी नंबर अवरोधित करण्यात अक्षम."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> आधीपासून अवरोधित केला आहे."</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"कॉल करण्यासाठी वैयक्तिक डायलर वापरणे"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"हा कॉल कसा करायचा ते निवडा"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> वापरून कॉल रीडिरेक्ट करा"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"माझा फोन नंबर वापरून कॉल करा"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"वेगळा नंबर किंवा खाते वापरून कॉल करण्याची <xliff:g id="OTHER_APP">%1$s</xliff:g> ला अनुमती द्या."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 4359582..64c21e1 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Panggilan tidak dijawab"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Sekatan Panggilan"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Membuat panggilan ini akan menamatkan panggilan <xliff:g id="OTHER_APP">%1$s</xliff:g> anda."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Pilih cara untuk membuat panggilan ini"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Ubah hala panggilan menggunakan <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Panggil menggunakan nombor telefon saya"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Benarkan <xliff:g id="OTHER_APP">%1$s</xliff:g> membuat panggilan menggunakan nombor atau akaun yang lain."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Panggilan tidak boleh dibuat oleh <xliff:g id="OTHER_APP">%1$s</xliff:g>. Cuba gunakan apl pengubahhalaan panggilan yang lain atau hubungi pembangun untuk mendapatkan bantuan."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Sekatan Panggilan"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nombor bukan dalam Kenalan"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index dc2be21..25d8d6c 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ဤခေါ်ဆိုမှု ပြုလုပ်ပုံကို ရွေးချယ်ပါ"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"ခေါ်ဆိုမှုကို <xliff:g id="OTHER_APP">%1$s</xliff:g> ဖြင့် တစ်ဆင့်ပြန်ညွှန်ရန်"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ကျွန်ုပ်၏ ဖုန်းနံပါတ်ဖြင့် ဖုန်းခေါ်ရန်"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"အခြားနံပါတ် (သို့) အကောင့်သုံးပြီး ဖုန်းခေါ်ဆိုရန် <xliff:g id="OTHER_APP">%1$s</xliff:g> ကို ခွင့်ပြုပါ။"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1d1a8f7..b2c4346 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Velg hvordan du vil ringe"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Viderekoble anropet med <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Ring med telefonnummeret mitt"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Tillat <xliff:g id="OTHER_APP">%1$s</xliff:g> å utføre anrop med et annet nummer eller en annen konto."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Anrop kan ikke utføres av <xliff:g id="OTHER_APP">%1$s</xliff:g>. Prøv å bruke en annen app for viderekobling av anrop eller ta kontakt med utvikleren for å få hjelp."</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>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index bec2e68..afdad88 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"यो कल गर्ने तरिका छनौट गर्नुहोस्"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> प्रयोग गरी कल रिडाइरेक्ट गर्नुहोस्"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"फोन नम्बर प्रयोग गरी कल गर्नुहोस्"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"कुनै अर्को नम्बर वा खाता प्रयोग गरी <xliff:g id="OTHER_APP">%1$s</xliff:g> लाई कल गर्ने अनुमति दिनुहोस्।"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 75364ff..c7026ce 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Gemiste gesprekken"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Gesprekken blokkeren"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Als je dit gesprek start, wordt je <xliff:g id="OTHER_APP">%1$s</xliff:g>-gesprek beëindigd."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Kies hoe je dit gesprek wilt plaatsen"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Gesprek omleiden via <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Bellen via mijn telefoonnummer"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Sta <xliff:g id="OTHER_APP">%1$s</xliff:g> toe om een gesprek te plaatsen via een ander nummer of account."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> kan geen gesprek plaatsen. Probeer een andere app om gesprekken om te leiden of neem voor hulp contact op met de ontwikkelaar."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Gesprekken blokkeren"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nummers die niet op je contactenlijst staan"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index e199029..8902b25 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -55,20 +55,20 @@
<string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"ଆପଣଙ୍କ ଯୋଗାଯୋଗରେ ନଥିବା କଲର୍ଙ୍କ ସମ୍ଵନ୍ଧରେ ସୂଚନା ଦେଖିବାକୁ <xliff:g id="NEW_APP">%s</xliff:g> ସକ୍ଷମ ହେବେ। କେବଳ ଆପଣ ବିଶ୍ଵାସ କରୁଥିବା ଆପ୍ସ ଡିଫଲ୍ଟ କଲ୍ ସ୍କ୍ରିନିଂ ଆପ୍ ଭାବରେ ସେଟ୍ ହେବା ଆବଶ୍ୟକ ଅଟେ।"</string>
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"ଡିଫଲ୍ଟ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"ବାତିଲ୍ କରନ୍ତୁ"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ବ୍ଲକ୍ କରାଯାଇଥିବା ନମ୍ବର୍"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ବ୍ଲକ୍ କରାଯାଇଥିବା ନମ୍ବର୍ରୁ ଆପଣ କଲ୍ କିମ୍ବା ଟେକ୍ସଟ୍ ଗ୍ରହଣ କରିପାରିବେ ନାହିଁ।"</string>
+ <string name="blocked_numbers" msgid="2751843139572970579">"ଅବରୋଧ କରାଯାଇଥିବା ନମ୍ବର୍"</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"ଅବରୋଧ କରାଯାଇଥିବା ନମ୍ବର୍ରୁ ଆପଣ କଲ୍ କିମ୍ବା ଟେକ୍ସଟ୍ ଗ୍ରହଣ କରିପାରିବେ ନାହିଁ।"</string>
<string name="block_number" msgid="1101252256321306179">"ଗୋଟିଏ ନମ୍ବର୍ ଯୋଡ଼ନ୍ତୁ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>ରୁ ବ୍ଲକ୍ ହଟାଇବେ?"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>ରୁ ଅବରୋଧ ହଟାଇବେ?"</string>
<string name="unblock_button" msgid="3078048901972674170">"ଅବରୋଧ ହଟାନ୍ତୁ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ଏହାର କଲ୍ ଓ ଟେକ୍ସଟ୍କୁ ବ୍ଲକ୍ କରନ୍ତୁ"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ଏହାର କଲ୍ ଓ ଟେକ୍ସଟ୍କୁ ଅବରୋଧ କରନ୍ତୁ"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"ଫୋନ୍ ନମ୍ଵର୍"</string>
- <string name="block_button" msgid="8822290682524373357">"ବ୍ଲକ୍ କରନ୍ତୁ"</string>
+ <string name="block_button" msgid="8822290682524373357">"ଅବରୋଧ କରନ୍ତୁ"</string>
<string name="non_primary_user" msgid="5180129233352533459">"କେବଳ ଡିଭାଇସ୍ର ମାଲିକ ଅବରୋଧ କରାଯାଇଥିବା ନମ୍ବର୍କୁ ଦେଖିପାରିବେ ଓ ପରିଚାଳନା କରିପାରିବେ।"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ଅନବ୍ଲକ୍ କରନ୍ତୁ"</string>
+ <string name="delete_icon_description" msgid="8903995728252556724">"ଅବରୋଧ ହଟାନ୍ତୁ"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ଅସ୍ଥାୟୀରୂପେ ଅବରୋଧ ଅଫ୍ ଅଛି"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"ଆପଣ ଗୋଟିଏ ଜରୁରିକାଳୀନ ନମ୍ବର୍କୁ ଡାଏଲ୍ କିମ୍ବା ଟେକ୍ସଟ୍ କରିବା ପରେ, ଜରୁରିକାଳୀନ ସେବା ଆପଣଙ୍କୁ ଯୋଗାଯୋଗ କରିବାକୁ ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ ଅବରୋଧକୁ ବନ୍ଦ କରିଦିଆଯାଇଥାଏ।"</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ବର୍ତ୍ତମାନ ପୁନଃସକ୍ଷମ କରନ୍ତୁ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ବ୍ଲକ୍ କରାଯାଇଛି"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ଅବରୋଧ କରାଯାଇଛି"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ଅବରୋଧ ହଟାଇଦିଆଯାଇଛି"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ଜରୁରିକାଳୀନ ନମ୍ବର୍କୁ ଅବରୋଧ କରିବାରେ ଅକ୍ଷମ।"</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g>କୁ ଅବରୋଧ କରାଯାଇସରିଛି।"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ଏହି କଲ୍ କିପରି କରିବାକୁ ଚାହାନ୍ତି ବାଛନ୍ତୁ"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ବ୍ୟବହାର କରି କଲ୍ ରିଡାଇରେକ୍ଟ କରନ୍ତୁ"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ମୋ ଫୋନ୍ ନମ୍ବର ବ୍ୟବହାର କରି କଲ୍ କରନ୍ତୁ"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"ଏକ ଭିନ୍ନ ନମ୍ବର୍ କିମ୍ବା ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ଏକ କଲ୍ କରିବା ପାଇଁ <xliff:g id="OTHER_APP">%1$s</xliff:g>କୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
@@ -103,7 +101,7 @@
<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_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>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 982a382..492081a 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -28,10 +28,10 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"ਸੁਨੇਹਾ"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"ਕਾਲ ਮਿਊਟ ਕੀਤੀ।"</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"ਸਪੀਕਰਫੋਨ ਸਮਰਥਿਤ।"</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ਹੁਣੇ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਹੋਇਆ?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"ਹੁਣ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਮਾਜ਼ਰਾ ਹੈ?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"ਮੈਂ ਤੁਹਾਨੂੰ ਹੁਣੇ ਵਾਪਸ ਕਾਲ ਕਰਾਂਗਾ/ਗੀ।"</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰਾਂਗਾ/ਗੀ।"</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ਹੁਣੇ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਬਾਅਦ \'ਚ ਫ਼ੋਨ ਕਰ ਸਕਦੇ ਹੋ?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"ਹੁਣ ਗੱਲ ਨਹੀਂ ਹੋ ਸਕਦੀ। ਕੀ ਮੈਨੂੰ ਬਾਅਦ ਵਿੱਚ ਫ਼ੋਨ ਕਰ ਸਕਦੇ ਹੋ?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"ਤਤਕਾਲ ਜਵਾਬ"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"ਤਤਕਾਲ ਜਵਾਬ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
@@ -55,21 +55,21 @@
<string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> ਉਹਨਾਂ ਕਾਲਰਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇਖ ਸਕੇਗੀ ਜੋ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਵਿੱਚ ਨਹੀਂ ਹਨ ਅਤੇ ਉਹਨਾਂ ਕਾਲਾਂ ਨੂੰ ਬਲਾਕ ਕਰ ਸਕੇਗੀ। ਸਿਰਫ਼ ਉਹਨਾਂ ਐਪਾਂ ਨੂੰ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸਕ੍ਰੀਨਿੰਗ ਐਪ ਵਜੋਂ ਸੈੱਟ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਜਿਨ੍ਹਾਂ \'ਤੇ ਤੁਸੀਂ ਭਰੋਸਾ ਕਰਦੇ ਹੋ।"</string>
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈੱਟ ਕਰੋ"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"ਰੱਦ ਕਰੋ"</string>
- <string name="blocked_numbers" msgid="2751843139572970579">"ਬਲਾਕ ਕੀਤੇ ਨੰਬਰ"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"ਤੁਹਾਨੂੰ ਬਲਾਕ ਕੀਤੇ ਨੰਬਰਾਂ ਤੋਂ ਕਾਲਾਂ ਜਾਂ ਲਿਖਤ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋਣਗੇ।"</string>
+ <string name="blocked_numbers" msgid="2751843139572970579">"ਬਲੌਕ ਕੀਤੇ ਗਏ ਨੰਬਰ"</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"ਤੁਹਾਨੂੰ ਬਲੌਕ ਕੀਤੇ ਨੰਬਰਾਂ ਤੋਂ ਕਾਲਾਂ ਜਾਂ ਲਿਖਤ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋਣਗੇ।"</string>
<string name="block_number" msgid="1101252256321306179">"ਇੱਕ ਨੰਬਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"ਕੀ <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ਨੂੰ ਅਣਬਲਾਕ ਕਰਨਾ ਹੈ?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"ਅਣਬਲਾਕ ਕਰੋ"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ਇਸ ਨੰਬਰ ਤੋਂ ਕਾਲਾਂ ਅਤੇ ਲਿਖਤੀ ਸੁਨੇਹਿਆਂ ਨੂੰ ਬਲਾਕ ਕਰੋ"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"ਕੀ <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> ਨੂੰ ਅਣਬਲੌਕ ਕਰਨਾ ਹੈ?"</string>
+ <string name="unblock_button" msgid="3078048901972674170">"ਅਣਬਲੌਕ ਕਰੋ"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"ਇਸ ਨੰਬਰ ਤੋਂ ਕਾਲਾਂ ਅਤੇ ਲਿਖਤੀ ਸੁਨੇਹਿਆਂ ਨੂੰ ਬਲੌਕ ਕਰੋ"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"ਫ਼ੋਨ ਨੰਬਰ"</string>
- <string name="block_button" msgid="8822290682524373357">"ਬਲਾਕ ਕਰੋ"</string>
+ <string name="block_button" msgid="8822290682524373357">"ਬਲੌਕ ਕਰੋ"</string>
<string name="non_primary_user" msgid="5180129233352533459">"ਸਿਰਫ਼ ਡੀਵਾਈਸ ਮਾਲਕ ਹੀ ਬਲੌਕ ਕੀਤੇ ਗਏ ਨੰਬਰਾਂ ਨੂੰ ਦੇਖ ਅਤੇ ਪ੍ਰਬੰਧਿਤ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="delete_icon_description" msgid="8903995728252556724">"ਅਣਬਲਾਕ ਕਰੋ"</string>
+ <string name="delete_icon_description" msgid="8903995728252556724">"ਅਨਬਲੌਕ ਕਰੋ"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"ਬਲੌਕਿੰਗ ਆਰਜ਼ੀ ਤੌਰ \'ਤੇ ਬੰਦ ਹੈ"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਇੱਕ ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਨੂੰ ਡਾਇਲ ਕੀਤੇ ਜਾਣ ਜਾਂ ਲਿਖਤ ਸੁਨੇਹਾ ਭੇਜੇ ਜਾਣ ਤੋਂ ਬਾਅਦ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਬਲੌਕਿੰਗ ਨੂੰ ਬੰਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਕਿ ਐਮਰਜੈਂਸੀ ਸੇਵਾਵਾਂ ਤੁਹਾਨੂੰ ਸੰਪਰਕ ਕਰ ਸਕਣ।"</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"ਹੁਣੇ ਦੁਬਾਰਾ ਯੋਗ ਬਣਾਓ"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ਅਣਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ਬਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> ਅਣਬਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਨੂੰ ਬਲੌਕ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ।"</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਬਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"ਕਾਲ ਕਰਨ ਲਈ ਨਿੱਜੀ ਡਾਇਲਰ ਦੀ ਵਰਤੋਂ ਕਰਨੀ"</string>
@@ -81,8 +81,8 @@
<string name="answering_ends_other_managed_call" msgid="5186137550267947785">"ਜਵਾਬ ਦੇਣ ਨਾਲ ਤੁਹਾਡੀ ਜਾਰੀ ਕਾਲ ਸਮਾਪਤ ਹੋ ਜਾਵੇਗੀ"</string>
<string name="answering_ends_other_managed_calls" msgid="6429838309560397988">"ਜਵਾਬ ਦੇਣ ਨਾਲ ਤੁਹਾਡੀਆਂ ਜਾਰੀ ਕਾਲਾਂ ਸਮਾਪਤ ਹੋ ਜਾਣਗੀਆਂ"</string>
<string name="answering_ends_other_managed_video_call" msgid="1585423762458248435">"ਜਵਾਬ ਦੇਣ ਨਾਲ ਤੁਹਾਡੀ ਜਾਰੀ ਵੀਡੀਓ ਕਾਲ ਸਮਾਪਤ ਹੋ ਜਾਵੇਗੀ"</string>
- <string name="answer_incoming_call" msgid="4140530013111794587">"ਕਾਲ ਚੁੱਕੋ"</string>
- <string name="decline_incoming_call" msgid="806026168661598368">"ਕਾਲ ਕੱਟੋ"</string>
+ <string name="answer_incoming_call" msgid="4140530013111794587">"ਜਵਾਬ ਦਿਓ"</string>
+ <string name="decline_incoming_call" msgid="806026168661598368">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
<string name="cant_call_due_to_no_supported_service" msgid="5128162419227548372">"ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਕਿਉਂਕਿ ਇੱਥੇ ਅਜਿਹੇ ਕੋਈ ਕਾਲਿੰਗ ਖਾਤੇ ਨਹੀਂ ਹਨ ਜਿਨ੍ਹਾਂ ਵਿੱਚ ਇਸ ਕਿਸਮ ਦੀਆਂ ਕਾਲਾਂ ਦੀ ਸੁਵਿਧਾ ਹੋਵੇ।"</string>
<string name="cant_call_due_to_ongoing_call" msgid="4952615196237854748">"ਤੁਹਾਡੀ <xliff:g id="OTHER_CALL">%1$s</xliff:g> ਕਾਲ ਦੇ ਕਾਰਨ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।"</string>
<string name="cant_call_due_to_ongoing_calls" msgid="1380804892363503856">"ਤੁਹਾਡੀਆਂ <xliff:g id="OTHER_CALL">%1$s</xliff:g> ਕਾਲਾਂ ਦੇ ਕਾਰਨ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ਚੁਣੋ ਕਿ ਕਾਲ ਕਿਵੇਂ ਕਰਨੀ ਹੈ"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਾਲ ਰੀਡਾਇਰੈਕਟ ਕਰੋ"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"ਮੇਰਾ ਫ਼ੋਨ ਨੰਬਰ ਵਰਤ ਕੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ਨੂੰ ਕਾਲ ਕਰਨ ਲਈ ਕਿਸੇ ਵੱਖਰੇ ਨੰਬਰ ਜਾਂ ਖਾਤੇ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਿਓ।"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index cc8263f..a7fd99a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -60,7 +60,7 @@
<string name="block_number" msgid="1101252256321306179">"Dodaj numer"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Odblokować <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Odblokuj"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokuj połączenia i SMS-y z numeru:"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokuj połączenia i SMS-y z:"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Numer telefonu"</string>
<string name="block_button" msgid="8822290682524373357">"Zablokuj"</string>
<string name="non_primary_user" msgid="5180129233352533459">"Tylko właściciel urządzenia może przeglądać zablokowane numery i nimi zarządzać."</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Połączenia nieodebrane"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blokowanie połączeń"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Jeśli zadzwonisz, połączenie w aplikacji <xliff:g id="OTHER_APP">%1$s</xliff:g> zostanie zakończone."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Wybierz, jak chcesz zadzwonić"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Przekieruj połączenie za pomocą aplikacji <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Zadzwoń z mojego numeru telefonu"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Zezwalaj aplikacji <xliff:g id="OTHER_APP">%1$s</xliff:g> na nawiązywanie połączeń przy użyciu innego numeru lub konta."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Aplikacja <xliff:g id="OTHER_APP">%1$s</xliff:g> nie może nawiązać połączenia. Skorzystaj z innej aplikacji do przekierowywania połączeń lub skontaktuj się z deweloperem i poproś o pomoc."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blokowanie połączeń"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numery spoza Kontaktów"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 28f5001..02e3bcc 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Chamadas não atendidas"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bloqueio de chamadas"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ao efetuar esta chamada, irá terminar a chamada na aplicação <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Escolha como pretende efetuar esta chamada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirecionar chamada através de <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Ligar com o meu número de telefone"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Permitir que a aplicação <xliff:g id="OTHER_APP">%1$s</xliff:g> efetue uma chamada através de um número ou conta diferente."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Não é possível efetuar uma chamada através da aplicação <xliff:g id="OTHER_APP">%1$s</xliff:g>. Experimente utilizar uma aplicação de redirecionamento de chamadas diferente ou contactar o programador para obter ajuda."</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 não incluídos nos Contactos"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index af7ed9f..c818e98 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -38,7 +38,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="respond_via_sms_failure_format" msgid="90791421289769504">"Falha ao enviar a mensagem para <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
- <string name="enable_account_preference_title" msgid="2021848090086481720">"Contas para chamadas"</string>
+ <string name="enable_account_preference_title" msgid="2021848090086481720">"Contas de chamadas"</string>
<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>
@@ -60,17 +60,17 @@
<string name="block_number" msgid="1101252256321306179">"Adicionar um número"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Desbloquear <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Desbloquear"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear chamadas e mensagens de:"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Bloquear chamadas e mensagens de texto de"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Nº de telefone"</string>
<string name="block_button" msgid="8822290682524373357">"Bloquear"</string>
<string name="non_primary_user" msgid="5180129233352533459">"Apenas o proprietário do dispositivo pode ver e gerenciar os números bloqueados."</string>
<string name="delete_icon_description" msgid="8903995728252556724">"Desbloquear"</string>
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Bloqueio temporariamente desativado"</string>
- <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Após discar ou enviar uma mensagem de texto para um telefone de emergência, o bloqueio é desativado para garantir o contato do serviço de emergência."</string>
+ <string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"Após discar ou enviar uma mensagem de texto para um número de emergência, o bloqueio é desativado para garantir o contato do serviço de emergência com você."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Reativar agora"</string>
<string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"O número <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> está bloqueado."</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"O número <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> está desbloqueado."</string>
- <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Não é possível bloquear o telefone de emergência."</string>
+ <string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Não é possível bloquear o número de emergência."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"O número <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> já está bloqueado."</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"Usando o discador pessoal para fazer a chamada"</string>
<string name="notification_incoming_call" msgid="7713197997773986670">"Chamada de <xliff:g id="CALL_FROM">%2$s</xliff:g> no <xliff:g id="CALL_VIA">%1$s</xliff:g>"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Escolha como fazer esta chamada"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirecionar a chamada usando o <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Ligar usando meu número de telefone"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Permita que o <xliff:g id="OTHER_APP">%1$s</xliff:g> faça uma chamada usando um número ou uma conta diferente."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Não é possível fazer uma chamada com o <xliff:g id="OTHER_APP">%1$s</xliff:g>. Use um app de redirecionamento de chamadas diferente ou entre em contato com o desenvolvedor para receber ajuda."</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>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a1d2ec0..5ccd94a 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Apeluri nepreluate"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blocarea apelurilor"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Dacă inițiați acest apel, cel din <xliff:g id="OTHER_APP">%1$s</xliff:g> va fi încheiat."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Alegeți cum vreți să inițiați apelul"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Redirecționați apelul folosind <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Apelează folosind numărul meu"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Permiteți aplicației <xliff:g id="OTHER_APP">%1$s</xliff:g> pentru a iniția un apel folosind alt număr sau cont."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Apelul nu poate fi inițiat de <xliff:g id="OTHER_APP">%1$s</xliff:g>. Încercați să folosiți o aplicație de redirecționare a apelurilor sau să contactați dezvoltatorul pentru a solicita ajutorul."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blocarea apelurilor"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numere care nu sunt în Agendă"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6018347..ed40f98 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -68,8 +68,8 @@
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Блокировка временно снята"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"После набора или отправки сообщения на номер экстренной службы блокировка будет выключена, чтобы специалисты могли связаться с вами."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Включить блокировку"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> заблокирован."</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Номер <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> разблокирован."</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> заблокирован"</string>
+ <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"Номер <xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> разблокирован"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Невозможно заблокировать номер экстренной службы."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"Номер <xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> уже заблокирован."</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"Набор номера с помощью персонализированной панели"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Выберите, как хотите позвонить."</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Перенаправить вызов с использованием <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Позвонить с использованием моего номера телефона"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Разрешить приложению \"<xliff:g id="OTHER_APP">%1$s</xliff:g>\" совершать звонки с использованием другого номера или аккаунта."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Невозможно использовать для звонка приложение \"<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>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index fabb125..fc67adf 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"මෙම ඇමතුම ගන්නා ආකාරය තෝරන්න"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> භාවිතයෙන් ඇමතුම ප්රතියොමු කරන්න"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"මගේ දුරකථන අංකය භාවිතයෙන් ඇමතුම"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"වෙනස් අංකයක් හෝ ගිණුමක් භාවිතයෙන් ඇමතුම ගැනීමට <xliff:g id="OTHER_APP">%1$s</xliff:g>ට ඉඩ දෙන්න."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"ඇමතුම <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>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 9b6f3b0..4fb52a1 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -58,7 +58,7 @@
<string name="blocked_numbers" msgid="2751843139572970579">"Blokované čísla"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"Z blokovaných čísel nebudete prijímať hovory ani textové správy."</string>
<string name="block_number" msgid="1101252256321306179">"Pridať číslo"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Chcete odblokovať číslo <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"Odblokovať číslo <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Odblokovať"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blokovať hovory a textové správy"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefónne číslo"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Zmeškané hovory"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blokovanie hovorov"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ak uskutočníte tento hovor, hovor cez <xliff:g id="OTHER_APP">%1$s</xliff:g> bude ukončený."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Vyberte, ako chcete tento hovor uskutočniť"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Presmerovať hovor cez aplikáciu <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Zavolať pomocou môjho telefónneho čísla"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Ak chcete uskutočniť hovor pomocou iného čísla alebo účtu, povoľte aplikáciu <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Aplikácia <xliff:g id="OTHER_APP">%1$s</xliff:g> nemôže uskutočniť hovor. Skúste použiť inú aplikáciu na presmerovanie hovorov alebo kontaktujte vývojára a požiadajte o pomoc."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blokovanie hovorov"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Čísla, ktoré nie sú v kontaktoch"</string>
@@ -102,7 +100,7 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Blokovať volajúcich, ktorí skrývajú svoje číslo"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Verejný telefón"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokovať hovory z verejných telefónov"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Neznáme číslo"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Nerozpoznané číslo"</string>
<string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokovať hovory od nerozpoznaných volajúcich"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Blokovanie hovorov"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Blokovanie hovorov je vypnuté"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 2525c69..c7886c7 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Neodgovorjeni klici"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Blokiranje klicev"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Če opravite ta klic, bo končan klic prek aplikacije <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Izberite, kako želite opraviti klic"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Preusmeri klic z aplikacijo <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Kliči z mojo telefonsko številko"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Omogočite aplikaciji <xliff:g id="OTHER_APP">%1$s</xliff:g>, da klic opravi prek druge številke ali računa."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"V aplikaciji <xliff:g id="OTHER_APP">%1$s</xliff:g> ni mogoče opraviti klica. Uporabite drugo aplikacijo za preusmerjanje klicev ali se za pomoč obrnite na razvijalca."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Blokiranje klicev"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Številke, ki niso v stikih"</string>
@@ -103,7 +101,7 @@
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Telefonska govorilnica"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Blokirajte klice iz telefonskih govorilnic"</string>
<string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Neznano"</string>
- <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokiranje klicev neznanih klicateljev"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Blokirajte klice neznanih klicateljev"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Blokiranje klicev"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Blokiranje klicev je onemogočeno"</string>
<string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Opravljen je klic v sili"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 0e7134f..76c086c 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Telefonatat e humbura"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Bllokimi i telefonatave"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Kryerja e kësaj telefonate do të mbyllë telefonatën tënde në <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Zgjidh se si do ta kryesh këtë telefonatë"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Ridrejtoje telefonatën duke përdorur <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Telefono duke përdorur numrin tim të telefonit"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Lejo që <xliff:g id="OTHER_APP">%1$s</xliff:g> ta kryejë telefonatën duke përdorur një numër ose një llogari tjetër."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Telefonata nuk mund të kryhet nga <xliff:g id="OTHER_APP">%1$s</xliff:g>. Provo të përdorësh një aplikacion tjetër për ridrejtimin e telefonatave ose kontakto me zhvilluesin për ndihmë."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Bllokimi i telefonatave"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Numrat që nuk janë te \"Kontaktet\""</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index c7255e1..8797519 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -57,7 +57,7 @@
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Откажи"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Блокирани бројеви"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"Нећете примати позиве ни SMS-ове са блокираних бројева."</string>
- <string name="block_number" msgid="1101252256321306179">"Додајте број"</string>
+ <string name="block_number" msgid="1101252256321306179">"Додај број"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"Желите ли да деблокирате <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Деблокирај"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"Блокирајте позиве и SMS-ове од"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Изаберите како желите да упутите овај позив"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Преусмери позив помоћу: <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Позови помоћу мог броја телефона"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Дозволите да <xliff:g id="OTHER_APP">%1$s</xliff:g> упути позив помоћу другог броја или налога."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 49a6837..d3d5880 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -58,8 +58,8 @@
<string name="blocked_numbers" msgid="2751843139572970579">"Blockerade nummer"</string>
<string name="blocked_numbers_msg" msgid="1045015186124965643">"Du kommer inte ta emot samtal eller sms från blockerade nummer."</string>
<string name="block_number" msgid="1101252256321306179">"Lägg till ett telefonnummer"</string>
- <string name="unblock_dialog_body" msgid="1614238499771862793">"Vill du avblockera <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
- <string name="unblock_button" msgid="3078048901972674170">"Avblockera"</string>
+ <string name="unblock_dialog_body" msgid="1614238499771862793">"Vill du häva blockeringen av <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g>?"</string>
+ <string name="unblock_button" msgid="3078048901972674170">"Häv blockering"</string>
<string name="add_blocked_dialog_body" msgid="9030243212265516828">"Blockera samtal och sms från"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefonnummer"</string>
<string name="block_button" msgid="8822290682524373357">"Blockera"</string>
@@ -68,7 +68,7 @@
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"Blockeringen har inaktiverats tillfälligt"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"När du ringer eller sms:ar ett nödnummer inaktiveras blockering för att säkerställa att räddningstjänsten kan kontakta dig."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"Återaktivera nu"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blockerade"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> blockerat"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> avblockerat"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"Det går inte att blockera nödnummer."</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> är redan blockerat."</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Missade samtal"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Samtalsblockering"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ringer du det här samtalet avslutas samtalet i <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Välj hur du vill ringa samtalet"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Omdirigera samtal med <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Ring med mitt telefonnummer"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Tillåt att <xliff:g id="OTHER_APP">%1$s</xliff:g> ringer med ett annat nummer eller konto."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Det går inte att ringa med <xliff:g id="OTHER_APP">%1$s</xliff:g>. Försök att omdirigera samtalet med en annan app eller kontakta utvecklaren för hjälp."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Samtalsblockering"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nummer inte i Kontakter"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 9b35001..55dba0d 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Simu ambazo hukujibu"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Kuzuia Simu"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ukipiga simu hii, simu yako kwenye <xliff:g id="OTHER_APP">%1$s</xliff:g> itakatwa."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Chagua jinsi utakavyopiga simu hii"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Elekeza simu ukitumia <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Piga simu ukitumia nambari yangu ya simu"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Ruhusu <xliff:g id="OTHER_APP">%1$s</xliff:g> ipige simu kwa kutumia nambari au akaunti tofauti."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<xliff:g id="OTHER_APP">%1$s</xliff:g> imeshindwa kupiga simu. Jaribu kutumia programu nyingine inayoelekeza simu kwingine au uwasiliane na msanidi programu kwa usaidizi."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Kuzuia Simu"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Nambari ambazo haziko kwenye Anwani"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 764532e..3171a3c 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -28,7 +28,7 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"செய்தி"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"அழைப்பு முடக்கப்பட்டது."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"ஸ்பீக்கர்ஃபோன் இயக்கப்பட்டது."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"இப்போது பேசமுடியாது. என்ன விஷயம்?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"இப்போது பேசமுடியாது. என்ன விசேஷம்?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"சிறிதுநேரம் கழித்து நான் அழைக்கிறேன்."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"பிறகு அழைக்கிறேன்."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"இப்போது பேசமுடியாது, பிறகு அழைக்கிறீர்களா?"</string>
@@ -49,7 +49,7 @@
<string name="change_default_dialer_dialog_title" msgid="9101655962941740507">"<xliff:g id="NEW_APP">%s</xliff:g>ஐ இயல்புநிலை ஃபோன் பயன்பாடாக அமைக்கவா?"</string>
<string name="change_default_dialer_dialog_affirmative" msgid="8606546663509166276">"இயல்புநிலையாக அமை"</string>
<string name="change_default_dialer_dialog_negative" msgid="9078144617060173845">"ரத்துசெய்"</string>
- <string name="change_default_dialer_warning_message" msgid="1417671460801684999">"அழைப்புகளின் எல்லா அம்சங்களையும் <xliff:g id="NEW_APP">%s</xliff:g> ஆல் செயல்படுத்தவும் கட்டுப்படுத்தவும் முடியும். நீங்கள் நம்பகமானது என கருதும் ஆப்ஸை மட்டுமே இயல்புநிலை ஃபோன் பயன்பாடாக அமைக்க வேண்டும்."</string>
+ <string name="change_default_dialer_warning_message" msgid="1417671460801684999">"அழைப்புகளின் எல்லா அம்சங்களையும் <xliff:g id="NEW_APP">%s</xliff:g> ஆல் செயல்படுத்தவும் கட்டுப்படுத்தவும் முடியும். நீங்கள் நம்பகமானது என கருதும் பயன்பாடுகளை மட்டுமே இயல்புநிலை ஃபோன் பயன்பாடாக அமைக்க வேண்டும்."</string>
<string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"<xliff:g id="NEW_APP">%s</xliff:g>ஐ இயல்பு அழைப்புச் சோதனை ஆப்ஸாக அமைக்கவா?"</string>
<string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="5128397581530600941">"<xliff:g id="OLD_APP">%s</xliff:g> ஆப்ஸால் இனி அழைப்புகளைச் சோதனைச் செய்ய முடியாது."</string>
<string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> ஆப்ஸால் உங்கள் தொடர்புகளில் இல்லாத அழைப்பாளர்களைப் பற்றிய தகவலைப் பார்க்க முடியும், மேலும் அவர்கள் செய்யும் அழைப்புகளைத் தடுக்கவும் முடியும். நீங்கள் நம்பும் ஆப்ஸை மட்டுமே இயல்பு அழைப்புச் சோதனை ஆப்ஸாக அமைக்க வேண்டும்."</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"இந்த அழைப்பை எவ்வாறு மேற்கொள்ள வேண்டும் எனத் தேர்ந்தெடுக்கவும்"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g>ஐப் பயன்படுத்தி அழைப்பைத் திருப்பி விடு"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"எனது மொபைல் எண்ணைப் பயன்படுத்தி அழை"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"வேறொரு எண் அல்லது கணக்கைப் பயன்படுத்தி அழைக்க, <xliff:g id="OTHER_APP">%1$s</xliff:g>ஐ அனுமதிக்கவும்."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 23067e6..dbe52cf 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"ఈ కాల్ ఎలా చేయాలో ఎంచుకోండి"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ఉపయోగించి కాల్ మళ్లించు"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"నా ఫోన్ నంబర్ ఉపయోగించి కాల్ చేయి"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"వేరే నంబర్ లేదా ఖాతాను ఉపయోగించి కాల్ చేయడానికి <xliff:g id="OTHER_APP">%1$s</xliff:g>ని అనుమతించండి."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 514c123..2b49758 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"เลือกวิธีโทรออก"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"โอนสายโดยใช้ <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"โทรออกโดยใช้หมายเลขโทรศัพท์ของฉัน"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"อนุญาตให้ <xliff:g id="OTHER_APP">%1$s</xliff:g> โทรออกโดยใช้หมายเลขหรือบัญชีอื่น"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index d340b41..7c0ea81 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -29,7 +29,7 @@
<string name="accessibility_call_muted" msgid="2776111226185342220">"Naka-mute ang tawag."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Pinapagana ang speakerphone."</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Di masagot ngayon. Ano\'ng meron?"</string>
- <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Ako na lang ang tatawag sa \'yo."</string>
+ <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Tawagan kita muli."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Tawagan kita mamaya."</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Di masagot ngayon. Tawag ka mamaya?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Mga mabilisang tugon"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Mga hindi nasagot na tawag"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Pag-block ng Tawag"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Tatapusin ng pagtawag na ito ang iyong tawag sa <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Piliin kung paano gagawin ang tawag na ito"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"I-redirect ang tawag gamit ang <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Tumawag gamit ang aking numero ng telepono"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Payagan ang <xliff:g id="OTHER_APP">%1$s</xliff:g> na tumawag gamit ang ibang numero o account."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Hindi makatawag sa pamamagitan ng <xliff:g id="OTHER_APP">%1$s</xliff:g>. Subukang gumamit ng ibang app sa pag-redirect ng tawag o makipag-ugnayan sa developer para sa tulong."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Pag-block ng Tawag"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Mga numerong wala sa Mga Contact"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index b9d74bd..132ef54 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -56,11 +56,11 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Varsayılan Olarak Ayarla"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"İptal"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Engellenen numaralar"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Engellenen numaralardan gelen telefon aramalarını veya kısa mesajları almayacaksınız."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"Engellenen numaralardan gelen çağrıları veya kısa mesajları almazsınız."</string>
<string name="block_number" msgid="1101252256321306179">"Numara ekle"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> numaralı telefonun engellemesi kaldırılsın mı?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Engellemeyi kaldır"</string>
- <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Şu numaradan gelen aramaları ve kısa mesajları engelle:"</string>
+ <string name="add_blocked_dialog_body" msgid="9030243212265516828">"Şu numaradan gelen çağrıları ve kısa mesajları engelle:"</string>
<string name="add_blocked_number_hint" msgid="6847675097085433553">"Telefon numarası"</string>
<string name="block_button" msgid="8822290682524373357">"Engelle"</string>
<string name="non_primary_user" msgid="5180129233352533459">"Yalnızca cihaz sahibi engellenen numaraları görüntüleyebilir ve yönetebilir."</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Cevapsız çağrılar"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Çağrı Engelleme"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Bu çağrıyı yaptığınızda <xliff:g id="OTHER_APP">%1$s</xliff:g> çağrınız sona erecek."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Bu aramanın nasıl yapılacağını seçin"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> uygulamasını kullanarak aramayı yönlendir"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Telefon numaramı kullanarak ara"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> uygulamasının, farklı bir numara veya hesap kullanarak arama yapmasına izin verin."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Arama <xliff:g id="OTHER_APP">%1$s</xliff:g> ile yapılamaz. Farklı bir arama yönlendirme uygulaması kullanmayı veya yardım almak için geliştirici ile iletişime geçmeyi deneyin."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Çağrı Engelleme"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Kişiler arasında bulunmayan numaralar"</string>
@@ -102,8 +100,8 @@
<string name="phone_settings_private_num_summary_txt" msgid="7516314821207782191">"Gizli numaradan arayanlar engellenir"</string>
<string name="phone_settings_payphone_txt" msgid="2493356957416981318">"Ankesörlü telefon"</string>
<string name="phone_settings_payphone_summary_txt" msgid="6126709946103814653">"Ankesörlü telefonlardan gelen çağrılar engellenir"</string>
- <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Bilinmeyen numaralar"</string>
- <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Tanımlanamayan arayanlardan gelen aramaları engelle"</string>
+ <string name="phone_settings_unknown_txt" msgid="5836407031508172721">"Bilinmeyen"</string>
+ <string name="phone_settings_unknown_summary_txt" msgid="3457690230497753233">"Tanımlanamayan arayanlardan gelen çağrılar engellenir"</string>
<string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="628536625775266096">"Çağrı Engelleme"</string>
<string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="6264230048947693941">"Çağrı Engelleme devre dışı bırakıldı"</string>
<string name="phone_strings_emergency_call_made_dialog_title_txt" msgid="7421611725400166580">"Acil durum çağrısı yapıldı"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index bf5b1c4..1acdcf6 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Виберіть, як здійснити цей виклик"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Переспрямувати через додаток <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Телефонувати зі свого номера"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Дозволити додатку <xliff:g id="OTHER_APP">%1$s</xliff:g> здійснити виклик з іншого номера чи облікового запису."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Не вдається здійснити виклик у додатку <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>
@@ -102,8 +100,8 @@
<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_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>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index f62b2df..e22f21f 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -68,8 +68,8 @@
<string name="blocked_numbers_butter_bar_title" msgid="438170866438793182">"مسدود کرنا عارضی طور پر آف ہے"</string>
<string name="blocked_numbers_butter_bar_body" msgid="2223244484319442431">"جب آپ کوئی ایمرجنسی نمبر ڈائل کرتے یا اسے متن بھیجتے ہیں تو انسداد کو آف کر دیا جاتا ہے تاکہ ہنگامی سروسز آپ سے رابطہ کر سکیں۔"</string>
<string name="blocked_numbers_butter_bar_button" msgid="2197943354922010696">"اب دوبارہ فعال کریں"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> مسدود کر دیا گیا"</string>
- <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> غیر مسدود کر دیا گیا"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="7678509606805029540">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> مسدود ہے"</string>
+ <string name="blocked_numbers_number_unblocked_message" msgid="977894647366750418">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> غیر مسدود ہے"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"ہنگامی نمبر مسدود کرنے سے قاصر۔"</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> پہلے ہی مسدود ہے۔"</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"کال کرنے کیلئے ذاتی ڈائلر استعمال ہو رہا ہے"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"یہ کال کرنے کا طریقہ منتخب کریں"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"<xliff:g id="OTHER_APP">%1$s</xliff:g> کے ذریعے کال کو ریڈائریکٹ کریں"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"میرا فون نمبر استعمال کر کے کال کريں"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> کو کوئی دوسرا نمبر یا اکاؤنٹ استعمال کر کے کال کرنے کی اجازت دیں۔"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index ceec81b..39ef640 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -50,13 +50,13 @@
<string name="change_default_dialer_dialog_affirmative" msgid="8606546663509166276">"Asosiy ilova sifatida o‘rnatish"</string>
<string name="change_default_dialer_dialog_negative" msgid="9078144617060173845">"Bekor qilish"</string>
<string name="change_default_dialer_warning_message" msgid="1417671460801684999">"<xliff:g id="NEW_APP">%s</xliff:g> ilovasi qo‘ng‘iroq qilishga yodam beradi va qo‘ng‘iroqlarga tegishli boshqa barcha parametrlarni boshqaradi. Qo‘ng‘iroqlar uchun faqat ishonarli ilovani asosiy ilova qilib o‘rnatish lozim."</string>
- <string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"<xliff:g id="NEW_APP">%s</xliff:g> chaqiruv nazorati uchunn birlamchi ilova qilinsinmi?"</string>
+ <string name="change_default_call_screening_dialog_title" msgid="8714534302859934164">"<xliff:g id="NEW_APP">%s</xliff:g> chaqiruv-ni boshqarish u-n birlamchi ilova qilinsinmi?"</string>
<string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="5128397581530600941">"<xliff:g id="OLD_APP">%s</xliff:g> kiruvchi chaqiruvlarni boshqa boshqara olmay qoladi."</string>
- <string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> kontaktlaringizga kiritilmagan abonentlar haqidagi axborotni ko‘rish ruxsatiga ega bo‘ladi va ulardan keladigan chaqiruvlarni bloklay oladi. Chaqiruv nazorati uchun faqat ishonchli ilovalarni ishlating."</string>
- <string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Asosiy qilib belgilash"</string>
+ <string name="change_default_call_screening_warning_message" msgid="3881131132588596837">"<xliff:g id="NEW_APP">%s</xliff:g> ilovasi kontaktlaringiz ro‘yxatida bo‘lmagan abonentlar haqidagi axborotni ko‘rish ruxsatiga ega bo‘ladi va ulardan kiruvchi chaqiruvlarni bloklay oladi. Kiruvchi chaqiruvlarni boshqarish uchun faqat ishonchli ilovalarni ishlating."</string>
+ <string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"Birlamchi ilova qilish"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"Bekor qilish"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"Bloklangan raqamlar"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"Bloklangan raqamlardan keladigan chaqiruv yoki SMS xabarlar qabul qilinmaydi."</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"Bloklangan telefon raqamlaridan chaqiruv yoki matnli xabarlar qabul qilib bo‘lmaydi."</string>
<string name="block_number" msgid="1101252256321306179">"Biror raqamni bloklash"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"<xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> raqami blokdan chiqarilsinmi?"</string>
<string name="unblock_button" msgid="3078048901972674170">"Blokdan chiqarish"</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Javobsiz chaqiruvlar"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Chaqiruvlarni bloklash"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Bu qo‘ng‘iroqni amalga oshirsangiz, <xliff:g id="OTHER_APP">%1$s</xliff:g> qo‘ng‘irog‘i tugatiladi."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Telefon qilish usulini tanlang"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Chaqiruv <xliff:g id="OTHER_APP">%1$s</xliff:g> orqali qayta uzatilsin"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Mening raqamim orqali telefon qilinsin"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"<xliff:g id="OTHER_APP">%1$s</xliff:g> ilovasiga chaqiruvlarni boshqa raqam yoki hisob orqali amalga oshirishiga ruxsat berilsin."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Chaqiruvlar uchun <xliff:g id="OTHER_APP">%1$s</xliff:g> ilovasidan foydalanish imkonsiz. Chaqiruvlarni uzatish uchun boshqa ilovadan foydalaning yoki dasturchiga yordam uchun murojaat qiling."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Chaqiruvlarni bloklash"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Notanish raqamlar"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 233c30e..09df557 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -28,12 +28,12 @@
<string name="notification_missedCall_message" msgid="3049928912736917988">"Tin nhắn"</string>
<string name="accessibility_call_muted" msgid="2776111226185342220">"Đã tắt tiếng cuộc gọi."</string>
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Đã bật loa ngoài."</string>
- <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Giờ tôi không nói chuyện được. Có việc gì không?"</string>
+ <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"Giờ tôi ko thể nói chuyện. Gì vậy?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Tôi sẽ gọi lại ngay."</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Tôi sẽ gọi lại sau."</string>
- <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Giờ tôi không nói chuyện được. Bạn gọi lại sau nhé?"</string>
+ <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"Giờ tôi ko thể nói chuyện. Gọi sau nhé?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"Trả lời nhanh"</string>
- <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Chỉnh sửa tin nhắn trả lời nhanh"</string>
+ <string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"Chỉnh sửa trả lời nhanh"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"Trả lời nhanh"</string>
<string name="respond_via_sms_confirmation_format" msgid="7229149977515784269">"Đã gửi tin nhắn tới <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Cuộc gọi nhỡ"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Chặn cuộc gọi"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Thực hiện cuộc gọi này sẽ kết thúc cuộc gọi <xliff:g id="OTHER_APP">%1$s</xliff:g> của bạn."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Chọn cách thực hiện cuộc gọi này"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Chuyển hướng cuộc gọi bằng cách sử dụng <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Gọi bằng số điện thoại của bạn"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Cho phép <xliff:g id="OTHER_APP">%1$s</xliff:g> thực hiện cuộc gọi bằng số hoặc tài khoản khác."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Không thể thực hiện cuộc gọi bằng <xliff:g id="OTHER_APP">%1$s</xliff:g>. Hãy thử dùng ứng dụng chuyển hướng cuộc gọi khác hoặc liên hệ với nhà phát triển để nhận trợ giúp."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Chặn cuộc gọi"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Các số không có trong Danh bạ"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index d370d74..2512a91 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -30,7 +30,7 @@
<string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"扬声器已启用。"</string>
<string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"现在无法接听。有什么事吗?"</string>
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"我马上会打给你。"</string>
- <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"我稍后给你回电。"</string>
+ <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"我稍后会再打给你。"</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"现在无法接听。能稍后再打给我吗?"</string>
<string name="respond_via_sms_setting_title" msgid="3754000371039709383">"快速回复"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"修改快速回复"</string>
@@ -73,7 +73,7 @@
<string name="blocked_numbers_block_emergency_number_message" msgid="917851876780698387">"无法屏蔽紧急服务号码。"</string>
<string name="blocked_numbers_number_already_blocked_message" msgid="4392247814500811798">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> 已被屏蔽。"</string>
<string name="toast_personal_call_msg" msgid="5115361633476779723">"使用个人拨号器拨打电话"</string>
- <string name="notification_incoming_call" msgid="7713197997773986670">"<xliff:g id="CALL_FROM">%2$s</xliff:g>的 <xliff:g id="CALL_VIA">%1$s</xliff:g> 通话请求"</string>
+ <string name="notification_incoming_call" msgid="7713197997773986670">"接到来自<xliff:g id="CALL_FROM">%2$s</xliff:g>的 <xliff:g id="CALL_VIA">%1$s</xliff:g> 通话邀请"</string>
<string name="notification_incoming_video_call" msgid="6638486071698373893">"接到来自<xliff:g id="CALL_FROM">%2$s</xliff:g>的 <xliff:g id="CALL_VIA">%1$s</xliff:g> 视频通话邀请"</string>
<string name="answering_ends_other_call" msgid="8282145910153766401">"如果接听此来电,您的 <xliff:g id="CALL_VIA">%1$s</xliff:g> 通话会中断。"</string>
<string name="answering_ends_other_calls" msgid="1198589551399049197">"如果接听此来电,您的 <xliff:g id="CALL_VIA">%1$s</xliff:g> 通话会中断。"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"选择拨打此电话的方式"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"使用<xliff:g id="OTHER_APP">%1$s</xliff:g>转移呼叫"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"使用我的电话号码拨打电话"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"允许<xliff:g id="OTHER_APP">%1$s</xliff:g>通过其他号码或帐号拨打电话。"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"无法使用<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>
@@ -103,7 +101,7 @@
<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_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>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index b8380dd..de78d66 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"選擇如何撥打此電話"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"使用「<xliff:g id="OTHER_APP">%1$s</xliff:g>」將通話重新導向"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"使用我的電話號碼撥打"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"允許<xliff:g id="OTHER_APP">%1$s</xliff:g>使用其他號碼或帳戶撥打電話。"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"<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>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index aa6f739..f9b7b54 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -32,7 +32,7 @@
<string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"我待會就回電。"</string>
<string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"我晚點回電。"</string>
<string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"我現在不方便講話,晚點再打來好嗎?"</string>
- <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"快速回應"</string>
+ <string name="respond_via_sms_setting_title" msgid="3754000371039709383">"應答短訊"</string>
<string name="respond_via_sms_setting_title_2" msgid="6104662227299493906">"編輯快速回應"</string>
<string name="respond_via_sms_setting_summary" msgid="9150281183930613065"></string>
<string name="respond_via_sms_edittext_dialog_title" msgid="20379890418289778">"快速回應"</string>
@@ -56,7 +56,7 @@
<string name="change_default_call_screening_dialog_affirmative" msgid="5503888845998386856">"設為預設來電過濾應用程式"</string>
<string name="change_default_call_screening_dialog_negative" msgid="3420459312464019224">"取消"</string>
<string name="blocked_numbers" msgid="2751843139572970579">"已封鎖的號碼"</string>
- <string name="blocked_numbers_msg" msgid="1045015186124965643">"你不會收到已封鎖號碼的來電或簡訊。"</string>
+ <string name="blocked_numbers_msg" msgid="1045015186124965643">"您不會收到已封鎖號碼的來電或簡訊。"</string>
<string name="block_number" msgid="1101252256321306179">"新增號碼"</string>
<string name="unblock_dialog_body" msgid="1614238499771862793">"要解除封鎖 <xliff:g id="NUMBER_TO_BLOCK">%1$s</xliff:g> 嗎?"</string>
<string name="unblock_button" msgid="3078048901972674170">"解除封鎖"</string>
@@ -91,9 +91,7 @@
<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="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"選擇撥打這通電話的方式"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"使用「<xliff:g id="OTHER_APP">%1$s</xliff:g>」轉接電話"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"使用我的電話號碼撥打電話"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"允許「<xliff:g id="OTHER_APP">%1$s</xliff:g>」使用其他號碼或帳戶撥打電話。"</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"無法使用「<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>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 6b9e899..718260e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -91,9 +91,7 @@
<string name="notification_channel_missed_call" msgid="8727062678632713146">"Amakholi akuphuthile"</string>
<string name="notification_channel_call_blocking" msgid="2943358779746676070">"Ukuvimbela ikholi"</string>
<string name="alert_outgoing_call" msgid="982908156825958001">"Ukwenza le kholi kuzoqeda enye ikholi yakho ye-<xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
- <string name="alert_redirect_outgoing_call_or_not" msgid="7419614878375226644">"Khetha ukuthi uyibeka kanjani le kholi"</string>
- <string name="alert_place_outgoing_call_with_redirection" msgid="3728173638697188636">"Qondisa kabusha ikholi usebenzisa i-<xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
- <string name="alert_place_unredirect_outgoing_call" msgid="3066499005445865910">"Shaya usebenzisa inombolo yami yefoni"</string>
+ <string name="alert_redirect_outgoing_call" msgid="1267579501303765238">"Vumela i-<xliff:g id="OTHER_APP">%1$s</xliff:g> ukuthi yenze ikholi isebenzisa inombolo ehlukile noma i-akhawunti."</string>
<string name="alert_redirect_outgoing_call_timeout" msgid="7268954889515301158">"Ikholi ayikwazi ukwenziwa i-<xliff:g id="OTHER_APP">%1$s</xliff:g>. Zama ukusebenzisa uhlelo lokusebenza oluhlukile lokuqondisa kabusha ikholi noma uxhumane nonjiniyela ukuze uthole usizo."</string>
<string name="phone_settings_call_blocking_txt" msgid="3976004073043846733">"Ukuvimbela ikholi"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="3126829421867168652">"Inombolo ayikho koxhumana nabo"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 5b9636d..9cbbf46 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -53,11 +53,6 @@
Devices should overlay this value based on the type of vibration hardware they employ. -->
<bool name="use_simple_vibration_pattern">false</bool>
- <!-- When true, if Telecom is playing the ringtone, it will attempt to pause for some time
- between repeats of the ringtone.
- When false, the ringtone will be looping with no pause. -->
- <bool name="should_pause_between_ringtone_repeats">true</bool>
-
<!-- Threshold for the X+Y component of gravity needed for the device orientation to be
classified as being on a user's ear. -->
<item name="device_on_ear_xy_gravity_threshold" format="float" type="dimen">5.5</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2c6a84a..93c5782 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -48,6 +48,14 @@
[CHAR LIMIT=18] -->
<string name="notification_missedCall_message">Message</string>
+ <!-- Disconnected call notification label, used when the call has been automatically
+ disconnected by telecom to make room for a higher priority call, such as an emergency
+ call.-->
+ <string name="notification_disconnectedCall_title">Disconnected call</string>
+ <!-- Body of the notification presented when an ongoing call is disconnected in favor of placing
+ an emergency call. This is required by some carriers. [CHAR LIMIT=NONE] -->
+ <string name="notification_disconnectedCall_body">The call to <xliff:g id="caller">%s</xliff:g> has been disconnected due to an emergency call being placed.</string>
+
<!-- Title for the persistent notification presented when an app has requested that a call
be put into the background so that the app can access the audio from the call
[CHAR LIMIT=40] -->
@@ -290,6 +298,8 @@
<string name="notification_channel_call_blocking">Call Blocking</string>
<!-- Notification channel name for a channel containing background call notifications. -->
<string name="notification_channel_background_calls">Background calls</string>
+ <!-- Notification channel name for a channel containing disconnected call notifications. -->
+ <string name="notification_channel_disconnected_calls">Disconnected calls</string>
<!-- Alert dialog content used to inform the user that placing a new outgoing call will end the
ongoing call in the app "other_app". -->
diff --git a/src/com/android/server/telecom/AsyncRingtonePlayer.java b/src/com/android/server/telecom/AsyncRingtonePlayer.java
index 8f11882..1a7d0f7 100644
--- a/src/com/android/server/telecom/AsyncRingtonePlayer.java
+++ b/src/com/android/server/telecom/AsyncRingtonePlayer.java
@@ -43,10 +43,6 @@
// Message codes used with the ringtone thread.
private static final int EVENT_PLAY = 1;
private static final int EVENT_STOP = 2;
- private static final int EVENT_REPEAT = 3;
-
- // The interval in which to restart the ringer.
- private static final int RESTART_RINGER_MILLIS = 3000;
/** Handler running on the ringtone thread. */
private Handler mHandler;
@@ -60,26 +56,10 @@
*/
private CompletableFuture<Boolean> mHapticsFuture = null;
- /**
- * Determines if the {@link AsyncRingtonePlayer} should pause between repeats of the ringtone.
- * When {@code true}, the system will check if the ringtone has stopped every
- * {@link #RESTART_RINGER_MILLIS} and restart the ringtone if it has stopped. This does not
- * guarantee that there is {@link #RESTART_RINGER_MILLIS} between each repeat of the ringtone,
- * rather it ensures that for short ringtones, or ringtones which are not a multiple of
- * {@link #RESTART_RINGER_MILLIS} in duration that there will be some pause between repetitions.
- * When {@code false}, the ringtone will be looped continually with no attempt to pause between
- * repeats.
- */
- private boolean mShouldPauseBetweenRepeat = true;
-
public AsyncRingtonePlayer() {
// Empty
}
- public AsyncRingtonePlayer(boolean shouldPauseBetweenRepeat) {
- mShouldPauseBetweenRepeat = shouldPauseBetweenRepeat;
- }
-
/**
* Plays the appropriate ringtone for the specified call.
* If {@link VolumeShaper.Configuration} is specified, it is applied to the ringtone to change
@@ -156,9 +136,6 @@
case EVENT_PLAY:
handlePlay((SomeArgs) msg.obj);
break;
- case EVENT_REPEAT:
- handleRepeat();
- break;
case EVENT_STOP:
handleStop();
break;
@@ -241,43 +218,18 @@
}
}
- if (mShouldPauseBetweenRepeat) {
- // We're trying to pause between repeats, so the ringtone will not intentionally loop.
- // Instead, we'll use a handler message to perform repeats.
- handleRepeat();
- } else {
- mRingtone.setLooping(true);
- if (mRingtone.isPlaying()) {
- Log.d(this, "Ringtone already playing.");
- return;
- }
- mRingtone.play();
- Log.i(this, "Play ringtone, looping.");
+ mRingtone.setLooping(true);
+ if (mRingtone.isPlaying()) {
+ Log.d(this, "Ringtone already playing.");
+ return;
}
+ mRingtone.play();
+ Log.i(this, "Play ringtone, looping.");
} finally {
Log.cancelSubsession(session);
}
}
- private void handleRepeat() {
- if (mRingtone == null) {
- return;
- }
- if (mRingtone.isPlaying()) {
- Log.d(this, "Ringtone already playing.");
- } else {
- mRingtone.play();
- Log.i(this, "Repeat ringtone.");
- }
-
- // Repost event to restart ringer in {@link RESTART_RINGER_MILLIS}.
- synchronized(this) {
- if (!mHandler.hasMessages(EVENT_REPEAT)) {
- mHandler.sendEmptyMessageDelayed(EVENT_REPEAT, RESTART_RINGER_MILLIS);
- }
- }
- }
-
/**
* Stops the playback of the ringtone. Executes on the ringtone-thread.
*/
@@ -292,10 +244,6 @@
}
synchronized(this) {
- // At the time that STOP is handled, there should be no need for repeat messages in the
- // queue.
- mHandler.removeMessages(EVENT_REPEAT);
-
if (mHandler.hasMessages(EVENT_PLAY)) {
Log.v(this, "Keeping alive ringtone thread for subsequent play request.");
} else {
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 91466b5..a923d66 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -58,6 +58,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telecom.IVideoProvider;
import com.android.internal.util.Preconditions;
+import com.android.server.telecom.ui.DisconnectedCallNotifier;
import com.android.server.telecom.ui.ToastFactory;
import java.io.IOException;
@@ -327,6 +328,11 @@
*/
private int mHandlePresentation;
+ /**
+ * The verification status for an incoming call's number.
+ */
+ private @Connection.VerificationStatus int mCallerNumberVerificationStatus;
+
/** The caller display name (CNAP) set by the connection service. */
private String mCallerDisplayName;
@@ -369,9 +375,10 @@
/**
* Override the disconnect cause set by the connection service. Used for audio processing and
- * simulated ringing calls.
+ * simulated ringing calls as well as the condition when an emergency call is ended due to
+ * an emergency call being placed.
*/
- private int mOverrideDisconnectCauseCode = DisconnectCause.UNKNOWN;
+ private DisconnectCause mOverrideDisconnectCause = new DisconnectCause(DisconnectCause.UNKNOWN);
private Bundle mIntentExtras = new Bundle();
@@ -1086,6 +1093,14 @@
return mHandlePresentation;
}
+ public void setCallerNumberVerificationStatus(
+ @Connection.VerificationStatus int callerNumberVerificationStatus) {
+ mCallerNumberVerificationStatus = callerNumberVerificationStatus;
+ }
+
+ public @Connection.VerificationStatus int getCallerNumberVerificationStatus() {
+ return mCallerNumberVerificationStatus;
+ }
void setHandle(Uri handle) {
setHandle(handle, TelecomManager.PRESENTATION_ALLOWED);
@@ -1169,23 +1184,30 @@
}
/**
- * @param disconnectCause The reason for the disconnection, represented by
- * {@link android.telecom.DisconnectCause}.
+ * @param cause The reason for the disconnection, represented by
+ * {@link android.telecom.DisconnectCause}.
*/
- public void setDisconnectCause(DisconnectCause disconnectCause) {
+ public void setDisconnectCause(DisconnectCause cause) {
// TODO: Consider combining this method with a setDisconnected() method that is totally
// separate from setState.
- if (mOverrideDisconnectCauseCode != DisconnectCause.UNKNOWN) {
- disconnectCause = new DisconnectCause(mOverrideDisconnectCauseCode,
- disconnectCause.getLabel(), disconnectCause.getDescription(),
- disconnectCause.getReason(), disconnectCause.getTone());
+
+ if (mOverrideDisconnectCause.getCode() != DisconnectCause.UNKNOWN) {
+ cause = new DisconnectCause(mOverrideDisconnectCause.getCode(),
+ TextUtils.isEmpty(mOverrideDisconnectCause.getLabel()) ?
+ cause.getLabel() : mOverrideDisconnectCause.getLabel(),
+ (mOverrideDisconnectCause.getDescription() == null) ?
+ cause.getDescription() :mOverrideDisconnectCause.getDescription(),
+ TextUtils.isEmpty(mOverrideDisconnectCause.getReason()) ?
+ cause.getReason() : mOverrideDisconnectCause.getReason(),
+ (mOverrideDisconnectCause.getTone() == 0) ?
+ cause.getTone() : mOverrideDisconnectCause.getTone());
}
- mAnalytics.setCallDisconnectCause(disconnectCause);
- mDisconnectCause = disconnectCause;
+ mAnalytics.setCallDisconnectCause(cause);
+ mDisconnectCause = cause;
}
- public void setOverrideDisconnectCauseCode(int overrideDisconnectCauseCode) {
- mOverrideDisconnectCauseCode = overrideDisconnectCauseCode;
+ public void setOverrideDisconnectCauseCode(DisconnectCause overrideDisconnectCause) {
+ mOverrideDisconnectCause = overrideDisconnectCause;
}
@@ -1830,6 +1852,8 @@
switch (mCallDirection) {
case CALL_DIRECTION_INCOMING:
+ setCallerNumberVerificationStatus(connection.getCallerNumberVerificationStatus());
+
// Listeners (just CallsManager for now) will be responsible for checking whether
// the call should be blocked.
for (Listener l : mListeners) {
@@ -1965,12 +1989,12 @@
abort(disconnectionTimeout);
} else if (mState != CallState.ABORTED && mState != CallState.DISCONNECTED) {
if (mState == CallState.AUDIO_PROCESSING && !hasGoneActiveBefore()) {
- mOverrideDisconnectCauseCode = DisconnectCause.REJECTED;
+ setOverrideDisconnectCauseCode(new DisconnectCause(DisconnectCause.REJECTED));
} else if (mState == CallState.SIMULATED_RINGING) {
// This is the case where the dialer calls disconnect() because the call timed out
// or an emergency call was dialed while in this state.
// Override the disconnect cause to MISSED
- mOverrideDisconnectCauseCode = DisconnectCause.MISSED;
+ setOverrideDisconnectCauseCode(new DisconnectCause(DisconnectCause.MISSED));
}
if (mConnectionService == null) {
Log.e(this, new Exception(), "disconnect() request on a call without a"
@@ -2131,7 +2155,7 @@
// This handles the case where the user manually rejects a call that's in simulated
// ringing. Since the call is already active on the connectionservice side, we want to
// hangup, not reject.
- mOverrideDisconnectCauseCode = DisconnectCause.REJECTED;
+ setOverrideDisconnectCauseCode(new DisconnectCause(DisconnectCause.REJECTED));
if (mConnectionService != null) {
mConnectionService.disconnect(this);
} else {
diff --git a/src/com/android/server/telecom/CallAudioModeStateMachine.java b/src/com/android/server/telecom/CallAudioModeStateMachine.java
index 1d3752b..5440ebf 100644
--- a/src/com/android/server/telecom/CallAudioModeStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioModeStateMachine.java
@@ -122,8 +122,8 @@
}
}
- // TODO: remove this and replace when the new audio mode gets checked in.
- public static final int NEW_AUDIO_MODE_FOR_AUDIO_PROCESSING = AudioManager.MODE_NORMAL;
+ // TODO: remove this and replace when the new audio mode gets pushed to AOSP.
+ public static final int NEW_AUDIO_MODE_FOR_AUDIO_PROCESSING = 4;
public static final int INITIALIZE = 1;
// These ENTER_*_FOCUS commands are for testing.
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
index 3a5d113..82d245d 100644
--- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
@@ -123,6 +123,11 @@
// Wired headset, earpiece, or speakerphone, in that order of precedence.
public static final int SWITCH_BASELINE_ROUTE = 1005;
+ // Messages denoting that the speakerphone was turned on/off. Used to update state when we
+ // weren't the ones who turned it on/off
+ public static final int SPEAKER_ON = 1006;
+ public static final int SPEAKER_OFF = 1007;
+
public static final int USER_SWITCH_EARPIECE = 1101;
public static final int USER_SWITCH_BLUETOOTH = 1102;
public static final int USER_SWITCH_HEADSET = 1103;
@@ -181,6 +186,8 @@
put(SWITCH_HEADSET, "SWITCH_HEADSET");
put(SWITCH_SPEAKER, "SWITCH_SPEAKER");
put(SWITCH_BASELINE_ROUTE, "SWITCH_BASELINE_ROUTE");
+ put(SPEAKER_ON, "SPEAKER_ON");
+ put(SPEAKER_OFF, "SPEAKER_OFF");
put(USER_SWITCH_EARPIECE, "USER_SWITCH_EARPIECE");
put(USER_SWITCH_BLUETOOTH, "USER_SWITCH_BLUETOOTH");
@@ -374,6 +381,7 @@
switch (msg.what) {
case SWITCH_EARPIECE:
case USER_SWITCH_EARPIECE:
+ case SPEAKER_OFF:
// Nothing to do here
return HANDLED;
case BT_AUDIO_CONNECTED:
@@ -405,6 +413,7 @@
return HANDLED;
case SWITCH_SPEAKER:
case USER_SWITCH_SPEAKER:
+ case SPEAKER_ON:
transitionTo(mActiveSpeakerRoute);
return HANDLED;
case SWITCH_FOCUS:
@@ -449,6 +458,7 @@
switch (msg.what) {
case SWITCH_EARPIECE:
case USER_SWITCH_EARPIECE:
+ case SPEAKER_OFF:
// Nothing to do here
return HANDLED;
case BT_AUDIO_CONNECTED:
@@ -473,6 +483,7 @@
return HANDLED;
case SWITCH_SPEAKER:
case USER_SWITCH_SPEAKER:
+ case SPEAKER_ON:
transitionTo(mQuiescentSpeakerRoute);
return HANDLED;
case SWITCH_FOCUS:
@@ -594,10 +605,12 @@
return HANDLED;
case SWITCH_HEADSET:
case USER_SWITCH_HEADSET:
+ case SPEAKER_OFF:
// Nothing to do
return HANDLED;
case SWITCH_SPEAKER:
case USER_SWITCH_SPEAKER:
+ case SPEAKER_ON:
transitionTo(mActiveSpeakerRoute);
return HANDLED;
case SWITCH_FOCUS:
@@ -662,10 +675,12 @@
return HANDLED;
case SWITCH_HEADSET:
case USER_SWITCH_HEADSET:
+ case SPEAKER_OFF:
// Nothing to do
return HANDLED;
case SWITCH_SPEAKER:
case USER_SWITCH_SPEAKER:
+ case SPEAKER_ON:
transitionTo(mQuiescentSpeakerRoute);
return HANDLED;
case SWITCH_FOCUS:
@@ -835,9 +850,12 @@
mHasUserExplicitlyLeftBluetooth = true;
// fall through
case SWITCH_SPEAKER:
+ case SPEAKER_ON:
setBluetoothOff();
transitionTo(mActiveSpeakerRoute);
return HANDLED;
+ case SPEAKER_OFF:
+ return HANDLED;
case SWITCH_FOCUS:
if (msg.arg1 == NO_FOCUS) {
// Only disconnect SCO audio here instead of routing away from BT entirely.
@@ -926,8 +944,11 @@
mHasUserExplicitlyLeftBluetooth = true;
// fall through
case SWITCH_SPEAKER:
+ case SPEAKER_ON:
transitionTo(mActiveSpeakerRoute);
return HANDLED;
+ case SPEAKER_OFF:
+ return HANDLED;
case SWITCH_FOCUS:
if (msg.arg1 == NO_FOCUS) {
reinitialize();
@@ -987,6 +1008,7 @@
return HANDLED;
case SWITCH_BLUETOOTH:
case USER_SWITCH_BLUETOOTH:
+ case SPEAKER_OFF:
// Nothing to do
return HANDLED;
case SWITCH_HEADSET:
@@ -999,6 +1021,7 @@
return HANDLED;
case SWITCH_SPEAKER:
case USER_SWITCH_SPEAKER:
+ case SPEAKER_ON:
transitionTo(mQuiescentSpeakerRoute);
return HANDLED;
case SWITCH_FOCUS:
@@ -1143,6 +1166,12 @@
case USER_SWITCH_SPEAKER:
// Nothing to do
return HANDLED;
+ case SPEAKER_ON:
+ // Expected, since we just transitioned here
+ return HANDLED;
+ case SPEAKER_OFF:
+ sendInternalMessage(SWITCH_BASELINE_ROUTE, INCLUDE_BLUETOOTH_IN_BASELINE);
+ return HANDLED;
case SWITCH_FOCUS:
if (msg.arg1 == NO_FOCUS) {
reinitialize();
@@ -1215,8 +1244,12 @@
return HANDLED;
case SWITCH_SPEAKER:
case USER_SWITCH_SPEAKER:
+ case SPEAKER_ON:
// Nothing to do
return HANDLED;
+ case SPEAKER_OFF:
+ sendInternalMessage(SWITCH_BASELINE_ROUTE, INCLUDE_BLUETOOTH_IN_BASELINE);
+ return HANDLED;
case SWITCH_FOCUS:
if (msg.arg1 == ACTIVE_FOCUS || msg.arg1 == RINGING_FOCUS) {
transitionTo(mActiveSpeakerRoute);
@@ -1294,6 +1327,28 @@
}
};
+ private final BroadcastReceiver mSpeakerPhoneChangeReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.startSession("CARSM.mSPCR");
+ try {
+ if (AudioManager.ACTION_SPEAKERPHONE_STATE_CHANGED.equals(intent.getAction())) {
+ if (mAudioManager != null) {
+ if (mAudioManager.isSpeakerphoneOn()) {
+ sendInternalMessage(SPEAKER_ON);
+ } else {
+ sendInternalMessage(SPEAKER_OFF);
+ }
+ }
+ } else {
+ Log.w(this, "Received non-speakerphone-change intent");
+ }
+ } finally {
+ Log.endSession();
+ }
+ }
+ };
+
private final ActiveEarpieceRoute mActiveEarpieceRoute = new ActiveEarpieceRoute();
private final ActiveHeadsetRoute mActiveHeadsetRoute = new ActiveHeadsetRoute();
private final ActiveBluetoothRoute mActiveBluetoothRoute = new ActiveBluetoothRoute();
@@ -1446,6 +1501,8 @@
mWasOnSpeaker = false;
mContext.registerReceiver(mMuteChangeReceiver,
new IntentFilter(AudioManager.ACTION_MICROPHONE_MUTE_CHANGED));
+ mContext.registerReceiver(mSpeakerPhoneChangeReceiver,
+ new IntentFilter(AudioManager.ACTION_SPEAKERPHONE_STATE_CHANGED));
mStatusBarNotifier.notifyMute(initState.isMuted());
mStatusBarNotifier.notifySpeakerphone(initState.getRoute() == CallAudioState.ROUTE_SPEAKER);
@@ -1531,8 +1588,12 @@
}
private void setSpeakerphoneOn(boolean on) {
- Log.i(this, "turning speaker phone %s", on);
- mAudioManager.setSpeakerphoneOn(on);
+ if (mAudioManager.isSpeakerphoneOn() != on) {
+ Log.i(this, "turning speaker phone %s", on);
+ mAudioManager.setSpeakerphoneOn(on);
+ } else {
+ Log.i(this, "Ignoring speakerphone request -- already %s", on);
+ }
mStatusBarNotifier.notifySpeakerphone(on);
}
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index cf922a6..5d51149 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -72,7 +72,6 @@
import android.util.Pair;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.telephony.AsyncEmergencyContactNotifier;
import android.telecom.CallerInfo;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyProperties;
@@ -95,6 +94,7 @@
import com.android.server.telecom.ui.CallRedirectionConfirmDialogActivity;
import com.android.server.telecom.ui.CallRedirectionTimeoutDialogActivity;
import com.android.server.telecom.ui.ConfirmCallDialogActivity;
+import com.android.server.telecom.ui.DisconnectedCallNotifier;
import com.android.server.telecom.ui.IncomingCallNotifier;
import com.android.server.telecom.ui.ToastFactory;
@@ -329,6 +329,7 @@
private final TelecomSystem.SyncRoot mLock;
private final PhoneAccountRegistrar mPhoneAccountRegistrar;
private final MissedCallNotifier mMissedCallNotifier;
+ private final DisconnectedCallNotifier mDisconnectedCallNotifier;
private IncomingCallNotifier mIncomingCallNotifier;
private final CallerInfoLookupHelper mCallerInfoLookupHelper;
private final IncomingCallFilter.Factory mIncomingCallFilterFactory;
@@ -437,6 +438,7 @@
TelecomSystem.SyncRoot lock,
CallerInfoLookupHelper callerInfoLookupHelper,
MissedCallNotifier missedCallNotifier,
+ DisconnectedCallNotifier.Factory disconnectedCallNotifierFactory,
PhoneAccountRegistrar phoneAccountRegistrar,
HeadsetMediaButtonFactory headsetMediaButtonFactory,
ProximitySensorManagerFactory proximitySensorManagerFactory,
@@ -468,6 +470,7 @@
mPhoneAccountRegistrar = phoneAccountRegistrar;
mPhoneAccountRegistrar.addListener(mPhoneAccountListener);
mMissedCallNotifier = missedCallNotifier;
+ mDisconnectedCallNotifier = disconnectedCallNotifierFactory.create(mContext, this);
StatusBarNotifier statusBarNotifier = new StatusBarNotifier(context, this);
mWiredHeadsetManager = wiredHeadsetManager;
mSystemStateHelper = systemStateHelper;
@@ -547,6 +550,7 @@
mListeners.add(mCallAudioManager);
mListeners.add(mCallRecordingTonePlayer);
mListeners.add(missedCallNotifier);
+ mListeners.add(mDisconnectedCallNotifier);
mListeners.add(mHeadsetMediaButton);
mListeners.add(mProximitySensorManager);
mListeners.add(audioProcessingNotification);
@@ -1194,10 +1198,8 @@
}
}
- boolean isRttSettingOn = isRttSettingOn(phoneAccountHandle);
- if (isRttSettingOn ||
- extras.getBoolean(TelecomManager.EXTRA_START_CALL_WITH_RTT, false)) {
- Log.i(this, "Incoming call requesting RTT, rtt setting is %b", isRttSettingOn);
+ if (extras.getBoolean(TelecomManager.EXTRA_START_CALL_WITH_RTT, false)) {
+ Log.i(this, "Incoming call requesting RTT");
call.createRttStreams();
// Even if the phone account doesn't support RTT yet, the connection manager might
// change that. Set this to check it later.
@@ -1645,12 +1647,9 @@
boolean isVoicemail = isVoicemail(callToUse.getHandle(), accountToUse);
- boolean isRttSettingOn = isRttSettingOn(phoneAccountHandle);
- if (!isVoicemail && (isRttSettingOn || (extras != null
- && extras.getBoolean(TelecomManager.EXTRA_START_CALL_WITH_RTT,
- false)))) {
- Log.d(this, "Outgoing call requesting RTT, rtt setting is %b",
- isRttSettingOn);
+ if (!isVoicemail && extras != null
+ && extras.getBoolean(TelecomManager.EXTRA_START_CALL_WITH_RTT, false)) {
+ Log.d(this, "Outgoing call requesting RTT");
if (callToUse.isEmergencyCall() || (accountToUse != null
&& accountToUse.hasCapabilities(PhoneAccount.CAPABILITY_RTT))) {
// If the call requested RTT and it's an emergency call, ignore the
@@ -2536,24 +2535,6 @@
mProximitySensorManager.turnOff(screenOnImmediately);
}
- private boolean isRttSettingOn(PhoneAccountHandle handle) {
- boolean isRttModeSettingOn = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.RTT_CALLING_MODE, 0) != 0;
- // If the carrier config says that we should ignore the RTT mode setting from the user,
- // assume that it's off (i.e. only make an RTT call if it's requested through the extra).
- boolean shouldIgnoreRttModeSetting = getCarrierConfigForPhoneAccount(handle)
- .getBoolean(CarrierConfigManager.KEY_IGNORE_RTT_MODE_SETTING_BOOL, false);
- return isRttModeSettingOn && !shouldIgnoreRttModeSetting;
- }
-
- private PersistableBundle getCarrierConfigForPhoneAccount(PhoneAccountHandle handle) {
- int subscriptionId = mPhoneAccountRegistrar.getSubscriptionIdForPhoneAccount(handle);
- CarrierConfigManager carrierConfigManager =
- mContext.getSystemService(CarrierConfigManager.class);
- PersistableBundle result = carrierConfigManager.getConfigForSubId(subscriptionId);
- return result == null ? new PersistableBundle() : result;
- }
-
void phoneAccountSelected(Call call, PhoneAccountHandle account, boolean setDefault) {
if (!mCalls.contains(call)) {
Log.i(this, "Attempted to add account to unknown call %s", call);
@@ -2716,7 +2697,7 @@
&& disconnectCause.getCode() == DisconnectCause.REMOTE) {
// If the remote end hangs up while in SIMULATED_RINGING, the call should
// be marked as missed.
- call.setOverrideDisconnectCauseCode(DisconnectCause.MISSED);
+ call.setOverrideDisconnectCauseCode(new DisconnectCause(DisconnectCause.MISSED));
}
call.setDisconnectCause(disconnectCause);
setCallState(call, CallState.DISCONNECTED, "disconnected set explicitly");
@@ -3115,6 +3096,14 @@
}
/**
+ * Retrieves the {@link DisconnectedCallNotifier}
+ * @return The {@link DisconnectedCallNotifier}.
+ */
+ DisconnectedCallNotifier getDisconnectedCallNotifier() {
+ return mDisconnectedCallNotifier;
+ }
+
+ /**
* Retrieves the {@link MissedCallNotifier}
* @return The {@link MissedCallNotifier}.
*/
@@ -3643,7 +3632,8 @@
// we will try to connect the first outgoing call.
call.getAnalytics().setCallIsAdditional(true);
outgoingCall.getAnalytics().setCallIsInterrupted(true);
- outgoingCall.disconnect();
+ outgoingCall.disconnect("Disconnecting dialing call in favor of new dialing"
+ + " emergency call.");
return true;
}
if (outgoingCall.getState() == CallState.SELECT_PHONE_ACCOUNT) {
@@ -3651,7 +3641,8 @@
// state, just disconnect it since the user has explicitly started a new call.
call.getAnalytics().setCallIsAdditional(true);
outgoingCall.getAnalytics().setCallIsInterrupted(true);
- outgoingCall.disconnect();
+ outgoingCall.disconnect("Disconnecting call in SELECT_PHONE_ACCOUNT in favor"
+ + " of new outgoing call.");
return true;
}
return false;
@@ -3690,6 +3681,23 @@
liveCallPhoneAccount);
}
+ // We may not know which PhoneAccount the emergency call will be placed on yet, but if
+ // the liveCall PhoneAccount does not support placing emergency calls, then we know it
+ // will not be that one and we do not want multiple PhoneAccounts active during an
+ // emergency call if possible. Disconnect the active call in favor of the emergency call
+ // instead of trying to hold.
+ if (isEmergency && liveCall.getTargetPhoneAccount() != null) {
+ PhoneAccount pa = mPhoneAccountRegistrar.getPhoneAccountUnchecked(
+ liveCall.getTargetPhoneAccount());
+ if((pa.getCapabilities() & PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS) == 0) {
+ liveCall.setOverrideDisconnectCauseCode(new DisconnectCause(
+ DisconnectCause.LOCAL, DisconnectCause.REASON_EMERGENCY_CALL_PLACED));
+ liveCall.disconnect("outgoing call does not support emergency calls, "
+ + "disconnecting.");
+ }
+ return true;
+ }
+
// First thing, if we are trying to make a call with the same phone account as the live
// call, then allow it so that the connection service can make its own decision about
// how to handle the new call relative to the current one.
@@ -3740,7 +3748,8 @@
} else { // normal incoming ringing call.
// Hang up the ringing call to make room for the emergency call and mark as missed,
// since the user did not reject.
- ringingCall.setOverrideDisconnectCauseCode(DisconnectCause.MISSED);
+ ringingCall.setOverrideDisconnectCauseCode(
+ new DisconnectCause(DisconnectCause.MISSED));
ringingCall.reject(false, null, "emergency call dialed during ringing.");
}
return true;
@@ -4669,8 +4678,10 @@
@Override
public void performAction() {
- Log.d(this, "perform set call state for %s, state = %s", mCall, mState);
- setCallState(mCall, mState, mTag);
+ synchronized (mLock) {
+ Log.d(this, "perform set call state for %s, state = %s", mCall, mState);
+ setCallState(mCall, mState, mTag);
+ }
}
}
@@ -4685,8 +4696,10 @@
@Override
public void performAction() {
- Log.d(this, "perform unhold call for %s", mCall);
- mCall.unhold("held " + mPreviouslyHeldCallId);
+ synchronized (mLock) {
+ Log.d(this, "perform unhold call for %s", mCall);
+ mCall.unhold("held " + mPreviouslyHeldCallId);
+ }
}
}
diff --git a/src/com/android/server/telecom/CarModeTracker.java b/src/com/android/server/telecom/CarModeTracker.java
new file mode 100644
index 0000000..0ec4917
--- /dev/null
+++ b/src/com/android/server/telecom/CarModeTracker.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2019 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.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.UiModeManager;
+import android.telecom.Log;
+import android.util.LocalLog;
+
+import com.android.internal.util.IndentingPrintWriter;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.PriorityQueue;
+import java.util.stream.Collectors;
+
+/**
+ * Tracks the package names of apps which enter end exit car mode.
+ */
+public class CarModeTracker {
+ /**
+ * Data class holding information about apps which have requested to enter car mode.
+ */
+ private class CarModeApp {
+ private @IntRange(from = 0) int mPriority;
+ private @NonNull String mPackageName;
+
+ public CarModeApp(int priority, @NonNull String packageName) {
+ mPriority = priority;
+ mPackageName = Objects.requireNonNull(packageName);
+ }
+
+ /**
+ * The priority at which the app requested to enter car mode.
+ * Will be the same as the one specified when {@link UiModeManager#enableCarMode(int, int)}
+ * was called, or {@link UiModeManager#DEFAULT_PRIORITY} if no priority was specifeid.
+ * @return The priority.
+ */
+ public int getPriority() {
+ return mPriority;
+ }
+
+ public void setPriority(int priority) {
+ mPriority = priority;
+ }
+
+ /**
+ * @return The package name of the app which requested to enter car mode.
+ */
+ public String getPackageName() {
+ return mPackageName;
+ }
+
+ public void setPackageName(String packageName) {
+ mPackageName = packageName;
+ }
+ }
+
+ /**
+ * Comparator used to maintain the car mode priority queue ordering.
+ */
+ private class CarModeAppComparator implements Comparator<CarModeApp> {
+ @Override
+ public int compare(CarModeApp o1, CarModeApp o2) {
+ // highest priority takes precedence.
+ return Integer.compare(o2.getPriority(), o1.getPriority());
+ }
+ }
+
+ /**
+ * Priority list of apps which have entered or exited car mode, ordered with the highest
+ * priority app at the top of the queue. Where items have the same priority, they are ordered
+ * by insertion time.
+ */
+ private PriorityQueue<CarModeApp> mCarModeApps = new PriorityQueue<>(2,
+ new CarModeAppComparator());
+
+ private final LocalLog mCarModeChangeLog = new LocalLog(20);
+
+ /**
+ * Handles a request to enter car mode by a package name.
+ * @param priority The priority at which car mode is entered.
+ * @param packageName The package name of the app entering car mode.
+ */
+ public void handleEnterCarMode(@IntRange(from = 0) int priority, @NonNull String packageName) {
+ if (mCarModeApps.stream().anyMatch(c -> c.getPriority() == priority)) {
+ Log.w(this, "handleEnterCarMode: already in car mode at priority %d (apps: %s)",
+ priority, getCarModePriorityString());
+ return;
+ }
+
+ if (mCarModeApps.stream().anyMatch(c -> c.getPackageName().equals(packageName))) {
+ Log.w(this, "handleEnterCarMode: %s is already in car mode (apps: %s)",
+ packageName, getCarModePriorityString());
+ return;
+ }
+
+ Log.i(this, "handleEnterCarMode: packageName=%s, priority=%d", packageName, priority);
+ mCarModeChangeLog.log("enterCarMode: packageName=" + packageName + ", priority="
+ + priority);
+ mCarModeApps.add(new CarModeApp(priority, packageName));
+ }
+
+ /**
+ * Handles a request to exist car mode at a priority level.
+ * @param priority The priority level.
+ * @param packageName The packagename of the app requesting the change.
+ */
+ public void handleExitCarMode(@IntRange(from = 0) int priority, @NonNull String packageName) {
+ if (!mCarModeApps.stream().anyMatch(c -> c.getPriority() == priority)) {
+ Log.w(this, "handleExitCarMode: not in car mode at priority %d (apps=%s)",
+ priority, getCarModePriorityString());
+ return;
+ }
+
+ if (priority != UiModeManager.DEFAULT_PRIORITY && !mCarModeApps.stream().anyMatch(
+ c -> c.getPackageName().equals(packageName) && c.getPriority() == priority)) {
+ Log.w(this, "handleExitCarMode: %s didn't enter car mode at priority %d (apps=%s)",
+ packageName, priority, getCarModePriorityString());
+ return;
+ }
+
+ Log.i(this, "handleExitCarMode: packageName=%s, priority=%d", packageName, priority);
+ mCarModeChangeLog.log("exitCarMode: packageName=" + packageName + ", priority="
+ + priority);
+ mCarModeApps.removeIf(c -> c.getPriority() == priority);
+ }
+
+ /**
+ * Retrieves a list of the apps which are currently in car mode, ordered by priority such that
+ * the highest priority app is first.
+ * @return List of apps in car mode.
+ */
+ public @NonNull List<String> getCarModeApps() {
+ return mCarModeApps
+ .stream()
+ .sorted(mCarModeApps.comparator())
+ .map(cma -> cma.getPackageName())
+ .collect(Collectors.toList());
+ }
+
+ private @NonNull String getCarModePriorityString() {
+ return mCarModeApps
+ .stream()
+ .sorted(mCarModeApps.comparator())
+ .map(cma -> "[" + cma.getPriority() + ", " + cma.getPackageName() + "]")
+ .collect(Collectors.joining(", "));
+ }
+
+ /**
+ * Gets the app which is currently in car mode. This is the highest priority app which has
+ * entered car mode.
+ * @return The app which is in car mode.
+ */
+ public @Nullable String getCurrentCarModePackage() {
+ CarModeApp app = mCarModeApps.peek();
+ return app == null ? null : app.getPackageName();
+ }
+
+ /**
+ * @return {@code true} if the device is in car mode, {@code false} otherwise.
+ */
+ public boolean isInCarMode() {
+ return !mCarModeApps.isEmpty();
+ }
+
+ /**
+ * Dumps the state of the car mode tracker to the specified print writer.
+ * @param pw
+ */
+ public void dump(IndentingPrintWriter pw) {
+ pw.println("CarModeTracker:");
+ pw.increaseIndent();
+
+ pw.println("Current car mode apps:");
+ pw.increaseIndent();
+ for (CarModeApp app : mCarModeApps) {
+ pw.print("[");
+ pw.print(app.getPriority());
+ pw.print("] ");
+ pw.println(app.getPackageName());
+ }
+ pw.decreaseIndent();
+
+ pw.println("Car mode history:");
+ pw.increaseIndent();
+ mCarModeChangeLog.dump(pw);
+ pw.decreaseIndent();
+
+ pw.decreaseIndent();
+ }
+}
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index d608852..dd50318 100644
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -813,8 +813,11 @@
// ParcelableConnection is in fact registered to Telecom and is being called
// from the correct user.
List<PhoneAccountHandle> accountHandles =
+ // Include CAPABILITY_EMERGENCY_CALLS_ONLY in this list in case we are adding
+ // an emergency call.
mPhoneAccountRegistrar.getCallCapablePhoneAccounts(null /*uriScheme*/,
- false /*includeDisabledAccounts*/, userHandle);
+ false /*includeDisabledAccounts*/, userHandle, 0 /*capabilities*/,
+ 0 /*excludedCapabilities*/);
PhoneAccountHandle phoneAccountHandle = null;
for (PhoneAccountHandle accountHandle : accountHandles) {
if(accountHandle.equals(callingPhoneAccountHandle)) {
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index b0ac9d7..9fc06e4 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -17,6 +17,7 @@
package com.android.server.telecom;
import android.Manifest;
+import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -48,6 +49,7 @@
import com.android.server.telecom.SystemStateHelper.SystemStateListener;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -55,6 +57,7 @@
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
/**
* Binds to {@link IInCallService} and provides the service to {@link CallsManager} through which it
@@ -256,9 +259,13 @@
@Override
public void disconnect() {
if (mIsConnected) {
+ Log.i(InCallController.this, "ICSBC#disconnect: unbinding; %s",
+ mInCallServiceInfo);
mContext.unbindService(mServiceConnection);
mIsConnected = false;
} else {
+ Log.i(InCallController.this, "ICSBC#disconnect: already disconnected; %s",
+ mInCallServiceInfo);
Log.addEvent(null, LogUtils.Events.INFO, "Already disconnected, ignoring request.");
}
}
@@ -270,9 +277,13 @@
@Override
public void dump(IndentingPrintWriter pw) {
- pw.append("BindingConnection [");
- pw.append(mIsConnected ? "" : "not ").append("connected, ");
- pw.append(mIsBound ? "" : "not ").append("bound]\n");
+ pw.print("BindingConnection [");
+ pw.print(mIsConnected ? "" : "not ");
+ pw.print("connected, ");
+ pw.print(mIsBound ? "" : "not ");
+ pw.print("bound, ");
+ pw.print(mInCallServiceInfo);
+ pw.println("\n");
}
protected void onConnected(IBinder service) {
@@ -436,7 +447,7 @@
*/
private class CarSwappingInCallServiceConnection extends InCallServiceConnection {
private final InCallServiceConnection mDialerConnection;
- private final InCallServiceConnection mCarModeConnection;
+ private InCallServiceConnection mCarModeConnection;
private InCallServiceConnection mCurrentConnection;
private boolean mIsCarMode = false;
private boolean mIsConnected = false;
@@ -449,8 +460,13 @@
mCurrentConnection = getCurrentConnection();
}
- public synchronized void setCarMode(boolean isCarMode) {
- Log.i(this, "carmodechange: " + mIsCarMode + " => " + isCarMode);
+ /**
+ * Called when we move to a state where calls are present on the device. Chooses the
+ * {@link InCallService} to which we should connect.
+ * @param isCarMode {@code true} if device is in car mode, {@code false} otherwise.
+ */
+ public synchronized void chooseInitialInCallService(boolean isCarMode) {
+ Log.i(this, "chooseInitialInCallService: " + mIsCarMode + " => " + isCarMode);
if (isCarMode != mIsCarMode) {
mIsCarMode = isCarMode;
InCallServiceConnection newConnection = getCurrentConnection();
@@ -465,6 +481,63 @@
}
}
+ /**
+ * Invoked when {@link CarModeTracker} has determined that the device is no longer in car
+ * mode (i.e. has no car mode {@link InCallService}).
+ *
+ * Switches back to the default dialer app.
+ */
+ public synchronized void disableCarMode() {
+ mIsCarMode = false;
+ if (mIsConnected) {
+ mCurrentConnection.disconnect();
+ }
+
+ mCurrentConnection = mDialerConnection;
+ int result = mDialerConnection.connect(null);
+ mIsConnected = result == CONNECTION_SUCCEEDED;
+ }
+
+ /**
+ * Changes the active {@link InCallService} to a car mode app. Called whenever the device
+ * changes to car mode or the currently active car mode app changes.
+ * @param packageName The package name of the car mode app.
+ */
+ public synchronized void changeCarModeApp(String packageName) {
+ Log.i(this, "changeCarModeApp: isCarModeNow=" + mIsCarMode);
+
+ InCallServiceInfo currentConnectionInfo = mCurrentConnection == null ? null
+ : mCurrentConnection.getInfo();
+ InCallServiceInfo carModeConnectionInfo =
+ getInCallServiceComponent(packageName, IN_CALL_SERVICE_TYPE_CAR_MODE_UI);
+
+ if (!Objects.equals(currentConnectionInfo, carModeConnectionInfo)) {
+ Log.i(this, "changeCarModeApp: " + currentConnectionInfo + " => "
+ + carModeConnectionInfo);
+ if (mIsConnected) {
+ mCurrentConnection.disconnect();
+ }
+
+ if (carModeConnectionInfo != null) {
+ // Valid car mode app.
+ mCarModeConnection = mCurrentConnection =
+ new InCallServiceBindingConnection(carModeConnectionInfo);
+ mIsCarMode = true;
+ } else {
+ // Invalid car mode app; don't expect this but should handle it gracefully.
+ mCarModeConnection = null;
+ mIsCarMode = false;
+ mCurrentConnection = mDialerConnection;
+ }
+
+ int result = mCurrentConnection.connect(null);
+ mIsConnected = result == CONNECTION_SUCCEEDED;
+ } else {
+ Log.i(this, "changeCarModeApp: unchanged; " + currentConnectionInfo + " => "
+ + carModeConnectionInfo);
+ }
+ }
+
@Override
public int connect(Call call) {
if (mIsConnected) {
@@ -484,6 +557,7 @@
@Override
public void disconnect() {
if (mIsConnected) {
+ Log.i(InCallController.this, "CSICSC: disconnect %s", mCurrentConnection);
mCurrentConnection.disconnect();
mIsConnected = false;
} else {
@@ -699,14 +773,9 @@
}
};
- private final SystemStateListener mSystemStateListener = new SystemStateListener() {
- @Override
- public void onCarModeChanged(boolean isCarMode) {
- if (mInCallServiceConnection != null) {
- mInCallServiceConnection.setCarMode(shouldUseCarModeUI());
- }
- }
- };
+ private final SystemStateListener mSystemStateListener =
+ (priority, packageName, isCarMode) -> InCallController.this.handleCarModeChange(
+ priority, packageName, isCarMode);
private static final int IN_CALL_SERVICE_TYPE_INVALID = 0;
private static final int IN_CALL_SERVICE_TYPE_DIALER_UI = 1;
@@ -735,10 +804,12 @@
// The future will complete with true if binding succeeds, false if it timed out.
private CompletableFuture<Boolean> mBindingFuture = CompletableFuture.completedFuture(true);
+ private final CarModeTracker mCarModeTracker;
+
public InCallController(Context context, TelecomSystem.SyncRoot lock, CallsManager callsManager,
SystemStateHelper systemStateHelper,
DefaultDialerCache defaultDialerCache, Timeouts.Adapter timeoutsAdapter,
- EmergencyCallHelper emergencyCallHelper) {
+ EmergencyCallHelper emergencyCallHelper, CarModeTracker carModeTracker) {
mContext = context;
mLock = lock;
mCallsManager = callsManager;
@@ -746,7 +817,7 @@
mTimeoutsAdapter = timeoutsAdapter;
mDefaultDialerCache = defaultDialerCache;
mEmergencyCallHelper = emergencyCallHelper;
-
+ mCarModeTracker = carModeTracker;
mSystemStateHelper.addListener(mSystemStateListener);
}
@@ -1109,7 +1180,7 @@
systemInCall.setHasEmergency(mCallsManager.isInEmergencyCall());
InCallServiceConnection carModeInCall = null;
- InCallServiceInfo carModeComponentInfo = getCarModeComponent();
+ InCallServiceInfo carModeComponentInfo = getCurrentCarModeComponent();
if (carModeComponentInfo != null &&
!carModeComponentInfo.getComponentName().equals(
mDefaultDialerCache.getSystemDialerComponent())) {
@@ -1120,7 +1191,7 @@
new CarSwappingInCallServiceConnection(systemInCall, carModeInCall);
}
- mInCallServiceConnection.setCarMode(shouldUseCarModeUI());
+ mInCallServiceConnection.chooseInitialInCallService(shouldUseCarModeUI());
// Actually try binding to the UI InCallService. If the response
if (mInCallServiceConnection.connect(call) ==
@@ -1167,11 +1238,9 @@
return getInCallServiceComponent(packageName, IN_CALL_SERVICE_TYPE_DIALER_UI);
}
- private InCallServiceInfo getCarModeComponent() {
- // The signatures of getInCallServiceComponent differ in the types of the first parameter,
- // and passing in null is inherently ambiguous. (If no car mode component found)
- String defaultCarMode = mCallsManager.getRoleManagerAdapter().getCarModeDialerApp();
- return getInCallServiceComponent(defaultCarMode, IN_CALL_SERVICE_TYPE_CAR_MODE_UI);
+ private InCallServiceInfo getCurrentCarModeComponent() {
+ return getInCallServiceComponent(mCarModeTracker.getCurrentCarModePackage(),
+ IN_CALL_SERVICE_TYPE_CAR_MODE_UI);
}
private InCallServiceInfo getInCallServiceComponent(ComponentName componentName, int type) {
@@ -1253,7 +1322,7 @@
}
private boolean shouldUseCarModeUI() {
- return mSystemStateHelper.isCarMode();
+ return mCarModeTracker.isInCarMode();
}
/**
@@ -1281,26 +1350,24 @@
// Check to see if the service holds permissions or metadata for third party apps.
boolean isUIService = serviceInfo.metaData != null &&
serviceInfo.metaData.getBoolean(TelecomManager.METADATA_IN_CALL_SERVICE_UI);
- boolean isThirdPartyCompanionApp = packageManager.checkPermission(
- Manifest.permission.CALL_COMPANION_APP,
- serviceInfo.packageName) == PackageManager.PERMISSION_GRANTED &&
- !isUIService;
// Check to see if the service is a car-mode UI type by checking that it has the
// CONTROL_INCALL_EXPERIENCE (to verify it is a system app) and that it has the
// car-mode UI metadata.
- boolean hasControlInCallPermission = packageManager.checkPermission(
- Manifest.permission.CONTROL_INCALL_EXPERIENCE,
- serviceInfo.packageName) == PackageManager.PERMISSION_GRANTED;
+ // We check the permission grant on all of the packages contained in the InCallService's
+ // same UID to see if any of them have been granted the permission. This accomodates the
+ // CTS tests, which have some shared UID stuff going on in order to work. It also still
+ // obeys the permission model since a single APK typically normally only has a single UID.
+ String[] uidPackages = packageManager.getPackagesForUid(serviceInfo.applicationInfo.uid);
+ boolean hasControlInCallPermission = Arrays.stream(uidPackages).anyMatch(
+ p -> packageManager.checkPermission(
+ Manifest.permission.CONTROL_INCALL_EXPERIENCE,
+ p) == PackageManager.PERMISSION_GRANTED);
boolean isCarModeUIService = serviceInfo.metaData != null &&
serviceInfo.metaData.getBoolean(
TelecomManager.METADATA_IN_CALL_SERVICE_CAR_MODE_UI, false);
- if (isCarModeUIService) {
- // ThirdPartyInCallService shouldn't be used when role manager hasn't assigned any car
- // mode role holders, i.e. packageName is null.
- if (hasControlInCallPermission || (isThirdPartyCompanionApp && packageName != null)) {
- return IN_CALL_SERVICE_TYPE_CAR_MODE_UI;
- }
+ if (isCarModeUIService && hasControlInCallPermission) {
+ return IN_CALL_SERVICE_TYPE_CAR_MODE_UI;
}
// Check to see that it is the default dialer package
@@ -1313,14 +1380,8 @@
// Also allow any in-call service that has the control-experience permission (to ensure
// that it is a system app) and doesn't claim to show any UI.
- if (!isUIService && !isCarModeUIService) {
- if (hasControlInCallPermission && !isThirdPartyCompanionApp) {
- return IN_CALL_SERVICE_TYPE_NON_UI;
- }
- // Third party companion alls without CONTROL_INCALL_EXPERIENCE permission.
- if (!hasControlInCallPermission && isThirdPartyCompanionApp) {
- return IN_CALL_SERVICE_TYPE_COMPANION;
- }
+ if (!isUIService && !isCarModeUIService && hasControlInCallPermission) {
+ return IN_CALL_SERVICE_TYPE_NON_UI;
}
// Anything else that remains, we will not bind to.
@@ -1514,6 +1575,8 @@
mInCallServiceConnection.dump(pw);
}
pw.decreaseIndent();
+
+ mCarModeTracker.dump(pw);
}
/**
@@ -1595,4 +1658,43 @@
public Handler getHandler() {
return mHandler;
}
+
+ /**
+ * Determines if the specified package is a valid car mode {@link InCallService}.
+ * @param packageName The package name to check.
+ * @return {@code true} if the package has a valid car mode {@link InCallService} defined,
+ * {@code false} otherwise.
+ */
+ private boolean isCarModeInCallService(@NonNull String packageName) {
+ InCallServiceInfo info =
+ getInCallServiceComponent(packageName, IN_CALL_SERVICE_TYPE_CAR_MODE_UI);
+ return info != null && info.getType() == IN_CALL_SERVICE_TYPE_CAR_MODE_UI;
+ }
+
+ public void handleCarModeChange(int priority, String packageName, boolean isCarMode) {
+ Log.i(this, "handleCarModeChange: packageName=%s, priority=%d, isCarMode=%b",
+ packageName, priority, isCarMode);
+ if (!isCarModeInCallService(packageName)) {
+ Log.i(this, "handleCarModeChange: not a valid InCallService; packageName=%s",
+ packageName);
+ return;
+ }
+
+ if (isCarMode) {
+ mCarModeTracker.handleEnterCarMode(priority, packageName);
+ } else {
+ mCarModeTracker.handleExitCarMode(priority, packageName);
+ }
+
+ if (mInCallServiceConnection != null) {
+ Log.i(this, "handleCarModeChange: car mode apps: %s",
+ mCarModeTracker.getCarModeApps().stream().collect(Collectors.joining(", ")));
+ if (shouldUseCarModeUI()) {
+ mInCallServiceConnection.changeCarModeApp(
+ mCarModeTracker.getCurrentCarModePackage());
+ } else {
+ mInCallServiceConnection.disableCarMode();
+ }
+ }
+ }
}
diff --git a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
index 1abd6fb..7f71ad2 100644
--- a/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
@@ -519,7 +519,13 @@
private boolean isPotentialEmergencyNumber(String number) {
Log.v(this, "Checking restrictions for number : %s", Log.pii(number));
if (number == null) return false;
- return mContext.getSystemService(TelephonyManager.class).isPotentialEmergencyNumber(number);
+ try {
+ return mContext.getSystemService(TelephonyManager.class).isPotentialEmergencyNumber(
+ number);
+ } catch (Exception e) {
+ Log.e(this, e, "isPotentialEmergencyNumber: Telephony threw an exception.");
+ return false;
+ }
}
/**
diff --git a/src/com/android/server/telecom/ParcelableCallUtils.java b/src/com/android/server/telecom/ParcelableCallUtils.java
index be44131..d490cd2 100644
--- a/src/com/android/server/telecom/ParcelableCallUtils.java
+++ b/src/com/android/server/telecom/ParcelableCallUtils.java
@@ -29,10 +29,14 @@
import android.telecom.TelecomManager;
import android.text.TextUtils;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
/**
* Utilities dealing with {@link ParcelableCall}.
@@ -254,7 +258,8 @@
call.getIntentExtras(),
extras,
call.getCreationTimeMillis(),
- callDirection);
+ callDirection,
+ call.getCallerNumberVerificationStatus());
}
/**
@@ -267,6 +272,7 @@
* <li>Connection time</li>
* <li>Handle (phone number)</li>
* <li>Handle (phone number) presentation</li>
+ * <li>Caller number verification status (verstat)</li>
* </ul>
* All other fields are nulled or set to 0 values.
* Where the call screening service is part of the system dialer, the
@@ -324,7 +330,8 @@
null, /* intentExtras */
callExtras, /* callExtras */
call.getCreationTimeMillis(),
- callDirection);
+ callDirection,
+ call.getCallerNumberVerificationStatus());
}
/**
diff --git a/src/com/android/server/telecom/RoleManagerAdapter.java b/src/com/android/server/telecom/RoleManagerAdapter.java
index a04ae57..ba82a06 100644
--- a/src/com/android/server/telecom/RoleManagerAdapter.java
+++ b/src/com/android/server/telecom/RoleManagerAdapter.java
@@ -102,18 +102,6 @@
void addOrRemoveTestCallCompanionApp(String packageName, boolean isAdded);
/**
- * @return Package name of the car more app or {@code null} if there are no apps that match.
- */
- String getCarModeDialerApp();
-
- /**
- * Override the automotive app with another value. Used for testing purposes only.
- * @param packageName Package name of the automotive app. Where
- * {@code null}, the override is removed.
- */
- void setTestAutoModeApp(String packageName);
-
- /**
* Using role manager needs to know the current user handle. Need to make sure the role manager
* adapter can pass this to role manager. As it changes, we'll pass it in.
* @param currentUserHandle The new user handle.
diff --git a/src/com/android/server/telecom/RoleManagerAdapterImpl.java b/src/com/android/server/telecom/RoleManagerAdapterImpl.java
index 6f3fddd..eb216d0 100644
--- a/src/com/android/server/telecom/RoleManagerAdapterImpl.java
+++ b/src/com/android/server/telecom/RoleManagerAdapterImpl.java
@@ -38,7 +38,6 @@
private String mOverrideDefaultCallRedirectionApp = null;
private String mOverrideDefaultCallScreeningApp = null;
- private String mOverrideDefaultCarModeApp = null;
private String mOverrideDefaultDialerApp = null;
private List<String> mOverrideCallCompanionApps = new ArrayList<>();
private Context mContext;
@@ -112,19 +111,6 @@
}
@Override
- public String getCarModeDialerApp() {
- if (mOverrideDefaultCarModeApp != null) {
- return mOverrideDefaultCarModeApp;
- }
- return getRoleManagerCarModeDialerApp();
- }
-
- @Override
- public void setTestAutoModeApp(String packageName) {
- mOverrideDefaultCarModeApp = packageName;
- }
-
- @Override
public void setCurrentUserHandle(UserHandle currentUserHandle) {
mCurrentUserHandle = currentUserHandle;
}
@@ -147,11 +133,6 @@
return roleHolders.get(0);
}
- // TODO in R: query and return car mode apps
- private String getRoleManagerCarModeDialerApp() {
- return null;
- }
-
// TODO in R: Use companion app manager
private List<String> getRoleManagerCallCompanionApps() {
return new ArrayList<>();
@@ -213,15 +194,6 @@
}
pw.println();
- pw.print("DefaultCarModeDialerApp: ");
- if (mOverrideDefaultCarModeApp != null) {
- pw.print("(override ");
- pw.print(mOverrideDefaultCarModeApp);
- pw.print(") ");
- pw.print(getRoleManagerCarModeDialerApp());
- }
- pw.println();
-
pw.print("DefaultCallCompanionApps: ");
if (mOverrideCallCompanionApps != null) {
pw.print("(override ");
diff --git a/src/com/android/server/telecom/SystemStateHelper.java b/src/com/android/server/telecom/SystemStateHelper.java
index 69a46c6..073b081 100644
--- a/src/com/android/server/telecom/SystemStateHelper.java
+++ b/src/com/android/server/telecom/SystemStateHelper.java
@@ -39,7 +39,15 @@
*/
public class SystemStateHelper {
public static interface SystemStateListener {
- public void onCarModeChanged(boolean isCarMode);
+ /**
+ * Listener method to inform interested parties when a package name requests to enter or
+ * exit car mode.
+ * @param priority the priority of the enter/exit request.
+ * @param packageName the package name of the requester.
+ * @param isCarMode {@code true} if the package is entering car mode, {@code false}
+ * otherwise.
+ */
+ void onCarModeChanged(int priority, String packageName, boolean isCarMode);
}
private final Context mContext;
@@ -49,10 +57,22 @@
Log.startSession("SSP.oR");
try {
String action = intent.getAction();
- if (UiModeManager.ACTION_ENTER_CAR_MODE.equals(action)) {
- onEnterCarMode();
- } else if (UiModeManager.ACTION_EXIT_CAR_MODE.equals(action)) {
- onExitCarMode();
+ if (UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED.equals(action)) {
+ int priority = intent.getIntExtra(UiModeManager.EXTRA_PRIORITY,
+ UiModeManager.DEFAULT_PRIORITY);
+ String callingPackage = intent.getStringExtra(
+ UiModeManager.EXTRA_CALLING_PACKAGE);
+ Log.i(SystemStateHelper.this, "ENTER_CAR_MODE_PRIVILEGED; priority=%d, pkg=%s",
+ priority, callingPackage);
+ onEnterCarMode(priority, callingPackage);
+ } else if (UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED.equals(action)) {
+ int priority = intent.getIntExtra(UiModeManager.EXTRA_PRIORITY,
+ UiModeManager.DEFAULT_PRIORITY);
+ String callingPackage = intent.getStringExtra(
+ UiModeManager.EXTRA_CALLING_PACKAGE);
+ Log.i(SystemStateHelper.this, "EXIT_CAR_MODE_PRIVILEGED; priority=%d, pkg=%s",
+ priority, callingPackage);
+ onExitCarMode(priority, callingPackage);
} else {
Log.w(this, "Unexpected intent received: %s", intent.getAction());
}
@@ -68,8 +88,9 @@
public SystemStateHelper(Context context) {
mContext = context;
- IntentFilter intentFilter = new IntentFilter(UiModeManager.ACTION_ENTER_CAR_MODE);
- intentFilter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE);
+ IntentFilter intentFilter = new IntentFilter(
+ UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED);
+ intentFilter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED);
mContext.registerReceiver(mBroadcastReceiver, intentFilter);
Log.i(this, "Registering car mode receiver: %s", intentFilter);
@@ -170,25 +191,19 @@
}
}
- private void onEnterCarMode() {
- if (!mIsCarMode) {
- Log.i(this, "Entering carmode");
- mIsCarMode = true;
- notifyCarMode();
- }
- }
-
- private void onExitCarMode() {
- if (mIsCarMode) {
- Log.i(this, "Exiting carmode");
- mIsCarMode = false;
- notifyCarMode();
- }
- }
-
- private void notifyCarMode() {
+ private void onEnterCarMode(int priority, String packageName) {
+ Log.i(this, "Entering carmode");
+ mIsCarMode = getSystemCarMode();
for (SystemStateListener listener : mListeners) {
- listener.onCarModeChanged(mIsCarMode);
+ listener.onCarModeChanged(priority, packageName, true /* isCarMode */);
+ }
+ }
+
+ private void onExitCarMode(int priority, String packageName) {
+ Log.i(this, "Exiting carmode");
+ mIsCarMode = getSystemCarMode();
+ for (SystemStateListener listener : mListeners) {
+ listener.onCarModeChanged(priority, packageName, false /* isCarMode */);
}
}
diff --git a/src/com/android/server/telecom/TelecomBroadcastIntentProcessor.java b/src/com/android/server/telecom/TelecomBroadcastIntentProcessor.java
index 8d2a2c5..06aa174 100644
--- a/src/com/android/server/telecom/TelecomBroadcastIntentProcessor.java
+++ b/src/com/android/server/telecom/TelecomBroadcastIntentProcessor.java
@@ -26,6 +26,7 @@
import com.android.server.telecom.ui.CallRedirectionConfirmDialogActivity;
import com.android.server.telecom.ui.ConfirmCallDialogActivity;
+import com.android.server.telecom.ui.DisconnectedCallNotifier;
import java.util.List;
@@ -38,6 +39,14 @@
public static final String ACTION_CALL_BACK_FROM_NOTIFICATION =
"com.android.server.telecom.ACTION_CALL_BACK_FROM_NOTIFICATION";
+ /** The action used to send SMS response for the disconnected call notification. */
+ public static final String ACTION_DISCONNECTED_SEND_SMS_FROM_NOTIFICATION =
+ "com.android.server.telecom.ACTION_DISCONNECTED_SEND_SMS_FROM_NOTIFICATION";
+
+ /** The action used to call a handle back for the disconnected call notification. */
+ public static final String ACTION_DISCONNECTED_CALL_BACK_FROM_NOTIFICATION =
+ "com.android.server.telecom.ACTION_DISCONNECTED_CALL_BACK_FROM_NOTIFICATION";
+
/** The action used to clear missed calls. */
public static final String ACTION_CLEAR_MISSED_CALLS =
"com.android.server.telecom.ACTION_CLEAR_MISSED_CALLS";
@@ -121,34 +130,45 @@
// Close the notification shade and the notification itself.
closeSystemDialogs(mContext);
missedCallNotifier.clearMissedCalls(userHandle);
-
- Intent callIntent = new Intent(Intent.ACTION_SENDTO, intent.getData());
- callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- PackageManager packageManager = mContext.getPackageManager();
- List<ResolveInfo> activities = packageManager.queryIntentActivitiesAsUser(
- callIntent, PackageManager.MATCH_DEFAULT_ONLY, userHandle.getIdentifier());
- if (activities.size() > 0) {
- mContext.startActivityAsUser(callIntent, userHandle);
- } else {
- Toast.makeText(mContext, com.android.internal.R.string.noApplications,
- Toast.LENGTH_SHORT).show();
- }
+ sendSmsIntent(intent, userHandle);
// Call back recent caller from the missed call notification.
} else if (ACTION_CALL_BACK_FROM_NOTIFICATION.equals(action)) {
// Close the notification shade and the notification itself.
closeSystemDialogs(mContext);
missedCallNotifier.clearMissedCalls(userHandle);
-
- Intent callIntent = new Intent(Intent.ACTION_CALL, intent.getData());
- callIntent.setFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- mContext.startActivityAsUser(callIntent, userHandle);
+ sendCallBackIntent(intent, userHandle);
// Clear the missed call notification and call log entries.
} else if (ACTION_CLEAR_MISSED_CALLS.equals(action)) {
missedCallNotifier.clearMissedCalls(userHandle);
}
+ } else if(ACTION_DISCONNECTED_SEND_SMS_FROM_NOTIFICATION.equals(action) ||
+ ACTION_DISCONNECTED_CALL_BACK_FROM_NOTIFICATION.equals(action)) {
+ Log.v(this, "Action received: %s.", action);
+ UserHandle userHandle = intent.getParcelableExtra(EXTRA_USERHANDLE);
+ if (userHandle == null) {
+ Log.d(this, "disconnect user handle can't be null, not processing the broadcast");
+ return;
+ }
+
+ DisconnectedCallNotifier disconnectedCallNotifier =
+ mCallsManager.getDisconnectedCallNotifier();
+
+ // Send an SMS from the disconnected call notification.
+ if (ACTION_DISCONNECTED_SEND_SMS_FROM_NOTIFICATION.equals(action)) {
+ // Close the notification shade and the notification itself.
+ closeSystemDialogs(mContext);
+ disconnectedCallNotifier.clearNotification(userHandle);
+ sendSmsIntent(intent, userHandle);
+
+ // Call back recent caller from the disconnected call notification.
+ } else if (ACTION_DISCONNECTED_CALL_BACK_FROM_NOTIFICATION.equals(action)) {
+ // Close the notification shade and the notification itself.
+ closeSystemDialogs(mContext);
+ disconnectedCallNotifier.clearNotification(userHandle);
+ sendCallBackIntent(intent, userHandle);
+ }
} else if (ACTION_ANSWER_FROM_NOTIFICATION.equals(action)) {
Log.startSession("TBIP.aAFM");
try {
@@ -230,4 +250,25 @@
Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcastAsUser(intent, UserHandle.ALL);
}
+
+ private void sendSmsIntent(Intent intent, UserHandle userHandle) {
+ Intent callIntent = new Intent(Intent.ACTION_SENDTO, intent.getData());
+ callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ PackageManager packageManager = mContext.getPackageManager();
+ List<ResolveInfo> activities = packageManager.queryIntentActivitiesAsUser(
+ callIntent, PackageManager.MATCH_DEFAULT_ONLY, userHandle.getIdentifier());
+ if (activities.size() > 0) {
+ mContext.startActivityAsUser(callIntent, userHandle);
+ } else {
+ Toast.makeText(mContext, com.android.internal.R.string.noApplications,
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void sendCallBackIntent(Intent intent, UserHandle userHandle) {
+ Intent callIntent = new Intent(Intent.ACTION_CALL, intent.getData());
+ callIntent.setFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ mContext.startActivityAsUser(callIntent, userHandle);
+ }
}
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index cb70c99..e2f441c 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -181,7 +181,12 @@
boolean includeDisabledAccounts, String callingPackage) {
try {
Log.startSession("TSI.gCCPA");
- if (!canReadPhoneState(callingPackage, "getDefaultOutgoingPhoneAccount")) {
+ if (includeDisabledAccounts &&
+ !canReadPrivilegedPhoneState(
+ callingPackage, "getCallCapablePhoneAccounts")) {
+ return Collections.emptyList();
+ }
+ if (!canReadPhoneState(callingPackage, "getCallCapablePhoneAccounts")) {
return Collections.emptyList();
}
synchronized (mLock) {
@@ -444,8 +449,8 @@
try {
Log.startSession("TSI.rPA");
synchronized (mLock) {
- if (!mContext.getApplicationContext().getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable)) {
+ if (!((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE))
+ .isVoiceCapable()) {
Log.w(this,
"registerPhoneAccount not allowed on non-voice capable device.");
return;
@@ -1660,27 +1665,6 @@
}
@Override
- public void setTestAutoModeApp(String packageName) {
- try {
- Log.startSession("TSI.sTAMA");
- enforceModifyPermission();
- if (!Build.IS_USERDEBUG) {
- throw new SecurityException("Test-only API.");
- }
- synchronized (mLock) {
- long token = Binder.clearCallingIdentity();
- try {
- mCallsManager.getRoleManagerAdapter().setTestAutoModeApp(packageName);
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
- } finally {
- Log.endSession();
- }
- }
-
- @Override
public void setTestPhoneAcctSuggestionComponent(String flattenedComponentName) {
try {
Log.startSession("TSI.sPASA");
@@ -2027,6 +2011,17 @@
}
}
+ private boolean canReadPrivilegedPhoneState(String callingPackage, String message) {
+ // The system/default dialer can always read phone state - so that emergency calls will
+ // still work.
+ if (isPrivilegedDialerCalling(callingPackage)) {
+ return true;
+ }
+
+ mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE, message);
+ return true;
+ }
+
private boolean isDialerOrPrivileged(String callingPackage, String message) {
// The system/default dialer can always read phone state - so that emergency calls will
// still work.
diff --git a/src/com/android/server/telecom/TelecomSystem.java b/src/com/android/server/telecom/TelecomSystem.java
index 7700852..a8e16ae 100644
--- a/src/com/android/server/telecom/TelecomSystem.java
+++ b/src/com/android/server/telecom/TelecomSystem.java
@@ -24,6 +24,7 @@
import com.android.server.telecom.components.UserCallIntentProcessor;
import com.android.server.telecom.components.UserCallIntentProcessorFactory;
import com.android.server.telecom.ui.AudioProcessingNotification;
+import com.android.server.telecom.ui.DisconnectedCallNotifier;
import com.android.server.telecom.ui.IncomingCallNotifier;
import com.android.server.telecom.ui.MissedCallNotifierImpl.MissedCallNotifierImplFactory;
import com.android.server.telecom.BluetoothPhoneServiceImpl.BluetoothPhoneServiceImplFactory;
@@ -251,6 +252,8 @@
mMissedCallNotifier = missedCallNotifierImplFactory
.makeMissedCallNotifierImpl(mContext, mPhoneAccountRegistrar, defaultDialerCache);
+ DisconnectedCallNotifier.Factory disconnectedCallNotifierFactory =
+ new DisconnectedCallNotifier.Default();
CallerInfoLookupHelper callerInfoLookupHelper =
new CallerInfoLookupHelper(context, callerInfoAsyncQueryFactory,
@@ -266,7 +269,8 @@
DefaultDialerCache defaultDialerCache, Timeouts.Adapter timeoutsAdapter,
EmergencyCallHelper emergencyCallHelper) {
return new InCallController(context, lock, callsManager, systemStateProvider,
- defaultDialerCache, timeoutsAdapter, emergencyCallHelper);
+ defaultDialerCache, timeoutsAdapter, emergencyCallHelper,
+ new CarModeTracker());
}
};
@@ -291,6 +295,7 @@
mLock,
callerInfoLookupHelper,
mMissedCallNotifier,
+ disconnectedCallNotifierFactory,
mPhoneAccountRegistrar,
headsetMediaButtonFactory,
proximitySensorManagerFactory,
diff --git a/src/com/android/server/telecom/callfiltering/BlockCheckerAdapter.java b/src/com/android/server/telecom/callfiltering/BlockCheckerAdapter.java
index 1a641f0..a83f314 100644
--- a/src/com/android/server/telecom/callfiltering/BlockCheckerAdapter.java
+++ b/src/com/android/server/telecom/callfiltering/BlockCheckerAdapter.java
@@ -21,8 +21,6 @@
import android.provider.BlockedNumberContract;
import android.telecom.Log;
-import com.android.internal.telephony.BlockChecker;
-
public class BlockCheckerAdapter {
private static final String TAG = BlockCheckerAdapter.class.getSimpleName();
diff --git a/src/com/android/server/telecom/components/TelecomService.java b/src/com/android/server/telecom/components/TelecomService.java
index 2acc548..e20da80 100644
--- a/src/com/android/server/telecom/components/TelecomService.java
+++ b/src/com/android/server/telecom/components/TelecomService.java
@@ -90,8 +90,6 @@
new NotificationChannelManager();
notificationChannelManager.createChannels(context);
- boolean shouldPauseBetweenRingtoneRepeat = context.getResources().getBoolean(
- R.bool.should_pause_between_ringtone_repeats);
TelecomSystem.setInstance(
new TelecomSystem(
context,
@@ -173,7 +171,7 @@
},
ConnectionServiceFocusManager::new,
new Timeouts.Adapter(),
- new AsyncRingtonePlayer(shouldPauseBetweenRingtoneRepeat),
+ new AsyncRingtonePlayer(),
new PhoneNumberUtilsAdapterImpl(),
new IncomingCallNotifier(context),
ToneGenerator::new,
diff --git a/src/com/android/server/telecom/components/UserCallIntentProcessor.java b/src/com/android/server/telecom/components/UserCallIntentProcessor.java
index 134db80..75c1996 100644
--- a/src/com/android/server/telecom/components/UserCallIntentProcessor.java
+++ b/src/com/android/server/telecom/components/UserCallIntentProcessor.java
@@ -27,6 +27,7 @@
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
import com.android.server.telecom.CallIntentProcessor;
import com.android.server.telecom.R;
@@ -163,8 +164,8 @@
* @return {@code True} if the device is voice-capable.
*/
private boolean isVoiceCapable() {
- return mContext.getApplicationContext().getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable);
+ return ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE))
+ .isVoiceCapable();
}
/**
diff --git a/src/com/android/server/telecom/ui/DisconnectedCallNotifier.java b/src/com/android/server/telecom/ui/DisconnectedCallNotifier.java
new file mode 100644
index 0000000..aa05552
--- /dev/null
+++ b/src/com/android/server/telecom/ui/DisconnectedCallNotifier.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2019 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.ui;
+
+import android.annotation.NonNull;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.TaskStackBuilder;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.UserHandle;
+import android.provider.CallLog;
+import android.telecom.DisconnectCause;
+import android.telecom.Log;
+import android.telecom.PhoneAccount;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
+import android.text.TextUtils;
+
+import com.android.server.telecom.Call;
+import com.android.server.telecom.CallState;
+import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.CallsManagerListenerBase;
+import com.android.server.telecom.Constants;
+import com.android.server.telecom.R;
+import com.android.server.telecom.TelecomBroadcastIntentProcessor;
+import com.android.server.telecom.components.TelecomBroadcastReceiver;
+
+import java.util.Locale;
+
+/**
+ * Handles notifications generated by Telecom for the case that a call was disconnected in order to
+ * connect another "higher priority" emergency call and gives the user the choice to call or
+ * message that user back after, similar to the missed call notifier.
+ */
+public class DisconnectedCallNotifier extends CallsManagerListenerBase {
+
+ public interface Factory {
+ DisconnectedCallNotifier create(Context context, CallsManager manager);
+ }
+
+ public static class Default implements Factory {
+
+ @Override
+ public DisconnectedCallNotifier create(Context context, CallsManager manager) {
+ return new DisconnectedCallNotifier(context, manager);
+ }
+ }
+
+ private static class CallInfo {
+ public final UserHandle userHandle;
+ public final Uri handle;
+ public final long endTimeMs;
+ public final Bitmap callerInfoIcon;
+ public final Drawable callerInfoPhoto;
+ public final String callerInfoName;
+
+ public CallInfo(UserHandle userHandle, Uri handle, long endTimeMs, Bitmap callerInfoIcon,
+ Drawable callerInfoPhoto, String callerInfoName) {
+ this.userHandle = userHandle;
+ this.handle = handle;
+ this.endTimeMs = endTimeMs;
+ this.callerInfoIcon = callerInfoIcon;
+ this.callerInfoPhoto = callerInfoPhoto;
+ this.callerInfoName = callerInfoName;
+ }
+
+ @Override
+ public String toString() {
+ return "CallInfo{" +
+ "userHandle=" + userHandle +
+ ", handle=" + handle +
+ ", endTimeMs=" + endTimeMs +
+ ", callerInfoIcon=" + callerInfoIcon +
+ ", callerInfoPhoto=" + callerInfoPhoto +
+ ", callerInfoName='" + callerInfoName + '\'' +
+ '}';
+ }
+ }
+
+ private static final String NOTIFICATION_TAG =
+ DisconnectedCallNotifier.class.getSimpleName();
+ private static final int DISCONNECTED_CALL_NOTIFICATION_ID = 1;
+
+ private final Context mContext;
+ private final CallsManager mCallsManager;
+ private final NotificationManager mNotificationManager;
+ // The pending info to display to the user after they have ended the emergency call.
+ private CallInfo mPendingCallNotification;
+
+ public DisconnectedCallNotifier(Context context, CallsManager callsManager) {
+ mContext = context;
+ mNotificationManager =
+ (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ mCallsManager = callsManager;
+ }
+
+ @Override
+ public void onCallRemoved(Call call) {
+ // Wait until the emergency call is ended before showing the notification.
+ if (mCallsManager.getCalls().isEmpty() && mPendingCallNotification != null) {
+ showDisconnectedNotification(mPendingCallNotification);
+ mPendingCallNotification = null;
+ }
+ }
+
+ @Override
+ public void onCallStateChanged(Call call, int oldState, int newState) {
+ DisconnectCause cause = call.getDisconnectCause();
+ if (cause == null) {
+ Log.w(this, "onCallStateChanged: unexpected null disconnect cause.");
+ return;
+ }
+ // Call disconnected in favor of an emergency call. Place the call into a pending queue.
+ if ((newState == CallState.DISCONNECTED) && (cause.getCode() == DisconnectCause.LOCAL) &&
+ DisconnectCause.REASON_EMERGENCY_CALL_PLACED.equals(cause.getReason())) {
+ // Clear any existing notification.
+ clearNotification(mCallsManager.getCurrentUserHandle());
+ UserHandle userHandle = call.getTargetPhoneAccount() != null ?
+ call.getTargetPhoneAccount().getUserHandle() : call.getInitiatingUser();
+ // As a last resort, use the current user to display the notification.
+ if (userHandle == null) userHandle = mCallsManager.getCurrentUserHandle();
+ mPendingCallNotification = new CallInfo(userHandle, call.getHandle(),
+ call.getCreationTimeMillis() + call.getAgeMillis(), call.getPhotoIcon(),
+ call.getPhoto(), call.getName());
+ }
+ }
+
+ private void showDisconnectedNotification(@NonNull CallInfo call) {
+ Log.i(this, "showDisconnectedNotification: userHandle=%d", call.userHandle.getIdentifier());
+
+ final int titleResId = R.string.notification_disconnectedCall_title;
+ final String expandedText = mContext.getString(R.string.notification_disconnectedCall_body,
+ getNameForCallNotification(call));
+
+ // Create a public viewable version of the notification, suitable for display when sensitive
+ // notification content is hidden.
+ // We use user's context here to make sure notification is badged if it is a managed user.
+ Context contextForUser = getContextForUser(call.userHandle);
+ Notification.Builder publicBuilder = new Notification.Builder(contextForUser,
+ NotificationChannelManager.CHANNEL_ID_DISCONNECTED_CALLS);
+ publicBuilder.setSmallIcon(android.R.drawable.stat_notify_error)
+ .setColor(mContext.getResources().getColor(R.color.theme_color, null /*theme*/))
+ // Set when the call was disconnected.
+ .setWhen(call.endTimeMs)
+ .setShowWhen(true)
+ // Show "Phone" for notification title.
+ .setContentTitle(mContext.getText(R.string.userCallActivityLabel))
+ // Notification details shows that there are disconnected call(s), but does not
+ // reveal the caller information.
+ .setContentText(mContext.getText(titleResId))
+ .setContentIntent(createCallLogPendingIntent(call.userHandle))
+ .setAutoCancel(true);
+
+ // Create the notification suitable for display when sensitive information is showing.
+ Notification.Builder builder = new Notification.Builder(contextForUser,
+ NotificationChannelManager.CHANNEL_ID_DISCONNECTED_CALLS);
+ builder.setSmallIcon(android.R.drawable.stat_notify_error)
+ .setColor(mContext.getResources().getColor(R.color.theme_color, null /*theme*/))
+ .setWhen(call.endTimeMs)
+ .setShowWhen(true)
+ .setContentTitle(mContext.getText(titleResId))
+ //Only show expanded text for sensitive information
+ .setStyle(new Notification.BigTextStyle().bigText(expandedText))
+ .setContentIntent(createCallLogPendingIntent(call.userHandle))
+ .setAutoCancel(true)
+ // Include a public version of the notification to be shown when the call
+ // notification is shown on the user's lock screen and they have chosen to hide
+ // sensitive notification information.
+ .setPublicVersion(publicBuilder.build())
+ .setChannelId(NotificationChannelManager.CHANNEL_ID_DISCONNECTED_CALLS);
+
+ String handle = call.handle != null ? call.handle.getSchemeSpecificPart() : null;
+
+ if (!TextUtils.isEmpty(handle)
+ && !TextUtils.equals(handle, mContext.getString(R.string.handle_restricted))) {
+ builder.addAction(new Notification.Action.Builder(
+ Icon.createWithResource(contextForUser, R.drawable.ic_phone_24dp),
+ // Reuse missed call "Call back"
+ mContext.getString(R.string.notification_missedCall_call_back),
+ createCallBackPendingIntent(call.handle, call.userHandle)).build());
+
+ if (canRespondViaSms(call)) {
+ builder.addAction(new Notification.Action.Builder(
+ Icon.createWithResource(contextForUser, R.drawable.ic_message_24dp),
+ // Reuse missed call "Call back"
+ mContext.getString(R.string.notification_missedCall_message),
+ createSendSmsFromNotificationPendingIntent(call.handle,
+ call.userHandle)).build());
+ }
+ }
+
+ if (call.callerInfoIcon != null) {
+ builder.setLargeIcon(call.callerInfoIcon);
+ } else {
+ if (call.callerInfoPhoto instanceof BitmapDrawable) {
+ builder.setLargeIcon(((BitmapDrawable) call.callerInfoPhoto).getBitmap());
+ }
+ }
+
+ Notification notification = builder.build();
+
+ Log.i(this, "Adding missed call notification for %s.", Log.pii(call.handle));
+ long token = Binder.clearCallingIdentity();
+ try {
+ // TODO: Only support one notification right now, so if multiple are hung up, we only
+ // show the last one. Support multiple in the future.
+ mNotificationManager.notifyAsUser(NOTIFICATION_TAG, DISCONNECTED_CALL_NOTIFICATION_ID,
+ notification, call.userHandle);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ /**
+ * Returns the name to use in the call notification.
+ */
+ private String getNameForCallNotification(@NonNull CallInfo call) {
+ String number = call.handle != null ? call.handle.getSchemeSpecificPart() : null;
+
+ if (!TextUtils.isEmpty(number)) {
+ String formattedNumber = PhoneNumberUtils.formatNumber(number,
+ getCurrentCountryIso(mContext));
+
+ // The formatted number will be null if there was a problem formatting it, but we can
+ // default to using the unformatted number instead (e.g. a SIP URI may not be able to
+ // be formatted.
+ if (!TextUtils.isEmpty(formattedNumber)) {
+ number = formattedNumber;
+ }
+ }
+
+ if (!TextUtils.isEmpty(call.callerInfoName) && TextUtils.isGraphic(call.callerInfoName)) {
+ return call.callerInfoName;
+ }
+ if (!TextUtils.isEmpty(number)) {
+ // A handle should always be displayed LTR using {@link BidiFormatter} regardless of the
+ // content of the rest of the notification.
+ // TODO: Does this apply to SIP addresses?
+ BidiFormatter bidiFormatter = BidiFormatter.getInstance();
+ return bidiFormatter.unicodeWrap(number, TextDirectionHeuristics.LTR);
+ } else {
+ // Use "unknown" if the call is unidentifiable.
+ return mContext.getString(R.string.unknown);
+ }
+ }
+
+ /**
+ * @return The ISO 3166-1 two letters country code of the country the user is in based on the
+ * network location. If the network location does not exist, fall back to the locale
+ * setting.
+ */
+ private String getCurrentCountryIso(Context context) {
+ // Without framework function calls, this seems to be the most accurate location service
+ // we can rely on.
+ final TelephonyManager telephonyManager =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase();
+
+ if (countryIso == null) {
+ countryIso = Locale.getDefault().getCountry();
+ Log.w(this, "No CountryDetector; falling back to countryIso based on locale: "
+ + countryIso);
+ }
+ return countryIso;
+ }
+
+ private Context getContextForUser(UserHandle user) {
+ try {
+ return mContext.createPackageContextAsUser(mContext.getPackageName(), 0, user);
+ } catch (PackageManager.NameNotFoundException e) {
+ // Default to mContext, not finding the package system is running as is unlikely.
+ return mContext;
+ }
+ }
+
+ /**
+ * Creates an intent to be invoked when the user opts to "call back" from the disconnected call
+ * notification.
+ *
+ * @param handle The handle to call back.
+ */
+ private PendingIntent createCallBackPendingIntent(Uri handle, UserHandle userHandle) {
+ return createTelecomPendingIntent(
+ TelecomBroadcastIntentProcessor.ACTION_DISCONNECTED_CALL_BACK_FROM_NOTIFICATION,
+ handle, userHandle);
+ }
+
+ /**
+ * Creates generic pending intent from the specified parameters to be received by
+ * {@link TelecomBroadcastIntentProcessor}.
+ *
+ * @param action The intent action.
+ * @param data The intent data.
+ */
+ private PendingIntent createTelecomPendingIntent(String action, Uri data,
+ UserHandle userHandle) {
+ Intent intent = new Intent(action, data, mContext, TelecomBroadcastReceiver.class);
+ intent.putExtra(TelecomBroadcastIntentProcessor.EXTRA_USERHANDLE, userHandle);
+ return PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ private boolean canRespondViaSms(@NonNull CallInfo call) {
+ // Only allow respond-via-sms for "tel:" calls.
+ return call.handle != null &&
+ PhoneAccount.SCHEME_TEL.equals(call.handle.getScheme());
+ }
+
+ /**
+ * Creates a new pending intent that sends the user to the call log.
+ *
+ * @return The pending intent.
+ */
+ private PendingIntent createCallLogPendingIntent(UserHandle userHandle) {
+ Intent intent = new Intent(Intent.ACTION_VIEW, null);
+ intent.setType(CallLog.Calls.CONTENT_TYPE);
+
+ TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(mContext);
+ taskStackBuilder.addNextIntent(intent);
+
+ return taskStackBuilder.getPendingIntent(0, 0, null, userHandle);
+ }
+
+ /**
+ * Creates an intent to be invoked when the user opts to "send sms" from the missed call
+ * notification.
+ */
+ private PendingIntent createSendSmsFromNotificationPendingIntent(Uri handle,
+ UserHandle userHandle) {
+ return createTelecomPendingIntent(
+ TelecomBroadcastIntentProcessor.ACTION_DISCONNECTED_SEND_SMS_FROM_NOTIFICATION,
+ Uri.fromParts(Constants.SCHEME_SMSTO, handle.getSchemeSpecificPart(), null),
+ userHandle);
+ }
+
+ /**
+ * Clear any of the active notifications.
+ * @param userHandle The user to clear the notifications for.
+ */
+ public void clearNotification(UserHandle userHandle) {
+ long token = Binder.clearCallingIdentity();
+ try {
+ mNotificationManager.cancelAsUser(NOTIFICATION_TAG, DISCONNECTED_CALL_NOTIFICATION_ID,
+ userHandle);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+}
diff --git a/src/com/android/server/telecom/ui/NotificationChannelManager.java b/src/com/android/server/telecom/ui/NotificationChannelManager.java
index d812ad8..360239b 100644
--- a/src/com/android/server/telecom/ui/NotificationChannelManager.java
+++ b/src/com/android/server/telecom/ui/NotificationChannelManager.java
@@ -38,6 +38,7 @@
public static final String CHANNEL_ID_INCOMING_CALLS = "TelecomIncomingCalls";
public static final String CHANNEL_ID_CALL_BLOCKING = "TelecomCallBlocking";
public static final String CHANNEL_ID_AUDIO_PROCESSING = "TelecomBackgroundAudioProcessing";
+ public static final String CHANNEL_ID_DISCONNECTED_CALLS = "TelecomDisconnectedCalls";
private BroadcastReceiver mLocaleChangeReceiver = new BroadcastReceiver() {
@Override
@@ -59,6 +60,7 @@
createOrUpdateChannel(context, CHANNEL_ID_INCOMING_CALLS);
createOrUpdateChannel(context, CHANNEL_ID_CALL_BLOCKING);
createOrUpdateChannel(context, CHANNEL_ID_AUDIO_PROCESSING);
+ createOrUpdateChannel(context, CHANNEL_ID_DISCONNECTED_CALLS);
}
private void createOrUpdateChannel(Context context, String channelId) {
@@ -108,6 +110,14 @@
vibration = false;
sound = null;
break;
+ case CHANNEL_ID_DISCONNECTED_CALLS:
+ name = context.getText(R.string.notification_channel_disconnected_calls);
+ importance = NotificationManager.IMPORTANCE_DEFAULT;
+ canShowBadge = true;
+ lights = true;
+ vibration = true;
+ sound = silentRingtone;
+ break;
}
NotificationChannel channel = new NotificationChannel(channelId, name, importance);
diff --git a/testapps/carmodedialer/Android.bp b/testapps/carmodedialer/Android.bp
new file mode 100644
index 0000000..7179b1f
--- /dev/null
+++ b/testapps/carmodedialer/Android.bp
@@ -0,0 +1,26 @@
+//
+// Copyright (C) 2019 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.
+//
+
+android_test {
+ name: "TelecomCarModeApp",
+ static_libs: [
+ "androidx.legacy_legacy-support-v4",
+ "guava",
+ ],
+ srcs: ["src/**/*.java"],
+ platform_apis: true,
+ certificate: "platform",
+}
diff --git a/testapps/carmodedialer/AndroidManifest.xml b/testapps/carmodedialer/AndroidManifest.xml
new file mode 100644
index 0000000..7f55f7e
--- /dev/null
+++ b/testapps/carmodedialer/AndroidManifest.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ coreApp="true"
+ package="com.android.server.telecom.carmodedialer">
+
+ <uses-sdk
+ android:minSdkVersion="28"
+ android:targetSdkVersion="29" />
+
+ <uses-permission android:name="android.permission.ACCEPT_HANDOVER" />
+ <uses-permission android:name="android.permission.BLUETOOTH" />
+ <uses-permission android:name="android.permission.CALL_PHONE" />
+ <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE" />
+ <uses-permission android:name="android.permission.ENTER_CAR_MODE_PRIORITIZED" />
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.READ_CALL_LOG" />
+ <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+ <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
+
+ <application android:label="Telecom CarMode">
+ <uses-library android:name="android.test.runner" />
+
+ <service android:name="com.android.server.telecom.carmodedialer.CarModeInCallServiceImpl"
+ android:permission="android.permission.BIND_INCALL_SERVICE" >
+ <meta-data android:name="android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"
+ android:value="true"/>
+ <intent-filter>
+ <action android:name="android.telecom.InCallService"/>
+ </intent-filter>
+ </service>
+
+ <activity android:name="com.android.server.telecom.carmodedialer.CarModeInCallUI"
+ android:label="CarMode Dialer"
+ android:launchMode="singleInstance">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="com.android.server.telecom.carmodedialer.CarModeDialerActivity"
+ android:label="CarMode Dialer">
+ <intent-filter>
+ <action android:name="android.intent.action.DIAL" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:mimeType="vnd.android.cursor.item/phone" />
+ <data android:mimeType="vnd.android.cursor.item/person" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.DIAL" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="voicemail" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.DIAL" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <action android:name="android.intent.action.DIAL" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="tel" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/carmodedialer/res/drawable-hdpi/ic_android_black_24dp.png b/testapps/carmodedialer/res/drawable-hdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..ed3ee45
--- /dev/null
+++ b/testapps/carmodedialer/res/drawable-hdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/testapps/carmodedialer/res/drawable-mdpi/ic_android_black_24dp.png b/testapps/carmodedialer/res/drawable-mdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..a4add51
--- /dev/null
+++ b/testapps/carmodedialer/res/drawable-mdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/testapps/carmodedialer/res/drawable-xhdpi/ic_android_black_24dp.png b/testapps/carmodedialer/res/drawable-xhdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..41558f2
--- /dev/null
+++ b/testapps/carmodedialer/res/drawable-xhdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/testapps/carmodedialer/res/drawable-xhdpi/stat_sys_phone_call.png b/testapps/carmodedialer/res/drawable-xhdpi/stat_sys_phone_call.png
new file mode 100644
index 0000000..1bb4340
--- /dev/null
+++ b/testapps/carmodedialer/res/drawable-xhdpi/stat_sys_phone_call.png
Binary files differ
diff --git a/testapps/carmodedialer/res/drawable-xxhdpi/ic_android_black_24dp.png b/testapps/carmodedialer/res/drawable-xxhdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..6006b12
--- /dev/null
+++ b/testapps/carmodedialer/res/drawable-xxhdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/testapps/carmodedialer/res/drawable-xxxhdpi/ic_android_black_24dp.png b/testapps/carmodedialer/res/drawable-xxxhdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..4f935bf
--- /dev/null
+++ b/testapps/carmodedialer/res/drawable-xxxhdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/testapps/carmodedialer/res/layout/call_list_item.xml b/testapps/carmodedialer/res/layout/call_list_item.xml
new file mode 100644
index 0000000..9a77ceb
--- /dev/null
+++ b/testapps/carmodedialer/res/layout/call_list_item.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+ <TextView
+ android:id="@+id/phoneNumber"
+ android:layout_gravity="left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="25dp"
+ android:text="TextView" />
+ <TextView
+ android:id="@+id/callState"
+ android:layout_gravity="left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="25dp"
+ android:text="TextView" />
+ <TextView
+ android:id="@+id/duration"
+ android:layout_gravity="right"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="25dp"
+ android:text="TextView" />
+</LinearLayout>
diff --git a/testapps/carmodedialer/res/layout/incall_screen.xml b/testapps/carmodedialer/res/layout/incall_screen.xml
new file mode 100644
index 0000000..bef6915
--- /dev/null
+++ b/testapps/carmodedialer/res/layout/incall_screen.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+ <ListView
+ android:id="@+id/callListView"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:divider="#FFCC00"
+ android:dividerHeight="4px">
+ </ListView>
+ <GridLayout
+ android:columnCount="3"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <Button
+ android:id="@+id/end_call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/endCallButton" />
+ <Button
+ android:id="@+id/mute_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/muteButton" />
+ <Button
+ android:id="@+id/hold_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/holdButton"/>
+ <Button
+ android:id="@+id/rtt_iface_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/rttIfaceButton"/>
+ <Button
+ android:id="@+id/answer_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/answerCallButton"/>
+ <Button
+ android:id="@+id/start_rtt_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/startRttButton"/>
+ <Button
+ android:id="@+id/accept_rtt_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/acceptRttButton"/>
+ <Button
+ android:id="@+id/request_handover_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/handoverButton"/>
+ </GridLayout>
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <Spinner
+ android:id="@+id/available_bt_devices"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+ <Button
+ android:id="@+id/set_bt_device_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/setBtDeviceButton"/>
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <Button
+ android:id="@+id/earpiece_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/earpieceButton"/>
+ <Button
+ android:id="@+id/speaker_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/speakerButton"/>
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <TextView
+ android:id="@+id/current_route_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/currentRouteLabel"/>
+ <TextView
+ android:id="@+id/current_audio_route"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="10dp"/>
+ </LinearLayout>
+</LinearLayout>
diff --git a/testapps/carmodedialer/res/layout/testdialer_main.xml b/testapps/carmodedialer/res/layout/testdialer_main.xml
new file mode 100644
index 0000000..c332d19
--- /dev/null
+++ b/testapps/carmodedialer/res/layout/testdialer_main.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+ <TextView
+ android:id="@+id/appLabel"
+ android:layout_gravity="left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="25dp"
+ android:text="Telecom CarMode Dialer" />
+ <EditText
+ android:id="@+id/number"
+ android:inputType="number"
+ android:layout_width="200dp"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/place_call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/placeCallButton" />
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="15dp"
+ android:text="Priority:" />
+ <EditText
+ android:id="@+id/priority"
+ android:inputType="number"
+ android:text="100"
+ android:layout_width="50dp"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/enable_car_mode"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Enable Car mode" />
+ <Button
+ android:id="@+id/disable_car_mode"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Disable Car mode" />
+ </LinearLayout>
+ <Button
+ android:id="@+id/toggle_incallservice"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Toggle InCallService" />
+</LinearLayout>
diff --git a/testapps/carmodedialer/res/values/donottranslate_strings.xml b/testapps/carmodedialer/res/values/donottranslate_strings.xml
new file mode 100644
index 0000000..3b5fa65
--- /dev/null
+++ b/testapps/carmodedialer/res/values/donottranslate_strings.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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>
+ <!-- Application label -->
+ <string name="app_name">TelecommTests</string>
+
+ <!-- String for the TestCallActivity -->
+ <string name="testCallActivityLabel">Test Connection Service App</string>
+
+ <!-- String for the CarModeDialerActivity -->
+ <string name="testDialerActivityLabel">Test Dialer</string>
+
+ <!-- String for button in CarModeDialerActivity that reassigns the default Dialer -->
+ <string name="defaultDialerButton">Default dialer request</string>
+
+ <!-- String for button in CarModeDialerActivity that places a test call -->
+ <string name="placeCallButton">Place call</string>
+
+ <!-- String for button in CarModeDialerActivity that performs voicemail requests to verify
+ voicemail permissions -->
+ <string name="testVoicemailButton">Exercise voicemail permissions</string>
+
+ <!-- String for button in CarModeDialerActivity that tries to exercise the
+ TelecomManager.cancelMissedCallNotifications() functionality -->
+ <string name="cancelMissedButton">Cancel missed calls</string>
+
+ <string name="endCallButton">End Call</string>
+
+ <string name="answerCallButton">Answer</string>
+
+ <string name="startCallWithRtt">Start call with RTT</string>
+
+ <string name="rttIfaceButton">RTT</string>
+
+ <string name="endRttButton">End RTT</string>
+
+ <string name="startRttButton">Start RTT</string>
+
+ <string name="acceptRttButton">Accept RTT request</string>
+
+ <string name="muteButton">Mute</string>
+
+ <string name="holdButton">Hold</string>
+
+ <string name="handoverButton">Handover</string>
+
+ <string name="inCallUiAppLabel">Test InCall UI</string>
+
+ <string name="UssdUiAppLabel">Test Ussd UI</string>
+
+ <string name="placeUssdButton">Send USSD</string>
+
+ <string name="KeyUiAppLabel">Get Key UI</string>
+
+ <string name="getKeyButton">Get Key Json</string>
+
+ <string name="earpieceButton">Earpiece/Wired</string>
+
+ <string name="speakerButton">Speakerphone</string>
+
+ <string name="setBtDeviceButton">Set BT device</string>
+
+ <string name="currentRouteLabel">Current audio route</string>
+ <!-- String for button in SelfManagedCallingActivity. -->
+ <string name="checkIfPermittedBeforeCallingButton">Check if calls permitted before calling</string>
+
+ <string name="selfManagedCallingActivityLabel">Self-Managed Sample</string>
+
+ <string name="outgoingCallNotPermitted">Outgoing call not permitted.</string>
+
+ <string name="outgoingCallNotPermittedCS">Outgoing call not permitted (CS Reported).</string>
+
+ <string name="incomingCallNotPermitted">Incoming call not permitted.</string>
+
+ <string name="incomingCallNotPermittedCS">Incoming call not permitted (CS Reported).</string>
+
+ <string name="rttUiLabel">Test RTT UI</string>
+
+ <string-array name="rtt_mode_array">
+ <item>Full</item>
+ <item>HCO</item>
+ <item>VCO</item>
+ </string-array>
+
+ <string-array name="rtt_reply_one_liners">
+ <item>To RTT or not to RTT, that is the question...</item>
+ <item>Making TTY great again!</item>
+ <item>I would be more comfortable with real "Thyme" chatting. I don\'t know how to end
+ this pun</item>
+ <item>お疲れ様でした</item>
+ <item>The FCC has mandated that I respond... I will do so begrudgingly</item>
+ <item>😂😂😂💯</item>
+ </string-array>
+</resources>
diff --git a/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CallListAdapter.java b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CallListAdapter.java
new file mode 100644
index 0000000..8ba59a7
--- /dev/null
+++ b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CallListAdapter.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2019 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.carmodedialer;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.telecom.Call;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class CallListAdapter extends BaseAdapter {
+ private static final String TAG = "CallListAdapter";
+
+ private final CarModeCallList.Listener mListener = new CarModeCallList.Listener() {
+ @Override
+ public void onCallAdded(Call call) {
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public void onCallRemoved(Call call) {
+ notifyDataSetChanged();
+ if (mCallList.size() == 0) {
+ mCallList.removeListener(this);
+ }
+ }
+ };
+
+ private final LayoutInflater mLayoutInflater;
+ private final CarModeCallList mCallList;
+ private final Handler mHandler = new Handler();
+ private final Runnable mSecondsRunnable = new Runnable() {
+ @Override
+ public void run() {
+ notifyDataSetChanged();
+ if (mCallList.size() > 0) {
+ mHandler.postDelayed(this, 1000);
+ }
+ }
+ };
+
+ public CallListAdapter(Context context) {
+ mLayoutInflater =
+ (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ mCallList = CarModeCallList.getInstance();
+ mCallList.addListener(mListener);
+ mHandler.postDelayed(mSecondsRunnable, 1000);
+ }
+
+
+ @Override
+ public int getCount() {
+ Log.i(TAG, "size reporting: " + mCallList.size());
+ return mCallList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return position;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ Log.i(TAG, "getView: " + position);
+ if (convertView == null) {
+ convertView = mLayoutInflater.inflate(R.layout.call_list_item, parent, false);
+ }
+
+ TextView phoneNumber = convertView.findViewById(R.id.phoneNumber);
+ TextView duration = convertView.findViewById(R.id.duration);
+ TextView state = convertView.findViewById(R.id.callState);
+
+ Call call = mCallList.getCall(position);
+ Uri handle = call.getDetails().getHandle();
+ phoneNumber.setText(handle == null ? "No number" : handle.getSchemeSpecificPart());
+
+ long durationMs = System.currentTimeMillis() - call.getDetails().getConnectTimeMillis();
+ duration.setText((durationMs / 1000) + " secs");
+
+ state.setText(getStateString(call));
+
+ Log.i(TAG, "Call found: " + ((handle == null) ? "null" : handle.getSchemeSpecificPart())
+ + ", " + durationMs);
+ Log.i(TAG, "Call extras: " + extrasToString(call.getDetails().getExtras()));
+ Log.i(TAG, "Call intent extras: " + extrasToString(call.getDetails().getIntentExtras()));
+
+ return convertView;
+ }
+
+ private String extrasToString(Bundle bundle) {
+ StringBuilder sb = new StringBuilder("[");
+ for (String key : bundle.keySet()) {
+ sb.append(key);
+ sb.append(": ");
+ sb.append(bundle.get(key));
+ sb.append("\n");
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+
+ private static String getStateString(Call call) {
+ switch (call.getState()) {
+ case Call.STATE_ACTIVE:
+ return "active";
+ case Call.STATE_CONNECTING:
+ return "connecting";
+ case Call.STATE_DIALING:
+ return "dialing";
+ case Call.STATE_DISCONNECTED:
+ return "disconnected";
+ case Call.STATE_DISCONNECTING:
+ return "disconnecting";
+ case Call.STATE_HOLDING:
+ return "on hold";
+ case Call.STATE_NEW:
+ return "new";
+ case Call.STATE_RINGING:
+ return "ringing";
+ case Call.STATE_SELECT_PHONE_ACCOUNT:
+ return "select phone account";
+ default:
+ return "unknown";
+ }
+ }
+}
diff --git a/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeCallList.java b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeCallList.java
new file mode 100644
index 0000000..5fba5bd
--- /dev/null
+++ b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeCallList.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2019 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.carmodedialer;
+
+import android.content.Context;
+import android.telecom.Call;
+import android.telecom.InCallService;
+import android.telecom.VideoProfile;
+import android.telecom.VideoProfile.CameraCapabilities;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Log;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Maintains a list of calls received via the {@link TestInCallServiceImpl}.
+ */
+public class CarModeCallList extends Call.Callback {
+
+ public static abstract class Listener {
+ public void onCallAdded(Call call) {}
+ public void onCallRemoved(Call call) {}
+ public void onRttStarted(Call call) {}
+ public void onRttStopped(Call call) {}
+ public void onRttInitiationFailed(Call call, int reason) {}
+ public void onRttRequest(Call call, int id) {}
+ }
+
+ private static final com.android.server.telecom.carmodedialer.CarModeCallList
+ INSTANCE = new com.android.server.telecom.carmodedialer.CarModeCallList();
+ private static final String TAG = "TestCallList";
+
+ private class TestVideoCallListener extends InCallService.VideoCall.Callback {
+ private Call mCall;
+
+ public TestVideoCallListener(Call call) {
+ mCall = call;
+ }
+
+ @Override
+ public void onSessionModifyRequestReceived(VideoProfile videoProfile) {
+ Log.v(TAG,
+ "onSessionModifyRequestReceived: videoState = " + videoProfile.getVideoState()
+ + " call = " + mCall);
+ }
+
+ @Override
+ public void onSessionModifyResponseReceived(int status, VideoProfile requestedProfile,
+ VideoProfile responseProfile) {
+ Log.v(TAG,
+ "onSessionModifyResponseReceived: status = " + status + " videoState = "
+ + responseProfile.getVideoState()
+ + " call = " + mCall);
+ }
+
+ @Override
+ public void onCallSessionEvent(int event) {
+
+ }
+
+ @Override
+ public void onPeerDimensionsChanged(int width, int height) {
+
+ }
+
+ @Override
+ public void onVideoQualityChanged(int videoQuality) {
+ Log.v(TAG,
+ "onVideoQualityChanged: videoQuality = " + videoQuality + " call = " + mCall);
+ }
+
+ @Override
+ public void onCallDataUsageChanged(long dataUsage) {
+
+ }
+
+ @Override
+ public void onCameraCapabilitiesChanged(CameraCapabilities cameraCapabilities) {
+
+ }
+ }
+
+ // The calls the call list knows about.
+ private List<Call> mCalls = new LinkedList<Call>();
+ private Map<Call, TestVideoCallListener> mVideoCallListeners =
+ new ArrayMap<Call, TestVideoCallListener>();
+ private Set<Listener> mListeners = new ArraySet<Listener>();
+ private Context mContext;
+ private int mLastRttRequestId = -1;
+
+ /**
+ * Singleton accessor.
+ */
+ public static com.android.server.telecom.carmodedialer.CarModeCallList getInstance() {
+ return INSTANCE;
+ }
+
+ public void addListener(Listener listener) {
+ if (listener != null) {
+ mListeners.add(listener);
+ }
+ }
+
+ public boolean removeListener(Listener listener) {
+ return mListeners.remove(listener);
+ }
+
+ public Call getCall(int position) {
+ return mCalls.get(position);
+ }
+
+ public void addCall(Call call) {
+ if (mCalls.contains(call)) {
+ Log.e(TAG, "addCall: Call already added.");
+ return;
+ }
+ Log.i(TAG, "addCall: " + call + " " + System.identityHashCode(this));
+ mCalls.add(call);
+ call.registerCallback(this);
+
+ for (Listener l : mListeners) {
+ l.onCallAdded(call);
+ }
+ }
+
+ public void removeCall(Call call) {
+ if (!mCalls.contains(call)) {
+ Log.e(TAG, "removeCall: Call cannot be removed -- doesn't exist.");
+ return;
+ }
+ Log.i(TAG, "removeCall: " + call);
+ mCalls.remove(call);
+ call.unregisterCallback(this);
+
+ for (Listener l : mListeners) {
+ if (l != null) {
+ l.onCallRemoved(call);
+ }
+ }
+ }
+
+ public void clearCalls() {
+ for (Call call : new LinkedList<Call>(mCalls)) {
+ removeCall(call);
+ }
+
+ for (Call call : mVideoCallListeners.keySet()) {
+ if (call.getVideoCall() != null) {
+ call.getVideoCall().destroy();
+ }
+ }
+ mVideoCallListeners.clear();
+ }
+
+ public int size() {
+ return mCalls.size();
+ }
+
+ public int getLastRttRequestId() {
+ return mLastRttRequestId;
+ }
+
+ /**
+ * For any video calls tracked, sends an upgrade to video request.
+ */
+ public void sendUpgradeToVideoRequest(int videoState) {
+ Log.v(TAG, "sendUpgradeToVideoRequest : videoState = " + videoState);
+
+ for (Call call : mCalls) {
+ InCallService.VideoCall videoCall = call.getVideoCall();
+ Log.v(TAG, "sendUpgradeToVideoRequest: checkCall "+call);
+ if (videoCall == null) {
+ continue;
+ }
+
+ Log.v(TAG, "send upgrade to video request for call: " + call);
+ videoCall.sendSessionModifyRequest(new VideoProfile(videoState));
+ }
+ }
+
+ /**
+ * For any video calls which are active, sends an upgrade to video response with the specified
+ * video state.
+ *
+ * @param videoState The video state to respond with.
+ */
+ public void sendUpgradeToVideoResponse(int videoState) {
+ Log.v(TAG, "sendUpgradeToVideoResponse : videoState = " + videoState);
+
+ for (Call call : mCalls) {
+ InCallService.VideoCall videoCall = call.getVideoCall();
+ if (videoCall == null) {
+ continue;
+ }
+
+ Log.v(TAG, "send upgrade to video response for call: " + call);
+ videoCall.sendSessionModifyResponse(new VideoProfile(videoState));
+ }
+ }
+
+ @Override
+ public void onVideoCallChanged(Call call, InCallService.VideoCall videoCall) {
+ Log.v(TAG, "onVideoCallChanged: call = " + call + " " + System.identityHashCode(this));
+ if (videoCall != null) {
+ if (!mVideoCallListeners.containsKey(call)) {
+ TestVideoCallListener listener = new TestVideoCallListener(call);
+ videoCall.registerCallback(listener);
+ mVideoCallListeners.put(call, listener);
+ Log.v(TAG, "onVideoCallChanged: added new listener");
+ }
+ }
+ }
+
+ @Override
+ public void onRttStatusChanged(Call call, boolean enabled, Call.RttCall rttCall) {
+ Log.v(TAG, "onRttStatusChanged: call = " + call + " " + System.identityHashCode(this));
+ if (enabled) {
+ for (Listener l : mListeners) {
+ l.onRttStarted(call);
+ }
+ } else {
+ for (Listener l : mListeners) {
+ l.onRttStopped(call);
+ }
+ }
+ }
+
+ @Override
+ public void onRttInitiationFailure(Call call, int reason) {
+ for (Listener l : mListeners) {
+ l.onRttInitiationFailed(call, reason);
+ }
+ }
+
+ @Override
+ public void onRttRequest(Call call, int id) {
+ mLastRttRequestId = id;
+ for (Listener l : mListeners) {
+ l.onRttRequest(call, id);
+ }
+ }
+}
diff --git a/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeDialerActivity.java b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeDialerActivity.java
new file mode 100644
index 0000000..e46d64f
--- /dev/null
+++ b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeDialerActivity.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2019 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.carmodedialer;
+
+import android.app.Activity;
+import android.app.UiModeManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.EditText;
+import android.widget.Toast;
+
+public class CarModeDialerActivity extends Activity {
+ private static final int REQUEST_CODE_SET_DEFAULT_DIALER = 1;
+
+ private EditText mNumberView;
+ private EditText mPriorityView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.testdialer_main);
+
+ findViewById(R.id.place_call_button).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ placeCall();
+ }
+ });
+
+ mNumberView = (EditText) findViewById(R.id.number);
+ findViewById(R.id.enable_car_mode).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ enableCarMode();
+ }
+ });
+ findViewById(R.id.disable_car_mode).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ disableCarMode();
+ }
+ });
+ findViewById(R.id.toggle_incallservice).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ toggleInCallService();
+ }
+ });
+
+ mPriorityView = findViewById(R.id.priority);
+
+ updateMutableUi();
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER) {
+ if (resultCode == RESULT_OK) {
+ showToast("User accepted request to become default dialer");
+ } else if (resultCode == RESULT_CANCELED) {
+ showToast("User declined request to become default dialer");
+ }
+ }
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ updateMutableUi();
+ }
+
+ private void updateMutableUi() {
+ Intent intent = getIntent();
+ if (intent != null) {
+ mNumberView.setText(intent.getDataString());
+ }
+ }
+
+ private void placeCall() {
+ final TelecomManager telecomManager =
+ (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
+ telecomManager.placeCall(Uri.fromParts(PhoneAccount.SCHEME_TEL,
+ mNumberView.getText().toString(), null), createCallIntentExtras());
+ }
+
+ private void showToast(String message) {
+ Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
+ }
+
+ private Bundle createCallIntentExtras() {
+ Bundle extras = new Bundle();
+ extras.putString("com.android.server.telecom.carmodedialer.CALL_EXTRAS", "Tyler was here");
+
+ Bundle intentExtras = new Bundle();
+ intentExtras.putBundle(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
+ return intentExtras;
+ }
+
+ private void enableCarMode() {
+ int priority;
+ try {
+ priority = Integer.parseInt(mPriorityView.getText().toString());
+ } catch (NumberFormatException nfe) {
+ Toast.makeText(this, "Invalid priority; not enabling car mode.",
+ Toast.LENGTH_LONG).show();
+ return;
+ }
+ UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
+ uiModeManager.enableCarMode(priority, 0);
+ Toast.makeText(this, "Enabling car mode with priority " + priority,
+ Toast.LENGTH_LONG).show();
+ }
+
+ private void disableCarMode() {
+ UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
+ uiModeManager.disableCarMode(0);
+ Toast.makeText(this, "Disabling car mode", Toast.LENGTH_LONG).show();
+ }
+
+ private void toggleInCallService() {
+ ComponentName uiComponent = new ComponentName(
+ com.android.server.telecom.carmodedialer.CarModeInCallServiceImpl.class.getPackage().getName(),
+ com.android.server.telecom.carmodedialer.CarModeInCallServiceImpl.class.getName());
+ boolean isEnabled = getPackageManager().getComponentEnabledSetting(uiComponent)
+ == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ getPackageManager().setComponentEnabledSetting(uiComponent,
+ isEnabled ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED
+ : PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP);
+ isEnabled = getPackageManager().getComponentEnabledSetting(uiComponent)
+ == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ Toast.makeText(this, "Is UI enabled? " + isEnabled, Toast.LENGTH_LONG).show();
+ }
+}
diff --git a/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeInCallServiceImpl.java b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeInCallServiceImpl.java
new file mode 100644
index 0000000..2879bde
--- /dev/null
+++ b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeInCallServiceImpl.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2019 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.carmodedialer;
+
+import android.content.Intent;
+import android.telecom.Call;
+import android.telecom.CallAudioState;
+import android.telecom.InCallService;
+import android.telecom.Phone;
+import android.util.Log;
+
+import java.lang.Override;
+import java.lang.String;
+
+/**
+ * Test In-Call service implementation. Logs incoming events. Mainly used to test binding to
+ * multiple {@link InCallService} implementations.
+ */
+public class CarModeInCallServiceImpl extends InCallService {
+ private static final String TAG = "TestInCallServiceImpl";
+ public static com.android.server.telecom.carmodedialer.CarModeInCallServiceImpl sInstance;
+
+ private Phone mPhone;
+
+ private Phone.Listener mPhoneListener = new Phone.Listener() {
+ @Override
+ public void onCallAdded(Phone phone, Call call) {
+ Log.i(TAG, "onCallAdded: " + call.toString());
+ CarModeCallList callList = CarModeCallList.getInstance();
+ callList.addCall(call);
+
+ if (callList.size() == 1) {
+ startInCallUI();
+ }
+ }
+
+ @Override
+ public void onCallRemoved(Phone phone, Call call) {
+ Log.i(TAG, "onCallRemoved: "+call.toString());
+ CarModeCallList.getInstance().removeCall(call);
+ }
+ };
+
+ @Override
+ public void onPhoneCreated(Phone phone) {
+ Log.i(TAG, "onPhoneCreated");
+ mPhone = phone;
+ mPhone.addListener(mPhoneListener);
+ CarModeCallList.getInstance().clearCalls();
+ }
+
+ @Override
+ public boolean onUnbind(Intent intent) {
+ Log.i(TAG, "onPhoneDestroyed");
+ mPhone.removeListener(mPhoneListener);
+ mPhone = null;
+ CarModeCallList.getInstance().clearCalls();
+ sInstance = null;
+ return super.onUnbind(intent);
+ }
+
+ @Override
+ public void onCallAudioStateChanged(CallAudioState cas) {
+ if (CarModeInCallUI.sInstance != null) {
+ CarModeInCallUI.sInstance.updateCallAudioState(cas);
+ }
+ }
+
+ private void startInCallUI() {
+ sInstance = this;
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION | Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setClass(this, CarModeInCallUI.class);
+ startActivity(intent);
+ }
+}
diff --git a/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeInCallUI.java b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeInCallUI.java
new file mode 100644
index 0000000..6d06862
--- /dev/null
+++ b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/CarModeInCallUI.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2019 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.carmodedialer;
+
+import android.app.Activity;
+import android.bluetooth.BluetoothDevice;
+import android.os.Bundle;
+import android.telecom.Call;
+import android.telecom.CallAudioState;
+import android.telecom.VideoProfile;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.Collection;
+
+public class CarModeInCallUI extends Activity {
+ private class BluetoothDeviceAdapter extends ArrayAdapter<BluetoothDevice> {
+ public BluetoothDeviceAdapter() {
+ super(com.android.server.telecom.carmodedialer.CarModeInCallUI.this, android.R.layout.simple_spinner_item);
+ setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ BluetoothDevice info = getItem(position);
+ TextView result = new TextView(com.android.server.telecom.carmodedialer.CarModeInCallUI.this);
+ result.setText(info.getName());
+ return result;
+ }
+
+ public void update(Collection<BluetoothDevice> devices) {
+ clear();
+ addAll(devices);
+ }
+ }
+
+ public static com.android.server.telecom.carmodedialer.CarModeInCallUI sInstance;
+ private ListView mListView;
+ private CarModeCallList mCallList;
+ private Spinner mBtDeviceList;
+ private BluetoothDeviceAdapter mBluetoothDeviceAdapter;
+ private TextView mCurrentRouteDisplay;
+
+ /** ${inheritDoc} */
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ sInstance = this;
+
+ setContentView(R.layout.incall_screen);
+
+ mListView = (ListView) findViewById(R.id.callListView);
+ mListView.setAdapter(new CallListAdapter(this));
+ mListView.setVisibility(View.VISIBLE);
+
+ mCallList = CarModeCallList.getInstance();
+ mCallList.addListener(new CarModeCallList.Listener() {
+ @Override
+ public void onCallRemoved(Call call) {
+ if (mCallList.size() == 0) {
+ Log.i(CarModeInCallUI.class.getSimpleName(), "Ending the incall UI");
+ finish();
+ }
+ }
+
+ @Override
+ public void onRttStarted(Call call) {
+ Toast.makeText(CarModeInCallUI.this, "RTT now enabled", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onRttStopped(Call call) {
+ Toast.makeText(CarModeInCallUI.this, "RTT now disabled", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onRttInitiationFailed(Call call, int reason) {
+ Toast.makeText(CarModeInCallUI.this, String.format("RTT failed to init: %d", reason),
+ Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onRttRequest(Call call, int id) {
+ Toast.makeText(CarModeInCallUI.this, String.format("RTT request: %d", id),
+ Toast.LENGTH_SHORT).show();
+ }
+ });
+
+ View endCallButton = findViewById(R.id.end_call_button);
+ View holdButton = findViewById(R.id.hold_button);
+ View muteButton = findViewById(R.id.mute_button);
+ View answerButton = findViewById(R.id.answer_button);
+ View setBtDeviceButton = findViewById(R.id.set_bt_device_button);
+ View earpieceButton = findViewById(R.id.earpiece_button);
+ View speakerButton = findViewById(R.id.speaker_button);
+ mBtDeviceList = findViewById(R.id.available_bt_devices);
+ mBluetoothDeviceAdapter = new BluetoothDeviceAdapter();
+ mBtDeviceList.setAdapter(mBluetoothDeviceAdapter);
+ mCurrentRouteDisplay = findViewById(R.id.current_audio_route);
+
+ endCallButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Call call = mCallList.getCall(0);
+ if (call != null) {
+ call.disconnect();
+ }
+ }
+ });
+ holdButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Call call = mCallList.getCall(0);
+ if (call != null) {
+ if (call.getState() == Call.STATE_HOLDING) {
+ call.unhold();
+ } else {
+ call.hold();
+ }
+ }
+ }
+ });
+ muteButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Call call = mCallList.getCall(0);
+ if (call != null) {
+
+ }
+ }
+ });
+
+ answerButton.setOnClickListener(view -> {
+ Call call = mCallList.getCall(0);
+ if (call.getState() == Call.STATE_RINGING) {
+ call.answer(VideoProfile.STATE_AUDIO_ONLY);
+ }
+ });
+
+ earpieceButton.setOnClickListener(view -> {
+ CarModeInCallServiceImpl.sInstance.setAudioRoute(CallAudioState.ROUTE_WIRED_OR_EARPIECE);
+ });
+
+ speakerButton.setOnClickListener(view -> {
+ CarModeInCallServiceImpl.sInstance.setAudioRoute(CallAudioState.ROUTE_SPEAKER);
+ });
+
+ setBtDeviceButton.setOnClickListener(view -> {
+ if (mBtDeviceList.getSelectedItem() != null
+ && CarModeInCallServiceImpl.sInstance != null) {
+ CarModeInCallServiceImpl.sInstance.requestBluetoothAudio(
+ (BluetoothDevice) mBtDeviceList.getSelectedItem());
+ }
+ });
+
+ }
+
+ public void updateCallAudioState(CallAudioState cas) {
+ mBluetoothDeviceAdapter.update(cas.getSupportedBluetoothDevices());
+ String routeText;
+ switch (cas.getRoute()) {
+ case CallAudioState.ROUTE_EARPIECE:
+ routeText = "Earpiece";
+ break;
+ case CallAudioState.ROUTE_SPEAKER:
+ routeText = "Speaker";
+ break;
+ case CallAudioState.ROUTE_WIRED_HEADSET:
+ routeText = "Wired";
+ break;
+ case CallAudioState.ROUTE_BLUETOOTH:
+ BluetoothDevice activeDevice = cas.getActiveBluetoothDevice();
+ routeText = activeDevice == null ? "null bt" : activeDevice.getName();
+ break;
+ default:
+ routeText = "unknown: " + cas.getRoute();
+ }
+ mCurrentRouteDisplay.setText(routeText);
+ }
+
+ /** ${inheritDoc} */
+ @Override
+ protected void onDestroy() {
+ sInstance = null;
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+}
diff --git a/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/TestInCallServiceBroadcastReceiver.java b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/TestInCallServiceBroadcastReceiver.java
new file mode 100644
index 0000000..6b2b009
--- /dev/null
+++ b/testapps/carmodedialer/src/com/android/server/telecom/carmodedialer/TestInCallServiceBroadcastReceiver.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2019 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.carmodedialer;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.telecom.TelecomManager;
+import android.util.Log;
+
+/**
+ * Test in call service broadcast receiver.
+ */
+public class TestInCallServiceBroadcastReceiver extends BroadcastReceiver {
+ private static final String TAG = "TestInCallServiceBR";
+
+ /**
+ * Sends an upgrade to video request for any live calls.
+ */
+ public static final String ACTION_SEND_UPDATE_REQUEST_FROM_TEST_INCALL_SERVICE =
+ "android.server.telecom.testapps.ACTION_SEND_UPDATE_REQUEST_FROM_TEST_INCALL_SERVICE";
+
+ /**
+ * Sends an a response to an upgrade to video request.
+ */
+ public static final String ACTION_SEND_UPGRADE_RESPONSE =
+ "android.server.telecom.testapps.ACTION_SEND_UPGRADE_RESPONSE";
+
+ /**
+ * Handles broadcasts directed at the {@link CarModeInCallServiceImpl}.
+ *
+ * @param context The Context in which the receiver is running.
+ * @param intent The Intent being received.
+ */
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ Log.v(TAG, "onReceive: " + action);
+
+ if (ACTION_SEND_UPDATE_REQUEST_FROM_TEST_INCALL_SERVICE.equals(action)) {
+ final int videoState = Integer.parseInt(intent.getData().getSchemeSpecificPart());
+ CarModeCallList.getInstance().sendUpgradeToVideoRequest(videoState);
+ } else if (ACTION_SEND_UPGRADE_RESPONSE.equals(action)) {
+ final int videoState = Integer.parseInt(intent.getData().getSchemeSpecificPart());
+ CarModeCallList.getInstance().sendUpgradeToVideoResponse(videoState);
+ } else if (TelecomManager.ACTION_PHONE_ACCOUNT_REGISTERED.equals(action)) {
+ Log.i(TAG, "onReceive: registered " + intent.getExtras().get(
+ TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE));
+ } else if (TelecomManager.ACTION_PHONE_ACCOUNT_UNREGISTERED.equals(action)) {
+ Log.i(TAG, "onReceive: unregistered " + intent.getExtras().get(
+ TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE));
+ }
+ }
+}
diff --git a/testapps/res/layout/testdialer_main.xml b/testapps/res/layout/testdialer_main.xml
index a9507c3..e2ea30c 100644
--- a/testapps/res/layout/testdialer_main.xml
+++ b/testapps/res/layout/testdialer_main.xml
@@ -59,11 +59,32 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/startCallWithRtt"/>
- <Button
- android:id="@+id/toggle_car_mode"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Toggle Car mode" />
+ android:orientation="horizontal" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="15dp"
+ android:text="Priority:" />
+ <EditText
+ android:id="@+id/priority"
+ android:inputType="number"
+ android:text="100"
+ android:layout_width="50dp"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/enable_car_mode"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Enable Car mode" />
+ <Button
+ android:id="@+id/disable_car_mode"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Disable Car mode" />
+ </LinearLayout>
<Button
android:id="@+id/toggle_incallservice"
android:layout_width="wrap_content"
diff --git a/testapps/res/values/donottranslate_strings.xml b/testapps/res/values/donottranslate_strings.xml
index 6a085ee..aa34070 100644
--- a/testapps/res/values/donottranslate_strings.xml
+++ b/testapps/res/values/donottranslate_strings.xml
@@ -21,20 +21,20 @@
<!-- String for the TestCallActivity -->
<string name="testCallActivityLabel">Test Connection Service App</string>
- <!-- String for the TestDialerActivity -->
+ <!-- String for the CarModeDialerActivity -->
<string name="testDialerActivityLabel">Test Dialer</string>
- <!-- String for button in TestDialerActivity that reassigns the default Dialer -->
+ <!-- String for button in CarModeDialerActivity that reassigns the default Dialer -->
<string name="defaultDialerButton">Default dialer request</string>
- <!-- String for button in TestDialerActivity that places a test call -->
+ <!-- String for button in CarModeDialerActivity that places a test call -->
<string name="placeCallButton">Place call</string>
- <!-- String for button in TestDialerActivity that performs voicemail requests to verify
+ <!-- String for button in CarModeDialerActivity that performs voicemail requests to verify
voicemail permissions -->
<string name="testVoicemailButton">Exercise voicemail permissions</string>
- <!-- String for button in TestDialerActivity that tries to exercise the
+ <!-- String for button in CarModeDialerActivity that tries to exercise the
TelecomManager.cancelMissedCallNotifications() functionality -->
<string name="cancelMissedButton">Cancel missed calls</string>
diff --git a/testapps/src/com/android/server/telecom/testapps/TestCallScreeningService.java b/testapps/src/com/android/server/telecom/testapps/TestCallScreeningService.java
index 544eb28..a975219 100644
--- a/testapps/src/com/android/server/telecom/testapps/TestCallScreeningService.java
+++ b/testapps/src/com/android/server/telecom/testapps/TestCallScreeningService.java
@@ -98,7 +98,7 @@
.setRejectCall(false)
.setSkipCallLog(false)
.setSkipNotification(false)
- .setShouldScreenCallFurther(true)
+ .setShouldScreenCallViaAudioProcessing(true)
.build();
respondToCall(mDetails, response);
}
diff --git a/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java b/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java
index 9aa076f..19f09e6 100644
--- a/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java
+++ b/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java
@@ -26,6 +26,7 @@
private EditText mNumberView;
private CheckBox mRttCheckbox;
+ private EditText mPriorityView;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -61,10 +62,16 @@
mNumberView = (EditText) findViewById(R.id.number);
mRttCheckbox = (CheckBox) findViewById(R.id.call_with_rtt_checkbox);
- findViewById(R.id.toggle_car_mode).setOnClickListener(new OnClickListener() {
+ findViewById(R.id.enable_car_mode).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- toggleCarMode();
+ enableCarMode();
+ }
+ });
+ findViewById(R.id.disable_car_mode).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ disableCarMode();
}
});
findViewById(R.id.toggle_incallservice).setOnClickListener(new OnClickListener() {
@@ -73,6 +80,7 @@
toggleInCallService();
}
});
+ mPriorityView = findViewById(R.id.priority);
updateMutableUi();
}
@@ -158,14 +166,25 @@
return intentExtras;
}
- private void toggleCarMode() {
- UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
- boolean isCarMode = uiModeManager.getCurrentModeType() == UI_MODE_TYPE_CAR;
- if (isCarMode) {
- uiModeManager.disableCarMode(0);
- } else {
- uiModeManager.enableCarMode(0);
+ private void enableCarMode() {
+ int priority;
+ try {
+ priority = Integer.parseInt(mPriorityView.getText().toString());
+ } catch (NumberFormatException nfe) {
+ Toast.makeText(this, "Invalid priority; not enabling car mode.",
+ Toast.LENGTH_LONG).show();
+ return;
}
+ UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
+ uiModeManager.enableCarMode(priority, 0);
+ Toast.makeText(this, "Enabling car mode with priority " + priority,
+ Toast.LENGTH_LONG).show();
+ }
+
+ private void disableCarMode() {
+ UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
+ uiModeManager.disableCarMode(0);
+ Toast.makeText(this, "Disabling car mode", Toast.LENGTH_LONG).show();
}
private void toggleInCallService() {
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index 01927f5..d536cbd 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -615,7 +615,7 @@
waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager()
.getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT);
// setSpeakerPhoneOn(false) gets called once during the call initiation phase
- verify(audioManager, timeout(TEST_TIMEOUT).atLeast(2))
+ verify(audioManager, timeout(TEST_TIMEOUT).atLeast(1))
.setSpeakerphoneOn(false);
mConnectionServiceFixtureA.
@@ -811,7 +811,7 @@
when(getBlockedNumberProvider().call(
anyString(),
anyString(),
- eq(BlockedNumberContract.SystemContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER),
+ eq(BlockedNumberContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER),
eq(phoneNumber),
nullable(Bundle.class))).thenAnswer(answer);
}
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioRouteTransitionTests.java b/tests/src/com/android/server/telecom/tests/CallAudioRouteTransitionTests.java
index 57462c4..58f1ee7 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioRouteTransitionTests.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioRouteTransitionTests.java
@@ -219,8 +219,18 @@
return null;
}).when(mockBluetoothRouteManager).connectBluetoothAudio(nullable(String.class));
- when(mockAudioManager.isSpeakerphoneOn()).thenReturn(
- params.initialRoute == CallAudioState.ROUTE_SPEAKER);
+ // Set the speakerphone state depending on the message being sent. If it's one of the
+ // speakerphone override ones, set accordingly. Otherwise consult the initial route.
+ boolean speakerphoneOn;
+ if (params.action == CallAudioRouteStateMachine.SPEAKER_ON) {
+ speakerphoneOn = true;
+ } else if (params.action == CallAudioRouteStateMachine.SPEAKER_OFF) {
+ speakerphoneOn = false;
+ } else {
+ speakerphoneOn = params.initialRoute == CallAudioState.ROUTE_SPEAKER;
+ }
+ when(mockAudioManager.isSpeakerphoneOn()).thenReturn(speakerphoneOn);
+
when(fakeCall.getSupportedAudioRoutes()).thenReturn(params.callSupportedRoutes);
}
@@ -757,6 +767,58 @@
CallAudioRouteStateMachine.EARPIECE_FORCE_ENABLED // earpieceControl
));
+ params.add(new RoutingTestParameters(
+ "Speakerphone turned on during earpiece", // name
+ CallAudioState.ROUTE_EARPIECE, // initialRoute
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
+ NONE, // speakerInteraction
+ NONE, // bluetoothInteraction
+ CallAudioRouteStateMachine.SPEAKER_ON, // action
+ CallAudioState.ROUTE_SPEAKER, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailabl
+ CallAudioRouteStateMachine.EARPIECE_FORCE_ENABLED // earpieceControl
+ ));
+
+ params.add(new RoutingTestParameters(
+ "Speakerphone turned on during wired headset", // name
+ CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
+ CallAudioState.ROUTE_EARPIECE
+ | CallAudioState.ROUTE_BLUETOOTH
+ | CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
+ NONE, // speakerInteraction
+ NONE, // bluetoothInteraction
+ CallAudioRouteStateMachine.SPEAKER_ON, // action
+ CallAudioState.ROUTE_SPEAKER, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE
+ | CallAudioState.ROUTE_BLUETOOTH
+ | CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
+ CallAudioRouteStateMachine.EARPIECE_FORCE_ENABLED // earpieceControl
+ ));
+
+ params.add(new RoutingTestParameters(
+ "Speakerphone turned on during bluetooth", // name
+ CallAudioState.ROUTE_BLUETOOTH, // initialRoute
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
+ NONE, // speakerInteraction
+ OFF, // bluetoothInteraction
+ CallAudioRouteStateMachine.SPEAKER_ON, // action
+ CallAudioState.ROUTE_SPEAKER, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailabl
+ CallAudioRouteStateMachine.EARPIECE_FORCE_ENABLED // earpieceControl
+ ));
+
+ params.add(new RoutingTestParameters(
+ "Speakerphone turned off externally during speaker", // name
+ CallAudioState.ROUTE_SPEAKER, // initialRoute
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // availableRoutes
+ NONE, // speakerInteraction
+ ON, // bluetoothInteraction
+ CallAudioRouteStateMachine.SPEAKER_OFF, // action
+ CallAudioState.ROUTE_BLUETOOTH, // expectedRoute
+ CallAudioState.ROUTE_EARPIECE | CallAudioState.ROUTE_BLUETOOTH, // expectedAvailabl
+ CallAudioRouteStateMachine.EARPIECE_FORCE_ENABLED // earpieceControl
+ ));
+
return params;
}
diff --git a/tests/src/com/android/server/telecom/tests/CallScreeningServiceControllerTest.java b/tests/src/com/android/server/telecom/tests/CallScreeningServiceControllerTest.java
index 332899b..6f37fdc 100644
--- a/tests/src/com/android/server/telecom/tests/CallScreeningServiceControllerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallScreeningServiceControllerTest.java
@@ -131,7 +131,6 @@
super.setUp();
when(mRoleManagerAdapter.getCallCompanionApps()).thenReturn(Collections.emptyList());
when(mRoleManagerAdapter.getDefaultCallScreeningApp()).thenReturn(null);
- when(mRoleManagerAdapter.getCarModeDialerApp()).thenReturn(null);
when(mCallsManager.getRoleManagerAdapter()).thenReturn(mRoleManagerAdapter);
when(mCallsManager.getCurrentUserHandle()).thenReturn(UserHandle.CURRENT);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index 110b58e..1b63a42 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -88,6 +88,7 @@
import com.android.server.telecom.bluetooth.BluetoothStateReceiver;
import com.android.server.telecom.callfiltering.IncomingCallFilter;
import com.android.server.telecom.ui.AudioProcessingNotification;
+import com.android.server.telecom.ui.DisconnectedCallNotifier;
import com.android.server.telecom.ui.ToastFactory;
import org.junit.After;
@@ -150,6 +151,8 @@
private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { };
@Mock private CallerInfoLookupHelper mCallerInfoLookupHelper;
@Mock private MissedCallNotifier mMissedCallNotifier;
+ @Mock private DisconnectedCallNotifier.Factory mDisconnectedCallNotifierFactory;
+ @Mock private DisconnectedCallNotifier mDisconnectedCallNotifier;
@Mock private PhoneAccountRegistrar mPhoneAccountRegistrar;
@Mock private HeadsetMediaButton mHeadsetMediaButton;
@Mock private HeadsetMediaButtonFactory mHeadsetMediaButtonFactory;
@@ -209,11 +212,14 @@
when(mClockProxy.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime());
when(mConnSvrFocusManagerFactory.create(any())).thenReturn(mConnectionSvrFocusMgr);
doNothing().when(mRoleManagerAdapter).setCurrentUserHandle(any());
+ when(mDisconnectedCallNotifierFactory.create(any(Context.class),any(CallsManager.class)))
+ .thenReturn(mDisconnectedCallNotifier);
mCallsManager = new CallsManager(
mComponentContextFixture.getTestDouble().getApplicationContext(),
mLock,
mCallerInfoLookupHelper,
mMissedCallNotifier,
+ mDisconnectedCallNotifierFactory,
mPhoneAccountRegistrar,
mHeadsetMediaButtonFactory,
mProximitySensorManagerFactory,
@@ -1162,7 +1168,6 @@
@Override
public void onConnectionCapabilitiesChanged(Call call) {
try {
- Log.i("TYLER", "Listener got " + call.getConnectionCapabilities());
capabilitiesQueue.put(call.getConnectionCapabilities());
} catch (InterruptedException e) {
fail();
diff --git a/tests/src/com/android/server/telecom/tests/CarModeTrackerTest.java b/tests/src/com/android/server/telecom/tests/CarModeTrackerTest.java
new file mode 100644
index 0000000..4ef4596
--- /dev/null
+++ b/tests/src/com/android/server/telecom/tests/CarModeTrackerTest.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2019 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 static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.TestCase.assertNull;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+import android.app.UiModeManager;
+
+import com.android.server.telecom.CarModeTracker;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Mock;
+
+@RunWith(JUnit4.class)
+public class CarModeTrackerTest extends TelecomTestCase {
+ private static final String CAR_MODE_APP1_PACKAGE_NAME = "com.android.carmode1";
+ private static final String CAR_MODE_APP2_PACKAGE_NAME = "com.android.carmode2";
+ private static final String CAR_MODE_APP3_PACKAGE_NAME = "com.android.carmode3";
+ private static final String CAR_MODE_APP4_PACKAGE_NAME = "com.android.carmode4";
+
+ private CarModeTracker mCarModeTracker;
+
+ @Override
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+
+ mCarModeTracker = new CarModeTracker();
+ }
+
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Basic test; see if we can enter car mode.
+ */
+ @Test
+ public void testEnterCarModeBasic() {
+ // At start, no car mode apps.
+ assertNull(mCarModeTracker.getCurrentCarModePackage());
+ assertEquals(0, mCarModeTracker.getCarModeApps().size());
+
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+
+ // We should be tracking our car mode app.
+ assertEquals(1, mCarModeTracker.getCarModeApps().size());
+ assertTrue(mCarModeTracker.isInCarMode());
+ }
+
+ /**
+ * Ensure when we enter car mode with a package which has already entered car mode, the extra
+ * request is ignored.
+ */
+ @Test
+ public void testEnterCarModeAlreadyInCarMode() {
+ testEnterCarModeBasic();
+
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+ // Still should just be one.
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ assertEquals(1, mCarModeTracker.getCarModeApps().size());
+ }
+
+ /**
+ * Ensure when we enter car mode with a package which has already entered car mode, the extra
+ * request is ignored.
+ */
+ @Test
+ public void testEnterCarModePriorityInUse() {
+ testEnterCarModeBasic();
+
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP2_PACKAGE_NAME);
+
+ // We should be tracking car mode with the first package; the 2nd should have been ignored.
+ assertEquals(1, mCarModeTracker.getCarModeApps().size());
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCarModeApps().get(0));
+ }
+
+ /**
+ * Verifies only the first app at the default priority gets tracked.
+ */
+ @Test
+ public void testEnterCarModeDefaultPriority() {
+ assertEquals(0, mCarModeTracker.getCarModeApps().size());
+
+ mCarModeTracker.handleEnterCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(1, mCarModeTracker.getCarModeApps().size());
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+
+ mCarModeTracker.handleEnterCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP2_PACKAGE_NAME);
+ assertEquals(1, mCarModeTracker.getCarModeApps().size());
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ }
+
+ /**
+ * Verifies that multiple apps can enter car mode at the default priority and a higher priority.
+ * Verifies that the priority ordering is retained as expected.
+ */
+ @Test
+ public void testEnterCarModeDefaultAndHigherPriority() {
+ testEnterCarModeDefaultPriority();
+
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP3_PACKAGE_NAME);
+ assertEquals(2, mCarModeTracker.getCarModeApps().size());
+ assertEquals(CAR_MODE_APP3_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ assertEquals(CAR_MODE_APP3_PACKAGE_NAME, mCarModeTracker.getCarModeApps().get(0));
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCarModeApps().get(1));
+
+ mCarModeTracker.handleEnterCarMode(50, CAR_MODE_APP4_PACKAGE_NAME);
+ assertEquals(3, mCarModeTracker.getCarModeApps().size());
+ assertEquals(CAR_MODE_APP3_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ assertEquals(CAR_MODE_APP3_PACKAGE_NAME, mCarModeTracker.getCarModeApps().get(0));
+ assertEquals(CAR_MODE_APP4_PACKAGE_NAME, mCarModeTracker.getCarModeApps().get(1));
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCarModeApps().get(2));
+ }
+
+ /**
+ * Verifies entering and exiting car mode at default priority.
+ */
+ @Test
+ public void testEnterExitCarModeDefaultPriority() {
+ mCarModeTracker.handleEnterCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleExitCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP1_PACKAGE_NAME);
+ assertNull(mCarModeTracker.getCurrentCarModePackage());
+ }
+
+ /**
+ * Verifies entering and exiting car mode at default priority.
+ * Ensures a different app can exit car mode at the default priority than the one which
+ * entered car mode at that priority.
+ */
+ @Test
+ public void testEnterExitCarModeDefaultPriorityDifferentApp() {
+ mCarModeTracker.handleEnterCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleExitCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP2_PACKAGE_NAME);
+ assertNull(mCarModeTracker.getCurrentCarModePackage());
+ }
+
+ /**
+ * Verifies entering and exiting car mode at higher priority.
+ */
+ @Test
+ public void testEnterExitCarModeHigherPriority() {
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleExitCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+ assertNull(mCarModeTracker.getCurrentCarModePackage());
+ }
+
+ /**
+ * Verifies entering and exiting car mode at higher priority, except the exiting app differs.
+ */
+ @Test
+ public void testEnterExitCarModeHigherPriorityDifferentApp() {
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleExitCarMode(100, CAR_MODE_APP2_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ }
+
+ /**
+ * Verifies entering and exiting car mode at a bunch of priorities with a bunch of apps.
+ */
+ @Test
+ public void testEnterExitCarModeMultiple() {
+ mCarModeTracker.handleEnterCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleEnterCarMode(50, CAR_MODE_APP2_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleEnterCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP3_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP1_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+
+ mCarModeTracker.handleExitCarMode(100, CAR_MODE_APP1_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP2_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleExitCarMode(50, CAR_MODE_APP2_PACKAGE_NAME);
+ assertEquals(CAR_MODE_APP3_PACKAGE_NAME, mCarModeTracker.getCurrentCarModePackage());
+ mCarModeTracker.handleExitCarMode(UiModeManager.DEFAULT_PRIORITY,
+ CAR_MODE_APP3_PACKAGE_NAME);
+ assertNull(mCarModeTracker.getCurrentCarModePackage());
+ }
+}
diff --git a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
index 91ee977..7effc47 100644
--- a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
+++ b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
@@ -125,6 +125,11 @@
}
@Override
+ public Resources.Theme getTheme() {
+ return mResourcesTheme;
+ }
+
+ @Override
public File getFilesDir() {
try {
return File.createTempFile("temp", "temp").getParentFile();
@@ -451,6 +456,7 @@
// We then create a spy on the application context allowing standard Mockito-style
// when(...) logic to be used to add specific little responses where needed.
+ private final Resources.Theme mResourcesTheme = mock(Resources.Theme.class);
private final Resources mResources = mock(Resources.class);
private final Context mApplicationContextSpy = spy(mApplicationContext);
private final PackageManager mPackageManager = mock(PackageManager.class);
@@ -558,14 +564,25 @@
public void addInCallService(
ComponentName componentName,
- IInCallService service)
+ IInCallService service,
+ int uid)
throws Exception {
addService(InCallService.SERVICE_INTERFACE, componentName, service);
ServiceInfo serviceInfo = new ServiceInfo();
serviceInfo.permission = android.Manifest.permission.BIND_INCALL_SERVICE;
serviceInfo.packageName = componentName.getPackageName();
+ serviceInfo.applicationInfo = new ApplicationInfo();
+ serviceInfo.applicationInfo.uid = uid;
+ serviceInfo.metaData = new Bundle();
+ serviceInfo.metaData.putBoolean(TelecomManager.METADATA_IN_CALL_SERVICE_UI, false);
serviceInfo.name = componentName.getClassName();
mServiceInfoByComponentName.put(componentName, serviceInfo);
+
+ // Used in InCallController to check permissions for CONTROL_INCALL_EXPERIENCE
+ when(mPackageManager.getPackagesForUid(eq(uid))).thenReturn(new String[] {
+ componentName.getPackageName() });
+ when(mPackageManager.checkPermission(eq(Manifest.permission.CONTROL_INCALL_EXPERIENCE),
+ eq(componentName.getPackageName()))).thenReturn(PackageManager.PERMISSION_GRANTED);
}
public void putResource(int id, final String value) {
diff --git a/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java b/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java
index 3718419..131e591 100644
--- a/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java
+++ b/tests/src/com/android/server/telecom/tests/ConnectionServiceFixture.java
@@ -424,6 +424,7 @@
boolean isVoipAudioMode;
Bundle extras;
boolean isConferenceCreated;
+ int callerNumberVerificationStatus;
}
public class ConferenceInfo {
@@ -712,6 +713,7 @@
c.statusHints,
c.disconnectCause,
c.conferenceableConnectionIds,
- c.extras);
+ c.extras,
+ c.callerNumberVerificationStatus);
}
}
diff --git a/tests/src/com/android/server/telecom/tests/DisconnectedCallNotifierTest.java b/tests/src/com/android/server/telecom/tests/DisconnectedCallNotifierTest.java
new file mode 100644
index 0000000..22963de
--- /dev/null
+++ b/tests/src/com/android/server/telecom/tests/DisconnectedCallNotifierTest.java
@@ -0,0 +1,123 @@
+package com.android.server.telecom.tests;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.os.UserHandle;
+import android.telecom.DisconnectCause;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.server.telecom.Call;
+import com.android.server.telecom.CallState;
+import com.android.server.telecom.CallerInfoLookupHelper;
+import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.ui.DisconnectedCallNotifier;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+
+import java.util.Collections;
+
+public class DisconnectedCallNotifierTest extends TelecomTestCase {
+
+ private static final PhoneAccountHandle PHONE_ACCOUNT_HANDLE = new PhoneAccountHandle(
+ new ComponentName("com.android.server.telecom.tests", "DisconnectedCallNotifierTest"),
+ "testId");
+ private static final Uri TEL_CALL_HANDLE = Uri.parse("tel:+11915552620");
+
+ @Mock private CallsManager mCallsManager;
+ @Mock private CallerInfoLookupHelper mCallerInfoLookupHelper;
+
+ private NotificationManager mNotificationManager;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
+ mContext = mComponentContextFixture.getTestDouble().getApplicationContext();
+
+ mNotificationManager = (NotificationManager) mContext.getSystemService(
+ Context.NOTIFICATION_SERVICE);
+ TelephonyManager fakeTelephonyManager = (TelephonyManager) mContext.getSystemService(
+ Context.TELEPHONY_SERVICE);
+ when(fakeTelephonyManager.getNetworkCountryIso()).thenReturn("US");
+ doReturn(mCallerInfoLookupHelper).when(mCallsManager).getCallerInfoLookupHelper();
+ }
+
+ @After
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @Test
+ @SmallTest
+ public void testNotificationShownAfterEmergencyCall() {
+ Call call = createCall(new DisconnectCause(DisconnectCause.LOCAL,
+ DisconnectCause.REASON_EMERGENCY_CALL_PLACED));
+
+ DisconnectedCallNotifier notifier = new DisconnectedCallNotifier(mContext, mCallsManager);
+ notifier.onCallStateChanged(call, CallState.NEW, CallState.DIALING);
+ notifier.onCallStateChanged(call, CallState.DIALING, CallState.DISCONNECTED);
+ verify(mNotificationManager, never()).notifyAsUser(anyString(), anyInt(),
+ any(Notification.class), any(UserHandle.class));
+
+ doReturn(Collections.EMPTY_LIST).when(mCallsManager).getCalls();
+ notifier.onCallRemoved(call);
+ verify(mNotificationManager).notifyAsUser(anyString(), anyInt(),
+ any(Notification.class), any(UserHandle.class));
+ }
+
+ @Test
+ @SmallTest
+ public void testNotificationNotShownAfterCall() {
+ Call call = createCall(new DisconnectCause(DisconnectCause.LOCAL));
+
+ DisconnectedCallNotifier notifier = new DisconnectedCallNotifier(mContext, mCallsManager);
+ notifier.onCallStateChanged(call, CallState.DIALING, CallState.DISCONNECTED);
+ verify(mNotificationManager, never()).notifyAsUser(anyString(), anyInt(),
+ any(Notification.class), any(UserHandle.class));
+
+ doReturn(Collections.EMPTY_LIST).when(mCallsManager).getCalls();
+ notifier.onCallRemoved(call);
+ verify(mNotificationManager, never()).notifyAsUser(anyString(), anyInt(),
+ any(Notification.class), any(UserHandle.class));
+ }
+
+ @Test
+ @SmallTest
+ public void testNotificationClearedForEmergencyCall() {
+ Call call = createCall(new DisconnectCause(DisconnectCause.LOCAL,
+ DisconnectCause.REASON_EMERGENCY_CALL_PLACED));
+
+ DisconnectedCallNotifier notifier = new DisconnectedCallNotifier(mContext, mCallsManager);
+ notifier.onCallStateChanged(call, CallState.DIALING, CallState.DISCONNECTED);
+ verify(mNotificationManager).cancelAsUser(anyString(), anyInt(), any());
+ }
+
+ private Call createCall(DisconnectCause cause) {
+ Call call = mock(Call.class);
+ when(call.getDisconnectCause()).thenReturn(cause);
+ when(call.getTargetPhoneAccount()).thenReturn(PHONE_ACCOUNT_HANDLE);
+ when(call.getHandle()).thenReturn(TEL_CALL_HANDLE);
+ return call;
+ }
+}
diff --git a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
index 6a97c27..ed36d29 100644
--- a/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
+++ b/tests/src/com/android/server/telecom/tests/InCallControllerTests.java
@@ -33,11 +33,13 @@
import static org.mockito.Mockito.when;
import android.Manifest;
+import android.app.UiModeManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
@@ -61,6 +63,7 @@
import com.android.server.telecom.BluetoothHeadsetProxy;
import com.android.server.telecom.Call;
import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.CarModeTracker;
import com.android.server.telecom.DefaultDialerCache;
import com.android.server.telecom.EmergencyCallHelper;
import com.android.server.telecom.InCallController;
@@ -116,12 +119,19 @@
private static final int CURRENT_USER_ID = 900973;
private static final String DEF_PKG = "defpkg";
private static final String DEF_CLASS = "defcls";
+ private static final int DEF_UID = 1;
private static final String SYS_PKG = "syspkg";
private static final String SYS_CLASS = "syscls";
+ private static final int SYS_UID = 2;
private static final String COMPANION_PKG = "cpnpkg";
private static final String COMPANION_CLASS = "cpncls";
+ private static final int COMPANION_UID = 3;
private static final String CAR_PKG = "carpkg";
+ private static final String CAR2_PKG = "carpkg2";
private static final String CAR_CLASS = "carcls";
+ private static final String CAR2_CLASS = "carcls";
+ private static final int CAR_UID = 4;
+ private static final int CAR2_UID = 5;
private static final PhoneAccountHandle PA_HANDLE =
new PhoneAccountHandle(new ComponentName("pa_pkg", "pa_cls"), "pa_id");
@@ -149,14 +159,33 @@
when(mMockCallsManager.getRoleManagerAdapter()).thenReturn(mMockRoleManagerAdapter);
mInCallController = new InCallController(mMockContext, mLock, mMockCallsManager,
mMockSystemStateHelper, mDefaultDialerCache, mTimeoutsAdapter,
- mEmergencyCallHelper);
+ mEmergencyCallHelper, new CarModeTracker());
// Companion Apps don't have CONTROL_INCALL_EXPERIENCE permission.
+ doAnswer(invocation -> {
+ int uid = invocation.getArgument(0);
+ switch (uid) {
+ case DEF_UID:
+ return new String[] { DEF_PKG };
+ case SYS_UID:
+ return new String[] { SYS_PKG };
+ case COMPANION_UID:
+ return new String[] { COMPANION_PKG };
+ case CAR_UID:
+ return new String[] { CAR_PKG };
+ case CAR2_UID:
+ return new String[] { CAR2_PKG };
+ }
+ return null;
+ }).when(mMockPackageManager).getPackagesForUid(anyInt());
when(mMockPackageManager.checkPermission(
matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE),
matches(COMPANION_PKG))).thenReturn(PackageManager.PERMISSION_DENIED);
when(mMockPackageManager.checkPermission(
matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE),
- matches(CAR_PKG))).thenReturn(PackageManager.PERMISSION_DENIED);
+ matches(CAR_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED);
+ when(mMockPackageManager.checkPermission(
+ matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE),
+ matches(CAR2_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED);
}
@Override
@@ -539,63 +568,6 @@
/**
* Ensures that the {@link InCallController} will bind to an {@link InCallService} which
- * supports third party companion calls.
- */
- @MediumTest
- @Test
- public void testBindToService_Companion() throws Exception {
- setupMocks(true /* isExternalCall */);
- setupMockPackageManager(true /* default */, true /* system */, true /* external calls */);
-
- List<String> companionAppsList = new ArrayList<>();
- companionAppsList.add(COMPANION_PKG);
- companionAppsList.add(COMPANION_PKG);
- when(mMockRoleManagerAdapter.getCallCompanionApps()).thenReturn(companionAppsList);
- mInCallController.bindToServices(mMockCall);
-
- // Query for the different InCallServices
- ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockPackageManager, times(6)).queryIntentServicesAsUser(
- queryIntentCaptor.capture(),
- eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
- // Verify call for default dialer InCallService
- assertEquals(DEF_PKG, queryIntentCaptor.getAllValues().get(0).getPackage());
- // Verify call for system dialer InCallService
- assertEquals(null, queryIntentCaptor.getAllValues().get(1).getPackage());
- // Verify call for car mode ui InCallServices
- assertEquals(null, queryIntentCaptor.getAllValues().get(2).getPackage());
- // Verify call for non-UI InCallServices
- assertEquals(null, queryIntentCaptor.getAllValues().get(3).getPackage());
- // Verify call for companion InCallServices
- assertEquals(COMPANION_PKG, queryIntentCaptor.getAllValues().get(4).getPackage());
- assertEquals(COMPANION_PKG, queryIntentCaptor.getAllValues().get(5).getPackage());
-
- // Bind InCallServices
- ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockContext, times(3)).bindServiceAsUser(
- bindIntentCaptor.capture(),
- any(ServiceConnection.class),
- eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE
- | Context.BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS),
- eq(UserHandle.CURRENT));
- // Verify bind dialer
- Intent bindIntent = bindIntentCaptor.getAllValues().get(0);
- assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
- assertEquals(DEF_PKG, bindIntent.getComponent().getPackageName());
- assertEquals(DEF_CLASS, bindIntent.getComponent().getClassName());
- // Verify bind companion apps
- bindIntent = bindIntentCaptor.getAllValues().get(1);
- assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
- assertEquals(COMPANION_PKG, bindIntent.getComponent().getPackageName());
- assertEquals(COMPANION_CLASS, bindIntent.getComponent().getClassName());
- bindIntent = bindIntentCaptor.getAllValues().get(2);
- assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
- assertEquals(COMPANION_PKG, bindIntent.getComponent().getPackageName());
- assertEquals(COMPANION_CLASS, bindIntent.getComponent().getClassName());
- }
-
- /**
- * Ensures that the {@link InCallController} will bind to an {@link InCallService} which
* supports third party car mode ui calls
*/
@MediumTest
@@ -604,24 +576,12 @@
setupMocks(true /* isExternalCall */);
setupMockPackageManager(true /* default */, true /* system */, true /* external calls */);
- when(mMockRoleManagerAdapter.getCarModeDialerApp()).thenReturn(CAR_PKG);
// Enable car mode
when(mMockSystemStateHelper.isCarMode()).thenReturn(true);
- mInCallController.bindToServices(mMockCall);
+ mInCallController.handleCarModeChange(UiModeManager.DEFAULT_PRIORITY, CAR_PKG, true);
- // Query for the different InCallServices
- ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockPackageManager, times(4)).queryIntentServicesAsUser(
- queryIntentCaptor.capture(),
- eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
- // Verify call for default dialer InCallService
- assertEquals(DEF_PKG, queryIntentCaptor.getAllValues().get(0).getPackage());
- // Verify call for system dialer InCallService
- assertEquals(null, queryIntentCaptor.getAllValues().get(1).getPackage());
- // Verify call for car mode ui InCallServices
- assertEquals(CAR_PKG, queryIntentCaptor.getAllValues().get(2).getPackage());
- // Verify call for non-UI InCallServices
- assertEquals(null, queryIntentCaptor.getAllValues().get(3).getPackage());
+ // Now bind; we should only bind to one app.
+ mInCallController.bindToServices(mMockCall);
// Bind InCallServices
ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -633,10 +593,7 @@
eq(UserHandle.CURRENT));
// Verify bind car mode ui
assertEquals(1, bindIntentCaptor.getAllValues().size());
- Intent bindIntent = bindIntentCaptor.getAllValues().get(0);
- assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
- assertEquals(CAR_PKG, bindIntent.getComponent().getPackageName());
- assertEquals(CAR_CLASS, bindIntent.getComponent().getClassName());
+ verifyBinding(bindIntentCaptor, 0, CAR_PKG, CAR_CLASS);
}
@MediumTest
@@ -644,28 +601,16 @@
public void testNoBindToInvalidService_CarModeUI() throws Exception {
setupMocks(true /* isExternalCall */);
setupMockPackageManager(true /* default */, true /* system */, true /* external calls */);
+ mInCallController.bindToServices(mMockCall);
- when(mMockRoleManagerAdapter.getCarModeDialerApp()).thenReturn(CAR_PKG);
when(mMockPackageManager.checkPermission(
- matches(Manifest.permission.CALL_COMPANION_APP),
+ matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE),
matches(CAR_PKG))).thenReturn(PackageManager.PERMISSION_DENIED);
// Enable car mode
when(mMockSystemStateHelper.isCarMode()).thenReturn(true);
- mInCallController.bindToServices(mMockCall);
- // Query for the different InCallServices
- ArgumentCaptor<Intent> queryIntentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mMockPackageManager, times(4)).queryIntentServicesAsUser(
- queryIntentCaptor.capture(),
- eq(PackageManager.GET_META_DATA), eq(CURRENT_USER_ID));
- // Verify call for default dialer InCallService
- assertEquals(DEF_PKG, queryIntentCaptor.getAllValues().get(0).getPackage());
- // Verify call for system dialer InCallService
- assertEquals(null, queryIntentCaptor.getAllValues().get(1).getPackage());
- // Verify call for invalid car mode ui InCallServices
- assertEquals(CAR_PKG, queryIntentCaptor.getAllValues().get(2).getPackage());
- // Verify call for non-UI InCallServices
- assertEquals(null, queryIntentCaptor.getAllValues().get(3).getPackage());
+ // Register the fact that the invalid app entered car mode.
+ mInCallController.handleCarModeChange(UiModeManager.DEFAULT_PRIORITY, CAR_PKG, true);
// Bind InCallServices
ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -677,10 +622,61 @@
eq(UserHandle.CURRENT));
// Verify bind to default package, instead of the invalid car mode ui.
assertEquals(1, bindIntentCaptor.getAllValues().size());
- Intent bindIntent = bindIntentCaptor.getAllValues().get(0);
+ verifyBinding(bindIntentCaptor, 0, DEF_PKG, DEF_CLASS);
+ }
+
+ /**
+ * Ensures that the {@link InCallController} will bind to a higher priority car mode service
+ * when one becomes available.
+ */
+ @MediumTest
+ @Test
+ public void testCarmodeRebindHigherPriority() throws Exception {
+ setupMocks(true /* isExternalCall */);
+ setupMockPackageManager(true /* default */, true /* system */, true /* external calls */);
+ // Bind to default dialer.
+ mInCallController.bindToServices(mMockCall);
+
+ // Enable car mode and enter car mode at default priority.
+ when(mMockSystemStateHelper.isCarMode()).thenReturn(true);
+ mInCallController.handleCarModeChange(UiModeManager.DEFAULT_PRIORITY, CAR_PKG, true);
+
+ // And change to the second car mode app.
+ mInCallController.handleCarModeChange(100, CAR2_PKG, true);
+
+ // Exit car mode at higher priority.
+ mInCallController.handleCarModeChange(100, CAR2_PKG, false);
+
+ // Bind InCallServices
+ ArgumentCaptor<Intent> bindIntentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mMockContext, times(4)).bindServiceAsUser(
+ bindIntentCaptor.capture(),
+ any(ServiceConnection.class),
+ eq(Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE
+ | Context.BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS),
+ eq(UserHandle.CURRENT));
+ // Verify bind car mode ui
+ assertEquals(4, bindIntentCaptor.getAllValues().size());
+
+ // Should have first bound to the default dialer.
+ verifyBinding(bindIntentCaptor, 0, DEF_PKG, DEF_CLASS);
+
+ // Should have next bound to the car mode app.
+ verifyBinding(bindIntentCaptor, 1, CAR_PKG, CAR_CLASS);
+
+ // Finally, should have bound to the higher priority car mode app
+ verifyBinding(bindIntentCaptor, 2, CAR2_PKG, CAR2_CLASS);
+
+ // Should have rebound to the car mode app.
+ verifyBinding(bindIntentCaptor, 3, CAR_PKG, CAR_CLASS);
+ }
+
+ public void verifyBinding(ArgumentCaptor<Intent> bindIntentCaptor, int i, String carPkg,
+ String carClass) {
+ Intent bindIntent = bindIntentCaptor.getAllValues().get(i);
assertEquals(InCallService.SERVICE_INTERFACE, bindIntent.getAction());
- assertEquals(DEF_PKG, bindIntent.getComponent().getPackageName());
- assertEquals(DEF_CLASS, bindIntent.getComponent().getClassName());
+ assertEquals(carPkg, bindIntent.getComponent().getPackageName());
+ assertEquals(carClass, bindIntent.getComponent().getClassName());
}
/**
@@ -752,6 +748,8 @@
serviceInfo = new ServiceInfo();
serviceInfo.packageName = DEF_PKG;
serviceInfo.name = DEF_CLASS;
+ serviceInfo.applicationInfo = new ApplicationInfo();
+ serviceInfo.applicationInfo.uid = DEF_UID;
serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
serviceInfo.metaData = new Bundle();
serviceInfo.metaData.putBoolean(
@@ -763,11 +761,18 @@
}};
}
- private ResolveInfo getCarModeResolveinfo(final boolean includeExternalCalls) {
+ private ResolveInfo getCarModeResolveinfo(final String packageName, final String className,
+ final boolean includeExternalCalls) {
return new ResolveInfo() {{
serviceInfo = new ServiceInfo();
- serviceInfo.packageName = CAR_PKG;
- serviceInfo.name = CAR_CLASS;
+ serviceInfo.packageName = packageName;
+ serviceInfo.name = className;
+ serviceInfo.applicationInfo = new ApplicationInfo();
+ if (CAR_PKG.equals(packageName)) {
+ serviceInfo.applicationInfo.uid = CAR_UID;
+ } else {
+ serviceInfo.applicationInfo.uid = CAR2_UID;
+ }
serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
serviceInfo.metaData = new Bundle();
serviceInfo.metaData.putBoolean(
@@ -784,6 +789,8 @@
serviceInfo = new ServiceInfo();
serviceInfo.packageName = SYS_PKG;
serviceInfo.name = SYS_CLASS;
+ serviceInfo.applicationInfo = new ApplicationInfo();
+ serviceInfo.applicationInfo.uid = SYS_UID;
serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
}};
}
@@ -793,6 +800,8 @@
serviceInfo = new ServiceInfo();
serviceInfo.packageName = COMPANION_PKG;
serviceInfo.name = COMPANION_CLASS;
+ serviceInfo.applicationInfo = new ApplicationInfo();
+ serviceInfo.applicationInfo.uid = COMPANION_UID;
serviceInfo.permission = Manifest.permission.BIND_INCALL_SERVICE;
}};
}
@@ -825,7 +834,13 @@
}
if (packageName.equals(CAR_PKG)) {
- resolveInfo.add(getCarModeResolveinfo(includeExternalCalls));
+ resolveInfo.add(getCarModeResolveinfo(CAR_PKG, CAR_CLASS,
+ includeExternalCalls));
+ }
+
+ if (packageName.equals(CAR2_PKG)) {
+ resolveInfo.add(getCarModeResolveinfo(CAR2_PKG, CAR2_CLASS,
+ includeExternalCalls));
}
}
return resolveInfo;
diff --git a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
index 3438802..a966ffc 100644
--- a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
+++ b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
@@ -28,6 +28,7 @@
import static org.mockito.Matchers.isNotNull;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -49,6 +50,7 @@
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.telephony.DisconnectCause;
+import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.server.telecom.Call;
@@ -429,6 +431,18 @@
verify(mCall).disconnect(eq(0L));
}
+ /**
+ * Ensure if {@link TelephonyManager#isPotentialEmergencyNumber(String)} throws an exception of
+ * any sort that we don't crash Telecom.
+ */
+ @SmallTest
+ @Test
+ public void testThrowOnIsPotentialEmergencyNumber() {
+ doThrow(new IllegalStateException()).when(mComponentContextFixture.getTelephonyManager())
+ .isPotentialEmergencyNumber(anyString());
+ testUnmodifiedRegularCall();
+ }
+
private ReceiverIntentPair regularCallTestHelper(Intent intent,
Bundle expectedAdditionalExtras) {
Uri handle = intent.getData();
diff --git a/tests/src/com/android/server/telecom/tests/ParcelableCallUtilsTest.java b/tests/src/com/android/server/telecom/tests/ParcelableCallUtilsTest.java
index 30b870e..6c941fe 100644
--- a/tests/src/com/android/server/telecom/tests/ParcelableCallUtilsTest.java
+++ b/tests/src/com/android/server/telecom/tests/ParcelableCallUtilsTest.java
@@ -2,22 +2,19 @@
import static com.android.server.telecom.TelecomSystem.*;
+import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
-import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.telecom.Connection;
-import android.telecom.GatewayInfo;
import android.telecom.ParcelableCall;
import android.telecom.PhoneAccountHandle;
import android.test.suitebuilder.annotation.SmallTest;
@@ -26,7 +23,6 @@
import com.android.server.telecom.CallerInfoLookupHelper;
import com.android.server.telecom.CallsManager;
import com.android.server.telecom.ClockProxy;
-import com.android.server.telecom.ConnectionServiceRepository;
import com.android.server.telecom.ParcelableCallUtils;
import com.android.server.telecom.PhoneAccountRegistrar;
import com.android.server.telecom.PhoneNumberUtilsAdapter;
@@ -149,6 +145,48 @@
assertFalse(parceledExtras.containsKey(Connection.EXTRA_CALL_SUBJECT));
}
+ @SmallTest
+ @Test
+ public void testVerificationStatusParcelingForScreening() {
+ checkVerStatParcelingForCallScreening(Connection.VERIFICATION_STATUS_NOT_VERIFIED, false);
+ checkVerStatParcelingForCallScreening(Connection.VERIFICATION_STATUS_NOT_VERIFIED, true);
+ checkVerStatParcelingForCallScreening(Connection.VERIFICATION_STATUS_PASSED, false);
+ checkVerStatParcelingForCallScreening(Connection.VERIFICATION_STATUS_PASSED, true);
+ checkVerStatParcelingForCallScreening(Connection.VERIFICATION_STATUS_FAILED, false);
+ checkVerStatParcelingForCallScreening(Connection.VERIFICATION_STATUS_FAILED, true);
+ }
+
+ @SmallTest
+ @Test
+ public void testVerificationStatusParcelingForDialer() {
+ checkVerStatParcelingForDialer(Connection.VERIFICATION_STATUS_NOT_VERIFIED, false);
+ checkVerStatParcelingForDialer(Connection.VERIFICATION_STATUS_NOT_VERIFIED, true);
+ checkVerStatParcelingForDialer(Connection.VERIFICATION_STATUS_PASSED, false);
+ checkVerStatParcelingForDialer(Connection.VERIFICATION_STATUS_PASSED, true);
+ checkVerStatParcelingForDialer(Connection.VERIFICATION_STATUS_FAILED, false);
+ checkVerStatParcelingForDialer(Connection.VERIFICATION_STATUS_FAILED, true);
+ }
+
+ private void checkVerStatParcelingForCallScreening(int connectionVerificationStatus,
+ boolean isForSystemDialer) {
+ mCall.setCallerNumberVerificationStatus(connectionVerificationStatus);
+ ParcelableCall call = ParcelableCallUtils.toParcelableCallForScreening(mCall,
+ isForSystemDialer /* isPartOfSystemDialer */);
+ assertEquals(connectionVerificationStatus, call.getCallerNumberVerificationStatus());
+ }
+
+ private void checkVerStatParcelingForDialer(int connectionVerificationStatus,
+ boolean isForSystemDialer) {
+ mCall.setCallerNumberVerificationStatus(connectionVerificationStatus);
+ ParcelableCall call = ParcelableCallUtils.toParcelableCall(mCall,
+ false /* includevideoProvider */,
+ null /* phoneAccountRegistrar */,
+ false /* supportsExternalCalls */,
+ false /* includeRttCall */,
+ isForSystemDialer /* isForSystemDialer */);
+ assertEquals(connectionVerificationStatus, call.getCallerNumberVerificationStatus());
+ }
+
private Bundle getSomeExtras() {
Bundle extras = new Bundle();
extras.putString(Connection.EXTRA_SIP_INVITE, "scary data");
diff --git a/tests/src/com/android/server/telecom/tests/SystemStateHelperTest.java b/tests/src/com/android/server/telecom/tests/SystemStateHelperTest.java
index efe8796..2de3c83 100644
--- a/tests/src/com/android/server/telecom/tests/SystemStateHelperTest.java
+++ b/tests/src/com/android/server/telecom/tests/SystemStateHelperTest.java
@@ -20,6 +20,8 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
@@ -132,8 +134,10 @@
verify(mContext).registerReceiver(any(BroadcastReceiver.class), intentFilter.capture());
assertEquals(2, intentFilter.getValue().countActions());
- assertEquals(UiModeManager.ACTION_ENTER_CAR_MODE, intentFilter.getValue().getAction(0));
- assertEquals(UiModeManager.ACTION_EXIT_CAR_MODE, intentFilter.getValue().getAction(1));
+ assertEquals(UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED,
+ intentFilter.getValue().getAction(0));
+ assertEquals(UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED,
+ intentFilter.getValue().getAction(1));
}
@SmallTest
@@ -145,13 +149,13 @@
verify(mContext).registerReceiver(receiver.capture(), any(IntentFilter.class));
- when(mIntentEnter.getAction()).thenReturn(UiModeManager.ACTION_ENTER_CAR_MODE);
+ when(mIntentEnter.getAction()).thenReturn(UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED);
receiver.getValue().onReceive(mContext, mIntentEnter);
- verify(mSystemStateListener).onCarModeChanged(true);
+ verify(mSystemStateListener).onCarModeChanged(anyInt(), isNull(), eq(true));
- when(mIntentExit.getAction()).thenReturn(UiModeManager.ACTION_EXIT_CAR_MODE);
+ when(mIntentExit.getAction()).thenReturn(UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED);
receiver.getValue().onReceive(mContext, mIntentExit);
- verify(mSystemStateListener).onCarModeChanged(false);
+ verify(mSystemStateListener).onCarModeChanged(anyInt(), isNull(), eq(false));
receiver.getValue().onReceive(mContext, new Intent("invalid action"));
}
diff --git a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
index 890fa6f..324bca2 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
@@ -190,8 +190,10 @@
public void setUp() throws Exception {
super.setUp();
mContext = mComponentContextFixture.getTestDouble().getApplicationContext();
- mComponentContextFixture.putBooleanResource(
- com.android.internal.R.bool.config_voice_capable, true);
+
+ TelephonyManager mockTelephonyManager =
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ when(mockTelephonyManager.isVoiceCapable()).thenReturn(true);
doReturn(mContext).when(mContext).getApplicationContext();
doNothing().when(mContext).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class),
diff --git a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
index a3b102f..442c310 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
@@ -212,11 +212,12 @@
new ComponentName(
"incall-service-package-X",
"incall-service-class-X");
+ private static final int SERVICE_X_UID = 1;
final ComponentName mInCallServiceComponentNameY =
new ComponentName(
"incall-service-package-Y",
"incall-service-class-Y");
-
+ private static final int SERVICE_Y_UID = 1;
InCallServiceFixture mInCallServiceFixtureX;
InCallServiceFixture mInCallServiceFixtureY;
@@ -472,7 +473,6 @@
when(mClockProxy.elapsedRealtime()).thenReturn(TEST_CREATE_ELAPSED_TIME);
when(mRoleManagerAdapter.getCallCompanionApps()).thenReturn(Collections.emptyList());
when(mRoleManagerAdapter.getDefaultCallScreeningApp()).thenReturn(null);
- when(mRoleManagerAdapter.getCarModeDialerApp()).thenReturn(null);
mTelecomSystem = new TelecomSystem(
mComponentContextFixture.getTestDouble(),
(context, phoneAccountRegistrar, defaultDialerCache) -> mMissedCallNotifier,
@@ -581,16 +581,17 @@
mComponentContextFixture.putResource(
com.android.server.telecom.R.string.incall_default_class,
mInCallServiceComponentNameX.getClassName());
- mComponentContextFixture.putBooleanResource(
- com.android.internal.R.bool.config_voice_capable, true);
+
+ doReturn(true).when(mComponentContextFixture.getTelephonyManager())
+ .isVoiceCapable();
mInCallServiceFixtureX = new InCallServiceFixture();
mInCallServiceFixtureY = new InCallServiceFixture();
mComponentContextFixture.addInCallService(mInCallServiceComponentNameX,
- mInCallServiceFixtureX.getTestDouble());
+ mInCallServiceFixtureX.getTestDouble(), SERVICE_X_UID);
mComponentContextFixture.addInCallService(mInCallServiceComponentNameY,
- mInCallServiceFixtureY.getTestDouble());
+ mInCallServiceFixtureY.getTestDouble(), SERVICE_Y_UID);
}
/**